Skip to content

Commit f1a0f8c

Browse files
refactor stores, invert isCircularNode return value, make DefaultNode ESM export (#25)
* refactor stores into one * rename props to viewProps * initialize store methods before to remove use of this * update utility methods, change tree-id to tree-node-id * update deps, target to es2020 * make DefaultNode esm export only to allow tree-shaking * switch isCircularNode return value * refactor store errors * add changeset * remove tabs in package.json
1 parent 2571374 commit f1a0f8c

26 files changed

+784
-826
lines changed

.changeset/stale-regions-go.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte-tree-view': minor
3+
---
4+
5+
invert isCircularNode return value for node collapsing, make DefaultNode ESM export, refactor stores into one

package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,24 @@
2020
"devDependencies": {
2121
"@changesets/cli": "^2.29.5",
2222
"@eslint/compat": "^1.3.1",
23-
"@eslint/js": "^9.30.1",
24-
"@typescript-eslint/eslint-plugin": "^8.35.1",
25-
"@typescript-eslint/parser": "^8.35.1",
23+
"@eslint/js": "^9.31.0",
24+
"@typescript-eslint/eslint-plugin": "^8.37.0",
25+
"@typescript-eslint/parser": "^8.37.0",
2626
"concurrently": "^9.2.0",
27-
"eslint": "^9.30.1",
28-
"eslint-config-prettier": "^10.1.5",
29-
"eslint-plugin-prettier": "^5.5.1",
27+
"eslint": "^9.31.0",
28+
"eslint-config-prettier": "^10.1.8",
29+
"eslint-plugin-prettier": "^5.5.3",
3030
"eslint-plugin-promise": "^7.2.1",
31-
"eslint-plugin-svelte": "^3.10.1",
31+
"eslint-plugin-svelte": "^3.11.0",
3232
"globals": "^16.3.0",
3333
"husky": "^9.1.7",
3434
"prettier": "^3.6.2",
3535
"prettier-plugin-svelte": "^3.4.0",
36-
"prettier-plugin-tailwindcss": "^0.6.13",
36+
"prettier-plugin-tailwindcss": "^0.6.14",
3737
"tslib": "^2.8.1",
3838
"typescript": "^5.8.3",
39-
"typescript-eslint": "^8.35.1",
40-
"vite": "^7.0.2",
39+
"typescript-eslint": "^8.37.0",
40+
"vite": "^7.0.5",
4141
"vite-plugin-dts": "^4.5.4"
4242
}
4343
}

packages/site/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
},
2020
"devDependencies": {
2121
"@sveltejs/adapter-static": "^3.0.8",
22-
"@sveltejs/kit": "2.22.2",
23-
"@sveltejs/vite-plugin-svelte": "^5.1.0",
22+
"@sveltejs/kit": "2.25.1",
23+
"@sveltejs/vite-plugin-svelte": "^6.1.0",
2424
"@tailwindcss/vite": "^4.1.11",
25-
"svelte": "^5.35.4",
25+
"svelte": "^5.36.10",
2626
"svelte-preprocess": "^6.0.3",
2727
"svelte-tree-view": "workspace:*",
2828
"tailwindcss": "^4.1.11"

packages/site/src/components/DiffValue.svelte

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
<script lang="ts">
2-
import { DefaultNode } from 'svelte-tree-view'
2+
import DefaultNode from 'svelte-tree-view/DefaultNode.svelte'
33
44
import type { NodeProps } from 'svelte-tree-view'
55
66
let props: NodeProps = $props()
77
let value = $derived(props.node.getValue())
8-
const {
9-
propsStore: { formatValue }
10-
} = props.getTreeContext()
8+
const { formatValue } = props.getTreeContext()
119
1210
function replaceSpacesWithNonBreakingSpace(value: string) {
1311
return value.replace(/\s/gm, ' ')

packages/site/src/components/TailwindNode.svelte

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
handleToggleCollapse
1111
}: NodeProps = $props()
1212
13-
const {
14-
propsStore: { props: propsObj }
15-
} = getTreeContext()
13+
const { viewProps } = getTreeContext()
1614
1715
let hasChildren = $derived(node.children.length > 0)
1816
let descend = $derived(!node.collapsed && hasChildren)
@@ -60,7 +58,7 @@
6058
}
6159
6260
// For other types, use the default formatter or string representation
63-
return $propsObj.valueFormatter?.(value, node) ?? String(value)
61+
return $viewProps.valueFormatter?.(value, node) ?? String(value)
6462
}
6563
6664
// Get the appropriate value to display
@@ -71,7 +69,7 @@
7169
return createTruncatedPreview(val, node.type)
7270
} else {
7371
// Show full value when expanded or for leaf nodes
74-
return $propsObj.valueFormatter?.(val, node) ?? String(val)
72+
return $viewProps.valueFormatter?.(val, node) ?? String(val)
7573
}
7674
}
7775
@@ -103,7 +101,7 @@
103101
}
104102
</script>
105103

106-
<div class="tree-node-container" data-tree-id={node.id}>
104+
<div class="tree-node-container" data-tree-node-id={node.id}>
107105
<div
108106
class="tree-node-card group"
109107
class:collapsed={node.collapsed && hasChildren}
@@ -146,7 +144,7 @@
146144

147145
<!-- Action buttons -->
148146
<div class="action-buttons">
149-
{#if $propsObj.showLogButton}
147+
{#if $viewProps.showLogButton}
150148
<button
151149
class="action-button log-button"
152150
onclick={handleLogNode}
@@ -162,7 +160,7 @@
162160
</svg>
163161
</button>
164162
{/if}
165-
{#if $propsObj.showCopyButton}
163+
{#if $viewProps.showCopyButton}
166164
<button
167165
class="action-button copy-button"
168166
onclick={handleCopyNodeToClipboard}

packages/site/src/lib/store.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ const DEFAULT_RECUR_OPTS: TreeRecursionOpts = {
4040
const existingNodeWithValue = iteratedValues.get(node.getValue())
4141
if (existingNodeWithValue && node.id !== existingNodeWithValue.id) {
4242
node.circularOfId = existingNodeWithValue.id
43-
return false
43+
return true
4444
}
4545
iteratedValues.set(node.getValue(), node)
4646
}
47-
return true
47+
return false
4848
},
4949
shouldExpandNode(node) {
5050
return true

packages/site/src/routes/+page.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import { onMount } from 'svelte'
3-
import TreeView, { DefaultNode } from 'svelte-tree-view'
3+
import TreeView from 'svelte-tree-view'
4+
import DefaultNode from 'svelte-tree-view/DefaultNode.svelte'
45
56
import { mapDocDeltaChildren } from '$lib/mapDocDeltaChildren'
67
import {

packages/site/src/routes/circular/+page.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import { onMount } from 'svelte'
3-
import TreeView, { DefaultNode } from 'svelte-tree-view'
3+
import TreeView from 'svelte-tree-view'
4+
import DefaultNode from 'svelte-tree-view/DefaultNode.svelte'
45
56
import { mapDocDeltaChildren } from '$lib/mapDocDeltaChildren'
67
import {

packages/svelte-tree-view/cypress/e2e/examples.spec.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('# UI', () => {
1717
cy.get('a').contains('(3) Circular').click()
1818
cy.get('.svelte-tree-view').find('li').should('have.length', 126)
1919
cy.get('a').contains('(4) Tailwind').click()
20-
cy.get('.svelte-tree-view').find('div[data-tree-id]').should('have.length', 130)
20+
cy.get('.svelte-tree-view').find('div[data-tree-node-id]').should('have.length', 130)
2121
cy.get('a').contains('(1) Basic').click()
2222
cy.get('[data-test-id="input-textarea"]').focus().type(TEST_DATA)
2323
cy.get('.svelte-tree-view').find('li').should('have.length', 19)

packages/svelte-tree-view/package.json

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
"svelte": "./pkg/index.js",
1818
"import": "./dist/index.js",
1919
"require": "./dist/index.cjs"
20+
},
21+
"./TreeView.svelte": {
22+
"types": "./pkg/TreeView.svelte.d.ts",
23+
"svelte": "./pkg/TreeView.svelte"
24+
},
25+
"./DefaultNode.svelte": {
26+
"types": "./pkg/DefaultNode.svelte.d.ts",
27+
"svelte": "./pkg/DefaultNode.svelte"
2028
}
2129
},
2230
"scripts": {
@@ -35,20 +43,20 @@
3543
"cy": "cypress"
3644
},
3745
"devDependencies": {
38-
"@sveltejs/kit": "^2.22.2",
39-
"@sveltejs/package": "^2.3.12",
40-
"@sveltejs/vite-plugin-svelte": "^5.1.0",
46+
"@sveltejs/kit": "^2.25.1",
47+
"@sveltejs/package": "^2.4.0",
48+
"@sveltejs/vite-plugin-svelte": "^6.1.0",
4149
"@testing-library/cypress": "^10.0.3",
4250
"@testing-library/svelte": "^5.2.8",
4351
"@types/testing-library__jest-dom": "^5.14.9",
4452
"cypress": "14.5.1",
4553
"jsdom": "^26.1.0",
4654
"postcss": "^8.5.6",
4755
"sass": "^1.89.2",
48-
"svelte": "^5.35.4",
49-
"svelte-check": "^4.2.2",
56+
"svelte": "^5.36.10",
57+
"svelte-check": "^4.3.0",
5058
"svelte-preprocess": "^6.0.3",
51-
"svelte2tsx": "^0.7.40",
59+
"svelte2tsx": "^0.7.41",
5260
"vitest": "^3.2.4"
5361
},
5462
"dependencies": {},

0 commit comments

Comments
 (0)