@djangocfg/ui-tools 2.1.316 → 2.1.318

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 (43) hide show
  1. package/dist/TreeRoot-A3J65L6F.mjs +4 -0
  2. package/dist/{TreeRoot-A25RIGYE.cjs.map → TreeRoot-A3J65L6F.mjs.map} +1 -1
  3. package/dist/TreeRoot-DSK5JILT.cjs +19 -0
  4. package/dist/{TreeRoot-HBRJEHBH.mjs.map → TreeRoot-DSK5JILT.cjs.map} +1 -1
  5. package/dist/{chunk-4CEOJDMB.cjs → chunk-3Z3A7FHA.cjs} +36 -15
  6. package/dist/chunk-3Z3A7FHA.cjs.map +1 -0
  7. package/dist/{chunk-NFIMVYJU.mjs → chunk-MOME6KYD.mjs} +36 -15
  8. package/dist/chunk-MOME6KYD.mjs.map +1 -0
  9. package/dist/file-icon/index.cjs +173 -0
  10. package/dist/file-icon/index.cjs.map +1 -0
  11. package/dist/file-icon/index.d.cts +98 -0
  12. package/dist/file-icon/index.d.ts +98 -0
  13. package/dist/file-icon/index.mjs +167 -0
  14. package/dist/file-icon/index.mjs.map +1 -0
  15. package/dist/index.cjs +122 -122
  16. package/dist/index.d.cts +3 -2
  17. package/dist/index.d.ts +3 -2
  18. package/dist/index.mjs +3 -3
  19. package/dist/tree/index.cjs +33 -33
  20. package/dist/tree/index.d.cts +10 -172
  21. package/dist/tree/index.d.ts +10 -172
  22. package/dist/tree/index.mjs +1 -1
  23. package/dist/types-CevSbyfD.d.cts +204 -0
  24. package/dist/types-CevSbyfD.d.ts +204 -0
  25. package/package.json +13 -7
  26. package/src/tools/FileIcon/FileIcon.tsx +102 -0
  27. package/src/tools/FileIcon/index.ts +15 -0
  28. package/src/tools/FileIcon/loader.ts +47 -0
  29. package/src/tools/FileIcon/specialFolders.ts +93 -0
  30. package/src/tools/FileIcon/treeAdapter.tsx +49 -0
  31. package/src/tools/Tree/README.md +100 -0
  32. package/src/tools/Tree/Tree.story.tsx +84 -0
  33. package/src/tools/Tree/TreeRoot.tsx +6 -1
  34. package/src/tools/Tree/components/TreeContent.tsx +3 -1
  35. package/src/tools/Tree/components/TreeRow.tsx +17 -8
  36. package/src/tools/Tree/context/TreeContext.tsx +14 -3
  37. package/src/tools/Tree/data/flatten.ts +10 -1
  38. package/src/tools/Tree/index.tsx +2 -0
  39. package/src/tools/Tree/types.ts +43 -2
  40. package/dist/TreeRoot-A25RIGYE.cjs +0 -19
  41. package/dist/TreeRoot-HBRJEHBH.mjs +0 -4
  42. package/dist/chunk-4CEOJDMB.cjs.map +0 -1
  43. package/dist/chunk-NFIMVYJU.mjs.map +0 -1
@@ -0,0 +1,98 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { LucideIcon } from 'lucide-react';
3
+ import { T as TreeNode, a as TreeRowSlot } from '../types-CevSbyfD.js';
4
+ import 'react';
5
+
6
+ interface ResolveFolderIconOptions {
7
+ /** Folder display name (no path). */
8
+ name: string;
9
+ /** Open / closed state — only used for the *generic* folder fallback. */
10
+ isExpanded?: boolean;
11
+ /**
12
+ * Optional override map. Wins over the built-in table. Keys are
13
+ * matched case-insensitively after `trim()`.
14
+ */
15
+ overrides?: Record<string, LucideIcon>;
16
+ }
17
+ /**
18
+ * Pick the right folder icon for `name`. Returns `Folder` / `FolderOpen`
19
+ * for unknown names so callers can render the generic open/closed pair.
20
+ */
21
+ declare function resolveFolderIcon({ name, isExpanded, overrides, }: ResolveFolderIconOptions): LucideIcon;
22
+ type FolderIconOverrides = Record<string, LucideIcon>;
23
+
24
+ type FileIconSize = 12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 40 | 48 | 64;
25
+ interface FileIconProps {
26
+ /** File name (with extension) or folder name. */
27
+ name: string;
28
+ /** Render a folder icon instead of a file icon. */
29
+ isFolder?: boolean;
30
+ /** Folder open / closed state. Ignored when `isFolder` is false. */
31
+ isExpanded?: boolean;
32
+ /** Pixel size of the icon. */
33
+ size?: FileIconSize;
34
+ /**
35
+ * Override or extend the built-in special-folder mapping. Keys are
36
+ * matched case-insensitively. Only used when `isFolder` is true.
37
+ */
38
+ folderOverrides?: FolderIconOverrides;
39
+ className?: string;
40
+ }
41
+ /**
42
+ * VSCode-style file icon.
43
+ *
44
+ * - Folders render Lucide `Folder` / `FolderOpen` (amber tint).
45
+ * - Files use `material-file-icons` if it's installed in the consumer; otherwise
46
+ * fall back to a neutral Lucide `File` icon.
47
+ *
48
+ * The optional dependency is loaded lazily on first render — there is zero
49
+ * bundle cost for consumers who never mount this component.
50
+ */
51
+ declare function FileIcon({ name, isFolder, isExpanded, size, folderOverrides, className, }: FileIconProps): react_jsx_runtime.JSX.Element;
52
+
53
+ interface CreateFileIconSlotOptions<T> {
54
+ /**
55
+ * How to read the displayed name (with extension) for a node. Use the same
56
+ * accessor you pass to `<TreeRoot getItemName={...} />`.
57
+ */
58
+ getName: (node: TreeNode<T>) => string;
59
+ /** Pixel size for both file and folder icons. Default: 16. */
60
+ size?: FileIconSize;
61
+ /**
62
+ * Override or extend the built-in special-folder mapping (e.g. give
63
+ * `tests` a custom icon). Keys are matched case-insensitively.
64
+ */
65
+ folderOverrides?: FolderIconOverrides;
66
+ }
67
+ /**
68
+ * Build a `renderIcon` slot for `<TreeRoot>` that uses `<FileIcon>` for both
69
+ * leaves and folders.
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * <TreeRoot
74
+ * data={data}
75
+ * getItemName={(n) => n.data.name}
76
+ * renderIcon={createFileIconSlot({ getName: (n) => n.data.name })}
77
+ * />
78
+ * ```
79
+ */
80
+ declare function createFileIconSlot<T>({ getName, size, folderOverrides, }: CreateFileIconSlotOptions<T>): TreeRowSlot<T>;
81
+
82
+ /**
83
+ * Lazy loader for `material-file-icons`. The package is an optional dependency:
84
+ * if it's installed in the consumer's tree, we render its rich VSCode-style
85
+ * SVGs; if not, the loader resolves to `null` and `<FileIcon>` falls back to a
86
+ * Lucide icon. Either way, ui-tools never throws or warns about a missing
87
+ * package.
88
+ *
89
+ * Resolution is cached per-process so we don't re-import on every render.
90
+ */
91
+ type GetIconFn = (name: string) => {
92
+ svg: string;
93
+ } | undefined;
94
+ declare function loadMaterialIcons(): Promise<GetIconFn | null>;
95
+ /** Synchronous accessor — returns null until `loadMaterialIcons` resolves. */
96
+ declare function getMaterialIconsSync(): GetIconFn | null;
97
+
98
+ export { type CreateFileIconSlotOptions, FileIcon, type FileIconProps, type FileIconSize, type FolderIconOverrides, type ResolveFolderIconOptions, createFileIconSlot, getMaterialIconsSync, loadMaterialIcons, resolveFolderIcon };
@@ -0,0 +1,167 @@
1
+ import { __name } from '../chunk-CGILA3WO.mjs';
2
+ import { useState, useEffect } from 'react';
3
+ import { FolderGit2, Github, Settings, Terminal, FlaskConical, BookOpen, FolderOutput, Image, FolderInput, Package, FolderCode, FolderOpen, Folder, File } from 'lucide-react';
4
+ import { cn } from '@djangocfg/ui-core/lib';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ // src/tools/FileIcon/loader.ts
8
+ var cached;
9
+ var inflight = null;
10
+ async function loadMaterialIcons() {
11
+ if (cached !== void 0) return cached;
12
+ if (inflight) return inflight;
13
+ inflight = (async () => {
14
+ try {
15
+ const specifier = "material-file-icons";
16
+ const mod = await import(
17
+ /* @vite-ignore */
18
+ specifier
19
+ );
20
+ const fn = mod.getIcon ?? mod.default?.getIcon ?? null;
21
+ cached = fn;
22
+ return fn;
23
+ } catch {
24
+ cached = null;
25
+ return null;
26
+ } finally {
27
+ inflight = null;
28
+ }
29
+ })();
30
+ return inflight;
31
+ }
32
+ __name(loadMaterialIcons, "loadMaterialIcons");
33
+ function getMaterialIconsSync() {
34
+ return cached ?? null;
35
+ }
36
+ __name(getMaterialIconsSync, "getMaterialIconsSync");
37
+ var SPECIAL_FOLDERS = {
38
+ src: FolderCode,
39
+ source: FolderCode,
40
+ lib: FolderCode,
41
+ app: FolderCode,
42
+ packages: Package,
43
+ node_modules: Package,
44
+ vendor: Package,
45
+ public: FolderInput,
46
+ static: FolderInput,
47
+ assets: Image,
48
+ images: Image,
49
+ media: Image,
50
+ dist: FolderOutput,
51
+ build: FolderOutput,
52
+ out: FolderOutput,
53
+ ".next": FolderOutput,
54
+ ".nuxt": FolderOutput,
55
+ ".turbo": FolderOutput,
56
+ docs: BookOpen,
57
+ documentation: BookOpen,
58
+ tests: FlaskConical,
59
+ test: FlaskConical,
60
+ __tests__: FlaskConical,
61
+ __test__: FlaskConical,
62
+ scripts: Terminal,
63
+ bin: Terminal,
64
+ config: Settings,
65
+ configs: Settings,
66
+ ".config": Settings,
67
+ ".vscode": Settings,
68
+ ".idea": Settings,
69
+ ".git": FolderGit2,
70
+ ".github": Github,
71
+ ".gitlab": FolderGit2
72
+ };
73
+ function resolveFolderIcon({
74
+ name,
75
+ isExpanded = false,
76
+ overrides
77
+ }) {
78
+ const key = name.trim().toLowerCase();
79
+ if (overrides?.[key]) return overrides[key];
80
+ const special = SPECIAL_FOLDERS[key];
81
+ if (special) return special;
82
+ return isExpanded ? FolderOpen : Folder;
83
+ }
84
+ __name(resolveFolderIcon, "resolveFolderIcon");
85
+ function FileIcon({
86
+ name,
87
+ isFolder = false,
88
+ isExpanded = false,
89
+ size = 16,
90
+ folderOverrides,
91
+ className
92
+ }) {
93
+ const [svg, setSvg] = useState(() => {
94
+ if (isFolder) return null;
95
+ const fn = getMaterialIconsSync();
96
+ return fn ? fn(name)?.svg ?? null : null;
97
+ });
98
+ useEffect(() => {
99
+ if (isFolder) {
100
+ setSvg(null);
101
+ return;
102
+ }
103
+ let cancelled = false;
104
+ void loadMaterialIcons().then((fn) => {
105
+ if (cancelled) return;
106
+ setSvg(fn ? fn(name)?.svg ?? null : null);
107
+ });
108
+ return () => {
109
+ cancelled = true;
110
+ };
111
+ }, [isFolder, name]);
112
+ if (isFolder) {
113
+ const Icon = resolveFolderIcon({
114
+ name,
115
+ isExpanded,
116
+ overrides: folderOverrides
117
+ });
118
+ return /* @__PURE__ */ jsx(
119
+ Icon,
120
+ {
121
+ className: cn("shrink-0 text-amber-500", className),
122
+ style: { width: size, height: size }
123
+ }
124
+ );
125
+ }
126
+ if (!svg) {
127
+ return /* @__PURE__ */ jsx(
128
+ File,
129
+ {
130
+ className: cn("shrink-0 text-muted-foreground/80", className),
131
+ style: { width: size, height: size }
132
+ }
133
+ );
134
+ }
135
+ return /* @__PURE__ */ jsx(
136
+ "span",
137
+ {
138
+ role: "img",
139
+ "aria-hidden": true,
140
+ className: cn("inline-block shrink-0", className),
141
+ style: { width: size, height: size },
142
+ dangerouslySetInnerHTML: { __html: svg }
143
+ }
144
+ );
145
+ }
146
+ __name(FileIcon, "FileIcon");
147
+ function createFileIconSlot({
148
+ getName,
149
+ size = 16,
150
+ folderOverrides
151
+ }) {
152
+ return ({ node, isFolder, isExpanded }) => /* @__PURE__ */ jsx(
153
+ FileIcon,
154
+ {
155
+ name: getName(node),
156
+ isFolder,
157
+ isExpanded,
158
+ size,
159
+ folderOverrides
160
+ }
161
+ );
162
+ }
163
+ __name(createFileIconSlot, "createFileIconSlot");
164
+
165
+ export { FileIcon, createFileIconSlot, getMaterialIconsSync, loadMaterialIcons, resolveFolderIcon };
166
+ //# sourceMappingURL=index.mjs.map
167
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tools/FileIcon/loader.ts","../../src/tools/FileIcon/specialFolders.ts","../../src/tools/FileIcon/FileIcon.tsx","../../src/tools/FileIcon/treeAdapter.tsx"],"names":["ImageIcon","FileFallback","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\n/**\n * Lazy loader for `material-file-icons`. The package is an optional dependency:\n * if it's installed in the consumer's tree, we render its rich VSCode-style\n * SVGs; if not, the loader resolves to `null` and `<FileIcon>` falls back to a\n * Lucide icon. Either way, ui-tools never throws or warns about a missing\n * package.\n *\n * Resolution is cached per-process so we don't re-import on every render.\n */\n\ntype GetIconFn = (name: string) => { svg: string } | undefined;\n\nlet cached: GetIconFn | null | undefined;\nlet inflight: Promise<GetIconFn | null> | null = null;\n\nexport async function loadMaterialIcons(): Promise<GetIconFn | null> {\n if (cached !== undefined) return cached;\n if (inflight) return inflight;\n\n inflight = (async () => {\n try {\n // Computed specifier so bundlers don't try to eagerly resolve it.\n const specifier = 'material-file-icons';\n const mod = (await import(/* @vite-ignore */ specifier)) as {\n getIcon?: GetIconFn;\n default?: { getIcon?: GetIconFn };\n };\n const fn = mod.getIcon ?? mod.default?.getIcon ?? null;\n cached = fn;\n return fn;\n } catch {\n cached = null;\n return null;\n } finally {\n inflight = null;\n }\n })();\n\n return inflight;\n}\n\n/** Synchronous accessor — returns null until `loadMaterialIcons` resolves. */\nexport function getMaterialIconsSync(): GetIconFn | null {\n return cached ?? null;\n}\n","'use client';\n\nimport {\n BookOpen,\n FlaskConical,\n Folder,\n FolderCode,\n FolderGit2,\n FolderInput,\n FolderOpen,\n FolderOutput,\n Github,\n Image as ImageIcon,\n Package,\n Settings,\n Terminal,\n type LucideIcon,\n} from 'lucide-react';\n\n/**\n * Conventional folder names → Lucide icon. Lookup is case-insensitive and\n * trimmed. Anything not in this map falls back to a generic folder icon.\n *\n * Designed to feel \"right\" across the common dev project layouts (Node,\n * Python, Go, Rust, Django, Next, Vite). Not exhaustive on purpose —\n * keeps the bundle light and the behaviour predictable.\n */\nconst SPECIAL_FOLDERS: Record<string, LucideIcon> = {\n src: FolderCode,\n source: FolderCode,\n lib: FolderCode,\n app: FolderCode,\n packages: Package,\n node_modules: Package,\n vendor: Package,\n public: FolderInput,\n static: FolderInput,\n assets: ImageIcon,\n images: ImageIcon,\n media: ImageIcon,\n dist: FolderOutput,\n build: FolderOutput,\n out: FolderOutput,\n '.next': FolderOutput,\n '.nuxt': FolderOutput,\n '.turbo': FolderOutput,\n docs: BookOpen,\n documentation: BookOpen,\n tests: FlaskConical,\n test: FlaskConical,\n __tests__: FlaskConical,\n __test__: FlaskConical,\n scripts: Terminal,\n bin: Terminal,\n config: Settings,\n configs: Settings,\n '.config': Settings,\n '.vscode': Settings,\n '.idea': Settings,\n '.git': FolderGit2,\n '.github': Github,\n '.gitlab': FolderGit2,\n};\n\nexport interface ResolveFolderIconOptions {\n /** Folder display name (no path). */\n name: string;\n /** Open / closed state — only used for the *generic* folder fallback. */\n isExpanded?: boolean;\n /**\n * Optional override map. Wins over the built-in table. Keys are\n * matched case-insensitively after `trim()`.\n */\n overrides?: Record<string, LucideIcon>;\n}\n\n/**\n * Pick the right folder icon for `name`. Returns `Folder` / `FolderOpen`\n * for unknown names so callers can render the generic open/closed pair.\n */\nexport function resolveFolderIcon({\n name,\n isExpanded = false,\n overrides,\n}: ResolveFolderIconOptions): LucideIcon {\n const key = name.trim().toLowerCase();\n if (overrides?.[key]) return overrides[key];\n const special = SPECIAL_FOLDERS[key];\n if (special) return special;\n return isExpanded ? FolderOpen : Folder;\n}\n\nexport type FolderIconOverrides = Record<string, LucideIcon>;\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { File as FileFallback } from 'lucide-react';\nimport { cn } from '@djangocfg/ui-core/lib';\n\nimport { getMaterialIconsSync, loadMaterialIcons } from './loader';\nimport { resolveFolderIcon, type FolderIconOverrides } from './specialFolders';\n\nexport type FileIconSize = 12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 40 | 48 | 64;\n\nexport interface FileIconProps {\n /** File name (with extension) or folder name. */\n name: string;\n /** Render a folder icon instead of a file icon. */\n isFolder?: boolean;\n /** Folder open / closed state. Ignored when `isFolder` is false. */\n isExpanded?: boolean;\n /** Pixel size of the icon. */\n size?: FileIconSize;\n /**\n * Override or extend the built-in special-folder mapping. Keys are\n * matched case-insensitively. Only used when `isFolder` is true.\n */\n folderOverrides?: FolderIconOverrides;\n className?: string;\n}\n\n/**\n * VSCode-style file icon.\n *\n * - Folders render Lucide `Folder` / `FolderOpen` (amber tint).\n * - Files use `material-file-icons` if it's installed in the consumer; otherwise\n * fall back to a neutral Lucide `File` icon.\n *\n * The optional dependency is loaded lazily on first render — there is zero\n * bundle cost for consumers who never mount this component.\n */\nexport function FileIcon({\n name,\n isFolder = false,\n isExpanded = false,\n size = 16,\n folderOverrides,\n className,\n}: FileIconProps) {\n const [svg, setSvg] = useState<string | null>(() => {\n if (isFolder) return null;\n const fn = getMaterialIconsSync();\n return fn ? (fn(name)?.svg ?? null) : null;\n });\n\n useEffect(() => {\n if (isFolder) {\n setSvg(null);\n return;\n }\n let cancelled = false;\n void loadMaterialIcons().then((fn) => {\n if (cancelled) return;\n setSvg(fn ? (fn(name)?.svg ?? null) : null);\n });\n return () => {\n cancelled = true;\n };\n }, [isFolder, name]);\n\n if (isFolder) {\n const Icon = resolveFolderIcon({\n name,\n isExpanded,\n overrides: folderOverrides,\n });\n return (\n <Icon\n className={cn('shrink-0 text-amber-500', className)}\n style={{ width: size, height: size }}\n />\n );\n }\n\n if (!svg) {\n return (\n <FileFallback\n className={cn('shrink-0 text-muted-foreground/80', className)}\n style={{ width: size, height: size }}\n />\n );\n }\n\n return (\n <span\n role=\"img\"\n aria-hidden\n className={cn('inline-block shrink-0', className)}\n style={{ width: size, height: size }}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n );\n}\n\nexport default FileIcon;\n","'use client';\n\nimport type { TreeNode, TreeRowSlot } from '../Tree/types';\nimport { FileIcon, type FileIconSize } from './FileIcon';\nimport type { FolderIconOverrides } from './specialFolders';\n\nexport interface CreateFileIconSlotOptions<T> {\n /**\n * How to read the displayed name (with extension) for a node. Use the same\n * accessor you pass to `<TreeRoot getItemName={...} />`.\n */\n getName: (node: TreeNode<T>) => string;\n /** Pixel size for both file and folder icons. Default: 16. */\n size?: FileIconSize;\n /**\n * Override or extend the built-in special-folder mapping (e.g. give\n * `tests` a custom icon). Keys are matched case-insensitively.\n */\n folderOverrides?: FolderIconOverrides;\n}\n\n/**\n * Build a `renderIcon` slot for `<TreeRoot>` that uses `<FileIcon>` for both\n * leaves and folders.\n *\n * @example\n * ```tsx\n * <TreeRoot\n * data={data}\n * getItemName={(n) => n.data.name}\n * renderIcon={createFileIconSlot({ getName: (n) => n.data.name })}\n * />\n * ```\n */\nexport function createFileIconSlot<T>({\n getName,\n size = 16,\n folderOverrides,\n}: CreateFileIconSlotOptions<T>): TreeRowSlot<T> {\n return ({ node, isFolder, isExpanded }) => (\n <FileIcon\n name={getName(node)}\n isFolder={isFolder}\n isExpanded={isExpanded}\n size={size}\n folderOverrides={folderOverrides}\n />\n );\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var chunkL37FZYJU_cjs = require('./chunk-L37FZYJU.cjs');
3
4
  var chunkPRPG2T2E_cjs = require('./chunk-PRPG2T2E.cjs');
4
5
  var chunkZLQHUZDU_cjs = require('./chunk-ZLQHUZDU.cjs');
5
6
  var chunkDFTVB66S_cjs = require('./chunk-DFTVB66S.cjs');
@@ -7,11 +8,10 @@ var chunkIHAY6FO6_cjs = require('./chunk-IHAY6FO6.cjs');
7
8
  var chunk77HQWEQ6_cjs = require('./chunk-77HQWEQ6.cjs');
8
9
  var chunkF2CMIIOH_cjs = require('./chunk-F2CMIIOH.cjs');
9
10
  var chunkYXBOAGIM_cjs = require('./chunk-YXBOAGIM.cjs');
10
- var chunk4CEOJDMB_cjs = require('./chunk-4CEOJDMB.cjs');
11
+ var chunk3Z3A7FHA_cjs = require('./chunk-3Z3A7FHA.cjs');
11
12
  var chunkS44PW6NK_cjs = require('./chunk-S44PW6NK.cjs');
12
13
  var chunk33AMWFBZ_cjs = require('./chunk-33AMWFBZ.cjs');
13
14
  require('./chunk-2SMCH62O.cjs');
14
- var chunkL37FZYJU_cjs = require('./chunk-L37FZYJU.cjs');
15
15
  var chunkWGEGR3DF_cjs = require('./chunk-WGEGR3DF.cjs');
16
16
  var React = require('react');
17
17
  var lib = require('@djangocfg/ui-core/lib');
@@ -363,7 +363,7 @@ var LazyCronScheduler = createLazyComponent(
363
363
  }
364
364
  );
365
365
  var LazyTree = createLazyComponent(
366
- () => import('./TreeRoot-A25RIGYE.cjs'),
366
+ () => import('./TreeRoot-DSK5JILT.cjs'),
367
367
  {
368
368
  displayName: "LazyTree",
369
369
  fallback: /* @__PURE__ */ jsxRuntime.jsx(LoadingFallback, { minHeight: 200, text: "Loading tree\u2026" })
@@ -1401,6 +1401,94 @@ function MarkdownToolbar({ editor }) {
1401
1401
  }
1402
1402
  chunkWGEGR3DF_cjs.__name(MarkdownToolbar, "MarkdownToolbar");
1403
1403
 
1404
+ Object.defineProperty(exports, "ArrayFieldItemTemplate", {
1405
+ enumerable: true,
1406
+ get: function () { return chunkL37FZYJU_cjs.ArrayFieldItemTemplate; }
1407
+ });
1408
+ Object.defineProperty(exports, "ArrayFieldTemplate", {
1409
+ enumerable: true,
1410
+ get: function () { return chunkL37FZYJU_cjs.ArrayFieldTemplate; }
1411
+ });
1412
+ Object.defineProperty(exports, "BaseInputTemplate", {
1413
+ enumerable: true,
1414
+ get: function () { return chunkL37FZYJU_cjs.BaseInputTemplate; }
1415
+ });
1416
+ Object.defineProperty(exports, "CheckboxWidget", {
1417
+ enumerable: true,
1418
+ get: function () { return chunkL37FZYJU_cjs.CheckboxWidget; }
1419
+ });
1420
+ Object.defineProperty(exports, "ColorWidget", {
1421
+ enumerable: true,
1422
+ get: function () { return chunkL37FZYJU_cjs.ColorWidget; }
1423
+ });
1424
+ Object.defineProperty(exports, "ErrorListTemplate", {
1425
+ enumerable: true,
1426
+ get: function () { return chunkL37FZYJU_cjs.ErrorListTemplate; }
1427
+ });
1428
+ Object.defineProperty(exports, "FieldTemplate", {
1429
+ enumerable: true,
1430
+ get: function () { return chunkL37FZYJU_cjs.FieldTemplate; }
1431
+ });
1432
+ Object.defineProperty(exports, "JsonSchemaForm", {
1433
+ enumerable: true,
1434
+ get: function () { return chunkL37FZYJU_cjs.JsonSchemaForm; }
1435
+ });
1436
+ Object.defineProperty(exports, "NumberWidget", {
1437
+ enumerable: true,
1438
+ get: function () { return chunkL37FZYJU_cjs.NumberWidget; }
1439
+ });
1440
+ Object.defineProperty(exports, "ObjectFieldTemplate", {
1441
+ enumerable: true,
1442
+ get: function () { return chunkL37FZYJU_cjs.ObjectFieldTemplate; }
1443
+ });
1444
+ Object.defineProperty(exports, "SelectWidget", {
1445
+ enumerable: true,
1446
+ get: function () { return chunkL37FZYJU_cjs.SelectWidget; }
1447
+ });
1448
+ Object.defineProperty(exports, "SliderWidget", {
1449
+ enumerable: true,
1450
+ get: function () { return chunkL37FZYJU_cjs.SliderWidget; }
1451
+ });
1452
+ Object.defineProperty(exports, "SwitchWidget", {
1453
+ enumerable: true,
1454
+ get: function () { return chunkL37FZYJU_cjs.SwitchWidget; }
1455
+ });
1456
+ Object.defineProperty(exports, "TextWidget", {
1457
+ enumerable: true,
1458
+ get: function () { return chunkL37FZYJU_cjs.TextWidget; }
1459
+ });
1460
+ Object.defineProperty(exports, "getRequiredFields", {
1461
+ enumerable: true,
1462
+ get: function () { return chunkL37FZYJU_cjs.getRequiredFields; }
1463
+ });
1464
+ Object.defineProperty(exports, "hasRequiredFields", {
1465
+ enumerable: true,
1466
+ get: function () { return chunkL37FZYJU_cjs.hasRequiredFields; }
1467
+ });
1468
+ Object.defineProperty(exports, "mergeDefaults", {
1469
+ enumerable: true,
1470
+ get: function () { return chunkL37FZYJU_cjs.mergeDefaults; }
1471
+ });
1472
+ Object.defineProperty(exports, "normalizeFormData", {
1473
+ enumerable: true,
1474
+ get: function () { return chunkL37FZYJU_cjs.normalizeFormData; }
1475
+ });
1476
+ Object.defineProperty(exports, "safeJsonParse", {
1477
+ enumerable: true,
1478
+ get: function () { return chunkL37FZYJU_cjs.safeJsonParse; }
1479
+ });
1480
+ Object.defineProperty(exports, "safeJsonStringify", {
1481
+ enumerable: true,
1482
+ get: function () { return chunkL37FZYJU_cjs.safeJsonStringify; }
1483
+ });
1484
+ Object.defineProperty(exports, "validateRequiredFields", {
1485
+ enumerable: true,
1486
+ get: function () { return chunkL37FZYJU_cjs.validateRequiredFields; }
1487
+ });
1488
+ Object.defineProperty(exports, "validateSchema", {
1489
+ enumerable: true,
1490
+ get: function () { return chunkL37FZYJU_cjs.validateSchema; }
1491
+ });
1404
1492
  Object.defineProperty(exports, "useLottie", {
1405
1493
  enumerable: true,
1406
1494
  get: function () { return chunkPRPG2T2E_cjs.useLottie; }
@@ -1583,127 +1671,127 @@ Object.defineProperty(exports, "createDemoTree", {
1583
1671
  });
1584
1672
  Object.defineProperty(exports, "DEFAULT_TREE_APPEARANCE", {
1585
1673
  enumerable: true,
1586
- get: function () { return chunk4CEOJDMB_cjs.DEFAULT_TREE_APPEARANCE; }
1674
+ get: function () { return chunk3Z3A7FHA_cjs.DEFAULT_TREE_APPEARANCE; }
1587
1675
  });
1588
1676
  Object.defineProperty(exports, "DEFAULT_TREE_LABELS", {
1589
1677
  enumerable: true,
1590
- get: function () { return chunk4CEOJDMB_cjs.DEFAULT_TREE_LABELS; }
1678
+ get: function () { return chunk3Z3A7FHA_cjs.DEFAULT_TREE_LABELS; }
1591
1679
  });
1592
1680
  Object.defineProperty(exports, "Tree", {
1593
1681
  enumerable: true,
1594
- get: function () { return chunk4CEOJDMB_cjs.TreeRoot; }
1682
+ get: function () { return chunk3Z3A7FHA_cjs.TreeRoot; }
1595
1683
  });
1596
1684
  Object.defineProperty(exports, "TreeChevron", {
1597
1685
  enumerable: true,
1598
- get: function () { return chunk4CEOJDMB_cjs.TreeChevron; }
1686
+ get: function () { return chunk3Z3A7FHA_cjs.TreeChevron; }
1599
1687
  });
1600
1688
  Object.defineProperty(exports, "TreeContent", {
1601
1689
  enumerable: true,
1602
- get: function () { return chunk4CEOJDMB_cjs.TreeContent; }
1690
+ get: function () { return chunk3Z3A7FHA_cjs.TreeContent; }
1603
1691
  });
1604
1692
  Object.defineProperty(exports, "TreeEmpty", {
1605
1693
  enumerable: true,
1606
- get: function () { return chunk4CEOJDMB_cjs.TreeEmpty; }
1694
+ get: function () { return chunk3Z3A7FHA_cjs.TreeEmpty; }
1607
1695
  });
1608
1696
  Object.defineProperty(exports, "TreeIcon", {
1609
1697
  enumerable: true,
1610
- get: function () { return chunk4CEOJDMB_cjs.TreeIcon; }
1698
+ get: function () { return chunk3Z3A7FHA_cjs.TreeIcon; }
1611
1699
  });
1612
1700
  Object.defineProperty(exports, "TreeIndentGuides", {
1613
1701
  enumerable: true,
1614
- get: function () { return chunk4CEOJDMB_cjs.TreeIndentGuides; }
1702
+ get: function () { return chunk3Z3A7FHA_cjs.TreeIndentGuides; }
1615
1703
  });
1616
1704
  Object.defineProperty(exports, "TreeLabel", {
1617
1705
  enumerable: true,
1618
- get: function () { return chunk4CEOJDMB_cjs.TreeLabel; }
1706
+ get: function () { return chunk3Z3A7FHA_cjs.TreeLabel; }
1619
1707
  });
1620
1708
  Object.defineProperty(exports, "TreeProvider", {
1621
1709
  enumerable: true,
1622
- get: function () { return chunk4CEOJDMB_cjs.TreeProvider; }
1710
+ get: function () { return chunk3Z3A7FHA_cjs.TreeProvider; }
1623
1711
  });
1624
1712
  Object.defineProperty(exports, "TreeRoot", {
1625
1713
  enumerable: true,
1626
- get: function () { return chunk4CEOJDMB_cjs.TreeRoot; }
1714
+ get: function () { return chunk3Z3A7FHA_cjs.TreeRoot; }
1627
1715
  });
1628
1716
  Object.defineProperty(exports, "TreeRow", {
1629
1717
  enumerable: true,
1630
- get: function () { return chunk4CEOJDMB_cjs.TreeRow; }
1718
+ get: function () { return chunk3Z3A7FHA_cjs.TreeRow; }
1631
1719
  });
1632
1720
  Object.defineProperty(exports, "TreeSearchInput", {
1633
1721
  enumerable: true,
1634
- get: function () { return chunk4CEOJDMB_cjs.TreeSearchInput; }
1722
+ get: function () { return chunk3Z3A7FHA_cjs.TreeSearchInput; }
1635
1723
  });
1636
1724
  Object.defineProperty(exports, "appearanceToStyle", {
1637
1725
  enumerable: true,
1638
- get: function () { return chunk4CEOJDMB_cjs.appearanceToStyle; }
1726
+ get: function () { return chunk3Z3A7FHA_cjs.appearanceToStyle; }
1639
1727
  });
1640
1728
  Object.defineProperty(exports, "clearTreeState", {
1641
1729
  enumerable: true,
1642
- get: function () { return chunk4CEOJDMB_cjs.clearTreeState; }
1730
+ get: function () { return chunk3Z3A7FHA_cjs.clearTreeState; }
1643
1731
  });
1644
1732
  Object.defineProperty(exports, "createChildCache", {
1645
1733
  enumerable: true,
1646
- get: function () { return chunk4CEOJDMB_cjs.createChildCache; }
1734
+ get: function () { return chunk3Z3A7FHA_cjs.createChildCache; }
1647
1735
  });
1648
1736
  Object.defineProperty(exports, "flattenTree", {
1649
1737
  enumerable: true,
1650
- get: function () { return chunk4CEOJDMB_cjs.flattenTree; }
1738
+ get: function () { return chunk3Z3A7FHA_cjs.flattenTree; }
1651
1739
  });
1652
1740
  Object.defineProperty(exports, "loadTreeState", {
1653
1741
  enumerable: true,
1654
- get: function () { return chunk4CEOJDMB_cjs.loadTreeState; }
1742
+ get: function () { return chunk3Z3A7FHA_cjs.loadTreeState; }
1655
1743
  });
1656
1744
  Object.defineProperty(exports, "resolveAppearance", {
1657
1745
  enumerable: true,
1658
- get: function () { return chunk4CEOJDMB_cjs.resolveAppearance; }
1746
+ get: function () { return chunk3Z3A7FHA_cjs.resolveAppearance; }
1659
1747
  });
1660
1748
  Object.defineProperty(exports, "resolveChildren", {
1661
1749
  enumerable: true,
1662
- get: function () { return chunk4CEOJDMB_cjs.resolveChildren; }
1750
+ get: function () { return chunk3Z3A7FHA_cjs.resolveChildren; }
1663
1751
  });
1664
1752
  Object.defineProperty(exports, "saveTreeState", {
1665
1753
  enumerable: true,
1666
- get: function () { return chunk4CEOJDMB_cjs.saveTreeState; }
1754
+ get: function () { return chunk3Z3A7FHA_cjs.saveTreeState; }
1667
1755
  });
1668
1756
  Object.defineProperty(exports, "useTreeActions", {
1669
1757
  enumerable: true,
1670
- get: function () { return chunk4CEOJDMB_cjs.useTreeActions; }
1758
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeActions; }
1671
1759
  });
1672
1760
  Object.defineProperty(exports, "useTreeContext", {
1673
1761
  enumerable: true,
1674
- get: function () { return chunk4CEOJDMB_cjs.useTreeContext; }
1762
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeContext; }
1675
1763
  });
1676
1764
  Object.defineProperty(exports, "useTreeExpansion", {
1677
1765
  enumerable: true,
1678
- get: function () { return chunk4CEOJDMB_cjs.useTreeExpansion; }
1766
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeExpansion; }
1679
1767
  });
1680
1768
  Object.defineProperty(exports, "useTreeFocus", {
1681
1769
  enumerable: true,
1682
- get: function () { return chunk4CEOJDMB_cjs.useTreeFocus; }
1770
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeFocus; }
1683
1771
  });
1684
1772
  Object.defineProperty(exports, "useTreeKeyboard", {
1685
1773
  enumerable: true,
1686
- get: function () { return chunk4CEOJDMB_cjs.useTreeKeyboard; }
1774
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeKeyboard; }
1687
1775
  });
1688
1776
  Object.defineProperty(exports, "useTreeLabels", {
1689
1777
  enumerable: true,
1690
- get: function () { return chunk4CEOJDMB_cjs.useTreeLabels; }
1778
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeLabels; }
1691
1779
  });
1692
1780
  Object.defineProperty(exports, "useTreeRows", {
1693
1781
  enumerable: true,
1694
- get: function () { return chunk4CEOJDMB_cjs.useTreeRows; }
1782
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeRows; }
1695
1783
  });
1696
1784
  Object.defineProperty(exports, "useTreeSearch", {
1697
1785
  enumerable: true,
1698
- get: function () { return chunk4CEOJDMB_cjs.useTreeSearch; }
1786
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeSearch; }
1699
1787
  });
1700
1788
  Object.defineProperty(exports, "useTreeSelection", {
1701
1789
  enumerable: true,
1702
- get: function () { return chunk4CEOJDMB_cjs.useTreeSelection; }
1790
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeSelection; }
1703
1791
  });
1704
1792
  Object.defineProperty(exports, "useTreeTypeAhead", {
1705
1793
  enumerable: true,
1706
- get: function () { return chunk4CEOJDMB_cjs.useTreeTypeAhead; }
1794
+ get: function () { return chunk3Z3A7FHA_cjs.useTreeTypeAhead; }
1707
1795
  });
1708
1796
  Object.defineProperty(exports, "MarkdownMessage", {
1709
1797
  enumerable: true,
@@ -1729,94 +1817,6 @@ Object.defineProperty(exports, "JsonTree", {
1729
1817
  enumerable: true,
1730
1818
  get: function () { return chunk33AMWFBZ_cjs.JsonTree_default; }
1731
1819
  });
1732
- Object.defineProperty(exports, "ArrayFieldItemTemplate", {
1733
- enumerable: true,
1734
- get: function () { return chunkL37FZYJU_cjs.ArrayFieldItemTemplate; }
1735
- });
1736
- Object.defineProperty(exports, "ArrayFieldTemplate", {
1737
- enumerable: true,
1738
- get: function () { return chunkL37FZYJU_cjs.ArrayFieldTemplate; }
1739
- });
1740
- Object.defineProperty(exports, "BaseInputTemplate", {
1741
- enumerable: true,
1742
- get: function () { return chunkL37FZYJU_cjs.BaseInputTemplate; }
1743
- });
1744
- Object.defineProperty(exports, "CheckboxWidget", {
1745
- enumerable: true,
1746
- get: function () { return chunkL37FZYJU_cjs.CheckboxWidget; }
1747
- });
1748
- Object.defineProperty(exports, "ColorWidget", {
1749
- enumerable: true,
1750
- get: function () { return chunkL37FZYJU_cjs.ColorWidget; }
1751
- });
1752
- Object.defineProperty(exports, "ErrorListTemplate", {
1753
- enumerable: true,
1754
- get: function () { return chunkL37FZYJU_cjs.ErrorListTemplate; }
1755
- });
1756
- Object.defineProperty(exports, "FieldTemplate", {
1757
- enumerable: true,
1758
- get: function () { return chunkL37FZYJU_cjs.FieldTemplate; }
1759
- });
1760
- Object.defineProperty(exports, "JsonSchemaForm", {
1761
- enumerable: true,
1762
- get: function () { return chunkL37FZYJU_cjs.JsonSchemaForm; }
1763
- });
1764
- Object.defineProperty(exports, "NumberWidget", {
1765
- enumerable: true,
1766
- get: function () { return chunkL37FZYJU_cjs.NumberWidget; }
1767
- });
1768
- Object.defineProperty(exports, "ObjectFieldTemplate", {
1769
- enumerable: true,
1770
- get: function () { return chunkL37FZYJU_cjs.ObjectFieldTemplate; }
1771
- });
1772
- Object.defineProperty(exports, "SelectWidget", {
1773
- enumerable: true,
1774
- get: function () { return chunkL37FZYJU_cjs.SelectWidget; }
1775
- });
1776
- Object.defineProperty(exports, "SliderWidget", {
1777
- enumerable: true,
1778
- get: function () { return chunkL37FZYJU_cjs.SliderWidget; }
1779
- });
1780
- Object.defineProperty(exports, "SwitchWidget", {
1781
- enumerable: true,
1782
- get: function () { return chunkL37FZYJU_cjs.SwitchWidget; }
1783
- });
1784
- Object.defineProperty(exports, "TextWidget", {
1785
- enumerable: true,
1786
- get: function () { return chunkL37FZYJU_cjs.TextWidget; }
1787
- });
1788
- Object.defineProperty(exports, "getRequiredFields", {
1789
- enumerable: true,
1790
- get: function () { return chunkL37FZYJU_cjs.getRequiredFields; }
1791
- });
1792
- Object.defineProperty(exports, "hasRequiredFields", {
1793
- enumerable: true,
1794
- get: function () { return chunkL37FZYJU_cjs.hasRequiredFields; }
1795
- });
1796
- Object.defineProperty(exports, "mergeDefaults", {
1797
- enumerable: true,
1798
- get: function () { return chunkL37FZYJU_cjs.mergeDefaults; }
1799
- });
1800
- Object.defineProperty(exports, "normalizeFormData", {
1801
- enumerable: true,
1802
- get: function () { return chunkL37FZYJU_cjs.normalizeFormData; }
1803
- });
1804
- Object.defineProperty(exports, "safeJsonParse", {
1805
- enumerable: true,
1806
- get: function () { return chunkL37FZYJU_cjs.safeJsonParse; }
1807
- });
1808
- Object.defineProperty(exports, "safeJsonStringify", {
1809
- enumerable: true,
1810
- get: function () { return chunkL37FZYJU_cjs.safeJsonStringify; }
1811
- });
1812
- Object.defineProperty(exports, "validateRequiredFields", {
1813
- enumerable: true,
1814
- get: function () { return chunkL37FZYJU_cjs.validateRequiredFields; }
1815
- });
1816
- Object.defineProperty(exports, "validateSchema", {
1817
- enumerable: true,
1818
- get: function () { return chunkL37FZYJU_cjs.validateSchema; }
1819
- });
1820
1820
  exports.CardLoadingFallback = CardLoadingFallback;
1821
1821
  exports.CronScheduler = CronScheduler;
1822
1822
  exports.DiffEditor = DiffEditor;