@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
@@ -11,7 +11,7 @@ export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & VariantProps
11
11
  };
12
12
  export declare const Button: import('react').ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
13
13
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
14
- size?: "sm" | "lg" | "default" | "icon" | null | undefined;
14
+ size?: "sm" | "lg" | "icon" | "default" | null | undefined;
15
15
  } & import('class-variance-authority/types').ClassProp) | undefined) => string> & {
16
16
  /** Render the button styles onto the child element via Radix Slot. */
17
17
  asChild?: boolean;
@@ -1,14 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
3
  const react = require("react");
5
4
  const FormLookupContext = react.createContext(void 0);
6
- function FormLookupProvider({
7
- fetcher,
8
- children
9
- }) {
10
- return /* @__PURE__ */ jsxRuntime.jsx(FormLookupContext.Provider, { value: fetcher, children });
11
- }
12
5
  function useLookupFetcher() {
13
6
  return react.useContext(FormLookupContext);
14
7
  }
@@ -30,7 +23,7 @@ function resolveLookupScope(descriptor, rootValue) {
30
23
  if (values.length === 0) return {};
31
24
  return { [scope.param]: values.join(scope.join ?? ",") };
32
25
  }
33
- exports.FormLookupProvider = FormLookupProvider;
26
+ exports.FormLookupContext = FormLookupContext;
34
27
  exports.resolveLookupScope = resolveLookupScope;
35
28
  exports.useLookupFetcher = useLookupFetcher;
36
29
  //# sourceMappingURL=form-lookup-context.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-lookup-context.cjs","sources":["../../src/components/form-lookup-context.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from \"react\";\nimport type { LookupDescriptor, LookupFetcher } from \"./json-schema-form-types\";\n\n// FormLookupContext carries the host-provided LookupFetcher down to the\n// LookupControl rendered deep inside the form, so the form stays decoupled from\n// any specific RPC client. JsonSchemaForm provides it when given a lookupFetcher.\nconst FormLookupContext = createContext<LookupFetcher | undefined>(undefined);\n\nexport function FormLookupProvider({\n fetcher,\n children,\n}: {\n fetcher?: LookupFetcher;\n children: ReactNode;\n}) {\n return <FormLookupContext.Provider value={fetcher}>{children}</FormLookupContext.Provider>;\n}\n\nexport function useLookupFetcher(): LookupFetcher | undefined {\n return useContext(FormLookupContext);\n}\n\n// readPath resolves a dotted path (e.g. \"provider.type\") against the form's root\n// value, returning the string at that path or \"\" when absent/non-scalar.\nfunction readPath(root: Record<string, unknown> | undefined, path: string): string {\n if (!root || !path) return \"\";\n let cur: unknown = root;\n for (const segment of path.split(\".\")) {\n if (cur == null || typeof cur !== \"object\") return \"\";\n cur = (cur as Record<string, unknown>)[segment];\n }\n return typeof cur === \"string\" || typeof cur === \"number\" ? String(cur) : \"\";\n}\n\n// resolveLookupScope computes the extra query params a lookup should send based\n// on a sibling field's value (LookupScope). Returns an empty object when the\n// descriptor has no scope or the source field is unset/unmapped — the lookup then\n// returns the full, unscoped option set.\nexport function resolveLookupScope(\n descriptor: LookupDescriptor,\n rootValue: Record<string, unknown> | undefined,\n): Record<string, string> {\n const scope = descriptor.scope;\n if (!scope) return {};\n const source = readPath(rootValue, scope.from);\n if (!source) return {};\n const values = scope.map ? (scope.map[source] ?? []) : [source];\n if (values.length === 0) return {};\n return { [scope.param]: values.join(scope.join ?? \",\") };\n}\n"],"names":["createContext","useContext"],"mappings":";;;;AAMA,MAAM,oBAAoBA,MAAAA,cAAyC,MAAS;AAErE,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAGG;AACD,wCAAQ,kBAAkB,UAAlB,EAA2B,OAAO,SAAU,UAAS;AAC/D;AAEO,SAAS,mBAA8C;AAC5D,SAAOC,MAAAA,WAAW,iBAAiB;AACrC;AAIA,SAAS,SAAS,MAA2C,MAAsB;AACjF,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,MAAI,MAAe;AACnB,aAAW,WAAW,KAAK,MAAM,GAAG,GAAG;AACrC,QAAI,OAAO,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACnD,UAAO,IAAgC,OAAO;AAAA,EAChD;AACA,SAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,WAAW,OAAO,GAAG,IAAI;AAC5E;AAMO,SAAS,mBACd,YACA,WACwB;AACxB,QAAM,QAAQ,WAAW;AACzB,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,QAAM,SAAS,SAAS,WAAW,MAAM,IAAI;AAC7C,MAAI,CAAC,OAAQ,QAAO,CAAA;AACpB,QAAM,SAAS,MAAM,MAAO,MAAM,IAAI,MAAM,KAAK,KAAM,CAAC,MAAM;AAC9D,MAAI,OAAO,WAAW,EAAG,QAAO,CAAA;AAChC,SAAO,EAAE,CAAC,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,QAAQ,GAAG,EAAA;AACvD;;;;"}
1
+ {"version":3,"file":"form-lookup-context.cjs","sources":["../../src/components/form-lookup-context.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { LookupDescriptor, LookupFetcher } from \"./json-schema-form-types\";\n\n// FormLookupContext carries the host-provided LookupFetcher down to the\n// LookupControl rendered deep inside the form, so the form stays decoupled from\n// any specific RPC client. FormLookupProvider provides it when JsonSchemaForm is\n// given a lookupFetcher.\nexport const FormLookupContext = createContext<LookupFetcher | undefined>(undefined);\n\nexport function useLookupFetcher(): LookupFetcher | undefined {\n return useContext(FormLookupContext);\n}\n\n// readPath resolves a dotted path (e.g. \"provider.type\") against the form's root\n// value, returning the string at that path or \"\" when absent/non-scalar.\nfunction readPath(root: Record<string, unknown> | undefined, path: string): string {\n if (!root || !path) return \"\";\n let cur: unknown = root;\n for (const segment of path.split(\".\")) {\n if (cur == null || typeof cur !== \"object\") return \"\";\n cur = (cur as Record<string, unknown>)[segment];\n }\n return typeof cur === \"string\" || typeof cur === \"number\" ? String(cur) : \"\";\n}\n\n// resolveLookupScope computes the extra query params a lookup should send based\n// on a sibling field's value (LookupScope). Returns an empty object when the\n// descriptor has no scope or the source field is unset/unmapped — the lookup then\n// returns the full, unscoped option set.\nexport function resolveLookupScope(\n descriptor: LookupDescriptor,\n rootValue: Record<string, unknown> | undefined,\n): Record<string, string> {\n const scope = descriptor.scope;\n if (!scope) return {};\n const source = readPath(rootValue, scope.from);\n if (!source) return {};\n const values = scope.map ? (scope.map[source] ?? []) : [source];\n if (values.length === 0) return {};\n return { [scope.param]: values.join(scope.join ?? \",\") };\n}\n"],"names":["createContext","useContext"],"mappings":";;;AAOO,MAAM,oBAAoBA,MAAAA,cAAyC,MAAS;AAE5E,SAAS,mBAA8C;AAC5D,SAAOC,MAAAA,WAAW,iBAAiB;AACrC;AAIA,SAAS,SAAS,MAA2C,MAAsB;AACjF,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,MAAI,MAAe;AACnB,aAAW,WAAW,KAAK,MAAM,GAAG,GAAG;AACrC,QAAI,OAAO,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACnD,UAAO,IAAgC,OAAO;AAAA,EAChD;AACA,SAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,WAAW,OAAO,GAAG,IAAI;AAC5E;AAMO,SAAS,mBACd,YACA,WACwB;AACxB,QAAM,QAAQ,WAAW;AACzB,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,QAAM,SAAS,SAAS,WAAW,MAAM,IAAI;AAC7C,MAAI,CAAC,OAAQ,QAAO,CAAA;AACpB,QAAM,SAAS,MAAM,MAAO,MAAM,IAAI,MAAM,KAAK,KAAM,CAAC,MAAM;AAC9D,MAAI,OAAO,WAAW,EAAG,QAAO,CAAA;AAChC,SAAO,EAAE,CAAC,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,QAAQ,GAAG,EAAA;AACvD;;;;"}
@@ -1,9 +1,5 @@
1
- import { ReactNode } from 'react';
2
1
  import { LookupDescriptor, LookupFetcher } from './json-schema-form-types';
3
- export declare function FormLookupProvider({ fetcher, children, }: {
4
- fetcher?: LookupFetcher;
5
- children: ReactNode;
6
- }): import("react/jsx-runtime").JSX.Element;
2
+ export declare const FormLookupContext: import('react').Context<LookupFetcher | undefined>;
7
3
  export declare function useLookupFetcher(): LookupFetcher | undefined;
8
4
  export declare function resolveLookupScope(descriptor: LookupDescriptor, rootValue: Record<string, unknown> | undefined): Record<string, string>;
9
5
  //# sourceMappingURL=form-lookup-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-lookup-context.d.ts","sourceRoot":"","sources":["../../src/components/form-lookup-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOhF,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAEA;AAED,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAkBD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB"}
1
+ {"version":3,"file":"form-lookup-context.d.ts","sourceRoot":"","sources":["../../src/components/form-lookup-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMhF,eAAO,MAAM,iBAAiB,oDAAsD,CAAC;AAErF,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAkBD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB"}
@@ -1,12 +1,5 @@
1
- import { jsx } from "react/jsx-runtime";
2
1
  import { useContext, createContext } from "react";
3
2
  const FormLookupContext = createContext(void 0);
4
- function FormLookupProvider({
5
- fetcher,
6
- children
7
- }) {
8
- return /* @__PURE__ */ jsx(FormLookupContext.Provider, { value: fetcher, children });
9
- }
10
3
  function useLookupFetcher() {
11
4
  return useContext(FormLookupContext);
12
5
  }
@@ -29,7 +22,7 @@ function resolveLookupScope(descriptor, rootValue) {
29
22
  return { [scope.param]: values.join(scope.join ?? ",") };
30
23
  }
31
24
  export {
32
- FormLookupProvider,
25
+ FormLookupContext,
33
26
  resolveLookupScope,
34
27
  useLookupFetcher
35
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"form-lookup-context.js","sources":["../../src/components/form-lookup-context.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from \"react\";\nimport type { LookupDescriptor, LookupFetcher } from \"./json-schema-form-types\";\n\n// FormLookupContext carries the host-provided LookupFetcher down to the\n// LookupControl rendered deep inside the form, so the form stays decoupled from\n// any specific RPC client. JsonSchemaForm provides it when given a lookupFetcher.\nconst FormLookupContext = createContext<LookupFetcher | undefined>(undefined);\n\nexport function FormLookupProvider({\n fetcher,\n children,\n}: {\n fetcher?: LookupFetcher;\n children: ReactNode;\n}) {\n return <FormLookupContext.Provider value={fetcher}>{children}</FormLookupContext.Provider>;\n}\n\nexport function useLookupFetcher(): LookupFetcher | undefined {\n return useContext(FormLookupContext);\n}\n\n// readPath resolves a dotted path (e.g. \"provider.type\") against the form's root\n// value, returning the string at that path or \"\" when absent/non-scalar.\nfunction readPath(root: Record<string, unknown> | undefined, path: string): string {\n if (!root || !path) return \"\";\n let cur: unknown = root;\n for (const segment of path.split(\".\")) {\n if (cur == null || typeof cur !== \"object\") return \"\";\n cur = (cur as Record<string, unknown>)[segment];\n }\n return typeof cur === \"string\" || typeof cur === \"number\" ? String(cur) : \"\";\n}\n\n// resolveLookupScope computes the extra query params a lookup should send based\n// on a sibling field's value (LookupScope). Returns an empty object when the\n// descriptor has no scope or the source field is unset/unmapped — the lookup then\n// returns the full, unscoped option set.\nexport function resolveLookupScope(\n descriptor: LookupDescriptor,\n rootValue: Record<string, unknown> | undefined,\n): Record<string, string> {\n const scope = descriptor.scope;\n if (!scope) return {};\n const source = readPath(rootValue, scope.from);\n if (!source) return {};\n const values = scope.map ? (scope.map[source] ?? []) : [source];\n if (values.length === 0) return {};\n return { [scope.param]: values.join(scope.join ?? \",\") };\n}\n"],"names":[],"mappings":";;AAMA,MAAM,oBAAoB,cAAyC,MAAS;AAErE,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAGG;AACD,6BAAQ,kBAAkB,UAAlB,EAA2B,OAAO,SAAU,UAAS;AAC/D;AAEO,SAAS,mBAA8C;AAC5D,SAAO,WAAW,iBAAiB;AACrC;AAIA,SAAS,SAAS,MAA2C,MAAsB;AACjF,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,MAAI,MAAe;AACnB,aAAW,WAAW,KAAK,MAAM,GAAG,GAAG;AACrC,QAAI,OAAO,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACnD,UAAO,IAAgC,OAAO;AAAA,EAChD;AACA,SAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,WAAW,OAAO,GAAG,IAAI;AAC5E;AAMO,SAAS,mBACd,YACA,WACwB;AACxB,QAAM,QAAQ,WAAW;AACzB,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,QAAM,SAAS,SAAS,WAAW,MAAM,IAAI;AAC7C,MAAI,CAAC,OAAQ,QAAO,CAAA;AACpB,QAAM,SAAS,MAAM,MAAO,MAAM,IAAI,MAAM,KAAK,KAAM,CAAC,MAAM;AAC9D,MAAI,OAAO,WAAW,EAAG,QAAO,CAAA;AAChC,SAAO,EAAE,CAAC,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,QAAQ,GAAG,EAAA;AACvD;"}
1
+ {"version":3,"file":"form-lookup-context.js","sources":["../../src/components/form-lookup-context.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { LookupDescriptor, LookupFetcher } from \"./json-schema-form-types\";\n\n// FormLookupContext carries the host-provided LookupFetcher down to the\n// LookupControl rendered deep inside the form, so the form stays decoupled from\n// any specific RPC client. FormLookupProvider provides it when JsonSchemaForm is\n// given a lookupFetcher.\nexport const FormLookupContext = createContext<LookupFetcher | undefined>(undefined);\n\nexport function useLookupFetcher(): LookupFetcher | undefined {\n return useContext(FormLookupContext);\n}\n\n// readPath resolves a dotted path (e.g. \"provider.type\") against the form's root\n// value, returning the string at that path or \"\" when absent/non-scalar.\nfunction readPath(root: Record<string, unknown> | undefined, path: string): string {\n if (!root || !path) return \"\";\n let cur: unknown = root;\n for (const segment of path.split(\".\")) {\n if (cur == null || typeof cur !== \"object\") return \"\";\n cur = (cur as Record<string, unknown>)[segment];\n }\n return typeof cur === \"string\" || typeof cur === \"number\" ? String(cur) : \"\";\n}\n\n// resolveLookupScope computes the extra query params a lookup should send based\n// on a sibling field's value (LookupScope). Returns an empty object when the\n// descriptor has no scope or the source field is unset/unmapped — the lookup then\n// returns the full, unscoped option set.\nexport function resolveLookupScope(\n descriptor: LookupDescriptor,\n rootValue: Record<string, unknown> | undefined,\n): Record<string, string> {\n const scope = descriptor.scope;\n if (!scope) return {};\n const source = readPath(rootValue, scope.from);\n if (!source) return {};\n const values = scope.map ? (scope.map[source] ?? []) : [source];\n if (values.length === 0) return {};\n return { [scope.param]: values.join(scope.join ?? \",\") };\n}\n"],"names":[],"mappings":";AAOO,MAAM,oBAAoB,cAAyC,MAAS;AAE5E,SAAS,mBAA8C;AAC5D,SAAO,WAAW,iBAAiB;AACrC;AAIA,SAAS,SAAS,MAA2C,MAAsB;AACjF,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,MAAI,MAAe;AACnB,aAAW,WAAW,KAAK,MAAM,GAAG,GAAG;AACrC,QAAI,OAAO,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACnD,UAAO,IAAgC,OAAO;AAAA,EAChD;AACA,SAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,WAAW,OAAO,GAAG,IAAI;AAC5E;AAMO,SAAS,mBACd,YACA,WACwB;AACxB,QAAM,QAAQ,WAAW;AACzB,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,QAAM,SAAS,SAAS,WAAW,MAAM,IAAI;AAC7C,MAAI,CAAC,OAAQ,QAAO,CAAA;AACpB,QAAM,SAAS,MAAM,MAAO,MAAM,IAAI,MAAM,KAAK,KAAM,CAAC,MAAM;AAC9D,MAAI,OAAO,WAAW,EAAG,QAAO,CAAA;AAChC,SAAO,EAAE,CAAC,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,QAAQ,GAAG,EAAA;AACvD;"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const jotai = require("jotai");
5
+ function useAtomSubscriptions(atoms) {
6
+ const store = jotai.useStore();
7
+ const [, forceRender] = react.useReducer((count) => count + 1, 0);
8
+ const uniqueAtoms = react.useMemo(() => Array.from(new Set(atoms)), [atoms]);
9
+ react.useEffect(() => {
10
+ if (uniqueAtoms.length === 0) return void 0;
11
+ const unsubscribers = uniqueAtoms.map((atom) => store.sub(atom, forceRender));
12
+ return () => {
13
+ unsubscribers.forEach((unsubscribe) => unsubscribe());
14
+ };
15
+ }, [store, uniqueAtoms]);
16
+ }
17
+ function useAtomValueSetter(atom) {
18
+ const store = jotai.useStore();
19
+ const value = store.get(atom);
20
+ const setValue = react.useCallback(
21
+ (next) => {
22
+ store.set(atom, next);
23
+ },
24
+ [atom, store]
25
+ );
26
+ return [value, setValue];
27
+ }
28
+ function useJotaiJsonSchemaFormProps(atom, onChange) {
29
+ const atoms = react.useMemo(() => [atom], [atom]);
30
+ useAtomSubscriptions(atoms);
31
+ const [value, setValue] = useAtomValueSetter(atom);
32
+ return react.useMemo(
33
+ () => ({
34
+ value,
35
+ onChange: (next) => {
36
+ setValue(next);
37
+ onChange == null ? void 0 : onChange(next);
38
+ }
39
+ }),
40
+ [onChange, setValue, value]
41
+ );
42
+ }
43
+ function useJotaiFilterBarAtoms({
44
+ search,
45
+ filters,
46
+ timeRange,
47
+ dateRange
48
+ }) {
49
+ const atoms = react.useMemo(() => {
50
+ const next = [];
51
+ if (search) next.push(search.atom);
52
+ filters == null ? void 0 : filters.forEach((filter) => next.push(filter.atom));
53
+ if (timeRange) next.push(timeRange.atom);
54
+ if (dateRange) next.push(dateRange.atom);
55
+ return next;
56
+ }, [dateRange, filters, search, timeRange]);
57
+ useAtomSubscriptions(atoms);
58
+ }
59
+ function useJotaiSearch(search) {
60
+ const store = jotai.useStore();
61
+ if (!search) return void 0;
62
+ const { atom, onChange, ...rest } = search;
63
+ return {
64
+ ...rest,
65
+ value: store.get(atom),
66
+ onChange: (next) => {
67
+ store.set(atom, next);
68
+ onChange == null ? void 0 : onChange(next);
69
+ }
70
+ };
71
+ }
72
+ function useJotaiRange(range) {
73
+ const store = jotai.useStore();
74
+ if (!range) return void 0;
75
+ const { atom, onApply, ...rest } = range;
76
+ const value = store.get(atom);
77
+ return {
78
+ ...rest,
79
+ ...value.from !== void 0 ? { from: value.from } : {},
80
+ ...value.to !== void 0 ? { to: value.to } : {},
81
+ onApply: (from, to) => {
82
+ store.set(atom, { from, to });
83
+ onApply == null ? void 0 : onApply(from, to);
84
+ }
85
+ };
86
+ }
87
+ function useJotaiFilters(filters) {
88
+ const store = jotai.useStore();
89
+ if (!filters) return void 0;
90
+ return filters.map((filter) => bindJotaiFilter(store, filter));
91
+ }
92
+ function bindJotaiFilter(store, filter) {
93
+ switch (filter.kind) {
94
+ case "text": {
95
+ const { atom, onChange, ...rest } = filter;
96
+ return {
97
+ ...rest,
98
+ value: store.get(atom),
99
+ onChange: (next) => {
100
+ store.set(atom, next);
101
+ onChange == null ? void 0 : onChange(next);
102
+ }
103
+ };
104
+ }
105
+ case "lookup": {
106
+ const { atom, onChange, ...rest } = filter;
107
+ return {
108
+ ...rest,
109
+ value: store.get(atom),
110
+ onChange: (next) => {
111
+ store.set(atom, next);
112
+ onChange == null ? void 0 : onChange(next);
113
+ }
114
+ };
115
+ }
116
+ case "lookup-multi":
117
+ case "select-multi": {
118
+ const { atom, onChange, ...rest } = filter;
119
+ return {
120
+ ...rest,
121
+ value: store.get(atom),
122
+ onChange: (next) => {
123
+ store.set(atom, next);
124
+ onChange == null ? void 0 : onChange(next);
125
+ }
126
+ };
127
+ }
128
+ case "multi":
129
+ case "nested-multi": {
130
+ const { atom, onChange, ...rest } = filter;
131
+ return {
132
+ ...rest,
133
+ value: store.get(atom),
134
+ onChange: (next) => {
135
+ store.set(atom, next);
136
+ onChange == null ? void 0 : onChange(next);
137
+ }
138
+ };
139
+ }
140
+ case "number": {
141
+ const { atom, onChange, ...rest } = filter;
142
+ return {
143
+ ...rest,
144
+ value: store.get(atom),
145
+ onChange: (next) => {
146
+ store.set(atom, next);
147
+ onChange == null ? void 0 : onChange(next);
148
+ }
149
+ };
150
+ }
151
+ case "enum": {
152
+ const { atom, onChange, ...rest } = filter;
153
+ return {
154
+ ...rest,
155
+ value: store.get(atom),
156
+ onChange: (next) => {
157
+ store.set(atom, next);
158
+ onChange == null ? void 0 : onChange(next);
159
+ }
160
+ };
161
+ }
162
+ case "boolean": {
163
+ const { atom, onChange, ...rest } = filter;
164
+ return {
165
+ ...rest,
166
+ value: store.get(atom),
167
+ onChange: (next) => {
168
+ store.set(atom, next);
169
+ onChange == null ? void 0 : onChange(next);
170
+ }
171
+ };
172
+ }
173
+ }
174
+ }
175
+ function useJotaiFilterBarProps({
176
+ search,
177
+ filters,
178
+ timeRange,
179
+ dateRange,
180
+ ...props
181
+ }) {
182
+ useJotaiFilterBarAtoms({ search, filters, timeRange, dateRange });
183
+ const controlledSearch = useJotaiSearch(search);
184
+ const controlledFilters = useJotaiFilters(filters);
185
+ const controlledTimeRange = useJotaiRange(timeRange);
186
+ const controlledDateRange = useJotaiRange(dateRange);
187
+ return {
188
+ ...props,
189
+ ...controlledSearch ? { search: controlledSearch } : {},
190
+ ...controlledFilters ? { filters: controlledFilters } : {},
191
+ ...controlledTimeRange ? { timeRange: controlledTimeRange } : {},
192
+ ...controlledDateRange ? { dateRange: controlledDateRange } : {}
193
+ };
194
+ }
195
+ exports.useJotaiFilterBarProps = useJotaiFilterBarProps;
196
+ exports.useJotaiJsonSchemaFormProps = useJotaiJsonSchemaFormProps;
197
+ //# sourceMappingURL=jotai-bindings-core.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai-bindings-core.cjs","sources":["../../src/components/jotai-bindings-core.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport { useStore, type WritableAtom } from \"jotai\";\nimport type {\n FilterBarBooleanFilter,\n FilterBarEnumFilter,\n FilterBarFilter,\n FilterBarLookupFilter,\n FilterBarLookupMultiFilter,\n FilterBarMultiFilter,\n FilterBarNestedMultiFilter,\n FilterBarNumberFilter,\n FilterBarProps,\n FilterBarRangeProps,\n FilterBarSearchProps,\n FilterBarSelectMultiFilter,\n FilterBarTextFilter,\n} from \"./FilterBar\";\nimport type { JsonSchemaFormProps } from \"./json-schema-form-types\";\n\nexport type JotaiWritableAtom<Value> = WritableAtom<Value, [Value], unknown>;\nexport type JotaiJsonSchemaFormAtom = JotaiWritableAtom<Record<string, unknown>>;\n\nexport type JotaiJsonSchemaFormProps = Omit<JsonSchemaFormProps, \"value\" | \"onChange\"> & {\n atom: JotaiJsonSchemaFormAtom;\n onChange?: JsonSchemaFormProps[\"onChange\"];\n};\n\nexport type JotaiFilterBarSearchProps = Omit<FilterBarSearchProps, \"value\" | \"onChange\"> & {\n atom: JotaiWritableAtom<string>;\n onChange?: FilterBarSearchProps[\"onChange\"];\n};\n\nexport type JotaiFilterBarRangeValue = {\n from?: string;\n to?: string;\n};\n\nexport type JotaiFilterBarRangeProps = Omit<FilterBarRangeProps, \"from\" | \"to\" | \"onApply\"> & {\n atom: JotaiWritableAtom<JotaiFilterBarRangeValue>;\n onApply?: FilterBarRangeProps[\"onApply\"];\n};\n\ntype AtomizedFilter<TFilter extends FilterBarFilter> = Omit<TFilter, \"value\" | \"onChange\"> & {\n atom: JotaiWritableAtom<TFilter[\"value\"]>;\n onChange?: TFilter[\"onChange\"];\n};\n\nexport type JotaiFilterBarTextFilter = AtomizedFilter<FilterBarTextFilter>;\nexport type JotaiFilterBarLookupFilter = AtomizedFilter<FilterBarLookupFilter>;\nexport type JotaiFilterBarLookupMultiFilter = AtomizedFilter<FilterBarLookupMultiFilter>;\nexport type JotaiFilterBarMultiFilter = AtomizedFilter<FilterBarMultiFilter>;\nexport type JotaiFilterBarNestedMultiFilter = AtomizedFilter<FilterBarNestedMultiFilter>;\nexport type JotaiFilterBarSelectMultiFilter = AtomizedFilter<FilterBarSelectMultiFilter>;\nexport type JotaiFilterBarNumberFilter = AtomizedFilter<FilterBarNumberFilter>;\nexport type JotaiFilterBarEnumFilter = AtomizedFilter<FilterBarEnumFilter>;\nexport type JotaiFilterBarBooleanFilter = AtomizedFilter<FilterBarBooleanFilter>;\n\nexport type JotaiFilterBarFilter =\n | JotaiFilterBarTextFilter\n | JotaiFilterBarLookupFilter\n | JotaiFilterBarLookupMultiFilter\n | JotaiFilterBarMultiFilter\n | JotaiFilterBarNestedMultiFilter\n | JotaiFilterBarSelectMultiFilter\n | JotaiFilterBarNumberFilter\n | JotaiFilterBarEnumFilter\n | JotaiFilterBarBooleanFilter;\n\nexport type JotaiFilterBarProps = Omit<\n FilterBarProps,\n \"search\" | \"filters\" | \"timeRange\" | \"dateRange\"\n> & {\n search?: JotaiFilterBarSearchProps;\n filters?: JotaiFilterBarFilter[];\n timeRange?: JotaiFilterBarRangeProps;\n dateRange?: JotaiFilterBarRangeProps;\n};\n\ntype AnyJotaiAtom = JotaiWritableAtom<unknown>;\n\nfunction useAtomSubscriptions(atoms: AnyJotaiAtom[]) {\n const store = useStore();\n const [, forceRender] = useReducer((count: number) => count + 1, 0);\n const uniqueAtoms = useMemo(() => Array.from(new Set(atoms)), [atoms]);\n\n useEffect(() => {\n if (uniqueAtoms.length === 0) return undefined;\n const unsubscribers = uniqueAtoms.map((atom) => store.sub(atom, forceRender));\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe());\n };\n }, [store, uniqueAtoms]);\n}\n\nfunction useAtomValueSetter<Value>(atom: JotaiWritableAtom<Value>) {\n const store = useStore();\n const value = store.get(atom);\n const setValue = useCallback(\n (next: Value) => {\n store.set(atom, next);\n },\n [atom, store],\n );\n return [value, setValue] as const;\n}\n\nexport function useJotaiJsonSchemaFormProps(\n atom: JotaiJsonSchemaFormAtom,\n onChange?: JsonSchemaFormProps[\"onChange\"],\n): Pick<JsonSchemaFormProps, \"value\" | \"onChange\"> {\n const atoms = useMemo(() => [atom as AnyJotaiAtom], [atom]);\n useAtomSubscriptions(atoms);\n const [value, setValue] = useAtomValueSetter(atom);\n\n return useMemo(\n () => ({\n value,\n onChange: (next: Record<string, unknown>) => {\n setValue(next);\n onChange?.(next);\n },\n }),\n [onChange, setValue, value],\n );\n}\n\nfunction useJotaiFilterBarAtoms({\n search,\n filters,\n timeRange,\n dateRange,\n}: {\n search?: JotaiFilterBarSearchProps | undefined;\n filters?: JotaiFilterBarFilter[] | undefined;\n timeRange?: JotaiFilterBarRangeProps | undefined;\n dateRange?: JotaiFilterBarRangeProps | undefined;\n}) {\n const atoms = useMemo(() => {\n const next: AnyJotaiAtom[] = [];\n if (search) next.push(search.atom as AnyJotaiAtom);\n filters?.forEach((filter) => next.push(filter.atom as AnyJotaiAtom));\n if (timeRange) next.push(timeRange.atom as AnyJotaiAtom);\n if (dateRange) next.push(dateRange.atom as AnyJotaiAtom);\n return next;\n }, [dateRange, filters, search, timeRange]);\n useAtomSubscriptions(atoms);\n}\n\nfunction useJotaiSearch(search: JotaiFilterBarSearchProps | undefined): FilterBarSearchProps | undefined {\n const store = useStore();\n if (!search) return undefined;\n const { atom, onChange, ...rest } = search;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n}\n\nfunction useJotaiRange(range: JotaiFilterBarRangeProps | undefined): FilterBarRangeProps | undefined {\n const store = useStore();\n if (!range) return undefined;\n const { atom, onApply, ...rest } = range;\n const value = store.get(atom);\n return {\n ...rest,\n ...(value.from !== undefined ? { from: value.from } : {}),\n ...(value.to !== undefined ? { to: value.to } : {}),\n onApply: (from: string, to: string) => {\n store.set(atom, { from, to });\n onApply?.(from, to);\n },\n };\n}\n\nfunction useJotaiFilters(filters: JotaiFilterBarFilter[] | undefined): FilterBarFilter[] | undefined {\n const store = useStore();\n if (!filters) return undefined;\n return filters.map((filter) => bindJotaiFilter(store, filter));\n}\n\nfunction bindJotaiFilter(store: ReturnType<typeof useStore>, filter: JotaiFilterBarFilter): FilterBarFilter {\n switch (filter.kind) {\n case \"text\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"lookup\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"lookup-multi\":\n case \"select-multi\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string[]) => {\n store.set(atom, next);\n onChange?.(next);\n },\n } as FilterBarFilter;\n }\n case \"multi\":\n case \"nested-multi\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: FilterBarMultiFilter[\"value\"]) => {\n store.set(atom, next);\n onChange?.(next);\n },\n } as FilterBarFilter;\n }\n case \"number\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: FilterBarNumberFilter[\"value\"]) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"enum\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"boolean\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: boolean) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n }\n}\n\nexport function useJotaiFilterBarProps({\n search,\n filters,\n timeRange,\n dateRange,\n ...props\n}: JotaiFilterBarProps): FilterBarProps {\n useJotaiFilterBarAtoms({ search, filters, timeRange, dateRange });\n const controlledSearch = useJotaiSearch(search);\n const controlledFilters = useJotaiFilters(filters);\n const controlledTimeRange = useJotaiRange(timeRange);\n const controlledDateRange = useJotaiRange(dateRange);\n\n return {\n ...props,\n ...(controlledSearch ? { search: controlledSearch } : {}),\n ...(controlledFilters ? { filters: controlledFilters } : {}),\n ...(controlledTimeRange ? { timeRange: controlledTimeRange } : {}),\n ...(controlledDateRange ? { dateRange: controlledDateRange } : {}),\n };\n}\n"],"names":["useStore","useReducer","useMemo","useEffect","useCallback"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { WritableAtom } from 'jotai';
2
+ import { FilterBarBooleanFilter, FilterBarEnumFilter, FilterBarFilter, FilterBarLookupFilter, FilterBarLookupMultiFilter, FilterBarMultiFilter, FilterBarNestedMultiFilter, FilterBarNumberFilter, FilterBarProps, FilterBarRangeProps, FilterBarSearchProps, FilterBarSelectMultiFilter, FilterBarTextFilter } from './FilterBar';
3
+ import { JsonSchemaFormProps } from './json-schema-form-types';
4
+ export type JotaiWritableAtom<Value> = WritableAtom<Value, [Value], unknown>;
5
+ export type JotaiJsonSchemaFormAtom = JotaiWritableAtom<Record<string, unknown>>;
6
+ export type JotaiJsonSchemaFormProps = Omit<JsonSchemaFormProps, "value" | "onChange"> & {
7
+ atom: JotaiJsonSchemaFormAtom;
8
+ onChange?: JsonSchemaFormProps["onChange"];
9
+ };
10
+ export type JotaiFilterBarSearchProps = Omit<FilterBarSearchProps, "value" | "onChange"> & {
11
+ atom: JotaiWritableAtom<string>;
12
+ onChange?: FilterBarSearchProps["onChange"];
13
+ };
14
+ export type JotaiFilterBarRangeValue = {
15
+ from?: string;
16
+ to?: string;
17
+ };
18
+ export type JotaiFilterBarRangeProps = Omit<FilterBarRangeProps, "from" | "to" | "onApply"> & {
19
+ atom: JotaiWritableAtom<JotaiFilterBarRangeValue>;
20
+ onApply?: FilterBarRangeProps["onApply"];
21
+ };
22
+ type AtomizedFilter<TFilter extends FilterBarFilter> = Omit<TFilter, "value" | "onChange"> & {
23
+ atom: JotaiWritableAtom<TFilter["value"]>;
24
+ onChange?: TFilter["onChange"];
25
+ };
26
+ export type JotaiFilterBarTextFilter = AtomizedFilter<FilterBarTextFilter>;
27
+ export type JotaiFilterBarLookupFilter = AtomizedFilter<FilterBarLookupFilter>;
28
+ export type JotaiFilterBarLookupMultiFilter = AtomizedFilter<FilterBarLookupMultiFilter>;
29
+ export type JotaiFilterBarMultiFilter = AtomizedFilter<FilterBarMultiFilter>;
30
+ export type JotaiFilterBarNestedMultiFilter = AtomizedFilter<FilterBarNestedMultiFilter>;
31
+ export type JotaiFilterBarSelectMultiFilter = AtomizedFilter<FilterBarSelectMultiFilter>;
32
+ export type JotaiFilterBarNumberFilter = AtomizedFilter<FilterBarNumberFilter>;
33
+ export type JotaiFilterBarEnumFilter = AtomizedFilter<FilterBarEnumFilter>;
34
+ export type JotaiFilterBarBooleanFilter = AtomizedFilter<FilterBarBooleanFilter>;
35
+ export type JotaiFilterBarFilter = JotaiFilterBarTextFilter | JotaiFilterBarLookupFilter | JotaiFilterBarLookupMultiFilter | JotaiFilterBarMultiFilter | JotaiFilterBarNestedMultiFilter | JotaiFilterBarSelectMultiFilter | JotaiFilterBarNumberFilter | JotaiFilterBarEnumFilter | JotaiFilterBarBooleanFilter;
36
+ export type JotaiFilterBarProps = Omit<FilterBarProps, "search" | "filters" | "timeRange" | "dateRange"> & {
37
+ search?: JotaiFilterBarSearchProps;
38
+ filters?: JotaiFilterBarFilter[];
39
+ timeRange?: JotaiFilterBarRangeProps;
40
+ dateRange?: JotaiFilterBarRangeProps;
41
+ };
42
+ export declare function useJotaiJsonSchemaFormProps(atom: JotaiJsonSchemaFormAtom, onChange?: JsonSchemaFormProps["onChange"]): Pick<JsonSchemaFormProps, "value" | "onChange">;
43
+ export declare function useJotaiFilterBarProps({ search, filters, timeRange, dateRange, ...props }: JotaiFilterBarProps): FilterBarProps;
44
+ export {};
45
+ //# sourceMappingURL=jotai-bindings-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai-bindings-core.d.ts","sourceRoot":"","sources":["../../src/components/jotai-bindings-core.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,MAAM,iBAAiB,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACvF,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACzF,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG;IAC5F,IAAI,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,cAAc,CAAC,OAAO,SAAS,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC3F,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,0BAA0B,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAC/E,MAAM,MAAM,+BAA+B,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;AACzF,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAC7E,MAAM,MAAM,+BAA+B,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;AACzF,MAAM,MAAM,+BAA+B,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;AACzF,MAAM,MAAM,0BAA0B,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAC/E,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC;AAEjF,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,0BAA0B,GAC1B,+BAA+B,GAC/B,yBAAyB,GACzB,+BAA+B,GAC/B,+BAA+B,GAC/B,0BAA0B,GAC1B,wBAAwB,GACxB,2BAA2B,CAAC;AAEhC,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,cAAc,EACd,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CACjD,GAAG;IACF,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,SAAS,CAAC,EAAE,wBAAwB,CAAC;CACtC,CAAC;AA8BF,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,GACzC,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,UAAU,CAAC,CAejD;AAgJD,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,EACT,GAAG,KAAK,EACT,EAAE,mBAAmB,GAAG,cAAc,CActC"}
@@ -0,0 +1,197 @@
1
+ import { useMemo, useReducer, useEffect, useCallback } from "react";
2
+ import { useStore } from "jotai";
3
+ function useAtomSubscriptions(atoms) {
4
+ const store = useStore();
5
+ const [, forceRender] = useReducer((count) => count + 1, 0);
6
+ const uniqueAtoms = useMemo(() => Array.from(new Set(atoms)), [atoms]);
7
+ useEffect(() => {
8
+ if (uniqueAtoms.length === 0) return void 0;
9
+ const unsubscribers = uniqueAtoms.map((atom) => store.sub(atom, forceRender));
10
+ return () => {
11
+ unsubscribers.forEach((unsubscribe) => unsubscribe());
12
+ };
13
+ }, [store, uniqueAtoms]);
14
+ }
15
+ function useAtomValueSetter(atom) {
16
+ const store = useStore();
17
+ const value = store.get(atom);
18
+ const setValue = useCallback(
19
+ (next) => {
20
+ store.set(atom, next);
21
+ },
22
+ [atom, store]
23
+ );
24
+ return [value, setValue];
25
+ }
26
+ function useJotaiJsonSchemaFormProps(atom, onChange) {
27
+ const atoms = useMemo(() => [atom], [atom]);
28
+ useAtomSubscriptions(atoms);
29
+ const [value, setValue] = useAtomValueSetter(atom);
30
+ return useMemo(
31
+ () => ({
32
+ value,
33
+ onChange: (next) => {
34
+ setValue(next);
35
+ onChange == null ? void 0 : onChange(next);
36
+ }
37
+ }),
38
+ [onChange, setValue, value]
39
+ );
40
+ }
41
+ function useJotaiFilterBarAtoms({
42
+ search,
43
+ filters,
44
+ timeRange,
45
+ dateRange
46
+ }) {
47
+ const atoms = useMemo(() => {
48
+ const next = [];
49
+ if (search) next.push(search.atom);
50
+ filters == null ? void 0 : filters.forEach((filter) => next.push(filter.atom));
51
+ if (timeRange) next.push(timeRange.atom);
52
+ if (dateRange) next.push(dateRange.atom);
53
+ return next;
54
+ }, [dateRange, filters, search, timeRange]);
55
+ useAtomSubscriptions(atoms);
56
+ }
57
+ function useJotaiSearch(search) {
58
+ const store = useStore();
59
+ if (!search) return void 0;
60
+ const { atom, onChange, ...rest } = search;
61
+ return {
62
+ ...rest,
63
+ value: store.get(atom),
64
+ onChange: (next) => {
65
+ store.set(atom, next);
66
+ onChange == null ? void 0 : onChange(next);
67
+ }
68
+ };
69
+ }
70
+ function useJotaiRange(range) {
71
+ const store = useStore();
72
+ if (!range) return void 0;
73
+ const { atom, onApply, ...rest } = range;
74
+ const value = store.get(atom);
75
+ return {
76
+ ...rest,
77
+ ...value.from !== void 0 ? { from: value.from } : {},
78
+ ...value.to !== void 0 ? { to: value.to } : {},
79
+ onApply: (from, to) => {
80
+ store.set(atom, { from, to });
81
+ onApply == null ? void 0 : onApply(from, to);
82
+ }
83
+ };
84
+ }
85
+ function useJotaiFilters(filters) {
86
+ const store = useStore();
87
+ if (!filters) return void 0;
88
+ return filters.map((filter) => bindJotaiFilter(store, filter));
89
+ }
90
+ function bindJotaiFilter(store, filter) {
91
+ switch (filter.kind) {
92
+ case "text": {
93
+ const { atom, onChange, ...rest } = filter;
94
+ return {
95
+ ...rest,
96
+ value: store.get(atom),
97
+ onChange: (next) => {
98
+ store.set(atom, next);
99
+ onChange == null ? void 0 : onChange(next);
100
+ }
101
+ };
102
+ }
103
+ case "lookup": {
104
+ const { atom, onChange, ...rest } = filter;
105
+ return {
106
+ ...rest,
107
+ value: store.get(atom),
108
+ onChange: (next) => {
109
+ store.set(atom, next);
110
+ onChange == null ? void 0 : onChange(next);
111
+ }
112
+ };
113
+ }
114
+ case "lookup-multi":
115
+ case "select-multi": {
116
+ const { atom, onChange, ...rest } = filter;
117
+ return {
118
+ ...rest,
119
+ value: store.get(atom),
120
+ onChange: (next) => {
121
+ store.set(atom, next);
122
+ onChange == null ? void 0 : onChange(next);
123
+ }
124
+ };
125
+ }
126
+ case "multi":
127
+ case "nested-multi": {
128
+ const { atom, onChange, ...rest } = filter;
129
+ return {
130
+ ...rest,
131
+ value: store.get(atom),
132
+ onChange: (next) => {
133
+ store.set(atom, next);
134
+ onChange == null ? void 0 : onChange(next);
135
+ }
136
+ };
137
+ }
138
+ case "number": {
139
+ const { atom, onChange, ...rest } = filter;
140
+ return {
141
+ ...rest,
142
+ value: store.get(atom),
143
+ onChange: (next) => {
144
+ store.set(atom, next);
145
+ onChange == null ? void 0 : onChange(next);
146
+ }
147
+ };
148
+ }
149
+ case "enum": {
150
+ const { atom, onChange, ...rest } = filter;
151
+ return {
152
+ ...rest,
153
+ value: store.get(atom),
154
+ onChange: (next) => {
155
+ store.set(atom, next);
156
+ onChange == null ? void 0 : onChange(next);
157
+ }
158
+ };
159
+ }
160
+ case "boolean": {
161
+ const { atom, onChange, ...rest } = filter;
162
+ return {
163
+ ...rest,
164
+ value: store.get(atom),
165
+ onChange: (next) => {
166
+ store.set(atom, next);
167
+ onChange == null ? void 0 : onChange(next);
168
+ }
169
+ };
170
+ }
171
+ }
172
+ }
173
+ function useJotaiFilterBarProps({
174
+ search,
175
+ filters,
176
+ timeRange,
177
+ dateRange,
178
+ ...props
179
+ }) {
180
+ useJotaiFilterBarAtoms({ search, filters, timeRange, dateRange });
181
+ const controlledSearch = useJotaiSearch(search);
182
+ const controlledFilters = useJotaiFilters(filters);
183
+ const controlledTimeRange = useJotaiRange(timeRange);
184
+ const controlledDateRange = useJotaiRange(dateRange);
185
+ return {
186
+ ...props,
187
+ ...controlledSearch ? { search: controlledSearch } : {},
188
+ ...controlledFilters ? { filters: controlledFilters } : {},
189
+ ...controlledTimeRange ? { timeRange: controlledTimeRange } : {},
190
+ ...controlledDateRange ? { dateRange: controlledDateRange } : {}
191
+ };
192
+ }
193
+ export {
194
+ useJotaiFilterBarProps,
195
+ useJotaiJsonSchemaFormProps
196
+ };
197
+ //# sourceMappingURL=jotai-bindings-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai-bindings-core.js","sources":["../../src/components/jotai-bindings-core.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport { useStore, type WritableAtom } from \"jotai\";\nimport type {\n FilterBarBooleanFilter,\n FilterBarEnumFilter,\n FilterBarFilter,\n FilterBarLookupFilter,\n FilterBarLookupMultiFilter,\n FilterBarMultiFilter,\n FilterBarNestedMultiFilter,\n FilterBarNumberFilter,\n FilterBarProps,\n FilterBarRangeProps,\n FilterBarSearchProps,\n FilterBarSelectMultiFilter,\n FilterBarTextFilter,\n} from \"./FilterBar\";\nimport type { JsonSchemaFormProps } from \"./json-schema-form-types\";\n\nexport type JotaiWritableAtom<Value> = WritableAtom<Value, [Value], unknown>;\nexport type JotaiJsonSchemaFormAtom = JotaiWritableAtom<Record<string, unknown>>;\n\nexport type JotaiJsonSchemaFormProps = Omit<JsonSchemaFormProps, \"value\" | \"onChange\"> & {\n atom: JotaiJsonSchemaFormAtom;\n onChange?: JsonSchemaFormProps[\"onChange\"];\n};\n\nexport type JotaiFilterBarSearchProps = Omit<FilterBarSearchProps, \"value\" | \"onChange\"> & {\n atom: JotaiWritableAtom<string>;\n onChange?: FilterBarSearchProps[\"onChange\"];\n};\n\nexport type JotaiFilterBarRangeValue = {\n from?: string;\n to?: string;\n};\n\nexport type JotaiFilterBarRangeProps = Omit<FilterBarRangeProps, \"from\" | \"to\" | \"onApply\"> & {\n atom: JotaiWritableAtom<JotaiFilterBarRangeValue>;\n onApply?: FilterBarRangeProps[\"onApply\"];\n};\n\ntype AtomizedFilter<TFilter extends FilterBarFilter> = Omit<TFilter, \"value\" | \"onChange\"> & {\n atom: JotaiWritableAtom<TFilter[\"value\"]>;\n onChange?: TFilter[\"onChange\"];\n};\n\nexport type JotaiFilterBarTextFilter = AtomizedFilter<FilterBarTextFilter>;\nexport type JotaiFilterBarLookupFilter = AtomizedFilter<FilterBarLookupFilter>;\nexport type JotaiFilterBarLookupMultiFilter = AtomizedFilter<FilterBarLookupMultiFilter>;\nexport type JotaiFilterBarMultiFilter = AtomizedFilter<FilterBarMultiFilter>;\nexport type JotaiFilterBarNestedMultiFilter = AtomizedFilter<FilterBarNestedMultiFilter>;\nexport type JotaiFilterBarSelectMultiFilter = AtomizedFilter<FilterBarSelectMultiFilter>;\nexport type JotaiFilterBarNumberFilter = AtomizedFilter<FilterBarNumberFilter>;\nexport type JotaiFilterBarEnumFilter = AtomizedFilter<FilterBarEnumFilter>;\nexport type JotaiFilterBarBooleanFilter = AtomizedFilter<FilterBarBooleanFilter>;\n\nexport type JotaiFilterBarFilter =\n | JotaiFilterBarTextFilter\n | JotaiFilterBarLookupFilter\n | JotaiFilterBarLookupMultiFilter\n | JotaiFilterBarMultiFilter\n | JotaiFilterBarNestedMultiFilter\n | JotaiFilterBarSelectMultiFilter\n | JotaiFilterBarNumberFilter\n | JotaiFilterBarEnumFilter\n | JotaiFilterBarBooleanFilter;\n\nexport type JotaiFilterBarProps = Omit<\n FilterBarProps,\n \"search\" | \"filters\" | \"timeRange\" | \"dateRange\"\n> & {\n search?: JotaiFilterBarSearchProps;\n filters?: JotaiFilterBarFilter[];\n timeRange?: JotaiFilterBarRangeProps;\n dateRange?: JotaiFilterBarRangeProps;\n};\n\ntype AnyJotaiAtom = JotaiWritableAtom<unknown>;\n\nfunction useAtomSubscriptions(atoms: AnyJotaiAtom[]) {\n const store = useStore();\n const [, forceRender] = useReducer((count: number) => count + 1, 0);\n const uniqueAtoms = useMemo(() => Array.from(new Set(atoms)), [atoms]);\n\n useEffect(() => {\n if (uniqueAtoms.length === 0) return undefined;\n const unsubscribers = uniqueAtoms.map((atom) => store.sub(atom, forceRender));\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe());\n };\n }, [store, uniqueAtoms]);\n}\n\nfunction useAtomValueSetter<Value>(atom: JotaiWritableAtom<Value>) {\n const store = useStore();\n const value = store.get(atom);\n const setValue = useCallback(\n (next: Value) => {\n store.set(atom, next);\n },\n [atom, store],\n );\n return [value, setValue] as const;\n}\n\nexport function useJotaiJsonSchemaFormProps(\n atom: JotaiJsonSchemaFormAtom,\n onChange?: JsonSchemaFormProps[\"onChange\"],\n): Pick<JsonSchemaFormProps, \"value\" | \"onChange\"> {\n const atoms = useMemo(() => [atom as AnyJotaiAtom], [atom]);\n useAtomSubscriptions(atoms);\n const [value, setValue] = useAtomValueSetter(atom);\n\n return useMemo(\n () => ({\n value,\n onChange: (next: Record<string, unknown>) => {\n setValue(next);\n onChange?.(next);\n },\n }),\n [onChange, setValue, value],\n );\n}\n\nfunction useJotaiFilterBarAtoms({\n search,\n filters,\n timeRange,\n dateRange,\n}: {\n search?: JotaiFilterBarSearchProps | undefined;\n filters?: JotaiFilterBarFilter[] | undefined;\n timeRange?: JotaiFilterBarRangeProps | undefined;\n dateRange?: JotaiFilterBarRangeProps | undefined;\n}) {\n const atoms = useMemo(() => {\n const next: AnyJotaiAtom[] = [];\n if (search) next.push(search.atom as AnyJotaiAtom);\n filters?.forEach((filter) => next.push(filter.atom as AnyJotaiAtom));\n if (timeRange) next.push(timeRange.atom as AnyJotaiAtom);\n if (dateRange) next.push(dateRange.atom as AnyJotaiAtom);\n return next;\n }, [dateRange, filters, search, timeRange]);\n useAtomSubscriptions(atoms);\n}\n\nfunction useJotaiSearch(search: JotaiFilterBarSearchProps | undefined): FilterBarSearchProps | undefined {\n const store = useStore();\n if (!search) return undefined;\n const { atom, onChange, ...rest } = search;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n}\n\nfunction useJotaiRange(range: JotaiFilterBarRangeProps | undefined): FilterBarRangeProps | undefined {\n const store = useStore();\n if (!range) return undefined;\n const { atom, onApply, ...rest } = range;\n const value = store.get(atom);\n return {\n ...rest,\n ...(value.from !== undefined ? { from: value.from } : {}),\n ...(value.to !== undefined ? { to: value.to } : {}),\n onApply: (from: string, to: string) => {\n store.set(atom, { from, to });\n onApply?.(from, to);\n },\n };\n}\n\nfunction useJotaiFilters(filters: JotaiFilterBarFilter[] | undefined): FilterBarFilter[] | undefined {\n const store = useStore();\n if (!filters) return undefined;\n return filters.map((filter) => bindJotaiFilter(store, filter));\n}\n\nfunction bindJotaiFilter(store: ReturnType<typeof useStore>, filter: JotaiFilterBarFilter): FilterBarFilter {\n switch (filter.kind) {\n case \"text\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"lookup\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"lookup-multi\":\n case \"select-multi\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string[]) => {\n store.set(atom, next);\n onChange?.(next);\n },\n } as FilterBarFilter;\n }\n case \"multi\":\n case \"nested-multi\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: FilterBarMultiFilter[\"value\"]) => {\n store.set(atom, next);\n onChange?.(next);\n },\n } as FilterBarFilter;\n }\n case \"number\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: FilterBarNumberFilter[\"value\"]) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"enum\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: string) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n case \"boolean\": {\n const { atom, onChange, ...rest } = filter;\n return {\n ...rest,\n value: store.get(atom),\n onChange: (next: boolean) => {\n store.set(atom, next);\n onChange?.(next);\n },\n };\n }\n }\n}\n\nexport function useJotaiFilterBarProps({\n search,\n filters,\n timeRange,\n dateRange,\n ...props\n}: JotaiFilterBarProps): FilterBarProps {\n useJotaiFilterBarAtoms({ search, filters, timeRange, dateRange });\n const controlledSearch = useJotaiSearch(search);\n const controlledFilters = useJotaiFilters(filters);\n const controlledTimeRange = useJotaiRange(timeRange);\n const controlledDateRange = useJotaiRange(dateRange);\n\n return {\n ...props,\n ...(controlledSearch ? { search: controlledSearch } : {}),\n ...(controlledFilters ? { filters: controlledFilters } : {}),\n ...(controlledTimeRange ? { timeRange: controlledTimeRange } : {}),\n ...(controlledDateRange ? { dateRange: controlledDateRange } : {}),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const FilterBar = require("./FilterBar.cjs");
5
+ const JsonSchemaForm = require("./JsonSchemaForm.cjs");
6
+ const jotaiBindingsCore = require("./jotai-bindings-core.cjs");
7
+ function JotaiJsonSchemaForm({ atom, onChange, ...props }) {
8
+ const controlled = jotaiBindingsCore.useJotaiJsonSchemaFormProps(atom, onChange);
9
+ return /* @__PURE__ */ jsxRuntime.jsx(JsonSchemaForm.JsonSchemaForm, { ...props, ...controlled });
10
+ }
11
+ function JotaiFilterBar(props) {
12
+ const controlled = jotaiBindingsCore.useJotaiFilterBarProps(props);
13
+ return /* @__PURE__ */ jsxRuntime.jsx(FilterBar.FilterBar, { ...controlled });
14
+ }
15
+ exports.JotaiFilterBar = JotaiFilterBar;
16
+ exports.JotaiJsonSchemaForm = JotaiJsonSchemaForm;
17
+ //# sourceMappingURL=jotai-bindings.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai-bindings.cjs","sources":["../../src/components/jotai-bindings.tsx"],"sourcesContent":["import { FilterBar } from \"./FilterBar\";\nimport { JsonSchemaForm } from \"./JsonSchemaForm\";\nimport {\n useJotaiFilterBarProps,\n useJotaiJsonSchemaFormProps,\n type JotaiFilterBarProps,\n type JotaiJsonSchemaFormProps,\n} from \"./jotai-bindings-core\";\n\nexport function JotaiJsonSchemaForm({ atom, onChange, ...props }: JotaiJsonSchemaFormProps) {\n const controlled = useJotaiJsonSchemaFormProps(atom, onChange);\n return <JsonSchemaForm {...props} {...controlled} />;\n}\n\nexport function JotaiFilterBar(props: JotaiFilterBarProps) {\n const controlled = useJotaiFilterBarProps(props);\n return <FilterBar {...controlled} />;\n}\n"],"names":["useJotaiJsonSchemaFormProps","jsx","JsonSchemaForm","useJotaiFilterBarProps","FilterBar"],"mappings":";;;;;;AASO,SAAS,oBAAoB,EAAE,MAAM,UAAU,GAAG,SAAmC;AAC1F,QAAM,aAAaA,kBAAAA,4BAA4B,MAAM,QAAQ;AAC7D,SAAOC,2BAAAA,IAACC,eAAAA,gBAAA,EAAgB,GAAG,OAAQ,GAAG,WAAA,CAAY;AACpD;AAEO,SAAS,eAAe,OAA4B;AACzD,QAAM,aAAaC,kBAAAA,uBAAuB,KAAK;AAC/C,SAAOF,+BAACG,UAAAA,WAAA,EAAW,GAAG,WAAA,CAAY;AACpC;;;"}
@@ -0,0 +1,4 @@
1
+ import { JotaiFilterBarProps, JotaiJsonSchemaFormProps } from './jotai-bindings-core';
2
+ export declare function JotaiJsonSchemaForm({ atom, onChange, ...props }: JotaiJsonSchemaFormProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare function JotaiFilterBar(props: JotaiFilterBarProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=jotai-bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai-bindings.d.ts","sourceRoot":"","sources":["../../src/components/jotai-bindings.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,2CAGzF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAGxD"}