@flanksource/clicky-ui 0.3.6 → 0.3.7

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 (215) hide show
  1. package/README.md +42 -0
  2. package/dist/components/DateField.d.ts +1 -1
  3. package/dist/components/DatePicker.d.ts +1 -1
  4. package/dist/components/DateTimePicker.d.ts +1 -1
  5. package/dist/components/FormLookupProvider.cjs +12 -0
  6. package/dist/components/FormLookupProvider.cjs.map +1 -0
  7. package/dist/components/FormLookupProvider.d.ts +7 -0
  8. package/dist/components/FormLookupProvider.d.ts.map +1 -0
  9. package/dist/components/FormLookupProvider.js +12 -0
  10. package/dist/components/FormLookupProvider.js.map +1 -0
  11. package/dist/components/JsonSchemaForm.cjs +2 -2
  12. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  13. package/dist/components/JsonSchemaForm.js +1 -1
  14. package/dist/components/JsonSchemaForm.js.map +1 -1
  15. package/dist/components/ListMenu.cjs +145 -0
  16. package/dist/components/ListMenu.cjs.map +1 -0
  17. package/dist/components/ListMenu.d.ts +54 -0
  18. package/dist/components/ListMenu.d.ts.map +1 -0
  19. package/dist/components/ListMenu.js +145 -0
  20. package/dist/components/ListMenu.js.map +1 -0
  21. package/dist/components/MdxEditorField.cjs +128 -0
  22. package/dist/components/MdxEditorField.cjs.map +1 -0
  23. package/dist/components/MdxEditorField.d.ts +4 -0
  24. package/dist/components/MdxEditorField.d.ts.map +1 -0
  25. package/dist/components/MdxEditorField.js +106 -0
  26. package/dist/components/MdxEditorField.js.map +1 -0
  27. package/dist/components/MdxEditorToolbar.cjs +76 -0
  28. package/dist/components/MdxEditorToolbar.cjs.map +1 -0
  29. package/dist/components/MdxEditorToolbar.d.ts +8 -0
  30. package/dist/components/MdxEditorToolbar.d.ts.map +1 -0
  31. package/dist/components/MdxEditorToolbar.js +76 -0
  32. package/dist/components/MdxEditorToolbar.js.map +1 -0
  33. package/dist/components/button-variants.d.ts +1 -1
  34. package/dist/components/button.d.ts +1 -1
  35. package/dist/components/form-lookup-context.cjs +1 -8
  36. package/dist/components/form-lookup-context.cjs.map +1 -1
  37. package/dist/components/form-lookup-context.d.ts +1 -5
  38. package/dist/components/form-lookup-context.d.ts.map +1 -1
  39. package/dist/components/form-lookup-context.js +1 -8
  40. package/dist/components/form-lookup-context.js.map +1 -1
  41. package/dist/components/jotai-bindings-core.cjs +197 -0
  42. package/dist/components/jotai-bindings-core.cjs.map +1 -0
  43. package/dist/components/jotai-bindings-core.d.ts +45 -0
  44. package/dist/components/jotai-bindings-core.d.ts.map +1 -0
  45. package/dist/components/jotai-bindings-core.js +197 -0
  46. package/dist/components/jotai-bindings-core.js.map +1 -0
  47. package/dist/components/jotai-bindings.cjs +17 -0
  48. package/dist/components/jotai-bindings.cjs.map +1 -0
  49. package/dist/components/jotai-bindings.d.ts +4 -0
  50. package/dist/components/jotai-bindings.d.ts.map +1 -0
  51. package/dist/components/jotai-bindings.js +17 -0
  52. package/dist/components/jotai-bindings.js.map +1 -0
  53. package/dist/components/json-schema-form-fields.cjs +37 -0
  54. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  55. package/dist/components/json-schema-form-fields.d.ts +6 -0
  56. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  57. package/dist/components/json-schema-form-fields.js +38 -1
  58. package/dist/components/json-schema-form-fields.js.map +1 -1
  59. package/dist/components/json-schema-form-render.cjs +3 -1
  60. package/dist/components/json-schema-form-render.cjs.map +1 -1
  61. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  62. package/dist/components/json-schema-form-render.js +4 -2
  63. package/dist/components/json-schema-form-render.js.map +1 -1
  64. package/dist/components/json-schema-form-resolve.cjs +9 -0
  65. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  66. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  67. package/dist/components/json-schema-form-resolve.js +9 -0
  68. package/dist/components/json-schema-form-resolve.js.map +1 -1
  69. package/dist/components/json-schema-form-types.d.ts +4 -1
  70. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  71. package/dist/components/mdx-editor-field-plugins.cjs +124 -0
  72. package/dist/components/mdx-editor-field-plugins.cjs.map +1 -0
  73. package/dist/components/mdx-editor-field-plugins.d.ts +6 -0
  74. package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -0
  75. package/dist/components/mdx-editor-field-plugins.js +124 -0
  76. package/dist/components/mdx-editor-field-plugins.js.map +1 -0
  77. package/dist/components/mdx-editor-options.d.ts +77 -0
  78. package/dist/components/mdx-editor-options.d.ts.map +1 -0
  79. package/dist/components/use-list-menu-selection.cjs +77 -0
  80. package/dist/components/use-list-menu-selection.cjs.map +1 -0
  81. package/dist/components/use-list-menu-selection.d.ts +40 -0
  82. package/dist/components/use-list-menu-selection.d.ts.map +1 -0
  83. package/dist/components/use-list-menu-selection.js +77 -0
  84. package/dist/components/use-list-menu-selection.js.map +1 -0
  85. package/dist/components.cjs +10 -1
  86. package/dist/components.cjs.map +1 -1
  87. package/dist/components.d.ts +4 -1
  88. package/dist/components.d.ts.map +1 -1
  89. package/dist/components.js +10 -1
  90. package/dist/components.js.map +1 -1
  91. package/dist/data/MarkdownEditor.model.d.ts +1 -1
  92. package/dist/data/PromptBanner.cjs +199 -0
  93. package/dist/data/PromptBanner.cjs.map +1 -0
  94. package/dist/data/PromptBanner.d.ts +17 -0
  95. package/dist/data/PromptBanner.d.ts.map +1 -0
  96. package/dist/data/PromptBanner.js +199 -0
  97. package/dist/data/PromptBanner.js.map +1 -0
  98. package/dist/data/PromptBanner.model.cjs +132 -0
  99. package/dist/data/PromptBanner.model.cjs.map +1 -0
  100. package/dist/data/PromptBanner.model.d.ts +23 -0
  101. package/dist/data/PromptBanner.model.d.ts.map +1 -0
  102. package/dist/data/PromptBanner.model.js +132 -0
  103. package/dist/data/PromptBanner.model.js.map +1 -0
  104. package/dist/data/PromptDialog.cjs +43 -0
  105. package/dist/data/PromptDialog.cjs.map +1 -0
  106. package/dist/data/PromptDialog.d.ts +14 -0
  107. package/dist/data/PromptDialog.d.ts.map +1 -0
  108. package/dist/data/PromptDialog.js +43 -0
  109. package/dist/data/PromptDialog.js.map +1 -0
  110. package/dist/data/TaskManager.cjs +8 -1
  111. package/dist/data/TaskManager.cjs.map +1 -1
  112. package/dist/data/TaskManager.d.ts.map +1 -1
  113. package/dist/data/TaskManager.js +8 -1
  114. package/dist/data/TaskManager.js.map +1 -1
  115. package/dist/data/TaskProgress.cjs +15 -2
  116. package/dist/data/TaskProgress.cjs.map +1 -1
  117. package/dist/data/TaskProgress.d.ts +0 -10
  118. package/dist/data/TaskProgress.d.ts.map +1 -1
  119. package/dist/data/TaskProgress.js +15 -2
  120. package/dist/data/TaskProgress.js.map +1 -1
  121. package/dist/data/ai/ChatWindow.cjs +53 -9
  122. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  123. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  124. package/dist/data/ai/ChatWindow.js +53 -9
  125. package/dist/data/ai/ChatWindow.js.map +1 -1
  126. package/dist/data/ai/ToolPreferences.cjs +232 -39
  127. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  128. package/dist/data/ai/ToolPreferences.d.ts +4 -7
  129. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  130. package/dist/data/ai/ToolPreferences.js +234 -41
  131. package/dist/data/ai/ToolPreferences.js.map +1 -1
  132. package/dist/data/chat/clickyOperationsToTools.cjs +89 -3
  133. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  134. package/dist/data/chat/clickyOperationsToTools.d.ts +1 -1
  135. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  136. package/dist/data/chat/clickyOperationsToTools.js +89 -3
  137. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  138. package/dist/data/chat/types.cjs.map +1 -1
  139. package/dist/data/chat/types.d.ts +7 -1
  140. package/dist/data/chat/types.d.ts.map +1 -1
  141. package/dist/data/chat/types.js.map +1 -1
  142. package/dist/data/task-status.cjs +19 -12
  143. package/dist/data/task-status.cjs.map +1 -1
  144. package/dist/data/task-status.d.ts +2 -1
  145. package/dist/data/task-status.d.ts.map +1 -1
  146. package/dist/data/task-status.js +19 -12
  147. package/dist/data/task-status.js.map +1 -1
  148. package/dist/data/test-runner/TestRunner.fixtures.d.ts +11 -4
  149. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  150. package/dist/data/version-info.cjs +3 -3
  151. package/dist/data/version-info.js +3 -3
  152. package/dist/data.cjs +7 -0
  153. package/dist/data.cjs.map +1 -1
  154. package/dist/data.d.ts +3 -0
  155. package/dist/data.d.ts.map +1 -1
  156. package/dist/data.js +7 -0
  157. package/dist/data.js.map +1 -1
  158. package/dist/hooks/use-prompts.cjs +83 -0
  159. package/dist/hooks/use-prompts.cjs.map +1 -0
  160. package/dist/hooks/use-prompts.d.ts +43 -0
  161. package/dist/hooks/use-prompts.d.ts.map +1 -0
  162. package/dist/hooks/use-prompts.js +83 -0
  163. package/dist/hooks/use-prompts.js.map +1 -0
  164. package/dist/hooks.cjs +3 -0
  165. package/dist/hooks.cjs.map +1 -1
  166. package/dist/hooks.d.ts +1 -0
  167. package/dist/hooks.d.ts.map +1 -1
  168. package/dist/hooks.js +3 -0
  169. package/dist/hooks.js.map +1 -1
  170. package/dist/index.cjs +17 -1
  171. package/dist/index.cjs.map +1 -1
  172. package/dist/index.js +17 -1
  173. package/dist/index.js.map +1 -1
  174. package/dist/jotai.cjs +9 -0
  175. package/dist/jotai.cjs.map +1 -0
  176. package/dist/jotai.d.ts +4 -0
  177. package/dist/jotai.d.ts.map +1 -0
  178. package/dist/jotai.js +9 -0
  179. package/dist/jotai.js.map +1 -0
  180. package/dist/lib/utils.cjs +18 -1
  181. package/dist/lib/utils.cjs.map +1 -1
  182. package/dist/lib/utils.d.ts.map +1 -1
  183. package/dist/lib/utils.js +18 -1
  184. package/dist/lib/utils.js.map +1 -1
  185. package/dist/mdx-editor.cjs +5 -0
  186. package/dist/mdx-editor.cjs.map +1 -0
  187. package/dist/mdx-editor.css +2 -0
  188. package/dist/mdx-editor.d.ts +2 -0
  189. package/dist/mdx-editor.d.ts.map +1 -0
  190. package/dist/mdx-editor.js +5 -0
  191. package/dist/mdx-editor.js.map +1 -0
  192. package/dist/rpc/apiClient.cjs +1 -1
  193. package/dist/rpc/apiClient.cjs.map +1 -1
  194. package/dist/rpc/apiClient.js +1 -1
  195. package/dist/rpc/apiClient.js.map +1 -1
  196. package/dist/rpc/surfaceIconMap.cjs +12 -1
  197. package/dist/rpc/surfaceIconMap.cjs.map +1 -1
  198. package/dist/rpc/surfaceIconMap.d.ts.map +1 -1
  199. package/dist/rpc/surfaceIconMap.js +12 -1
  200. package/dist/rpc/surfaceIconMap.js.map +1 -1
  201. package/dist/rpc/types.cjs.map +1 -1
  202. package/dist/rpc/types.d.ts +1 -0
  203. package/dist/rpc/types.d.ts.map +1 -1
  204. package/dist/rpc/types.js.map +1 -1
  205. package/dist/styles.css +1 -1
  206. package/oxlint-plugins/README.md +148 -0
  207. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +88 -0
  208. package/oxlint-plugins/clicky-ui-prefer-components.js +46 -0
  209. package/oxlint-plugins/clicky-ui-prefer-icons.js +121 -0
  210. package/oxlint-plugins/clicky-ui-prefer-tailwind.js +98 -0
  211. package/oxlint-plugins/clicky-ui-prefer-theme.js +134 -0
  212. package/oxlint-plugins/clicky-ui-shared.js +132 -0
  213. package/oxlint-plugins/clicky-ui.js +34 -0
  214. package/oxlint-plugins/no-iconify-names.js +37 -0
  215. package/package.json +21 -1
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const MdxEditorToolbar = require("./MdxEditorToolbar.cjs");
5
+ const DEFAULT_CODE_BLOCK_LANGUAGES = {
6
+ bash: "Bash",
7
+ css: "CSS",
8
+ go: "Go",
9
+ html: "HTML",
10
+ javascript: "JavaScript",
11
+ js: "JavaScript",
12
+ json: "JSON",
13
+ jsx: "JSX",
14
+ markdown: "Markdown",
15
+ python: "Python",
16
+ shell: "Shell",
17
+ sql: "SQL",
18
+ ts: "TypeScript",
19
+ tsx: "TSX",
20
+ typescript: "TypeScript",
21
+ yaml: "YAML"
22
+ };
23
+ function isEnabled(value, defaultValue = true) {
24
+ return value === void 0 ? defaultValue : value !== false;
25
+ }
26
+ function optionObject(value) {
27
+ return typeof value === "object" && value !== null ? value : void 0;
28
+ }
29
+ function diffModeOptions(diffMode) {
30
+ if (!diffMode) return void 0;
31
+ if (diffMode === true) return {};
32
+ if (typeof diffMode === "string") return { viewMode: diffMode };
33
+ return diffMode;
34
+ }
35
+ function createToolbar(mdx, options) {
36
+ return () => react.createElement(MdxEditorToolbar.MdxEditorToolbar, { mdx, options });
37
+ }
38
+ function createMdxEditorPlugins(mdx, options = {}) {
39
+ var _a;
40
+ const plugins = [];
41
+ if (isEnabled(options.toolbar)) {
42
+ const toolbar = optionObject(options.toolbar);
43
+ plugins.push(
44
+ mdx.toolbarPlugin({
45
+ toolbarContents: createToolbar(mdx, options),
46
+ ...(toolbar == null ? void 0 : toolbar.className) ? { toolbarClassName: toolbar.className } : {},
47
+ ...(toolbar == null ? void 0 : toolbar.position) ? { toolbarPosition: toolbar.position } : {}
48
+ })
49
+ );
50
+ }
51
+ if (isEnabled(options.headings)) {
52
+ const headings = optionObject(options.headings);
53
+ plugins.push(mdx.headingsPlugin(headings));
54
+ }
55
+ if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());
56
+ if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());
57
+ if (isEnabled(options.links)) {
58
+ const links = optionObject(options.links);
59
+ plugins.push(
60
+ mdx.linkPlugin((links == null ? void 0 : links.disableAutoLink) !== void 0 ? { disableAutoLink: links.disableAutoLink } : void 0),
61
+ mdx.linkDialogPlugin({
62
+ ...(links == null ? void 0 : links.linkAutocompleteSuggestions) ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {},
63
+ ...(links == null ? void 0 : links.showLinkTitleField) !== void 0 ? { showLinkTitleField: links.showLinkTitleField } : {}
64
+ })
65
+ );
66
+ }
67
+ if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());
68
+ if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());
69
+ if (isEnabled(options.codeBlocks)) {
70
+ const codeBlocks = optionObject(options.codeBlocks);
71
+ plugins.push(
72
+ mdx.codeBlockPlugin({
73
+ defaultCodeBlockLanguage: (codeBlocks == null ? void 0 : codeBlocks.defaultLanguage) ?? "txt"
74
+ })
75
+ );
76
+ if (isEnabled(options.codeMirror)) {
77
+ const codeMirror = optionObject(options.codeMirror);
78
+ plugins.push(
79
+ mdx.codeMirrorPlugin({
80
+ codeBlockLanguages: (codeMirror == null ? void 0 : codeMirror.languages) ?? DEFAULT_CODE_BLOCK_LANGUAGES,
81
+ ...(codeMirror == null ? void 0 : codeMirror.autoLoadLanguageSupport) !== void 0 ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport } : {}
82
+ })
83
+ );
84
+ }
85
+ }
86
+ if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());
87
+ if (isEnabled(options.admonitions)) {
88
+ const admonitions = optionObject(options.admonitions);
89
+ plugins.push(
90
+ mdx.directivesPlugin({
91
+ directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],
92
+ escapeUnknownTextDirectives: (admonitions == null ? void 0 : admonitions.escapeUnknownTextDirectives) ?? true
93
+ })
94
+ );
95
+ }
96
+ if (isEnabled(options.images)) {
97
+ const images = optionObject(options.images);
98
+ plugins.push(
99
+ mdx.imagePlugin({
100
+ ...(images == null ? void 0 : images.imageUploadHandler) ? { imageUploadHandler: images.imageUploadHandler } : {},
101
+ ...(images == null ? void 0 : images.imageAutocompleteSuggestions) ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {},
102
+ ...(images == null ? void 0 : images.imagePreviewHandler) ? { imagePreviewHandler: images.imagePreviewHandler } : {},
103
+ ...(images == null ? void 0 : images.disableImageResize) !== void 0 ? { disableImageResize: images.disableImageResize } : {},
104
+ ...(images == null ? void 0 : images.disableImageSettingsButton) !== void 0 ? { disableImageSettingsButton: images.disableImageSettingsButton } : {},
105
+ ...(images == null ? void 0 : images.allowSetImageDimensions) !== void 0 ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}
106
+ })
107
+ );
108
+ }
109
+ if (options.diffMode) {
110
+ const diff = diffModeOptions(options.diffMode);
111
+ plugins.push(
112
+ mdx.diffSourcePlugin({
113
+ ...(diff == null ? void 0 : diff.viewMode) ? { viewMode: diff.viewMode } : {},
114
+ ...(diff == null ? void 0 : diff.diffMarkdown) !== void 0 ? { diffMarkdown: diff.diffMarkdown } : {},
115
+ ...(diff == null ? void 0 : diff.readOnlyDiff) !== void 0 ? { readOnlyDiff: diff.readOnlyDiff } : {}
116
+ })
117
+ );
118
+ }
119
+ if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());
120
+ if ((_a = options.plugins) == null ? void 0 : _a.length) plugins.push(...options.plugins);
121
+ return plugins;
122
+ }
123
+ exports.createMdxEditorPlugins = createMdxEditorPlugins;
124
+ //# sourceMappingURL=mdx-editor-field-plugins.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-editor-field-plugins.cjs","sources":["../../src/components/mdx-editor-field-plugins.tsx"],"sourcesContent":["import { createElement } from \"react\";\nimport type { MdxEditorDiffModeOptions, MdxEditorPluginOptions } from \"./mdx-editor-options\";\nimport { MdxEditorToolbar } from \"./MdxEditorToolbar\";\n\ntype MdxEditorModule = typeof import(\"@mdxeditor/editor\");\ntype RealmPlugin = ReturnType<MdxEditorModule[\"headingsPlugin\"]>;\n\nconst DEFAULT_CODE_BLOCK_LANGUAGES: Record<string, string> = {\n bash: \"Bash\",\n css: \"CSS\",\n go: \"Go\",\n html: \"HTML\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n json: \"JSON\",\n jsx: \"JSX\",\n markdown: \"Markdown\",\n python: \"Python\",\n shell: \"Shell\",\n sql: \"SQL\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n typescript: \"TypeScript\",\n yaml: \"YAML\",\n};\n\nfunction isEnabled<T extends object>(value: boolean | T | undefined, defaultValue = true): boolean {\n return value === undefined ? defaultValue : value !== false;\n}\n\nfunction optionObject<T extends object>(value: boolean | T | undefined): T | undefined {\n return typeof value === \"object\" && value !== null ? value : undefined;\n}\n\nfunction diffModeOptions(diffMode: MdxEditorPluginOptions[\"diffMode\"]): MdxEditorDiffModeOptions | undefined {\n if (!diffMode) return undefined;\n if (diffMode === true) return {};\n if (typeof diffMode === \"string\") return { viewMode: diffMode };\n return diffMode;\n}\n\nfunction createToolbar(mdx: MdxEditorModule, options: MdxEditorPluginOptions) {\n return () => createElement(MdxEditorToolbar, { mdx, options });\n}\n\nexport function createMdxEditorPlugins(\n mdx: MdxEditorModule,\n options: MdxEditorPluginOptions = {},\n): RealmPlugin[] {\n const plugins: RealmPlugin[] = [];\n if (isEnabled(options.toolbar)) {\n const toolbar = optionObject(options.toolbar);\n plugins.push(\n mdx.toolbarPlugin({\n toolbarContents: createToolbar(mdx, options),\n ...(toolbar?.className ? { toolbarClassName: toolbar.className } : {}),\n ...(toolbar?.position ? { toolbarPosition: toolbar.position } : {}),\n }),\n );\n }\n if (isEnabled(options.headings)) {\n const headings = optionObject(options.headings);\n plugins.push(mdx.headingsPlugin(headings));\n }\n if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());\n if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());\n if (isEnabled(options.links)) {\n const links = optionObject(options.links);\n plugins.push(\n mdx.linkPlugin(links?.disableAutoLink !== undefined ? { disableAutoLink: links.disableAutoLink } : undefined),\n mdx.linkDialogPlugin({\n ...(links?.linkAutocompleteSuggestions ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {}),\n ...(links?.showLinkTitleField !== undefined ? { showLinkTitleField: links.showLinkTitleField } : {}),\n }),\n );\n }\n if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());\n if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());\n if (isEnabled(options.codeBlocks)) {\n const codeBlocks = optionObject(options.codeBlocks);\n plugins.push(\n mdx.codeBlockPlugin({\n defaultCodeBlockLanguage: codeBlocks?.defaultLanguage ?? \"txt\",\n }),\n );\n if (isEnabled(options.codeMirror)) {\n const codeMirror = optionObject(options.codeMirror);\n plugins.push(\n mdx.codeMirrorPlugin({\n codeBlockLanguages: codeMirror?.languages ?? DEFAULT_CODE_BLOCK_LANGUAGES,\n ...(codeMirror?.autoLoadLanguageSupport !== undefined\n ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport }\n : {}),\n }),\n );\n }\n }\n if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());\n if (isEnabled(options.admonitions)) {\n const admonitions = optionObject(options.admonitions);\n plugins.push(\n mdx.directivesPlugin({\n directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],\n escapeUnknownTextDirectives: admonitions?.escapeUnknownTextDirectives ?? true,\n }),\n );\n }\n if (isEnabled(options.images)) {\n const images = optionObject(options.images);\n plugins.push(\n mdx.imagePlugin({\n ...(images?.imageUploadHandler ? { imageUploadHandler: images.imageUploadHandler } : {}),\n ...(images?.imageAutocompleteSuggestions ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {}),\n ...(images?.imagePreviewHandler ? { imagePreviewHandler: images.imagePreviewHandler } : {}),\n ...(images?.disableImageResize !== undefined ? { disableImageResize: images.disableImageResize } : {}),\n ...(images?.disableImageSettingsButton !== undefined\n ? { disableImageSettingsButton: images.disableImageSettingsButton }\n : {}),\n ...(images?.allowSetImageDimensions !== undefined ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}),\n }),\n );\n }\n if (options.diffMode) {\n const diff = diffModeOptions(options.diffMode);\n plugins.push(\n mdx.diffSourcePlugin({\n ...(diff?.viewMode ? { viewMode: diff.viewMode } : {}),\n ...(diff?.diffMarkdown !== undefined ? { diffMarkdown: diff.diffMarkdown } : {}),\n ...(diff?.readOnlyDiff !== undefined ? { readOnlyDiff: diff.readOnlyDiff } : {}),\n }),\n );\n }\n if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());\n if (options.plugins?.length) plugins.push(...(options.plugins as RealmPlugin[]));\n return plugins;\n}\n"],"names":["createElement","MdxEditorToolbar"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { MdxEditorPluginOptions } from './mdx-editor-options';
2
+ type MdxEditorModule = typeof import("@mdxeditor/editor");
3
+ type RealmPlugin = ReturnType<MdxEditorModule["headingsPlugin"]>;
4
+ export declare function createMdxEditorPlugins(mdx: MdxEditorModule, options?: MdxEditorPluginOptions): RealmPlugin[];
5
+ export {};
6
+ //# sourceMappingURL=mdx-editor-field-plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-editor-field-plugins.d.ts","sourceRoot":"","sources":["../../src/components/mdx-editor-field-plugins.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG7F,KAAK,eAAe,GAAG,cAAc,mBAAmB,CAAC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAwCjE,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,sBAA2B,GACnC,WAAW,EAAE,CAuFf"}
@@ -0,0 +1,124 @@
1
+ import { createElement } from "react";
2
+ import { MdxEditorToolbar } from "./MdxEditorToolbar.js";
3
+ const DEFAULT_CODE_BLOCK_LANGUAGES = {
4
+ bash: "Bash",
5
+ css: "CSS",
6
+ go: "Go",
7
+ html: "HTML",
8
+ javascript: "JavaScript",
9
+ js: "JavaScript",
10
+ json: "JSON",
11
+ jsx: "JSX",
12
+ markdown: "Markdown",
13
+ python: "Python",
14
+ shell: "Shell",
15
+ sql: "SQL",
16
+ ts: "TypeScript",
17
+ tsx: "TSX",
18
+ typescript: "TypeScript",
19
+ yaml: "YAML"
20
+ };
21
+ function isEnabled(value, defaultValue = true) {
22
+ return value === void 0 ? defaultValue : value !== false;
23
+ }
24
+ function optionObject(value) {
25
+ return typeof value === "object" && value !== null ? value : void 0;
26
+ }
27
+ function diffModeOptions(diffMode) {
28
+ if (!diffMode) return void 0;
29
+ if (diffMode === true) return {};
30
+ if (typeof diffMode === "string") return { viewMode: diffMode };
31
+ return diffMode;
32
+ }
33
+ function createToolbar(mdx, options) {
34
+ return () => createElement(MdxEditorToolbar, { mdx, options });
35
+ }
36
+ function createMdxEditorPlugins(mdx, options = {}) {
37
+ var _a;
38
+ const plugins = [];
39
+ if (isEnabled(options.toolbar)) {
40
+ const toolbar = optionObject(options.toolbar);
41
+ plugins.push(
42
+ mdx.toolbarPlugin({
43
+ toolbarContents: createToolbar(mdx, options),
44
+ ...(toolbar == null ? void 0 : toolbar.className) ? { toolbarClassName: toolbar.className } : {},
45
+ ...(toolbar == null ? void 0 : toolbar.position) ? { toolbarPosition: toolbar.position } : {}
46
+ })
47
+ );
48
+ }
49
+ if (isEnabled(options.headings)) {
50
+ const headings = optionObject(options.headings);
51
+ plugins.push(mdx.headingsPlugin(headings));
52
+ }
53
+ if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());
54
+ if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());
55
+ if (isEnabled(options.links)) {
56
+ const links = optionObject(options.links);
57
+ plugins.push(
58
+ mdx.linkPlugin((links == null ? void 0 : links.disableAutoLink) !== void 0 ? { disableAutoLink: links.disableAutoLink } : void 0),
59
+ mdx.linkDialogPlugin({
60
+ ...(links == null ? void 0 : links.linkAutocompleteSuggestions) ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {},
61
+ ...(links == null ? void 0 : links.showLinkTitleField) !== void 0 ? { showLinkTitleField: links.showLinkTitleField } : {}
62
+ })
63
+ );
64
+ }
65
+ if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());
66
+ if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());
67
+ if (isEnabled(options.codeBlocks)) {
68
+ const codeBlocks = optionObject(options.codeBlocks);
69
+ plugins.push(
70
+ mdx.codeBlockPlugin({
71
+ defaultCodeBlockLanguage: (codeBlocks == null ? void 0 : codeBlocks.defaultLanguage) ?? "txt"
72
+ })
73
+ );
74
+ if (isEnabled(options.codeMirror)) {
75
+ const codeMirror = optionObject(options.codeMirror);
76
+ plugins.push(
77
+ mdx.codeMirrorPlugin({
78
+ codeBlockLanguages: (codeMirror == null ? void 0 : codeMirror.languages) ?? DEFAULT_CODE_BLOCK_LANGUAGES,
79
+ ...(codeMirror == null ? void 0 : codeMirror.autoLoadLanguageSupport) !== void 0 ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport } : {}
80
+ })
81
+ );
82
+ }
83
+ }
84
+ if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());
85
+ if (isEnabled(options.admonitions)) {
86
+ const admonitions = optionObject(options.admonitions);
87
+ plugins.push(
88
+ mdx.directivesPlugin({
89
+ directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],
90
+ escapeUnknownTextDirectives: (admonitions == null ? void 0 : admonitions.escapeUnknownTextDirectives) ?? true
91
+ })
92
+ );
93
+ }
94
+ if (isEnabled(options.images)) {
95
+ const images = optionObject(options.images);
96
+ plugins.push(
97
+ mdx.imagePlugin({
98
+ ...(images == null ? void 0 : images.imageUploadHandler) ? { imageUploadHandler: images.imageUploadHandler } : {},
99
+ ...(images == null ? void 0 : images.imageAutocompleteSuggestions) ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {},
100
+ ...(images == null ? void 0 : images.imagePreviewHandler) ? { imagePreviewHandler: images.imagePreviewHandler } : {},
101
+ ...(images == null ? void 0 : images.disableImageResize) !== void 0 ? { disableImageResize: images.disableImageResize } : {},
102
+ ...(images == null ? void 0 : images.disableImageSettingsButton) !== void 0 ? { disableImageSettingsButton: images.disableImageSettingsButton } : {},
103
+ ...(images == null ? void 0 : images.allowSetImageDimensions) !== void 0 ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}
104
+ })
105
+ );
106
+ }
107
+ if (options.diffMode) {
108
+ const diff = diffModeOptions(options.diffMode);
109
+ plugins.push(
110
+ mdx.diffSourcePlugin({
111
+ ...(diff == null ? void 0 : diff.viewMode) ? { viewMode: diff.viewMode } : {},
112
+ ...(diff == null ? void 0 : diff.diffMarkdown) !== void 0 ? { diffMarkdown: diff.diffMarkdown } : {},
113
+ ...(diff == null ? void 0 : diff.readOnlyDiff) !== void 0 ? { readOnlyDiff: diff.readOnlyDiff } : {}
114
+ })
115
+ );
116
+ }
117
+ if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());
118
+ if ((_a = options.plugins) == null ? void 0 : _a.length) plugins.push(...options.plugins);
119
+ return plugins;
120
+ }
121
+ export {
122
+ createMdxEditorPlugins
123
+ };
124
+ //# sourceMappingURL=mdx-editor-field-plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-editor-field-plugins.js","sources":["../../src/components/mdx-editor-field-plugins.tsx"],"sourcesContent":["import { createElement } from \"react\";\nimport type { MdxEditorDiffModeOptions, MdxEditorPluginOptions } from \"./mdx-editor-options\";\nimport { MdxEditorToolbar } from \"./MdxEditorToolbar\";\n\ntype MdxEditorModule = typeof import(\"@mdxeditor/editor\");\ntype RealmPlugin = ReturnType<MdxEditorModule[\"headingsPlugin\"]>;\n\nconst DEFAULT_CODE_BLOCK_LANGUAGES: Record<string, string> = {\n bash: \"Bash\",\n css: \"CSS\",\n go: \"Go\",\n html: \"HTML\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n json: \"JSON\",\n jsx: \"JSX\",\n markdown: \"Markdown\",\n python: \"Python\",\n shell: \"Shell\",\n sql: \"SQL\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n typescript: \"TypeScript\",\n yaml: \"YAML\",\n};\n\nfunction isEnabled<T extends object>(value: boolean | T | undefined, defaultValue = true): boolean {\n return value === undefined ? defaultValue : value !== false;\n}\n\nfunction optionObject<T extends object>(value: boolean | T | undefined): T | undefined {\n return typeof value === \"object\" && value !== null ? value : undefined;\n}\n\nfunction diffModeOptions(diffMode: MdxEditorPluginOptions[\"diffMode\"]): MdxEditorDiffModeOptions | undefined {\n if (!diffMode) return undefined;\n if (diffMode === true) return {};\n if (typeof diffMode === \"string\") return { viewMode: diffMode };\n return diffMode;\n}\n\nfunction createToolbar(mdx: MdxEditorModule, options: MdxEditorPluginOptions) {\n return () => createElement(MdxEditorToolbar, { mdx, options });\n}\n\nexport function createMdxEditorPlugins(\n mdx: MdxEditorModule,\n options: MdxEditorPluginOptions = {},\n): RealmPlugin[] {\n const plugins: RealmPlugin[] = [];\n if (isEnabled(options.toolbar)) {\n const toolbar = optionObject(options.toolbar);\n plugins.push(\n mdx.toolbarPlugin({\n toolbarContents: createToolbar(mdx, options),\n ...(toolbar?.className ? { toolbarClassName: toolbar.className } : {}),\n ...(toolbar?.position ? { toolbarPosition: toolbar.position } : {}),\n }),\n );\n }\n if (isEnabled(options.headings)) {\n const headings = optionObject(options.headings);\n plugins.push(mdx.headingsPlugin(headings));\n }\n if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());\n if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());\n if (isEnabled(options.links)) {\n const links = optionObject(options.links);\n plugins.push(\n mdx.linkPlugin(links?.disableAutoLink !== undefined ? { disableAutoLink: links.disableAutoLink } : undefined),\n mdx.linkDialogPlugin({\n ...(links?.linkAutocompleteSuggestions ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {}),\n ...(links?.showLinkTitleField !== undefined ? { showLinkTitleField: links.showLinkTitleField } : {}),\n }),\n );\n }\n if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());\n if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());\n if (isEnabled(options.codeBlocks)) {\n const codeBlocks = optionObject(options.codeBlocks);\n plugins.push(\n mdx.codeBlockPlugin({\n defaultCodeBlockLanguage: codeBlocks?.defaultLanguage ?? \"txt\",\n }),\n );\n if (isEnabled(options.codeMirror)) {\n const codeMirror = optionObject(options.codeMirror);\n plugins.push(\n mdx.codeMirrorPlugin({\n codeBlockLanguages: codeMirror?.languages ?? DEFAULT_CODE_BLOCK_LANGUAGES,\n ...(codeMirror?.autoLoadLanguageSupport !== undefined\n ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport }\n : {}),\n }),\n );\n }\n }\n if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());\n if (isEnabled(options.admonitions)) {\n const admonitions = optionObject(options.admonitions);\n plugins.push(\n mdx.directivesPlugin({\n directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],\n escapeUnknownTextDirectives: admonitions?.escapeUnknownTextDirectives ?? true,\n }),\n );\n }\n if (isEnabled(options.images)) {\n const images = optionObject(options.images);\n plugins.push(\n mdx.imagePlugin({\n ...(images?.imageUploadHandler ? { imageUploadHandler: images.imageUploadHandler } : {}),\n ...(images?.imageAutocompleteSuggestions ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {}),\n ...(images?.imagePreviewHandler ? { imagePreviewHandler: images.imagePreviewHandler } : {}),\n ...(images?.disableImageResize !== undefined ? { disableImageResize: images.disableImageResize } : {}),\n ...(images?.disableImageSettingsButton !== undefined\n ? { disableImageSettingsButton: images.disableImageSettingsButton }\n : {}),\n ...(images?.allowSetImageDimensions !== undefined ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}),\n }),\n );\n }\n if (options.diffMode) {\n const diff = diffModeOptions(options.diffMode);\n plugins.push(\n mdx.diffSourcePlugin({\n ...(diff?.viewMode ? { viewMode: diff.viewMode } : {}),\n ...(diff?.diffMarkdown !== undefined ? { diffMarkdown: diff.diffMarkdown } : {}),\n ...(diff?.readOnlyDiff !== undefined ? { readOnlyDiff: diff.readOnlyDiff } : {}),\n }),\n );\n }\n if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());\n if (options.plugins?.length) plugins.push(...(options.plugins as RealmPlugin[]));\n return plugins;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { ReactNode } from 'react';
2
+ import { FormSize } from './json-schema-form-size';
3
+ export type MdxEditorHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
4
+ export type MdxEditorViewMode = "rich-text" | "source" | "diff";
5
+ export type MdxEditorPlugin = unknown;
6
+ export interface MdxEditorCodeBlockLanguage {
7
+ name: string;
8
+ [key: string]: unknown;
9
+ }
10
+ export type MdxEditorImageUploadHandler = (image: File) => Promise<string>;
11
+ export type MdxEditorImagePreviewHandler = (imageSource: string) => Promise<string>;
12
+ export interface MdxEditorToolbarOptions {
13
+ className?: string;
14
+ position?: "top" | "bottom";
15
+ }
16
+ export interface MdxEditorCodeBlockOptions {
17
+ defaultLanguage?: string;
18
+ }
19
+ export interface MdxEditorCodeMirrorOptions {
20
+ languages?: Record<string, string> | MdxEditorCodeBlockLanguage[];
21
+ autoLoadLanguageSupport?: boolean;
22
+ }
23
+ export interface MdxEditorLinkOptions {
24
+ disableAutoLink?: boolean;
25
+ linkAutocompleteSuggestions?: string[];
26
+ showLinkTitleField?: boolean;
27
+ }
28
+ export interface MdxEditorImageOptions {
29
+ imageUploadHandler?: MdxEditorImageUploadHandler;
30
+ imageAutocompleteSuggestions?: string[];
31
+ imagePreviewHandler?: MdxEditorImagePreviewHandler;
32
+ disableImageResize?: boolean;
33
+ disableImageSettingsButton?: boolean;
34
+ allowSetImageDimensions?: boolean;
35
+ }
36
+ export interface MdxEditorDiffModeOptions {
37
+ viewMode?: MdxEditorViewMode;
38
+ diffMarkdown?: string;
39
+ readOnlyDiff?: boolean;
40
+ }
41
+ export interface MdxEditorAdmonitionOptions {
42
+ escapeUnknownTextDirectives?: boolean;
43
+ }
44
+ export interface MdxEditorPluginOptions {
45
+ toolbar?: boolean | MdxEditorToolbarOptions;
46
+ headings?: boolean | {
47
+ allowedHeadingLevels?: readonly MdxEditorHeadingLevel[];
48
+ };
49
+ lists?: boolean;
50
+ quote?: boolean;
51
+ links?: boolean | MdxEditorLinkOptions;
52
+ tables?: boolean;
53
+ thematicBreak?: boolean;
54
+ codeBlocks?: boolean | MdxEditorCodeBlockOptions;
55
+ codeMirror?: boolean | MdxEditorCodeMirrorOptions;
56
+ frontmatter?: boolean;
57
+ admonitions?: boolean | MdxEditorAdmonitionOptions;
58
+ images?: boolean | MdxEditorImageOptions;
59
+ markdownShortcuts?: boolean;
60
+ diffMode?: boolean | MdxEditorViewMode | MdxEditorDiffModeOptions;
61
+ plugins?: MdxEditorPlugin[];
62
+ }
63
+ export interface MdxEditorFieldProps extends MdxEditorPluginOptions {
64
+ id?: string;
65
+ value?: string;
66
+ onChange?: (markdown: string) => void;
67
+ readOnly?: boolean;
68
+ disabled?: boolean;
69
+ size?: FormSize;
70
+ placeholder?: ReactNode;
71
+ className?: string;
72
+ contentClassName?: string;
73
+ textareaClassName?: string;
74
+ "aria-label"?: string;
75
+ commitInitialMarkdownNormalize?: boolean;
76
+ }
77
+ //# sourceMappingURL=mdx-editor-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-editor-options.d.ts","sourceRoot":"","sources":["../../src/components/mdx-editor-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ function useListMenuSelection(options) {
5
+ const { keys, selectedKeys: controlled, defaultSelectedKeys, onSelectionChange } = options;
6
+ const isControlled = controlled !== void 0;
7
+ const [localSet, setLocalSet] = react.useState(
8
+ () => new Set(defaultSelectedKeys ?? [])
9
+ );
10
+ const anchorRef = react.useRef(null);
11
+ const selected = react.useMemo(
12
+ () => isControlled ? new Set(controlled) : localSet,
13
+ [isControlled, controlled, localSet]
14
+ );
15
+ const commit = react.useCallback(
16
+ (next) => {
17
+ if (!isControlled) setLocalSet(next);
18
+ onSelectionChange == null ? void 0 : onSelectionChange(keys.filter((key) => next.has(key)));
19
+ },
20
+ [isControlled, onSelectionChange, keys]
21
+ );
22
+ const toggle = react.useCallback(
23
+ (key, modifiers) => {
24
+ const next = new Set(selected);
25
+ const anchor = anchorRef.current;
26
+ if ((modifiers == null ? void 0 : modifiers.shiftKey) && anchor !== null) {
27
+ const from = keys.indexOf(anchor);
28
+ const to = keys.indexOf(key);
29
+ if (from !== -1 && to !== -1) {
30
+ const [lo, hi] = from <= to ? [from, to] : [to, from];
31
+ for (let i = lo; i <= hi; i += 1) next.add(keys[i]);
32
+ commit(next);
33
+ return;
34
+ }
35
+ }
36
+ if (next.has(key)) next.delete(key);
37
+ else next.add(key);
38
+ anchorRef.current = key;
39
+ commit(next);
40
+ },
41
+ [selected, keys, commit]
42
+ );
43
+ const set = react.useCallback(
44
+ (next) => {
45
+ anchorRef.current = null;
46
+ commit(new Set(next));
47
+ },
48
+ [commit]
49
+ );
50
+ const selectAll = react.useCallback(() => commit(new Set(keys)), [commit, keys]);
51
+ const clear = react.useCallback(() => {
52
+ anchorRef.current = null;
53
+ commit(/* @__PURE__ */ new Set());
54
+ }, [commit]);
55
+ const selectedKeys = react.useMemo(() => keys.filter((key) => selected.has(key)), [keys, selected]);
56
+ const allSelected = keys.length > 0 && keys.every((key) => selected.has(key));
57
+ return {
58
+ selectedKeys,
59
+ selected,
60
+ isSelected: (key) => selected.has(key),
61
+ toggle,
62
+ set,
63
+ selectAll,
64
+ clear,
65
+ allSelected,
66
+ someSelected: selectedKeys.length > 0 && !allSelected,
67
+ count: selectedKeys.length
68
+ };
69
+ }
70
+ const ListMenuSelectionContext = react.createContext(null);
71
+ function useListMenuSelectionContext() {
72
+ return react.useContext(ListMenuSelectionContext);
73
+ }
74
+ exports.ListMenuSelectionContext = ListMenuSelectionContext;
75
+ exports.useListMenuSelection = useListMenuSelection;
76
+ exports.useListMenuSelectionContext = useListMenuSelectionContext;
77
+ //# sourceMappingURL=use-list-menu-selection.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-list-menu-selection.cjs","sources":["../../src/components/use-list-menu-selection.ts"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\n\nexport interface ListMenuSelection {\n /** Selected keys in the order they appear in `keys`. */\n selectedKeys: string[];\n /** Membership set for O(1) lookups. */\n selected: Set<string>;\n isSelected: (key: string) => boolean;\n /** Toggle a key; pass `{ shiftKey: true }` to extend the range from the anchor. */\n toggle: (key: string, modifiers?: { shiftKey?: boolean }) => void;\n /** Replace the entire selection with the given keys. */\n set: (keys: string[]) => void;\n selectAll: () => void;\n clear: () => void;\n /** True when every key in `keys` is selected (and there is at least one). */\n allSelected: boolean;\n /** True when some — but not all — keys are selected. */\n someSelected: boolean;\n /** Number of selected keys. */\n count: number;\n}\n\nexport interface UseListMenuSelectionOptions {\n /** Ordered selectable keys; required for Shift+Click ranges and select-all. */\n keys: string[];\n /** Controlled selection — when set, the hook does not own selection state. */\n selectedKeys?: string[];\n /** Initial selection when uncontrolled. */\n defaultSelectedKeys?: string[];\n /** Fires with the next selection (ordered by `keys`) on every change. */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nexport function useListMenuSelection(\n options: UseListMenuSelectionOptions,\n): ListMenuSelection {\n const { keys, selectedKeys: controlled, defaultSelectedKeys, onSelectionChange } = options;\n const isControlled = controlled !== undefined;\n const [localSet, setLocalSet] = useState<Set<string>>(\n () => new Set(defaultSelectedKeys ?? []),\n );\n const anchorRef = useRef<string | null>(null);\n\n const selected = useMemo(\n () => (isControlled ? new Set(controlled) : localSet),\n [isControlled, controlled, localSet],\n );\n\n const commit = useCallback(\n (next: Set<string>) => {\n if (!isControlled) setLocalSet(next);\n onSelectionChange?.(keys.filter((key) => next.has(key)));\n },\n [isControlled, onSelectionChange, keys],\n );\n\n const toggle = useCallback(\n (key: string, modifiers?: { shiftKey?: boolean }) => {\n const next = new Set(selected);\n const anchor = anchorRef.current;\n if (modifiers?.shiftKey && anchor !== null) {\n const from = keys.indexOf(anchor);\n const to = keys.indexOf(key);\n if (from !== -1 && to !== -1) {\n const [lo, hi] = from <= to ? [from, to] : [to, from];\n for (let i = lo; i <= hi; i += 1) next.add(keys[i]!);\n commit(next);\n return;\n }\n }\n if (next.has(key)) next.delete(key);\n else next.add(key);\n anchorRef.current = key;\n commit(next);\n },\n [selected, keys, commit],\n );\n\n const set = useCallback(\n (next: string[]) => {\n anchorRef.current = null;\n commit(new Set(next));\n },\n [commit],\n );\n\n const selectAll = useCallback(() => commit(new Set(keys)), [commit, keys]);\n\n const clear = useCallback(() => {\n anchorRef.current = null;\n commit(new Set());\n }, [commit]);\n\n const selectedKeys = useMemo(() => keys.filter((key) => selected.has(key)), [keys, selected]);\n const allSelected = keys.length > 0 && keys.every((key) => selected.has(key));\n\n return {\n selectedKeys,\n selected,\n isSelected: (key) => selected.has(key),\n toggle,\n set,\n selectAll,\n clear,\n allSelected,\n someSelected: selectedKeys.length > 0 && !allSelected,\n count: selectedKeys.length,\n };\n}\n\nexport interface ListMenuSelectionContextValue {\n selection: ListMenuSelection;\n /** Whether selectable rows render a leading checkbox. */\n showCheckboxes: boolean;\n}\n\nexport const ListMenuSelectionContext = createContext<ListMenuSelectionContextValue | null>(null);\n\nexport function useListMenuSelectionContext(): ListMenuSelectionContextValue | null {\n return useContext(ListMenuSelectionContext);\n}\n"],"names":["useState","useRef","useMemo","useCallback","createContext","useContext"],"mappings":";;;AAiCO,SAAS,qBACd,SACmB;AACnB,QAAM,EAAE,MAAM,cAAc,YAAY,qBAAqB,sBAAsB;AACnF,QAAM,eAAe,eAAe;AACpC,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA;AAAAA,IAC9B,MAAM,IAAI,IAAI,uBAAuB,CAAA,CAAE;AAAA,EAAA;AAEzC,QAAM,YAAYC,MAAAA,OAAsB,IAAI;AAE5C,QAAM,WAAWC,MAAAA;AAAAA,IACf,MAAO,eAAe,IAAI,IAAI,UAAU,IAAI;AAAA,IAC5C,CAAC,cAAc,YAAY,QAAQ;AAAA,EAAA;AAGrC,QAAM,SAASC,MAAAA;AAAAA,IACb,CAAC,SAAsB;AACrB,UAAI,CAAC,aAAc,aAAY,IAAI;AACnC,6DAAoB,KAAK,OAAO,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC;AAAA,IACxD;AAAA,IACA,CAAC,cAAc,mBAAmB,IAAI;AAAA,EAAA;AAGxC,QAAM,SAASA,MAAAA;AAAAA,IACb,CAAC,KAAa,cAAuC;AACnD,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,YAAM,SAAS,UAAU;AACzB,WAAI,uCAAW,aAAY,WAAW,MAAM;AAC1C,cAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,cAAM,KAAK,KAAK,QAAQ,GAAG;AAC3B,YAAI,SAAS,MAAM,OAAO,IAAI;AAC5B,gBAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI;AACpD,mBAAS,IAAI,IAAI,KAAK,IAAI,KAAK,EAAG,MAAK,IAAI,KAAK,CAAC,CAAE;AACnD,iBAAO,IAAI;AACX;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAK,IAAI,GAAG,EAAG,MAAK,OAAO,GAAG;AAAA,UAC7B,MAAK,IAAI,GAAG;AACjB,gBAAU,UAAU;AACpB,aAAO,IAAI;AAAA,IACb;AAAA,IACA,CAAC,UAAU,MAAM,MAAM;AAAA,EAAA;AAGzB,QAAM,MAAMA,MAAAA;AAAAA,IACV,CAAC,SAAmB;AAClB,gBAAU,UAAU;AACpB,aAAO,IAAI,IAAI,IAAI,CAAC;AAAA,IACtB;AAAA,IACA,CAAC,MAAM;AAAA,EAAA;AAGT,QAAM,YAAYA,MAAAA,YAAY,MAAM,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC;AAEzE,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,cAAU,UAAU;AACpB,WAAO,oBAAI,KAAK;AAAA,EAClB,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAeD,MAAAA,QAAQ,MAAM,KAAK,OAAO,CAAC,QAAQ,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC;AAC5F,QAAM,cAAc,KAAK,SAAS,KAAK,KAAK,MAAM,CAAC,QAAQ,SAAS,IAAI,GAAG,CAAC;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,CAAC,QAAQ,SAAS,IAAI,GAAG;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,aAAa,SAAS,KAAK,CAAC;AAAA,IAC1C,OAAO,aAAa;AAAA,EAAA;AAExB;AAQO,MAAM,2BAA2BE,MAAAA,cAAoD,IAAI;AAEzF,SAAS,8BAAoE;AAClF,SAAOC,MAAAA,WAAW,wBAAwB;AAC5C;;;;"}
@@ -0,0 +1,40 @@
1
+ export interface ListMenuSelection {
2
+ /** Selected keys in the order they appear in `keys`. */
3
+ selectedKeys: string[];
4
+ /** Membership set for O(1) lookups. */
5
+ selected: Set<string>;
6
+ isSelected: (key: string) => boolean;
7
+ /** Toggle a key; pass `{ shiftKey: true }` to extend the range from the anchor. */
8
+ toggle: (key: string, modifiers?: {
9
+ shiftKey?: boolean;
10
+ }) => void;
11
+ /** Replace the entire selection with the given keys. */
12
+ set: (keys: string[]) => void;
13
+ selectAll: () => void;
14
+ clear: () => void;
15
+ /** True when every key in `keys` is selected (and there is at least one). */
16
+ allSelected: boolean;
17
+ /** True when some — but not all — keys are selected. */
18
+ someSelected: boolean;
19
+ /** Number of selected keys. */
20
+ count: number;
21
+ }
22
+ export interface UseListMenuSelectionOptions {
23
+ /** Ordered selectable keys; required for Shift+Click ranges and select-all. */
24
+ keys: string[];
25
+ /** Controlled selection — when set, the hook does not own selection state. */
26
+ selectedKeys?: string[];
27
+ /** Initial selection when uncontrolled. */
28
+ defaultSelectedKeys?: string[];
29
+ /** Fires with the next selection (ordered by `keys`) on every change. */
30
+ onSelectionChange?: (keys: string[]) => void;
31
+ }
32
+ export declare function useListMenuSelection(options: UseListMenuSelectionOptions): ListMenuSelection;
33
+ export interface ListMenuSelectionContextValue {
34
+ selection: ListMenuSelection;
35
+ /** Whether selectable rows render a leading checkbox. */
36
+ showCheckboxes: boolean;
37
+ }
38
+ export declare const ListMenuSelectionContext: import('react').Context<ListMenuSelectionContextValue | null>;
39
+ export declare function useListMenuSelectionContext(): ListMenuSelectionContextValue | null;
40
+ //# sourceMappingURL=use-list-menu-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-list-menu-selection.d.ts","sourceRoot":"","sources":["../../src/components/use-list-menu-selection.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uCAAuC;IACvC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,mFAAmF;IACnF,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAClE,wDAAwD;IACxD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,6EAA6E;IAC7E,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,+EAA+E;IAC/E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,iBAAiB,CAyEnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,wBAAwB,+DAA4D,CAAC;AAElG,wBAAgB,2BAA2B,IAAI,6BAA6B,GAAG,IAAI,CAElF"}
@@ -0,0 +1,77 @@
1
+ import { useState, useRef, useMemo, useCallback, createContext, useContext } from "react";
2
+ function useListMenuSelection(options) {
3
+ const { keys, selectedKeys: controlled, defaultSelectedKeys, onSelectionChange } = options;
4
+ const isControlled = controlled !== void 0;
5
+ const [localSet, setLocalSet] = useState(
6
+ () => new Set(defaultSelectedKeys ?? [])
7
+ );
8
+ const anchorRef = useRef(null);
9
+ const selected = useMemo(
10
+ () => isControlled ? new Set(controlled) : localSet,
11
+ [isControlled, controlled, localSet]
12
+ );
13
+ const commit = useCallback(
14
+ (next) => {
15
+ if (!isControlled) setLocalSet(next);
16
+ onSelectionChange == null ? void 0 : onSelectionChange(keys.filter((key) => next.has(key)));
17
+ },
18
+ [isControlled, onSelectionChange, keys]
19
+ );
20
+ const toggle = useCallback(
21
+ (key, modifiers) => {
22
+ const next = new Set(selected);
23
+ const anchor = anchorRef.current;
24
+ if ((modifiers == null ? void 0 : modifiers.shiftKey) && anchor !== null) {
25
+ const from = keys.indexOf(anchor);
26
+ const to = keys.indexOf(key);
27
+ if (from !== -1 && to !== -1) {
28
+ const [lo, hi] = from <= to ? [from, to] : [to, from];
29
+ for (let i = lo; i <= hi; i += 1) next.add(keys[i]);
30
+ commit(next);
31
+ return;
32
+ }
33
+ }
34
+ if (next.has(key)) next.delete(key);
35
+ else next.add(key);
36
+ anchorRef.current = key;
37
+ commit(next);
38
+ },
39
+ [selected, keys, commit]
40
+ );
41
+ const set = useCallback(
42
+ (next) => {
43
+ anchorRef.current = null;
44
+ commit(new Set(next));
45
+ },
46
+ [commit]
47
+ );
48
+ const selectAll = useCallback(() => commit(new Set(keys)), [commit, keys]);
49
+ const clear = useCallback(() => {
50
+ anchorRef.current = null;
51
+ commit(/* @__PURE__ */ new Set());
52
+ }, [commit]);
53
+ const selectedKeys = useMemo(() => keys.filter((key) => selected.has(key)), [keys, selected]);
54
+ const allSelected = keys.length > 0 && keys.every((key) => selected.has(key));
55
+ return {
56
+ selectedKeys,
57
+ selected,
58
+ isSelected: (key) => selected.has(key),
59
+ toggle,
60
+ set,
61
+ selectAll,
62
+ clear,
63
+ allSelected,
64
+ someSelected: selectedKeys.length > 0 && !allSelected,
65
+ count: selectedKeys.length
66
+ };
67
+ }
68
+ const ListMenuSelectionContext = createContext(null);
69
+ function useListMenuSelectionContext() {
70
+ return useContext(ListMenuSelectionContext);
71
+ }
72
+ export {
73
+ ListMenuSelectionContext,
74
+ useListMenuSelection,
75
+ useListMenuSelectionContext
76
+ };
77
+ //# sourceMappingURL=use-list-menu-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-list-menu-selection.js","sources":["../../src/components/use-list-menu-selection.ts"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\n\nexport interface ListMenuSelection {\n /** Selected keys in the order they appear in `keys`. */\n selectedKeys: string[];\n /** Membership set for O(1) lookups. */\n selected: Set<string>;\n isSelected: (key: string) => boolean;\n /** Toggle a key; pass `{ shiftKey: true }` to extend the range from the anchor. */\n toggle: (key: string, modifiers?: { shiftKey?: boolean }) => void;\n /** Replace the entire selection with the given keys. */\n set: (keys: string[]) => void;\n selectAll: () => void;\n clear: () => void;\n /** True when every key in `keys` is selected (and there is at least one). */\n allSelected: boolean;\n /** True when some — but not all — keys are selected. */\n someSelected: boolean;\n /** Number of selected keys. */\n count: number;\n}\n\nexport interface UseListMenuSelectionOptions {\n /** Ordered selectable keys; required for Shift+Click ranges and select-all. */\n keys: string[];\n /** Controlled selection — when set, the hook does not own selection state. */\n selectedKeys?: string[];\n /** Initial selection when uncontrolled. */\n defaultSelectedKeys?: string[];\n /** Fires with the next selection (ordered by `keys`) on every change. */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nexport function useListMenuSelection(\n options: UseListMenuSelectionOptions,\n): ListMenuSelection {\n const { keys, selectedKeys: controlled, defaultSelectedKeys, onSelectionChange } = options;\n const isControlled = controlled !== undefined;\n const [localSet, setLocalSet] = useState<Set<string>>(\n () => new Set(defaultSelectedKeys ?? []),\n );\n const anchorRef = useRef<string | null>(null);\n\n const selected = useMemo(\n () => (isControlled ? new Set(controlled) : localSet),\n [isControlled, controlled, localSet],\n );\n\n const commit = useCallback(\n (next: Set<string>) => {\n if (!isControlled) setLocalSet(next);\n onSelectionChange?.(keys.filter((key) => next.has(key)));\n },\n [isControlled, onSelectionChange, keys],\n );\n\n const toggle = useCallback(\n (key: string, modifiers?: { shiftKey?: boolean }) => {\n const next = new Set(selected);\n const anchor = anchorRef.current;\n if (modifiers?.shiftKey && anchor !== null) {\n const from = keys.indexOf(anchor);\n const to = keys.indexOf(key);\n if (from !== -1 && to !== -1) {\n const [lo, hi] = from <= to ? [from, to] : [to, from];\n for (let i = lo; i <= hi; i += 1) next.add(keys[i]!);\n commit(next);\n return;\n }\n }\n if (next.has(key)) next.delete(key);\n else next.add(key);\n anchorRef.current = key;\n commit(next);\n },\n [selected, keys, commit],\n );\n\n const set = useCallback(\n (next: string[]) => {\n anchorRef.current = null;\n commit(new Set(next));\n },\n [commit],\n );\n\n const selectAll = useCallback(() => commit(new Set(keys)), [commit, keys]);\n\n const clear = useCallback(() => {\n anchorRef.current = null;\n commit(new Set());\n }, [commit]);\n\n const selectedKeys = useMemo(() => keys.filter((key) => selected.has(key)), [keys, selected]);\n const allSelected = keys.length > 0 && keys.every((key) => selected.has(key));\n\n return {\n selectedKeys,\n selected,\n isSelected: (key) => selected.has(key),\n toggle,\n set,\n selectAll,\n clear,\n allSelected,\n someSelected: selectedKeys.length > 0 && !allSelected,\n count: selectedKeys.length,\n };\n}\n\nexport interface ListMenuSelectionContextValue {\n selection: ListMenuSelection;\n /** Whether selectable rows render a leading checkbox. */\n showCheckboxes: boolean;\n}\n\nexport const ListMenuSelectionContext = createContext<ListMenuSelectionContextValue | null>(null);\n\nexport function useListMenuSelectionContext(): ListMenuSelectionContextValue | null {\n return useContext(ListMenuSelectionContext);\n}\n"],"names":[],"mappings":";AAiCO,SAAS,qBACd,SACmB;AACnB,QAAM,EAAE,MAAM,cAAc,YAAY,qBAAqB,sBAAsB;AACnF,QAAM,eAAe,eAAe;AACpC,QAAM,CAAC,UAAU,WAAW,IAAI;AAAA,IAC9B,MAAM,IAAI,IAAI,uBAAuB,CAAA,CAAE;AAAA,EAAA;AAEzC,QAAM,YAAY,OAAsB,IAAI;AAE5C,QAAM,WAAW;AAAA,IACf,MAAO,eAAe,IAAI,IAAI,UAAU,IAAI;AAAA,IAC5C,CAAC,cAAc,YAAY,QAAQ;AAAA,EAAA;AAGrC,QAAM,SAAS;AAAA,IACb,CAAC,SAAsB;AACrB,UAAI,CAAC,aAAc,aAAY,IAAI;AACnC,6DAAoB,KAAK,OAAO,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC;AAAA,IACxD;AAAA,IACA,CAAC,cAAc,mBAAmB,IAAI;AAAA,EAAA;AAGxC,QAAM,SAAS;AAAA,IACb,CAAC,KAAa,cAAuC;AACnD,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,YAAM,SAAS,UAAU;AACzB,WAAI,uCAAW,aAAY,WAAW,MAAM;AAC1C,cAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,cAAM,KAAK,KAAK,QAAQ,GAAG;AAC3B,YAAI,SAAS,MAAM,OAAO,IAAI;AAC5B,gBAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI;AACpD,mBAAS,IAAI,IAAI,KAAK,IAAI,KAAK,EAAG,MAAK,IAAI,KAAK,CAAC,CAAE;AACnD,iBAAO,IAAI;AACX;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAK,IAAI,GAAG,EAAG,MAAK,OAAO,GAAG;AAAA,UAC7B,MAAK,IAAI,GAAG;AACjB,gBAAU,UAAU;AACpB,aAAO,IAAI;AAAA,IACb;AAAA,IACA,CAAC,UAAU,MAAM,MAAM;AAAA,EAAA;AAGzB,QAAM,MAAM;AAAA,IACV,CAAC,SAAmB;AAClB,gBAAU,UAAU;AACpB,aAAO,IAAI,IAAI,IAAI,CAAC;AAAA,IACtB;AAAA,IACA,CAAC,MAAM;AAAA,EAAA;AAGT,QAAM,YAAY,YAAY,MAAM,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC;AAEzE,QAAM,QAAQ,YAAY,MAAM;AAC9B,cAAU,UAAU;AACpB,WAAO,oBAAI,KAAK;AAAA,EAClB,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAe,QAAQ,MAAM,KAAK,OAAO,CAAC,QAAQ,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC;AAC5F,QAAM,cAAc,KAAK,SAAS,KAAK,KAAK,MAAM,CAAC,QAAQ,SAAS,IAAI,GAAG,CAAC;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,CAAC,QAAQ,SAAS,IAAI,GAAG;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,aAAa,SAAS,KAAK,CAAC;AAAA,IAC1C,OAAO,aAAa;AAAA,EAAA;AAExB;AAQO,MAAM,2BAA2B,cAAoD,IAAI;AAEzF,SAAS,8BAAoE;AAClF,SAAO,WAAW,wBAAwB;AAC5C;"}
@@ -30,7 +30,10 @@ const SecretKeySelector = require("./components/SecretKeySelector.cjs");
30
30
  const themeSwitcher = require("./components/theme-switcher.cjs");
31
31
  const densitySwitcher = require("./components/density-switcher.cjs");
32
32
  const iconMenuPicker = require("./components/icon-menu-picker.cjs");
33
+ const ListMenu = require("./components/ListMenu.cjs");
34
+ const useListMenuSelection = require("./components/use-list-menu-selection.cjs");
33
35
  const JsonSchemaForm = require("./components/JsonSchemaForm.cjs");
36
+ const FormLookupProvider = require("./components/FormLookupProvider.cjs");
34
37
  const formLookupContext = require("./components/form-lookup-context.cjs");
35
38
  const jsonSchemaFormSize = require("./components/json-schema-form-size.cjs");
36
39
  const jsonSchemaFormPreferences = require("./components/json-schema-form-preferences.cjs");
@@ -84,8 +87,14 @@ exports.SecretKeySelector = SecretKeySelector.SecretKeySelector;
84
87
  exports.ThemeSwitcher = themeSwitcher.ThemeSwitcher;
85
88
  exports.DensitySwitcher = densitySwitcher.DensitySwitcher;
86
89
  exports.IconMenuPicker = iconMenuPicker.IconMenuPicker;
90
+ exports.ListMenu = ListMenu.ListMenu;
91
+ exports.ListMenuActionBar = ListMenu.ListMenuActionBar;
92
+ exports.ListMenuHeader = ListMenu.ListMenuHeader;
93
+ exports.ListMenuItem = ListMenu.ListMenuItem;
94
+ exports.ListMenuSection = ListMenu.ListMenuSection;
95
+ exports.useListMenuSelection = useListMenuSelection.useListMenuSelection;
87
96
  exports.JsonSchemaForm = JsonSchemaForm.JsonSchemaForm;
88
- exports.FormLookupProvider = formLookupContext.FormLookupProvider;
97
+ exports.FormLookupProvider = FormLookupProvider.FormLookupProvider;
89
98
  exports.resolveLookupScope = formLookupContext.resolveLookupScope;
90
99
  exports.useLookupFetcher = formLookupContext.useLookupFetcher;
91
100
  exports.DEFAULT_FORM_SIZE = jsonSchemaFormSize.DEFAULT_FORM_SIZE;
@@ -1 +1 @@
1
- {"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}