@keenmate/svelte-treeview 4.8.0 → 5.0.0-rc02

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.
Files changed (51) hide show
  1. package/README.md +106 -117
  2. package/ai/INDEX.txt +310 -0
  3. package/ai/advanced-patterns.txt +506 -0
  4. package/ai/basic-setup.txt +336 -0
  5. package/ai/context-menu.txt +349 -0
  6. package/ai/data-handling.txt +390 -0
  7. package/ai/drag-drop.txt +397 -0
  8. package/ai/events-callbacks.txt +382 -0
  9. package/ai/import-patterns.txt +271 -0
  10. package/ai/performance.txt +349 -0
  11. package/ai/search-features.txt +359 -0
  12. package/ai/styling-theming.txt +354 -0
  13. package/ai/tree-editing.txt +423 -0
  14. package/ai/typescript-types.txt +357 -0
  15. package/dist/components/Node.svelte +47 -40
  16. package/dist/components/Node.svelte.d.ts +1 -1
  17. package/dist/components/Tree.svelte +384 -1479
  18. package/dist/components/Tree.svelte.d.ts +30 -28
  19. package/dist/components/TreeProvider.svelte +28 -0
  20. package/dist/components/TreeProvider.svelte.d.ts +28 -0
  21. package/dist/constants.generated.d.ts +1 -1
  22. package/dist/constants.generated.js +1 -1
  23. package/dist/core/TreeController.svelte.d.ts +353 -0
  24. package/dist/core/TreeController.svelte.js +1503 -0
  25. package/dist/core/createTreeController.d.ts +9 -0
  26. package/dist/core/createTreeController.js +11 -0
  27. package/dist/global-api.d.ts +1 -1
  28. package/dist/global-api.js +5 -5
  29. package/dist/index.d.ts +10 -6
  30. package/dist/index.js +7 -3
  31. package/dist/logger.d.ts +7 -6
  32. package/dist/logger.js +0 -2
  33. package/dist/ltree/indexer.js +2 -4
  34. package/dist/ltree/ltree-node.svelte.d.ts +2 -1
  35. package/dist/ltree/ltree-node.svelte.js +1 -0
  36. package/dist/ltree/ltree.svelte.d.ts +1 -1
  37. package/dist/ltree/ltree.svelte.js +168 -175
  38. package/dist/ltree/types.d.ts +12 -8
  39. package/dist/perf-logger.d.ts +2 -1
  40. package/dist/perf-logger.js +0 -2
  41. package/dist/styles/main.scss +78 -78
  42. package/dist/styles.css +41 -41
  43. package/dist/styles.css.map +1 -1
  44. package/dist/vendor/loglevel/index.d.ts +55 -2
  45. package/dist/vendor/loglevel/prefix.d.ts +23 -2
  46. package/package.json +96 -95
  47. package/dist/ltree/ltree-demo.d.ts +0 -2
  48. package/dist/ltree/ltree-demo.js +0 -90
  49. package/dist/vendor/loglevel/loglevel-esm.d.ts +0 -2
  50. package/dist/vendor/loglevel/loglevel-plugin-prefix-esm.d.ts +0 -7
  51. package/dist/vendor/loglevel/loglevel-plugin-prefix.d.ts +0 -2
@@ -0,0 +1,9 @@
1
+ import { TreeController, type TreeControllerProps } from './TreeController.svelte.js';
2
+ /**
3
+ * Factory function that creates a TreeController instance.
4
+ *
5
+ * IMPORTANT: Must be called during component initialization (inside a
6
+ * component's `<script>` block) so that the controller's internal `$effect()`
7
+ * calls bind to the component's lifecycle.
8
+ */
9
+ export declare function createTreeController<T>(props: TreeControllerProps<T>): TreeController<T>;
@@ -0,0 +1,11 @@
1
+ import { TreeController } from './TreeController.svelte.js';
2
+ /**
3
+ * Factory function that creates a TreeController instance.
4
+ *
5
+ * IMPORTANT: Must be called during component initialization (inside a
6
+ * component's `<script>` block) so that the controller's internal `$effect()`
7
+ * calls bind to the component's lifecycle.
8
+ */
9
+ export function createTreeController(props) {
10
+ return new TreeController(props);
11
+ }
@@ -16,7 +16,7 @@ export interface GlobalTreeviewAPI {
16
16
  enableLogging: () => void;
17
17
  disableLogging: () => void;
18
18
  setLogLevel: (level: string) => void;
19
- setCategoryLevel: (category: string, level: string) => void;
19
+ setCategoryLevel: (category: string, level?: string) => void;
20
20
  getCategories: () => string[];
21
21
  };
22
22
  perf: {
@@ -2,10 +2,10 @@
2
2
  * Global API registration for runtime logging control
3
3
  * This file is imported by Tree.svelte to ensure it runs when the component is used
4
4
  */
5
- import { setLogLevel, enableLogging, disableLogging, setCategoryLevel, LOGGING_CATEGORIES } from './logger';
6
- import { enablePerfLogging, disablePerfLogging, setPerfThreshold, isPerfLoggingEnabled } from './perf-logger';
5
+ import { setLogLevel, enableLogging, disableLogging, setCategoryLevel, LOGGING_CATEGORIES } from './logger.js';
6
+ import { enablePerfLogging, disablePerfLogging, setPerfThreshold, isPerfLoggingEnabled } from './perf-logger.js';
7
7
  // Import generated constants (created by scripts/generate-constants.js)
8
- import { VERSION, PACKAGE_NAME, AUTHOR, LICENSE, REPOSITORY, HOMEPAGE } from './constants.generated';
8
+ import { VERSION, PACKAGE_NAME, AUTHOR, LICENSE, REPOSITORY, HOMEPAGE } from './constants.generated.js';
9
9
  // Initialize global API for runtime logging control
10
10
  if (typeof window !== 'undefined') {
11
11
  window.components = window.components || {};
@@ -22,8 +22,8 @@ if (typeof window !== 'undefined') {
22
22
  logging: {
23
23
  enableLogging,
24
24
  disableLogging,
25
- setLogLevel,
26
- setCategoryLevel,
25
+ setLogLevel: setLogLevel,
26
+ setCategoryLevel: setCategoryLevel,
27
27
  getCategories: () => [...LOGGING_CATEGORIES]
28
28
  },
29
29
  perf: {
package/dist/index.d.ts CHANGED
@@ -1,9 +1,13 @@
1
1
  export { default as Tree } from "./components/Tree.svelte";
2
+ export { default as TreeProvider } from "./components/TreeProvider.svelte";
3
+ export { TreeController } from "./core/TreeController.svelte";
4
+ export type { TreeControllerProps } from "./core/TreeController.svelte";
5
+ export { createTreeController } from "./core/createTreeController.js";
2
6
  export type { LTreeNode, NodeId, VisualState } from "./ltree/ltree-node.svelte";
3
- export type { Ltree, DropPosition, DragDropMode, DropOperation, ContextMenuItem, InsertArrayResult, TreeChange, ApplyChangesResult } from "./ltree/types";
7
+ export type { Ltree, DropPosition, DragDropMode, DropOperation, ContextMenuItem, InsertArrayResult, TreeChange, ApplyChangesResult } from "./ltree/types.js";
4
8
  export type { RenderStats } from "./components/RenderCoordinator.svelte";
5
- export type { NodeCallbacks, NodeConfig } from "./components/Tree.svelte";
6
- export { enableLogging, disableLogging, setLogLevel, setCategoryLevel, LOGGING_CATEGORIES } from "./logger";
7
- export { enablePerfLogging, disablePerfLogging, setPerfThreshold, isPerfLoggingEnabled, perfStart, perfEnd, perfMeasure, perfSummary } from "./perf-logger";
8
- export type { GlobalTreeviewAPI } from "./global-api";
9
- import "./global-api";
9
+ export type { NodeCallbacks, NodeConfig } from "./core/TreeController.svelte";
10
+ export { enableLogging, disableLogging, setLogLevel, setCategoryLevel, LOGGING_CATEGORIES } from "./logger.js";
11
+ export { enablePerfLogging, disablePerfLogging, setPerfThreshold, isPerfLoggingEnabled, perfStart, perfEnd, perfMeasure, perfSummary } from "./perf-logger.js";
12
+ export type { GlobalTreeviewAPI } from "./global-api.js";
13
+ import "./global-api.js";
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  // Reexport your entry components here
2
2
  export { default as Tree } from "./components/Tree.svelte";
3
+ export { default as TreeProvider } from "./components/TreeProvider.svelte";
4
+ // Core layer (headless controller)
5
+ export { TreeController } from "./core/TreeController.svelte";
6
+ export { createTreeController } from "./core/createTreeController.js";
3
7
  // Export logging utilities
4
- export { enableLogging, disableLogging, setLogLevel, setCategoryLevel, LOGGING_CATEGORIES } from "./logger";
8
+ export { enableLogging, disableLogging, setLogLevel, setCategoryLevel, LOGGING_CATEGORIES } from "./logger.js";
5
9
  // Export performance logging utilities
6
- export { enablePerfLogging, disablePerfLogging, setPerfThreshold, isPerfLoggingEnabled, perfStart, perfEnd, perfMeasure, perfSummary } from "./perf-logger";
7
- import "./global-api";
10
+ export { enablePerfLogging, disablePerfLogging, setPerfThreshold, isPerfLoggingEnabled, perfStart, perfEnd, perfMeasure, perfSummary } from "./perf-logger.js";
11
+ import "./global-api.js";
package/dist/logger.d.ts CHANGED
@@ -27,12 +27,13 @@
27
27
  * ```
28
28
  */
29
29
  import log from './vendor/loglevel/index.js';
30
- export declare const initLogger: any;
31
- export declare const dataLogger: any;
32
- export declare const renderLogger: any;
33
- export declare const indexLogger: any;
34
- export declare const dragLogger: any;
35
- export declare const uiLogger: any;
30
+ import type { Logger } from './vendor/loglevel/index.js';
31
+ export declare const initLogger: Logger;
32
+ export declare const dataLogger: Logger;
33
+ export declare const renderLogger: Logger;
34
+ export declare const indexLogger: Logger;
35
+ export declare const dragLogger: Logger;
36
+ export declare const uiLogger: Logger;
36
37
  export default log;
37
38
  /**
38
39
  * List of all logging categories
package/dist/logger.js CHANGED
@@ -27,9 +27,7 @@
27
27
  * ```
28
28
  */
29
29
  // Import vendored libraries via ES module wrappers
30
- // @ts-ignore - Vendored library without type definitions
31
30
  import log from './vendor/loglevel/index.js';
32
- // @ts-ignore - Vendored library without type definitions
33
31
  import prefix from './vendor/loglevel/prefix.js';
34
32
  // Define color scheme
35
33
  const COLORS = {
@@ -122,7 +122,7 @@ export class Indexer {
122
122
  indexItem(item) {
123
123
  // Type-safe indexing - customize based on your item structure
124
124
  const searchValue = !this.shouldCalculateSearchValue
125
- ? this.searchValueMember && item.node.data[this.searchValueMember]?.toString()
125
+ ? this.searchValueMember && item.node.data?.[this.searchValueMember]?.toString()
126
126
  : this.getSearchValueCallback && this.getSearchValueCallback(item.node);
127
127
  if (isNotEmptyString(searchValue)) {
128
128
  const addStart = performance.now();
@@ -138,9 +138,7 @@ export class Indexer {
138
138
  this.isProcessing = false;
139
139
  indexLogger.info(`[${this.treeId}] Indexing complete. Processed ${this.totalItemsProcessed} items.`);
140
140
  if (this.onCompleteCallback) {
141
- const cb = this.onCompleteCallback;
142
- this.onCompleteCallback = undefined;
143
- cb();
141
+ this.onCompleteCallback();
144
142
  }
145
143
  }
146
144
  // Get current indexer status
@@ -1,5 +1,5 @@
1
1
  export type NodeId = string | number;
2
- export type DropPosition = 'above' | 'below' | 'child';
2
+ export type DropPosition = 'before' | 'after' | 'child';
3
3
  export declare enum VisualState {
4
4
  indeterminate = "indeterminate",
5
5
  selected = "true",
@@ -18,6 +18,7 @@ export interface LTreeNode<T> {
18
18
  useCallback: boolean;
19
19
  priority: number | null | undefined;
20
20
  isDraggable: boolean;
21
+ isCollapsible: boolean;
21
22
  isDropAllowed: boolean;
22
23
  allowedDropPositions: DropPosition[] | null | undefined;
23
24
  isInsertAllowed: boolean;
@@ -18,6 +18,7 @@ export function createLTreeNode(data) {
18
18
  useCallback: false,
19
19
  priority: undefined,
20
20
  isDraggable: true,
21
+ isCollapsible: true,
21
22
  isDropAllowed: true,
22
23
  allowedDropPositions: undefined,
23
24
  isInsertAllowed: true,
@@ -1,4 +1,4 @@
1
1
  import { Index } from 'flexsearch';
2
2
  import { type LTreeNode } from './ltree-node.svelte';
3
3
  import type { Ltree } from './types.js';
4
- export declare function createLTree<T>(_idMember: string, _pathMember: string, _parentPathMember?: string | null | undefined, _levelMember?: string | null | undefined, _hasChildrenMember?: string | null | undefined, _isExpandedMember?: string | null | undefined, _isSelectableMember?: string | null | undefined, _isDraggableMember?: string | null | undefined, _isDropAllowedMember?: string | null | undefined, _allowedDropPositionsMember?: string | null | undefined, _displayValueMember?: string | null | undefined, _getDisplayValueCallback?: (node: LTreeNode<T>) => string, _searchValueMember?: string | null | undefined, _getSearchValueCallback?: (node: LTreeNode<T>) => string, _getAllowedDropPositionsCallback?: (node: LTreeNode<T>) => import('./types').DropPosition[] | null | undefined, _orderMember?: string | null | undefined, _treeId?: string, _treePathSeparator?: string | null | undefined, _expandLevel?: number | null | undefined, _shouldUseInternalSearchIndex?: boolean | null | undefined, _initializeIndexCallback?: () => Index, _indexerBatchSize?: number | null | undefined, _indexerTimeout?: number | null | undefined, opts?: Partial<Ltree<T>>): Ltree<T>;
4
+ export declare function createLTree<T>(_idMember: string, _pathMember: string, _parentPathMember?: string | null | undefined, _levelMember?: string | null | undefined, _hasChildrenMember?: string | null | undefined, _isExpandedMember?: string | null | undefined, _isSelectableMember?: string | null | undefined, _isDraggableMember?: string | null | undefined, _getIsDraggableCallback?: (node: LTreeNode<T>) => boolean, _isDropAllowedMember?: string | null | undefined, _allowedDropPositionsMember?: string | null | undefined, _displayValueMember?: string | null | undefined, _getDisplayValueCallback?: (node: LTreeNode<T>) => string, _searchValueMember?: string | null | undefined, _getSearchValueCallback?: (node: LTreeNode<T>) => string, _getAllowedDropPositionsCallback?: (node: LTreeNode<T>) => import('./types.js').DropPosition[] | null | undefined, _isCollapsibleMember?: string | null | undefined, _getIsCollapsibleCallback?: (node: LTreeNode<T>) => boolean, _orderMember?: string | null | undefined, _treeId?: string, _treePathSeparator?: string | null | undefined, _expandLevel?: number | null | undefined, _shouldUseInternalSearchIndex?: boolean | null | undefined, _initializeIndexCallback?: () => Index, _indexerBatchSize?: number | null | undefined, _indexerTimeout?: number | null | undefined, opts?: Partial<Ltree<T>>): Ltree<T>;