@flanksource/clicky-ui 0.3.5 → 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 (277) hide show
  1. package/README.md +42 -0
  2. package/dist/ai.cjs +15 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +15 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/components/DateField.d.ts +1 -1
  7. package/dist/components/DatePicker.d.ts +1 -1
  8. package/dist/components/DateTimePicker.d.ts +1 -1
  9. package/dist/components/FormLookupProvider.cjs +12 -0
  10. package/dist/components/FormLookupProvider.cjs.map +1 -0
  11. package/dist/components/FormLookupProvider.d.ts +7 -0
  12. package/dist/components/FormLookupProvider.d.ts.map +1 -0
  13. package/dist/components/FormLookupProvider.js +12 -0
  14. package/dist/components/FormLookupProvider.js.map +1 -0
  15. package/dist/components/JsonSchemaForm.cjs +2 -2
  16. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  17. package/dist/components/JsonSchemaForm.js +1 -1
  18. package/dist/components/JsonSchemaForm.js.map +1 -1
  19. package/dist/components/ListMenu.cjs +145 -0
  20. package/dist/components/ListMenu.cjs.map +1 -0
  21. package/dist/components/ListMenu.d.ts +54 -0
  22. package/dist/components/ListMenu.d.ts.map +1 -0
  23. package/dist/components/ListMenu.js +145 -0
  24. package/dist/components/ListMenu.js.map +1 -0
  25. package/dist/components/MdxEditorField.cjs +128 -0
  26. package/dist/components/MdxEditorField.cjs.map +1 -0
  27. package/dist/components/MdxEditorField.d.ts +4 -0
  28. package/dist/components/MdxEditorField.d.ts.map +1 -0
  29. package/dist/components/MdxEditorField.js +106 -0
  30. package/dist/components/MdxEditorField.js.map +1 -0
  31. package/dist/components/MdxEditorToolbar.cjs +76 -0
  32. package/dist/components/MdxEditorToolbar.cjs.map +1 -0
  33. package/dist/components/MdxEditorToolbar.d.ts +8 -0
  34. package/dist/components/MdxEditorToolbar.d.ts.map +1 -0
  35. package/dist/components/MdxEditorToolbar.js +76 -0
  36. package/dist/components/MdxEditorToolbar.js.map +1 -0
  37. package/dist/components/button-variants.d.ts +1 -1
  38. package/dist/components/button.d.ts +1 -1
  39. package/dist/components/form-lookup-context.cjs +1 -8
  40. package/dist/components/form-lookup-context.cjs.map +1 -1
  41. package/dist/components/form-lookup-context.d.ts +1 -5
  42. package/dist/components/form-lookup-context.d.ts.map +1 -1
  43. package/dist/components/form-lookup-context.js +1 -8
  44. package/dist/components/form-lookup-context.js.map +1 -1
  45. package/dist/components/jotai-bindings-core.cjs +197 -0
  46. package/dist/components/jotai-bindings-core.cjs.map +1 -0
  47. package/dist/components/jotai-bindings-core.d.ts +45 -0
  48. package/dist/components/jotai-bindings-core.d.ts.map +1 -0
  49. package/dist/components/jotai-bindings-core.js +197 -0
  50. package/dist/components/jotai-bindings-core.js.map +1 -0
  51. package/dist/components/jotai-bindings.cjs +17 -0
  52. package/dist/components/jotai-bindings.cjs.map +1 -0
  53. package/dist/components/jotai-bindings.d.ts +4 -0
  54. package/dist/components/jotai-bindings.d.ts.map +1 -0
  55. package/dist/components/jotai-bindings.js +17 -0
  56. package/dist/components/jotai-bindings.js.map +1 -0
  57. package/dist/components/json-schema-form-fields.cjs +37 -0
  58. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  59. package/dist/components/json-schema-form-fields.d.ts +6 -0
  60. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  61. package/dist/components/json-schema-form-fields.js +38 -1
  62. package/dist/components/json-schema-form-fields.js.map +1 -1
  63. package/dist/components/json-schema-form-render.cjs +3 -1
  64. package/dist/components/json-schema-form-render.cjs.map +1 -1
  65. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  66. package/dist/components/json-schema-form-render.js +4 -2
  67. package/dist/components/json-schema-form-render.js.map +1 -1
  68. package/dist/components/json-schema-form-resolve.cjs +9 -0
  69. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  70. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  71. package/dist/components/json-schema-form-resolve.js +9 -0
  72. package/dist/components/json-schema-form-resolve.js.map +1 -1
  73. package/dist/components/json-schema-form-types.d.ts +4 -1
  74. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  75. package/dist/components/mdx-editor-field-plugins.cjs +124 -0
  76. package/dist/components/mdx-editor-field-plugins.cjs.map +1 -0
  77. package/dist/components/mdx-editor-field-plugins.d.ts +6 -0
  78. package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -0
  79. package/dist/components/mdx-editor-field-plugins.js +124 -0
  80. package/dist/components/mdx-editor-field-plugins.js.map +1 -0
  81. package/dist/components/mdx-editor-options.d.ts +77 -0
  82. package/dist/components/mdx-editor-options.d.ts.map +1 -0
  83. package/dist/components/use-list-menu-selection.cjs +77 -0
  84. package/dist/components/use-list-menu-selection.cjs.map +1 -0
  85. package/dist/components/use-list-menu-selection.d.ts +40 -0
  86. package/dist/components/use-list-menu-selection.d.ts.map +1 -0
  87. package/dist/components/use-list-menu-selection.js +77 -0
  88. package/dist/components/use-list-menu-selection.js.map +1 -0
  89. package/dist/components.cjs +10 -1
  90. package/dist/components.cjs.map +1 -1
  91. package/dist/components.d.ts +4 -1
  92. package/dist/components.d.ts.map +1 -1
  93. package/dist/components.js +10 -1
  94. package/dist/components.js.map +1 -1
  95. package/dist/data/MarkdownEditor.model.d.ts +1 -1
  96. package/dist/data/ProgressBars.cjs +194 -0
  97. package/dist/data/ProgressBars.cjs.map +1 -0
  98. package/dist/data/ProgressBars.d.ts +85 -0
  99. package/dist/data/ProgressBars.d.ts.map +1 -0
  100. package/dist/data/ProgressBars.js +194 -0
  101. package/dist/data/ProgressBars.js.map +1 -0
  102. package/dist/data/ProgressBars.model.cjs +27 -0
  103. package/dist/data/ProgressBars.model.cjs.map +1 -0
  104. package/dist/data/ProgressBars.model.d.ts +20 -0
  105. package/dist/data/ProgressBars.model.d.ts.map +1 -0
  106. package/dist/data/ProgressBars.model.js +27 -0
  107. package/dist/data/ProgressBars.model.js.map +1 -0
  108. package/dist/data/PromptBanner.cjs +199 -0
  109. package/dist/data/PromptBanner.cjs.map +1 -0
  110. package/dist/data/PromptBanner.d.ts +17 -0
  111. package/dist/data/PromptBanner.d.ts.map +1 -0
  112. package/dist/data/PromptBanner.js +199 -0
  113. package/dist/data/PromptBanner.js.map +1 -0
  114. package/dist/data/PromptBanner.model.cjs +132 -0
  115. package/dist/data/PromptBanner.model.cjs.map +1 -0
  116. package/dist/data/PromptBanner.model.d.ts +23 -0
  117. package/dist/data/PromptBanner.model.d.ts.map +1 -0
  118. package/dist/data/PromptBanner.model.js +132 -0
  119. package/dist/data/PromptBanner.model.js.map +1 -0
  120. package/dist/data/PromptDialog.cjs +43 -0
  121. package/dist/data/PromptDialog.cjs.map +1 -0
  122. package/dist/data/PromptDialog.d.ts +14 -0
  123. package/dist/data/PromptDialog.d.ts.map +1 -0
  124. package/dist/data/PromptDialog.js +43 -0
  125. package/dist/data/PromptDialog.js.map +1 -0
  126. package/dist/data/TaskManager.cjs +8 -1
  127. package/dist/data/TaskManager.cjs.map +1 -1
  128. package/dist/data/TaskManager.d.ts.map +1 -1
  129. package/dist/data/TaskManager.js +8 -1
  130. package/dist/data/TaskManager.js.map +1 -1
  131. package/dist/data/TaskProgress.cjs +15 -2
  132. package/dist/data/TaskProgress.cjs.map +1 -1
  133. package/dist/data/TaskProgress.d.ts +0 -10
  134. package/dist/data/TaskProgress.d.ts.map +1 -1
  135. package/dist/data/TaskProgress.js +15 -2
  136. package/dist/data/TaskProgress.js.map +1 -1
  137. package/dist/data/TimeseriesCoreBars.cjs +19 -173
  138. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  139. package/dist/data/TimeseriesCoreBars.d.ts +9 -26
  140. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  141. package/dist/data/TimeseriesCoreBars.js +20 -174
  142. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  143. package/dist/data/WorkloadCard.model.cjs.map +1 -1
  144. package/dist/data/WorkloadCard.model.d.ts +2 -2
  145. package/dist/data/WorkloadCard.model.d.ts.map +1 -1
  146. package/dist/data/WorkloadCard.model.js.map +1 -1
  147. package/dist/data/ai/ChatWindow.cjs +53 -9
  148. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  149. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  150. package/dist/data/ai/ChatWindow.js +53 -9
  151. package/dist/data/ai/ChatWindow.js.map +1 -1
  152. package/dist/data/ai/SessionViewer.cjs +275 -0
  153. package/dist/data/ai/SessionViewer.cjs.map +1 -0
  154. package/dist/data/ai/SessionViewer.d.ts +33 -0
  155. package/dist/data/ai/SessionViewer.d.ts.map +1 -0
  156. package/dist/data/ai/SessionViewer.fixtures.d.ts +4 -0
  157. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -0
  158. package/dist/data/ai/SessionViewer.js +275 -0
  159. package/dist/data/ai/SessionViewer.js.map +1 -0
  160. package/dist/data/ai/SessionViewer.model.cjs +275 -0
  161. package/dist/data/ai/SessionViewer.model.cjs.map +1 -0
  162. package/dist/data/ai/SessionViewer.model.d.ts +87 -0
  163. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -0
  164. package/dist/data/ai/SessionViewer.model.js +275 -0
  165. package/dist/data/ai/SessionViewer.model.js.map +1 -0
  166. package/dist/data/ai/SessionViewerMenu.cjs +190 -0
  167. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -0
  168. package/dist/data/ai/SessionViewerMenu.d.ts +24 -0
  169. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -0
  170. package/dist/data/ai/SessionViewerMenu.js +190 -0
  171. package/dist/data/ai/SessionViewerMenu.js.map +1 -0
  172. package/dist/data/ai/ToolPreferences.cjs +232 -39
  173. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  174. package/dist/data/ai/ToolPreferences.d.ts +4 -7
  175. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  176. package/dist/data/ai/ToolPreferences.js +234 -41
  177. package/dist/data/ai/ToolPreferences.js.map +1 -1
  178. package/dist/data/ai/index.d.ts +3 -0
  179. package/dist/data/ai/index.d.ts.map +1 -1
  180. package/dist/data/ai/session-categories.cjs +219 -0
  181. package/dist/data/ai/session-categories.cjs.map +1 -0
  182. package/dist/data/ai/session-categories.d.ts +36 -0
  183. package/dist/data/ai/session-categories.d.ts.map +1 -0
  184. package/dist/data/ai/session-categories.js +219 -0
  185. package/dist/data/ai/session-categories.js.map +1 -0
  186. package/dist/data/chat/clickyOperationsToTools.cjs +89 -3
  187. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  188. package/dist/data/chat/clickyOperationsToTools.d.ts +1 -1
  189. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  190. package/dist/data/chat/clickyOperationsToTools.js +89 -3
  191. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  192. package/dist/data/chat/types.cjs.map +1 -1
  193. package/dist/data/chat/types.d.ts +7 -1
  194. package/dist/data/chat/types.d.ts.map +1 -1
  195. package/dist/data/chat/types.js.map +1 -1
  196. package/dist/data/task-status.cjs +19 -12
  197. package/dist/data/task-status.cjs.map +1 -1
  198. package/dist/data/task-status.d.ts +2 -1
  199. package/dist/data/task-status.d.ts.map +1 -1
  200. package/dist/data/task-status.js +19 -12
  201. package/dist/data/task-status.js.map +1 -1
  202. package/dist/data/test-runner/TestRunner.fixtures.d.ts +11 -4
  203. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  204. package/dist/data/version-info.cjs +3 -3
  205. package/dist/data/version-info.cjs.map +1 -1
  206. package/dist/data/version-info.js +3 -3
  207. package/dist/data/version-info.js.map +1 -1
  208. package/dist/data.cjs +11 -2
  209. package/dist/data.cjs.map +1 -1
  210. package/dist/data.d.ts +6 -2
  211. package/dist/data.d.ts.map +1 -1
  212. package/dist/data.js +11 -2
  213. package/dist/data.js.map +1 -1
  214. package/dist/hooks/use-prompts.cjs +83 -0
  215. package/dist/hooks/use-prompts.cjs.map +1 -0
  216. package/dist/hooks/use-prompts.d.ts +43 -0
  217. package/dist/hooks/use-prompts.d.ts.map +1 -0
  218. package/dist/hooks/use-prompts.js +83 -0
  219. package/dist/hooks/use-prompts.js.map +1 -0
  220. package/dist/hooks.cjs +3 -0
  221. package/dist/hooks.cjs.map +1 -1
  222. package/dist/hooks.d.ts +1 -0
  223. package/dist/hooks.d.ts.map +1 -1
  224. package/dist/hooks.js +3 -0
  225. package/dist/hooks.js.map +1 -1
  226. package/dist/index.cjs +21 -3
  227. package/dist/index.cjs.map +1 -1
  228. package/dist/index.js +21 -3
  229. package/dist/index.js.map +1 -1
  230. package/dist/jotai.cjs +9 -0
  231. package/dist/jotai.cjs.map +1 -0
  232. package/dist/jotai.d.ts +4 -0
  233. package/dist/jotai.d.ts.map +1 -0
  234. package/dist/jotai.js +9 -0
  235. package/dist/jotai.js.map +1 -0
  236. package/dist/lib/utils.cjs +18 -1
  237. package/dist/lib/utils.cjs.map +1 -1
  238. package/dist/lib/utils.d.ts.map +1 -1
  239. package/dist/lib/utils.js +18 -1
  240. package/dist/lib/utils.js.map +1 -1
  241. package/dist/mdx-editor.cjs +5 -0
  242. package/dist/mdx-editor.cjs.map +1 -0
  243. package/dist/mdx-editor.css +2 -0
  244. package/dist/mdx-editor.d.ts +2 -0
  245. package/dist/mdx-editor.d.ts.map +1 -0
  246. package/dist/mdx-editor.js +5 -0
  247. package/dist/mdx-editor.js.map +1 -0
  248. package/dist/rpc/apiClient.cjs +1 -1
  249. package/dist/rpc/apiClient.cjs.map +1 -1
  250. package/dist/rpc/apiClient.js +1 -1
  251. package/dist/rpc/apiClient.js.map +1 -1
  252. package/dist/rpc/surfaceIconMap.cjs +12 -1
  253. package/dist/rpc/surfaceIconMap.cjs.map +1 -1
  254. package/dist/rpc/surfaceIconMap.d.ts.map +1 -1
  255. package/dist/rpc/surfaceIconMap.js +12 -1
  256. package/dist/rpc/surfaceIconMap.js.map +1 -1
  257. package/dist/rpc/types.cjs.map +1 -1
  258. package/dist/rpc/types.d.ts +1 -0
  259. package/dist/rpc/types.d.ts.map +1 -1
  260. package/dist/rpc/types.js.map +1 -1
  261. package/dist/styles.css +1 -1
  262. package/oxlint-plugins/README.md +148 -0
  263. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +88 -0
  264. package/oxlint-plugins/clicky-ui-prefer-components.js +46 -0
  265. package/oxlint-plugins/clicky-ui-prefer-icons.js +121 -0
  266. package/oxlint-plugins/clicky-ui-prefer-tailwind.js +98 -0
  267. package/oxlint-plugins/clicky-ui-prefer-theme.js +134 -0
  268. package/oxlint-plugins/clicky-ui-shared.js +132 -0
  269. package/oxlint-plugins/clicky-ui.js +34 -0
  270. package/oxlint-plugins/no-iconify-names.js +37 -0
  271. package/package.json +21 -1
  272. package/dist/data/TimeseriesCoreBars.model.cjs +0 -27
  273. package/dist/data/TimeseriesCoreBars.model.cjs.map +0 -1
  274. package/dist/data/TimeseriesCoreBars.model.d.ts +0 -20
  275. package/dist/data/TimeseriesCoreBars.model.d.ts.map +0 -1
  276. package/dist/data/TimeseriesCoreBars.model.js +0 -27
  277. package/dist/data/TimeseriesCoreBars.model.js.map +0 -1
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -28,8 +28,11 @@ export { SecretKeySelector, type SecretKeySelectorProps, type SecretKind, type S
28
28
  export { ThemeSwitcher, type ThemeSwitcherProps } from './components/theme-switcher';
29
29
  export { DensitySwitcher, type DensitySwitcherProps } from './components/density-switcher';
30
30
  export { IconMenuPicker, type IconMenuPickerProps, type IconMenuOption, } from './components/icon-menu-picker';
31
+ export { ListMenu, ListMenuActionBar, ListMenuHeader, ListMenuItem, ListMenuSection, type ListMenuAction, type ListMenuActionBarProps, type ListMenuHeaderProps, type ListMenuItemProps, type ListMenuProps, type ListMenuSectionProps, } from './components/ListMenu';
32
+ export { useListMenuSelection, type ListMenuSelection, type UseListMenuSelectionOptions, } from './components/use-list-menu-selection';
31
33
  export { JsonSchemaForm } from './components/JsonSchemaForm';
32
- export { FormLookupProvider, useLookupFetcher, resolveLookupScope, } from './components/form-lookup-context';
34
+ export { FormLookupProvider } from './components/FormLookupProvider';
35
+ export { useLookupFetcher, resolveLookupScope } from './components/form-lookup-context';
33
36
  export { DEFAULT_FORM_SIZE } from './components/json-schema-form-size';
34
37
  export type { FormSize } from './components/json-schema-form-size';
35
38
  export { DEFAULT_PREFERENCES_STORAGE_KEY, readPreferences, writePreferences, } from './components/json-schema-form-preferences';
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
@@ -28,8 +28,11 @@ import { SecretKeySelector } from "./components/SecretKeySelector.js";
28
28
  import { ThemeSwitcher } from "./components/theme-switcher.js";
29
29
  import { DensitySwitcher } from "./components/density-switcher.js";
30
30
  import { IconMenuPicker } from "./components/icon-menu-picker.js";
31
+ import { ListMenu, ListMenuActionBar, ListMenuHeader, ListMenuItem, ListMenuSection } from "./components/ListMenu.js";
32
+ import { useListMenuSelection } from "./components/use-list-menu-selection.js";
31
33
  import { JsonSchemaForm } from "./components/JsonSchemaForm.js";
32
- import { FormLookupProvider, resolveLookupScope, useLookupFetcher } from "./components/form-lookup-context.js";
34
+ import { FormLookupProvider } from "./components/FormLookupProvider.js";
35
+ import { resolveLookupScope, useLookupFetcher } from "./components/form-lookup-context.js";
33
36
  import { DEFAULT_FORM_SIZE } from "./components/json-schema-form-size.js";
34
37
  import { DEFAULT_PREFERENCES_STORAGE_KEY, readPreferences, writePreferences } from "./components/json-schema-form-preferences.js";
35
38
  import { effectiveProperties, isOpenStringMap, matchesIf, resolveControl } from "./components/json-schema-form-resolve.js";
@@ -70,6 +73,11 @@ export {
70
73
  IconButton,
71
74
  IconMenuPicker,
72
75
  JsonSchemaForm,
76
+ ListMenu,
77
+ ListMenuActionBar,
78
+ ListMenuHeader,
79
+ ListMenuItem,
80
+ ListMenuSection,
73
81
  Loading,
74
82
  LoadingDots,
75
83
  Modal,
@@ -106,6 +114,7 @@ export {
106
114
  resolveLookupScope,
107
115
  templateValuePre,
108
116
  useForm,
117
+ useListMenuSelection,
109
118
  useLookupFetcher,
110
119
  useModalStack,
111
120
  useToast,
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -34,5 +34,5 @@ export type MarkdownEditorPreviewHeaders = HeadersInit | ((request: {
34
34
  format: MarkdownEditorPreviewFormat;
35
35
  }) => HeadersInit | undefined);
36
36
  export declare function buildMarkdownPreviewUrl(endpoint: string, format: MarkdownEditorPreviewFormat): string;
37
- export declare function clickyFormatForMarkdownPreview(format: MarkdownEditorPreviewFormat): "html" | "json" | "markdown" | "csv" | "pdf" | "excel" | "clicky-json";
37
+ export declare function clickyFormatForMarkdownPreview(format: MarkdownEditorPreviewFormat): "html" | "markdown" | "json" | "csv" | "pdf" | "excel" | "clicky-json";
38
38
  //# sourceMappingURL=MarkdownEditor.model.d.ts.map
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../lib/utils.cjs");
5
+ const Icon = require("./Icon.cjs");
6
+ const ProgressBars_model = require("./ProgressBars.model.cjs");
7
+ const GaugeHoverCard = require("./GaugeHoverCard.cjs");
8
+ function toneClass(pct, [warn, danger]) {
9
+ if (pct >= danger) return "bg-red-500";
10
+ if (pct >= warn) return "bg-amber-500";
11
+ return "bg-emerald-500";
12
+ }
13
+ function ProgressBarsIcon({ icon }) {
14
+ if (typeof icon === "string") {
15
+ return /* @__PURE__ */ jsxRuntime.jsx(
16
+ Icon.Icon,
17
+ {
18
+ name: icon,
19
+ width: 14,
20
+ height: 14,
21
+ className: "text-muted-foreground"
22
+ }
23
+ );
24
+ }
25
+ return /* @__PURE__ */ jsxRuntime.jsx(
26
+ Icon.Icon,
27
+ {
28
+ icon,
29
+ width: 14,
30
+ height: 14,
31
+ className: "text-muted-foreground"
32
+ }
33
+ );
34
+ }
35
+ function defaultFormatUnits(units) {
36
+ return Number.isInteger(units) ? String(units) : units.toFixed(1);
37
+ }
38
+ function ProgressBars({
39
+ usage,
40
+ max,
41
+ unit,
42
+ title,
43
+ icon,
44
+ thresholds = [75, 90],
45
+ variant = "default",
46
+ showLabel = true,
47
+ showValue = true,
48
+ showCapacity = false,
49
+ orientation,
50
+ stats,
51
+ hoverCard = true,
52
+ hoverFooter,
53
+ className
54
+ }) {
55
+ const perBar = (unit == null ? void 0 : unit.perBar) ?? 1e3;
56
+ const unitLabel = (unit == null ? void 0 : unit.label) ?? "cores";
57
+ const barLabel = (unit == null ? void 0 : unit.barLabel) ?? "core";
58
+ const formatUnits = (unit == null ? void 0 : unit.format) ?? defaultFormatUnits;
59
+ const model = ProgressBars_model.deriveProgressBars(usage, max, perBar);
60
+ const tone = toneClass(model.pct, thresholds);
61
+ const usageText = formatUnits(model.usageUnits);
62
+ const capacityText = model.limitUnits !== void 0 ? formatUnits(model.limitUnits) : "?";
63
+ const caption = !model.hasUsage ? "—" : showCapacity ? `${usageText} / ${capacityText} ${unitLabel}` : `${usageText} ${unitLabel}`;
64
+ const compactCaption = !model.hasUsage ? "—" : showCapacity ? `${usageText}/${capacityText} ${unitLabel}` : `${usageText} ${unitLabel}`;
65
+ const titleText = `${title}: ${compactCaption}`;
66
+ const isCell = variant === "cell";
67
+ const pctTone = model.limitUnits === void 0 ? void 0 : model.pct >= thresholds[1] ? "text-red-500" : model.pct >= thresholds[0] ? "text-amber-500" : "text-emerald-500";
68
+ const fmt = (n) => `${formatUnits(n)} ${unitLabel}`;
69
+ const hoverRows = model.hasUsage ? [
70
+ { label: "Current", value: fmt(model.usageUnits), ...pctTone ? { tone: pctTone } : {} },
71
+ ...stats ? [
72
+ { label: "Min", value: fmt(stats.min / perBar) },
73
+ { label: "Max", value: fmt(stats.max / perBar) },
74
+ { label: "Avg", value: fmt(stats.avg / perBar) }
75
+ ] : [],
76
+ ...model.limitUnits !== void 0 ? [{ label: "Capacity", value: fmt(model.limitUnits) }] : []
77
+ ] : [];
78
+ const resolvedOrientation = orientation ?? "vertical";
79
+ const isDense = model.barCount > 4;
80
+ const valueText = isCell ? compactCaption : caption;
81
+ const hiddenAccessibleText = !showLabel || !showValue ? titleText : void 0;
82
+ const bars = /* @__PURE__ */ jsxRuntime.jsx(
83
+ "span",
84
+ {
85
+ className: utils.cn(
86
+ "flex shrink-0",
87
+ resolvedOrientation === "vertical" ? utils.cn("items-end", isCell ? "h-4 gap-px" : "h-10 gap-0.5") : utils.cn(
88
+ "flex-col justify-center",
89
+ isCell ? "h-4 w-10 gap-px" : "h-10 w-16 gap-0.5"
90
+ )
91
+ ),
92
+ "aria-hidden": isCell ? "true" : void 0,
93
+ "data-orientation": resolvedOrientation,
94
+ "data-bar-count": model.barCount,
95
+ "data-bar-density": isDense ? "compact" : "default",
96
+ children: model.bars.map((bar, i) => {
97
+ const barPct = Math.round(bar.fill * 100);
98
+ return /* @__PURE__ */ jsxRuntime.jsx(
99
+ "span",
100
+ {
101
+ className: utils.cn(
102
+ "relative overflow-hidden bg-muted",
103
+ resolvedOrientation === "vertical" ? utils.cn(
104
+ "h-full",
105
+ isCell ? isDense ? "w-[3px] rounded-[2px]" : "w-1.5 rounded-[2px]" : isDense ? "w-1 rounded-sm" : "w-2 rounded-sm"
106
+ ) : utils.cn("min-h-px w-full flex-1 rounded-[2px]")
107
+ ),
108
+ title: `${barLabel} ${i + 1}: ${barPct}%`,
109
+ "aria-label": !isCell ? `${barLabel} ${i + 1}: ${barPct}%` : void 0,
110
+ "data-fill": bar.fill,
111
+ children: /* @__PURE__ */ jsxRuntime.jsx(
112
+ "span",
113
+ {
114
+ className: utils.cn(
115
+ "absolute bottom-0 left-0 transition-all duration-300",
116
+ tone
117
+ ),
118
+ style: resolvedOrientation === "vertical" ? { height: `${barPct}%`, right: 0 } : { width: `${barPct}%`, top: 0 }
119
+ }
120
+ )
121
+ },
122
+ i
123
+ );
124
+ })
125
+ }
126
+ );
127
+ const valueNode = showValue ? /* @__PURE__ */ jsxRuntime.jsx(
128
+ "span",
129
+ {
130
+ className: utils.cn(
131
+ "shrink-0 font-semibold tabular-nums text-foreground",
132
+ isCell ? null : "text-xs"
133
+ ),
134
+ children: valueText
135
+ }
136
+ ) : null;
137
+ const label = icon || showLabel ? /* @__PURE__ */ jsxRuntime.jsxs(
138
+ "span",
139
+ {
140
+ className: utils.cn(
141
+ "inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground"
142
+ ),
143
+ children: [
144
+ icon ? /* @__PURE__ */ jsxRuntime.jsx(ProgressBarsIcon, { icon }) : null,
145
+ showLabel ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: title }) : null
146
+ ]
147
+ }
148
+ ) : null;
149
+ const useHover = hoverCard && hoverRows.length > 0;
150
+ if (isCell) {
151
+ const cell = /* @__PURE__ */ jsxRuntime.jsxs(
152
+ "span",
153
+ {
154
+ className: utils.cn(
155
+ "inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs",
156
+ className
157
+ ),
158
+ ...useHover ? {} : { title: titleText },
159
+ "aria-label": useHover ? titleText : hiddenAccessibleText,
160
+ children: [
161
+ label,
162
+ bars,
163
+ valueNode
164
+ ]
165
+ }
166
+ );
167
+ return useHover ? /* @__PURE__ */ jsxRuntime.jsx(GaugeHoverCard.GaugeHoverCard, { title, rows: hoverRows, footer: hoverFooter, trigger: cell }) : cell;
168
+ }
169
+ const block = /* @__PURE__ */ jsxRuntime.jsxs(
170
+ "div",
171
+ {
172
+ className: utils.cn("flex flex-col items-center gap-1", className),
173
+ ...useHover ? {} : { title: hiddenAccessibleText },
174
+ "aria-label": useHover ? titleText : hiddenAccessibleText,
175
+ children: [
176
+ bars,
177
+ valueNode,
178
+ label
179
+ ]
180
+ }
181
+ );
182
+ return useHover ? /* @__PURE__ */ jsxRuntime.jsx(
183
+ GaugeHoverCard.GaugeHoverCard,
184
+ {
185
+ title,
186
+ rows: hoverRows,
187
+ footer: hoverFooter,
188
+ trigger: block,
189
+ className: "w-full justify-center"
190
+ }
191
+ ) : block;
192
+ }
193
+ exports.ProgressBars = ProgressBars;
194
+ //# sourceMappingURL=ProgressBars.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBars.cjs","sources":["../../src/data/ProgressBars.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { deriveProgressBars } from \"./ProgressBars.model\";\nimport { GaugeHoverCard, type GaugeHoverRow } from \"./GaugeHoverCard\";\n\nexport type ProgressBarsVariant = \"default\" | \"cell\";\nexport type ProgressBarsOrientation = \"horizontal\" | \"vertical\";\n\n/**\n * Describes what one bar represents, letting the same component render CPU cores,\n * memory gigabytes, or any other quantised capacity. Defaults model CPU cores.\n */\nexport interface ProgressBarsUnit {\n /** Raw value that fills one bar, in the domain of `usage`/`max`. Default 1000 (millicores → 1 core). */\n perBar?: number;\n /** Caption/tooltip suffix naming the unit, plural. Default \"cores\". */\n label?: string;\n /** Per-bar hover tooltip noun, singular. Default \"core\". */\n barLabel?: string;\n /** Format a bar-unit count for the caption. Default: integers as-is, else 1 decimal. */\n format?: (units: number) => string;\n}\n\n/** Summary statistics for the hover card, in the same domain as `usage`/`max`. */\nexport interface ProgressBarsStats {\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n}\n\nexport interface ProgressBarsProps {\n /** Usage that fills the bars, in the raw domain (e.g. CPU millicores). */\n usage: number | undefined;\n /**\n * The capacity, in the same raw domain as `usage`. Determines the number of\n * bars (one per `unit.perBar`). When omitted or 0, the bar count falls back to\n * the ceiling of the usage so an unbounded reading still renders.\n */\n max?: number;\n /** What one bar represents. Defaults to CPU cores (perBar 1000, label \"cores\"). */\n unit?: ProgressBarsUnit;\n title: string;\n /** Iconify name or static icon component shown beside the label. */\n icon?: string | StaticIconComponent;\n /**\n * Utilisation thresholds (percent of capacity) at which the fill turns amber\n * then red. Defaults to [75, 90].\n */\n thresholds?: [warning: number, danger: number];\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: ProgressBarsVariant;\n /** Show the title text. Icons and values remain visible unless separately hidden. */\n showLabel?: boolean;\n /** Show the value/capacity caption. Icons and bars remain visible when false. */\n showValue?: boolean;\n /**\n * Include the capacity in the caption (\"2.3 / 4 cores\"). Defaults to false — the\n * caption shows only the current value (\"2.3 cores\") since the bars already\n * convey capacity. Set true to append the \"/ <capacity>\".\n */\n showCapacity?: boolean;\n /** Bar direction. Vertical bars fill bottom-up; horizontal bars fill left-to-right. */\n orientation?: ProgressBarsOrientation;\n /**\n * Summary stats for the hover card's Min/Max/Avg rows, in the SAME raw domain as\n * `usage`/`max` (NOT divided by perBar). Pass null to omit those rows.\n */\n stats?: ProgressBarsStats | null;\n /**\n * Wrap the bars in a hover card summarising the metric (label + current / min /\n * max / avg / capacity). Defaults to true.\n */\n hoverCard?: boolean;\n /** Footer note in the hover card, e.g. the look-back window (\"over last 1h\"). */\n hoverFooter?: ReactNode;\n className?: string;\n}\n\nfunction toneClass(pct: number, [warn, danger]: [number, number]): string {\n if (pct >= danger) return \"bg-red-500\";\n if (pct >= warn) return \"bg-amber-500\";\n return \"bg-emerald-500\";\n}\n\nfunction ProgressBarsIcon({ icon }: { icon: string | StaticIconComponent }) {\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n }\n return (\n <Icon\n icon={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n}\n\nfunction defaultFormatUnits(units: number): string {\n return Number.isInteger(units) ? String(units) : units.toFixed(1);\n}\n\n/**\n * ProgressBars renders quantised utilisation as a row of bars — one bar per unit\n * of capacity (the ceiling of the limit) — filled left to right by the usage. The\n * bar that straddles the usage boundary is partially filled (\"blocked out\") to\n * show the fractional unit in use, and the trailing bars stay empty to show\n * headroom; the bar colour crosses warning and danger thresholds. A \"<used> /\n * <capacity>\" caption sits below with the icon+title. It is purely presentational\n * — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).\n */\nexport function ProgressBars({\n usage,\n max,\n unit,\n title,\n icon,\n thresholds = [75, 90],\n variant = \"default\",\n showLabel = true,\n showValue = true,\n showCapacity = false,\n orientation,\n stats,\n hoverCard = true,\n hoverFooter,\n className,\n}: ProgressBarsProps) {\n const perBar = unit?.perBar ?? 1000;\n const unitLabel = unit?.label ?? \"cores\";\n const barLabel = unit?.barLabel ?? \"core\";\n const formatUnits = unit?.format ?? defaultFormatUnits;\n\n const model = deriveProgressBars(usage, max, perBar);\n const tone = toneClass(model.pct, thresholds);\n const usageText = formatUnits(model.usageUnits);\n const capacityText =\n model.limitUnits !== undefined ? formatUnits(model.limitUnits) : \"?\";\n const caption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText} / ${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const compactCaption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText}/${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const titleText = `${title}: ${compactCaption}`;\n const isCell = variant === \"cell\";\n\n // Hover card: surface current/min/max/avg/capacity in bar-units (stats are in\n // the raw domain, so divide by perBar) so they read in the same unit as the\n // caption. A bounded reading colours the current row by its threshold.\n const pctTone =\n model.limitUnits === undefined\n ? undefined\n : model.pct >= thresholds[1]\n ? \"text-red-500\"\n : model.pct >= thresholds[0]\n ? \"text-amber-500\"\n : \"text-emerald-500\";\n const fmt = (n: number) => `${formatUnits(n)} ${unitLabel}`;\n const hoverRows: GaugeHoverRow[] = model.hasUsage\n ? [\n { label: \"Current\", value: fmt(model.usageUnits), ...(pctTone ? { tone: pctTone } : {}) },\n ...(stats\n ? [\n { label: \"Min\", value: fmt(stats.min / perBar) },\n { label: \"Max\", value: fmt(stats.max / perBar) },\n { label: \"Avg\", value: fmt(stats.avg / perBar) },\n ]\n : []),\n ...(model.limitUnits !== undefined\n ? [{ label: \"Capacity\", value: fmt(model.limitUnits) }]\n : []),\n ]\n : [];\n\n const resolvedOrientation = orientation ?? \"vertical\";\n const isDense = model.barCount > 4;\n const valueText = isCell ? compactCaption : caption;\n const hiddenAccessibleText = !showLabel || !showValue ? titleText : undefined;\n const bars = (\n <span\n className={cn(\n \"flex shrink-0\",\n resolvedOrientation === \"vertical\"\n ? cn(\"items-end\", isCell ? \"h-4 gap-px\" : \"h-10 gap-0.5\")\n : cn(\n \"flex-col justify-center\",\n isCell ? \"h-4 w-10 gap-px\" : \"h-10 w-16 gap-0.5\",\n ),\n )}\n aria-hidden={isCell ? \"true\" : undefined}\n data-orientation={resolvedOrientation}\n data-bar-count={model.barCount}\n data-bar-density={isDense ? \"compact\" : \"default\"}\n >\n {model.bars.map((bar, i) => {\n const barPct = Math.round(bar.fill * 100);\n return (\n <span\n key={i}\n className={cn(\n \"relative overflow-hidden bg-muted\",\n resolvedOrientation === \"vertical\"\n ? cn(\n \"h-full\",\n isCell\n ? isDense\n ? \"w-[3px] rounded-[2px]\"\n : \"w-1.5 rounded-[2px]\"\n : isDense\n ? \"w-1 rounded-sm\"\n : \"w-2 rounded-sm\",\n )\n : cn(\"min-h-px w-full flex-1 rounded-[2px]\"),\n )}\n title={`${barLabel} ${i + 1}: ${barPct}%`}\n aria-label={!isCell ? `${barLabel} ${i + 1}: ${barPct}%` : undefined}\n data-fill={bar.fill}\n >\n <span\n className={cn(\n \"absolute bottom-0 left-0 transition-all duration-300\",\n tone,\n )}\n style={\n resolvedOrientation === \"vertical\"\n ? { height: `${barPct}%`, right: 0 }\n : { width: `${barPct}%`, top: 0 }\n }\n />\n </span>\n );\n })}\n </span>\n );\n const valueNode = showValue ? (\n <span\n className={cn(\n \"shrink-0 font-semibold tabular-nums text-foreground\",\n isCell ? null : \"text-xs\",\n )}\n >\n {valueText}\n </span>\n ) : null;\n const label =\n icon || showLabel ? (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground\",\n )}\n >\n {icon ? <ProgressBarsIcon icon={icon} /> : null}\n {showLabel ? <span className=\"min-w-0 truncate\">{title}</span> : null}\n </span>\n ) : null;\n\n const useHover = hoverCard && hoverRows.length > 0;\n\n if (isCell) {\n const cell = (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n {...(useHover ? {} : { title: titleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {label}\n {bars}\n {valueNode}\n </span>\n );\n return useHover ? (\n <GaugeHoverCard title={title} rows={hoverRows} footer={hoverFooter} trigger={cell} />\n ) : (\n cell\n );\n }\n\n const block = (\n <div\n className={cn(\"flex flex-col items-center gap-1\", className)}\n {...(useHover ? {} : { title: hiddenAccessibleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {bars}\n {valueNode}\n {label}\n </div>\n );\n return useHover ? (\n <GaugeHoverCard\n title={title}\n rows={hoverRows}\n footer={hoverFooter}\n trigger={block}\n className=\"w-full justify-center\"\n />\n ) : (\n block\n );\n}\n"],"names":["jsx","Icon","deriveProgressBars","cn","jsxs","GaugeHoverCard"],"mappings":";;;;;;;AAkFA,SAAS,UAAU,KAAa,CAAC,MAAM,MAAM,GAA6B;AACxE,MAAI,OAAO,OAAQ,QAAO;AAC1B,MAAI,OAAO,KAAM,QAAO;AACxB,SAAO;AACT;AAEA,SAAS,iBAAiB,EAAE,QAAgD;AAC1E,MAAI,OAAO,SAAS,UAAU;AAC5B,WACEA,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAGhB;AACA,SACED,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAU;AAAA,IAAA;AAAA,EAAA;AAGhB;AAEA,SAAS,mBAAmB,OAAuB;AACjD,SAAO,OAAO,UAAU,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAClE;AAWO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa,CAAC,IAAI,EAAE;AAAA,EACpB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,UAAS,6BAAM,WAAU;AAC/B,QAAM,aAAY,6BAAM,UAAS;AACjC,QAAM,YAAW,6BAAM,aAAY;AACnC,QAAM,eAAc,6BAAM,WAAU;AAEpC,QAAM,QAAQC,mBAAAA,mBAAmB,OAAO,KAAK,MAAM;AACnD,QAAM,OAAO,UAAU,MAAM,KAAK,UAAU;AAC5C,QAAM,YAAY,YAAY,MAAM,UAAU;AAC9C,QAAM,eACJ,MAAM,eAAe,SAAY,YAAY,MAAM,UAAU,IAAI;AACnE,QAAM,UAAU,CAAC,MAAM,WACnB,MACA,eACE,GAAG,SAAS,MAAM,YAAY,IAAI,SAAS,KAC3C,GAAG,SAAS,IAAI,SAAS;AAC/B,QAAM,iBAAiB,CAAC,MAAM,WAC1B,MACA,eACE,GAAG,SAAS,IAAI,YAAY,IAAI,SAAS,KACzC,GAAG,SAAS,IAAI,SAAS;AAC/B,QAAM,YAAY,GAAG,KAAK,KAAK,cAAc;AAC7C,QAAM,SAAS,YAAY;AAK3B,QAAM,UACJ,MAAM,eAAe,SACjB,SACA,MAAM,OAAO,WAAW,CAAC,IACvB,iBACA,MAAM,OAAO,WAAW,CAAC,IACvB,mBACA;AACV,QAAM,MAAM,CAAC,MAAc,GAAG,YAAY,CAAC,CAAC,IAAI,SAAS;AACzD,QAAM,YAA6B,MAAM,WACrC;AAAA,IACE,EAAE,OAAO,WAAW,OAAO,IAAI,MAAM,UAAU,GAAG,GAAI,UAAU,EAAE,MAAM,QAAA,IAAY,CAAA,EAAC;AAAA,IACrF,GAAI,QACA;AAAA,MACE,EAAE,OAAO,OAAO,OAAO,IAAI,MAAM,MAAM,MAAM,EAAA;AAAA,MAC7C,EAAE,OAAO,OAAO,OAAO,IAAI,MAAM,MAAM,MAAM,EAAA;AAAA,MAC7C,EAAE,OAAO,OAAO,OAAO,IAAI,MAAM,MAAM,MAAM,EAAA;AAAA,IAAE,IAEjD,CAAA;AAAA,IACJ,GAAI,MAAM,eAAe,SACrB,CAAC,EAAE,OAAO,YAAY,OAAO,IAAI,MAAM,UAAU,EAAA,CAAG,IACpD,CAAA;AAAA,EAAC,IAEP,CAAA;AAEJ,QAAM,sBAAsB,eAAe;AAC3C,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,YAAY,SAAS,iBAAiB;AAC5C,QAAM,uBAAuB,CAAC,aAAa,CAAC,YAAY,YAAY;AACpE,QAAM,OACJF,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWG,MAAAA;AAAAA,QACT;AAAA,QACA,wBAAwB,aACpBA,SAAG,aAAa,SAAS,eAAe,cAAc,IACtDA,MAAAA;AAAAA,UACE;AAAA,UACA,SAAS,oBAAoB;AAAA,QAAA;AAAA,MAC/B;AAAA,MAEN,eAAa,SAAS,SAAS;AAAA,MAC/B,oBAAkB;AAAA,MAClB,kBAAgB,MAAM;AAAA,MACtB,oBAAkB,UAAU,YAAY;AAAA,MAEvC,UAAA,MAAM,KAAK,IAAI,CAAC,KAAK,MAAM;AAC1B,cAAM,SAAS,KAAK,MAAM,IAAI,OAAO,GAAG;AACxC,eACEH,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAWG,MAAAA;AAAAA,cACT;AAAA,cACA,wBAAwB,aACpBA,MAAAA;AAAAA,gBACE;AAAA,gBACA,SACI,UACE,0BACA,wBACF,UACE,mBACA;AAAA,cAAA,IAERA,MAAAA,GAAG,sCAAsC;AAAA,YAAA;AAAA,YAE/C,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,MAAM;AAAA,YACtC,cAAY,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,MAAM,MAAM;AAAA,YAC3D,aAAW,IAAI;AAAA,YAEf,UAAAH,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWG,MAAAA;AAAAA,kBACT;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEF,OACE,wBAAwB,aACpB,EAAE,QAAQ,GAAG,MAAM,KAAK,OAAO,EAAA,IAC/B,EAAE,OAAO,GAAG,MAAM,KAAK,KAAK,EAAA;AAAA,cAAE;AAAA,YAAA;AAAA,UAEtC;AAAA,UA9BK;AAAA,QAAA;AAAA,MAiCX,CAAC;AAAA,IAAA;AAAA,EAAA;AAGL,QAAM,YAAY,YAChBH,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWG,MAAAA;AAAAA,QACT;AAAA,QACA,SAAS,OAAO;AAAA,MAAA;AAAA,MAGjB,UAAA;AAAA,IAAA;AAAA,EAAA,IAED;AACJ,QAAM,QACJ,QAAQ,YACNC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD,MAAAA;AAAAA,QACT;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,OAAOH,2BAAAA,IAAC,kBAAA,EAAiB,KAAA,CAAY,IAAK;AAAA,QAC1C,YAAYA,2BAAAA,IAAC,QAAA,EAAK,WAAU,oBAAoB,iBAAM,IAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAEjE;AAEN,QAAM,WAAW,aAAa,UAAU,SAAS;AAEjD,MAAI,QAAQ;AACV,UAAM,OACJI,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWD,MAAAA;AAAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAI,WAAW,CAAA,IAAK,EAAE,OAAO,UAAA;AAAA,QAC9B,cAAY,WAAW,YAAY;AAAA,QAElC,UAAA;AAAA,UAAA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAGL,WAAO,WACLH,2BAAAA,IAACK,+BAAA,EAAe,OAAc,MAAM,WAAW,QAAQ,aAAa,SAAS,KAAA,CAAM,IAEnF;AAAA,EAEJ;AAEA,QAAM,QACJD,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD,MAAAA,GAAG,oCAAoC,SAAS;AAAA,MAC1D,GAAI,WAAW,CAAA,IAAK,EAAE,OAAO,qBAAA;AAAA,MAC9B,cAAY,WAAW,YAAY;AAAA,MAElC,UAAA;AAAA,QAAA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGL,SAAO,WACLH,2BAAAA;AAAAA,IAACK,eAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAU;AAAA,IAAA;AAAA,EAAA,IAGZ;AAEJ;;"}
@@ -0,0 +1,85 @@
1
+ import { ReactNode } from 'react';
2
+ import { StaticIconComponent } from './Icon';
3
+ export type ProgressBarsVariant = "default" | "cell";
4
+ export type ProgressBarsOrientation = "horizontal" | "vertical";
5
+ /**
6
+ * Describes what one bar represents, letting the same component render CPU cores,
7
+ * memory gigabytes, or any other quantised capacity. Defaults model CPU cores.
8
+ */
9
+ export interface ProgressBarsUnit {
10
+ /** Raw value that fills one bar, in the domain of `usage`/`max`. Default 1000 (millicores → 1 core). */
11
+ perBar?: number;
12
+ /** Caption/tooltip suffix naming the unit, plural. Default "cores". */
13
+ label?: string;
14
+ /** Per-bar hover tooltip noun, singular. Default "core". */
15
+ barLabel?: string;
16
+ /** Format a bar-unit count for the caption. Default: integers as-is, else 1 decimal. */
17
+ format?: (units: number) => string;
18
+ }
19
+ /** Summary statistics for the hover card, in the same domain as `usage`/`max`. */
20
+ export interface ProgressBarsStats {
21
+ /** Smallest value over the window. */
22
+ min: number;
23
+ /** Largest value over the window. */
24
+ max: number;
25
+ /** Mean value over the window. */
26
+ avg: number;
27
+ }
28
+ export interface ProgressBarsProps {
29
+ /** Usage that fills the bars, in the raw domain (e.g. CPU millicores). */
30
+ usage: number | undefined;
31
+ /**
32
+ * The capacity, in the same raw domain as `usage`. Determines the number of
33
+ * bars (one per `unit.perBar`). When omitted or 0, the bar count falls back to
34
+ * the ceiling of the usage so an unbounded reading still renders.
35
+ */
36
+ max?: number;
37
+ /** What one bar represents. Defaults to CPU cores (perBar 1000, label "cores"). */
38
+ unit?: ProgressBarsUnit;
39
+ title: string;
40
+ /** Iconify name or static icon component shown beside the label. */
41
+ icon?: string | StaticIconComponent;
42
+ /**
43
+ * Utilisation thresholds (percent of capacity) at which the fill turns amber
44
+ * then red. Defaults to [75, 90].
45
+ */
46
+ thresholds?: [warning: number, danger: number];
47
+ /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */
48
+ variant?: ProgressBarsVariant;
49
+ /** Show the title text. Icons and values remain visible unless separately hidden. */
50
+ showLabel?: boolean;
51
+ /** Show the value/capacity caption. Icons and bars remain visible when false. */
52
+ showValue?: boolean;
53
+ /**
54
+ * Include the capacity in the caption ("2.3 / 4 cores"). Defaults to false — the
55
+ * caption shows only the current value ("2.3 cores") since the bars already
56
+ * convey capacity. Set true to append the "/ <capacity>".
57
+ */
58
+ showCapacity?: boolean;
59
+ /** Bar direction. Vertical bars fill bottom-up; horizontal bars fill left-to-right. */
60
+ orientation?: ProgressBarsOrientation;
61
+ /**
62
+ * Summary stats for the hover card's Min/Max/Avg rows, in the SAME raw domain as
63
+ * `usage`/`max` (NOT divided by perBar). Pass null to omit those rows.
64
+ */
65
+ stats?: ProgressBarsStats | null;
66
+ /**
67
+ * Wrap the bars in a hover card summarising the metric (label + current / min /
68
+ * max / avg / capacity). Defaults to true.
69
+ */
70
+ hoverCard?: boolean;
71
+ /** Footer note in the hover card, e.g. the look-back window ("over last 1h"). */
72
+ hoverFooter?: ReactNode;
73
+ className?: string;
74
+ }
75
+ /**
76
+ * ProgressBars renders quantised utilisation as a row of bars — one bar per unit
77
+ * of capacity (the ceiling of the limit) — filled left to right by the usage. The
78
+ * bar that straddles the usage boundary is partially filled ("blocked out") to
79
+ * show the fractional unit in use, and the trailing bars stay empty to show
80
+ * headroom; the bar colour crosses warning and danger thresholds. A "<used> /
81
+ * <capacity>" caption sits below with the icon+title. It is purely presentational
82
+ * — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).
83
+ */
84
+ export declare function ProgressBars({ usage, max, unit, title, icon, thresholds, variant, showLabel, showValue, showCapacity, orientation, stats, hoverCard, hoverFooter, className, }: ProgressBarsProps): import("react/jsx-runtime").JSX.Element;
85
+ //# sourceMappingURL=ProgressBars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBars.d.ts","sourceRoot":"","sources":["../../src/data/ProgressBars.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAIxD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,mFAAmF;IACnF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uFAAuF;IACvF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,GAAG,EACH,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,UAAqB,EACrB,OAAmB,EACnB,SAAgB,EAChB,SAAgB,EAChB,YAAoB,EACpB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,2CAoLnB"}