@keenmate/svelte-treeview 5.0.0-rc07 → 5.0.0-rc09

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,271 +1,290 @@
1
- IMPORT PATTERNS
2
- ===============
3
-
4
- CRITICAL: Always import styles along with the component
5
- - Component has no embedded styles
6
- - Styles must be imported separately
7
- - Both CSS and SCSS versions available
8
-
9
- BASIC IMPORT
10
- ------------
11
- // Component import
12
- import { Tree } from '@keenmate/svelte-treeview';
13
-
14
- // Style import (pick one)
15
- import '@keenmate/svelte-treeview/styles.css'; // Compiled CSS
16
- import '@keenmate/svelte-treeview/styles.scss'; // SCSS source
17
-
18
- COMPONENT EXPORTS
19
- -----------------
20
- Named exports from the package:
21
-
22
- // Main component
23
- import { Tree } from '@keenmate/svelte-treeview';
24
-
25
- // Types
26
- import type {
27
- LTreeNode,
28
- Ltree,
29
- ContextMenuItem,
30
- DropPosition,
31
- InsertArrayResult,
32
- NodeCallbacks,
33
- NodeConfig
34
- } from '@keenmate/svelte-treeview';
35
-
36
- // Logging utilities
37
- import {
38
- enableLogging,
39
- disableLogging,
40
- setLogLevel,
41
- setCategoryLevel,
42
- enablePerfLogging,
43
- disablePerfLogging,
44
- setPerfThreshold
45
- } from '@keenmate/svelte-treeview';
46
-
47
- STYLE IMPORTS
48
- -------------
49
- Option 1: In JavaScript entry point
50
- // main.ts or main.js
51
- import '@keenmate/svelte-treeview/styles.css';
52
-
53
- Option 2: In root layout (SvelteKit)
54
- // +layout.svelte
55
- <script>
56
- import '@keenmate/svelte-treeview/styles.css';
57
- </script>
58
-
59
- Option 3: In component file
60
- // MyComponent.svelte
61
- <script>
62
- import { Tree } from '@keenmate/svelte-treeview';
63
- import '@keenmate/svelte-treeview/styles.css';
64
- </script>
65
-
66
- Option 4: In Svelte style block (SCSS only)
67
- <style lang="scss">
68
- @import '@keenmate/svelte-treeview/styles.scss';
69
- </style>
70
-
71
- SCSS CUSTOMIZATION
72
- ------------------
73
- Override variables before importing:
74
-
75
- <style lang="scss">
76
- // Override variables
77
- $tree-node-indent-per-level: 1.5rem;
78
- $ltree-primary: #6366f1;
79
-
80
- // Then import
81
- @import '@keenmate/svelte-treeview/styles.scss';
82
- </style>
83
-
84
- TYPE IMPORTS
85
- ------------
86
- Import types for TypeScript:
87
-
88
- import type { LTreeNode } from '@keenmate/svelte-treeview';
89
-
90
- interface MyItem {
91
- id: string;
92
- path: string;
93
- name: string;
94
- }
95
-
96
- let selectedNode: LTreeNode<MyItem> | null = $state(null);
97
-
98
- Full type imports:
99
-
100
- import type {
101
- LTreeNode, // Tree node interface
102
- Ltree, // Tree instance interface
103
- ContextMenuItem, // Context menu item
104
- DropPosition, // 'before' | 'after' | 'child'
105
- InsertArrayResult, // Insert operation result
106
- NodeCallbacks, // Event callback types
107
- NodeConfig // Node configuration types
108
- } from '@keenmate/svelte-treeview';
109
-
110
- LOGGING IMPORTS
111
- ---------------
112
- Debug and performance logging:
113
-
114
- // Enable all logging
115
- import { enableLogging } from '@keenmate/svelte-treeview';
116
- enableLogging();
117
-
118
- // Category-specific logging
119
- import { setCategoryLevel } from '@keenmate/svelte-treeview';
120
- setCategoryLevel('LTREE:DRAG', 'debug');
121
- setCategoryLevel('LTREE:RENDER', 'debug');
122
-
123
- // Performance logging
124
- import { enablePerfLogging, setPerfThreshold } from '@keenmate/svelte-treeview';
125
- enablePerfLogging();
126
- setPerfThreshold(100); // Only log operations > 100ms
127
-
128
- Log categories:
129
- - LTREE:INIT - Initialization
130
- - LTREE:DATA - Data operations
131
- - LTREE:RENDER - Rendering
132
- - LTREE:INDEX - Search indexing
133
- - LTREE:DRAG - Drag and drop
134
- - LTREE:UI - User interactions
135
-
136
- GLOBAL API
137
- ----------
138
- Access from browser console:
139
-
140
- // Check version
141
- window.components['svelte-treeview'].version()
142
-
143
- // Enable logging from console
144
- window.components['svelte-treeview'].logging.enableLogging()
145
-
146
- // Performance logging
147
- window.components['svelte-treeview'].perf.enable()
148
-
149
- // Get package info
150
- window.components['svelte-treeview'].config
151
-
152
- SVELTEKIT IMPORT
153
- ----------------
154
- // +page.svelte
155
- <script lang="ts">
156
- import { Tree } from '@keenmate/svelte-treeview';
157
- import type { LTreeNode } from '@keenmate/svelte-treeview';
158
-
159
- interface Item {
160
- id: string;
161
- path: string;
162
- name: string;
163
- }
164
-
165
- let data: Item[] = $state([]);
166
- let selectedNode: LTreeNode<Item> | null = $state(null);
167
- </script>
168
-
169
- <Tree
170
- {data}
171
- idMember="id"
172
- pathMember="path"
173
- bind:focusedNode
174
- />
175
-
176
- // +layout.svelte (for global styles)
177
- <script>
178
- import '@keenmate/svelte-treeview/styles.css';
179
- </script>
180
-
181
- <slot />
182
-
183
- VITE + SVELTE IMPORT
184
- --------------------
185
- // main.ts
186
- import './app.css'
187
- import '@keenmate/svelte-treeview/styles.css';
188
- import App from './App.svelte'
189
-
190
- const app = new App({
191
- target: document.getElementById('app')!,
192
- })
193
-
194
- export default app
195
-
196
- // App.svelte
197
- <script lang="ts">
198
- import { Tree } from '@keenmate/svelte-treeview';
199
- </script>
200
-
201
- DYNAMIC IMPORT
202
- --------------
203
- For code splitting:
204
-
205
- <script>
206
- import { onMount } from 'svelte';
207
-
208
- let Tree;
209
-
210
- onMount(async () => {
211
- const module = await import('@keenmate/svelte-treeview');
212
- Tree = module.Tree;
213
-
214
- // Import styles dynamically
215
- await import('@keenmate/svelte-treeview/styles.css');
216
- });
217
- </script>
218
-
219
- {#if Tree}
220
- <svelte:component this={Tree} {data} ... />
221
- {/if}
222
-
223
- PACKAGE STRUCTURE
224
- -----------------
225
- @keenmate/svelte-treeview/
226
- ├── dist/
227
- │ ├── index.js # Main entry (ESM)
228
- │ ├── index.d.ts # TypeScript declarations
229
- │ ├── styles.css # Compiled CSS
230
- │ └── styles.scss # SCSS source
231
- └── package.json
232
-
233
- PEER DEPENDENCIES
234
- -----------------
235
- Required:
236
- - svelte: ^5.0.0
237
-
238
- Optional:
239
- - flexsearch: ^0.8.205 (for search functionality)
240
-
241
- If using search features:
242
- npm install flexsearch
243
-
244
- TROUBLESHOOTING
245
- ---------------
246
- "Module not found" error:
247
- npm install @keenmate/svelte-treeview
248
- Check node_modules exists
249
-
250
- "Tree is not defined":
251
- ✅ import { Tree } from '@keenmate/svelte-treeview';
252
- import Tree from '@keenmate/svelte-treeview';
253
-
254
- No styles showing:
255
- import '@keenmate/svelte-treeview/styles.css';
256
- ✅ Check import is actually executed
257
-
258
- TypeScript errors:
259
- ✅ import type { LTreeNode } from '@keenmate/svelte-treeview';
260
- Check tsconfig.json has proper module resolution
261
-
262
- BEST PRACTICES
263
- --------------
264
- ✅ Import styles once at app root level
265
- Use type imports for TypeScript
266
- Use named exports (not default)
267
- Import logging utilities only in development
268
-
269
- Don't import styles multiple times
270
- Don't use default imports
271
- Don't forget peer dependencies
1
+ IMPORT PATTERNS
2
+ ===============
3
+
4
+ CRITICAL: Always import styles along with the component
5
+ - Component has no embedded styles
6
+ - Styles must be imported separately
7
+ - Both CSS and SCSS versions available
8
+
9
+ BASIC IMPORT
10
+ ------------
11
+ // Component import
12
+ import { Tree } from '@keenmate/svelte-treeview';
13
+
14
+ // Style import (bundled, contains all partials)
15
+ import '@keenmate/svelte-treeview/styles.css';
16
+
17
+ COMPONENT EXPORTS
18
+ -----------------
19
+ Named exports from the package:
20
+
21
+ // Main component
22
+ import { Tree } from '@keenmate/svelte-treeview';
23
+
24
+ // Types
25
+ import type {
26
+ LTreeNode,
27
+ Ltree,
28
+ ContextMenuItem,
29
+ DropPosition,
30
+ InsertArrayResult,
31
+ NodeCallbacks,
32
+ NodeConfig
33
+ } from '@keenmate/svelte-treeview';
34
+
35
+ // Logging utilities
36
+ import {
37
+ enableLogging,
38
+ disableLogging,
39
+ setLogLevel,
40
+ setCategoryLevel,
41
+ enablePerfLogging,
42
+ disablePerfLogging,
43
+ setPerfThreshold
44
+ } from '@keenmate/svelte-treeview';
45
+
46
+ STYLE IMPORTS
47
+ -------------
48
+ Option 1: In JavaScript entry point
49
+ // main.ts or main.js
50
+ import '@keenmate/svelte-treeview/styles.css';
51
+
52
+ Option 2: In root layout (SvelteKit)
53
+ // +layout.svelte
54
+ <script>
55
+ import '@keenmate/svelte-treeview/styles.css';
56
+ </script>
57
+
58
+ Option 3: In component file
59
+ // MyComponent.svelte
60
+ <script>
61
+ import { Tree } from '@keenmate/svelte-treeview';
62
+ import '@keenmate/svelte-treeview/styles.css';
63
+ </script>
64
+
65
+ Option 4: In Svelte style block
66
+ <style>
67
+ @import '@keenmate/svelte-treeview/styles.css';
68
+ </style>
69
+
70
+ THEMING VIA CSS VARIABLES
71
+ -------------------------
72
+ Override CSS custom properties to customize the look:
73
+
74
+ <style>
75
+ @import '@keenmate/svelte-treeview/styles.css';
76
+
77
+ /* Component-scope override */
78
+ .my-tree-wrapper {
79
+ --ltree-primary: #6366f1;
80
+ --ltree-node-indent-per-level: 1.5rem;
81
+ --ltree-node-font-size: 16px;
82
+ }
83
+
84
+ /* Or globally for all KeenMate components: */
85
+ :root {
86
+ --base-accent-color: #6366f1;
87
+ --base-font-family: 'Inter', system-ui, sans-serif;
88
+ }
89
+ </style>
90
+
91
+ TYPE IMPORTS
92
+ ------------
93
+ Import types for TypeScript:
94
+
95
+ import type { LTreeNode } from '@keenmate/svelte-treeview';
96
+
97
+ interface MyItem {
98
+ id: string;
99
+ path: string;
100
+ name: string;
101
+ }
102
+
103
+ let selectedNode: LTreeNode<MyItem> | null = $state(null);
104
+
105
+ Full type imports:
106
+
107
+ import type {
108
+ LTreeNode, // Tree node interface
109
+ Ltree, // Tree instance interface
110
+ ContextMenuItem, // Context menu item
111
+ DropPosition, // 'before' | 'after' | 'child'
112
+ InsertArrayResult, // Insert operation result
113
+ NodeCallbacks, // Event callback types
114
+ NodeConfig // Node configuration types
115
+ } from '@keenmate/svelte-treeview';
116
+
117
+ LOGGING IMPORTS
118
+ ---------------
119
+ Debug and performance logging:
120
+
121
+ // Enable all logging
122
+ import { enableLogging } from '@keenmate/svelte-treeview';
123
+ enableLogging();
124
+
125
+ // Category-specific logging
126
+ import { setCategoryLevel } from '@keenmate/svelte-treeview';
127
+ setCategoryLevel('LTREE:DRAG', 'debug');
128
+ setCategoryLevel('LTREE:RENDER', 'debug');
129
+
130
+ // Performance logging
131
+ import { enablePerfLogging, setPerfThreshold } from '@keenmate/svelte-treeview';
132
+ enablePerfLogging();
133
+ setPerfThreshold(100); // Only log operations > 100ms
134
+
135
+ Log categories:
136
+ - LTREE:INIT - Initialization
137
+ - LTREE:DATA - Data operations
138
+ - LTREE:RENDER - Rendering
139
+ - LTREE:INDEX - Search indexing
140
+ - LTREE:DRAG - Drag and drop
141
+ - LTREE:UI - User interactions
142
+
143
+ GLOBAL API
144
+ ----------
145
+ Access from browser console:
146
+
147
+ // Check version
148
+ window.components['svelte-treeview'].version()
149
+
150
+ // Enable logging from console
151
+ window.components['svelte-treeview'].logging.enableLogging()
152
+
153
+ // Performance logging
154
+ window.components['svelte-treeview'].perf.enable()
155
+
156
+ // Get package info
157
+ window.components['svelte-treeview'].config
158
+
159
+ SVELTEKIT IMPORT
160
+ ----------------
161
+ // +page.svelte
162
+ <script lang="ts">
163
+ import { Tree } from '@keenmate/svelte-treeview';
164
+ import type { LTreeNode } from '@keenmate/svelte-treeview';
165
+
166
+ interface Item {
167
+ id: string;
168
+ path: string;
169
+ name: string;
170
+ }
171
+
172
+ let data: Item[] = $state([]);
173
+ let selectedNode: LTreeNode<Item> | null = $state(null);
174
+ </script>
175
+
176
+ <Tree
177
+ {data}
178
+ idMember="id"
179
+ pathMember="path"
180
+ bind:focusedNode
181
+ />
182
+
183
+ // +layout.svelte (for global styles)
184
+ <script>
185
+ import '@keenmate/svelte-treeview/styles.css';
186
+ </script>
187
+
188
+ <slot />
189
+
190
+ VITE + SVELTE IMPORT
191
+ --------------------
192
+ // main.ts
193
+ import './app.css'
194
+ import '@keenmate/svelte-treeview/styles.css';
195
+ import App from './App.svelte'
196
+
197
+ const app = new App({
198
+ target: document.getElementById('app')!,
199
+ })
200
+
201
+ export default app
202
+
203
+ // App.svelte
204
+ <script lang="ts">
205
+ import { Tree } from '@keenmate/svelte-treeview';
206
+ </script>
207
+
208
+ DYNAMIC IMPORT
209
+ --------------
210
+ For code splitting:
211
+
212
+ <script>
213
+ import { onMount } from 'svelte';
214
+
215
+ let Tree;
216
+
217
+ onMount(async () => {
218
+ const module = await import('@keenmate/svelte-treeview');
219
+ Tree = module.Tree;
220
+
221
+ // Import styles dynamically
222
+ await import('@keenmate/svelte-treeview/styles.css');
223
+ });
224
+ </script>
225
+
226
+ {#if Tree}
227
+ <svelte:component this={Tree} {data} ... />
228
+ {/if}
229
+
230
+ PACKAGE STRUCTURE
231
+ -----------------
232
+ @keenmate/svelte-treeview/
233
+ ├── dist/
234
+ │ ├── index.js # Main entry (ESM)
235
+ │ ├── index.d.ts # TypeScript declarations
236
+ │ ├── styles.css # Bundled CSS (all partials merged)
237
+ │ └── styles/ # Individual partials (override per-section if needed)
238
+ │ ├── main.css
239
+ │ ├── _variables.css
240
+ │ ├── _base.css
241
+ │ ├── _node.css
242
+ │ ├── _toggle-icons.css
243
+ │ ├── _checkbox.css
244
+ │ ├── _states.css
245
+ │ ├── _drag-drop.css
246
+ │ ├── _drop-zones.css
247
+ │ ├── _context-menu.css
248
+ │ ├── _debug.css
249
+ │ └── _loading.css
250
+ └── package.json
251
+
252
+ PEER DEPENDENCIES
253
+ -----------------
254
+ Required:
255
+ - svelte: ^5.0.0
256
+
257
+ Optional:
258
+ - flexsearch: ^0.8.205 (for search functionality)
259
+
260
+ If using search features:
261
+ npm install flexsearch
262
+
263
+ TROUBLESHOOTING
264
+ ---------------
265
+ "Module not found" error:
266
+ npm install @keenmate/svelte-treeview
267
+ Check node_modules exists
268
+
269
+ "Tree is not defined":
270
+ import { Tree } from '@keenmate/svelte-treeview';
271
+ import Tree from '@keenmate/svelte-treeview';
272
+
273
+ No styles showing:
274
+ ✅ import '@keenmate/svelte-treeview/styles.css';
275
+ ✅ Check import is actually executed
276
+
277
+ TypeScript errors:
278
+ ✅ import type { LTreeNode } from '@keenmate/svelte-treeview';
279
+ ✅ Check tsconfig.json has proper module resolution
280
+
281
+ BEST PRACTICES
282
+ --------------
283
+ ✅ Import styles once at app root level
284
+ ✅ Use type imports for TypeScript
285
+ ✅ Use named exports (not default)
286
+ ✅ Import logging utilities only in development
287
+
288
+ ❌ Don't import styles multiple times
289
+ ❌ Don't use default imports
290
+ ❌ Don't forget peer dependencies