@vritti/quantum-ui 0.3.27 → 0.4.1

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 (105) hide show
  1. package/dist/Avatar.js +5 -5
  2. package/dist/Checkbox.js +16 -11
  3. package/dist/Checkbox.js.map +1 -1
  4. package/dist/Checkbox2.js +4 -5
  5. package/dist/Checkbox2.js.map +1 -1
  6. package/dist/Combination.js +1 -1
  7. package/dist/Dialog.js +1 -1
  8. package/dist/Progress.js +2 -2
  9. package/dist/RadioGroup.js +4 -5
  10. package/dist/RadioGroup.js.map +1 -1
  11. package/dist/Sidebar.js +1 -1
  12. package/dist/Sonner.js +1 -1
  13. package/dist/Switch.js +19 -14
  14. package/dist/Switch.js.map +1 -1
  15. package/dist/TabsSkeleton.js +1 -1
  16. package/dist/Toggle.js +1 -1
  17. package/dist/assets/quantum-ui.css +1 -1
  18. package/dist/components/RichTextEditor.js +1 -1
  19. package/dist/components/TreeView.js +2 -3
  20. package/dist/components/TreeView.js.map +1 -1
  21. package/dist/disabledTip.js +13 -0
  22. package/dist/disabledTip.js.map +1 -0
  23. package/dist/dropdown-menu.js +5 -7
  24. package/dist/dropdown-menu.js.map +1 -1
  25. package/dist/image-component.js +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/index13.js +4 -6
  28. package/dist/index13.js.map +1 -1
  29. package/dist/index14.js +3 -5
  30. package/dist/index14.js.map +1 -1
  31. package/dist/index15.js +8 -9
  32. package/dist/index15.js.map +1 -1
  33. package/dist/index16.js +1 -1
  34. package/dist/index17.js +1 -1
  35. package/dist/index19.js +2 -4
  36. package/dist/index19.js.map +1 -1
  37. package/dist/index20.js +1 -1
  38. package/dist/index21.js +139 -1
  39. package/dist/index21.js.map +1 -1
  40. package/dist/index22.js +3 -4
  41. package/dist/index22.js.map +1 -1
  42. package/dist/index23.js +70 -122
  43. package/dist/index23.js.map +1 -1
  44. package/dist/index24.js +1128 -70
  45. package/dist/index24.js.map +1 -1
  46. package/dist/index25.js +231 -11
  47. package/dist/index25.js.map +1 -1
  48. package/dist/index26.js +2509 -1106
  49. package/dist/index26.js.map +1 -1
  50. package/dist/index27.js +23 -223
  51. package/dist/index27.js.map +1 -1
  52. package/dist/index28.js +3 -2535
  53. package/dist/index28.js.map +1 -1
  54. package/dist/index29.js +36 -31
  55. package/dist/index29.js.map +1 -1
  56. package/dist/index30.js +308 -3
  57. package/dist/index30.js.map +1 -1
  58. package/dist/index31.js +8 -36
  59. package/dist/index31.js.map +1 -1
  60. package/dist/index32.js +25 -305
  61. package/dist/index32.js.map +1 -1
  62. package/dist/index33.js +60 -8
  63. package/dist/index33.js.map +1 -1
  64. package/dist/index34.js +11 -30
  65. package/dist/index34.js.map +1 -1
  66. package/dist/index35.js +35 -59
  67. package/dist/index35.js.map +1 -1
  68. package/dist/index36.js +35348 -9
  69. package/dist/index36.js.map +1 -1
  70. package/dist/index37.js +79 -36
  71. package/dist/index37.js.map +1 -1
  72. package/dist/index38.js +184 -35341
  73. package/dist/index38.js.map +1 -1
  74. package/dist/index5.js +2 -4
  75. package/dist/index5.js.map +1 -1
  76. package/dist/index8.js +7 -0
  77. package/dist/index8.js.map +1 -1
  78. package/dist/lib/components/Checkbox/Checkbox.d.ts +1 -0
  79. package/dist/lib/components/Checkbox/Checkbox.d.ts.map +1 -1
  80. package/dist/lib/components/Switch/Switch.d.ts +4 -1
  81. package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
  82. package/dist/lib/config/index.d.ts +5 -0
  83. package/dist/lib/config/index.d.ts.map +1 -1
  84. package/dist/lib/hooks/useSSE.d.ts.map +1 -1
  85. package/dist/lib/selects/permission-group/PermissionGroupSelector.d.ts +4 -0
  86. package/dist/lib/selects/permission-group/PermissionGroupSelector.d.ts.map +1 -0
  87. package/dist/lib/selects/permission-group/index.d.ts +2 -0
  88. package/dist/lib/selects/permission-group/index.d.ts.map +1 -0
  89. package/dist/lib/types/catalog-resolver.d.ts +18 -6
  90. package/dist/lib/types/catalog-resolver.d.ts.map +1 -1
  91. package/dist/lib/utils/disabledTip.d.ts +3 -0
  92. package/dist/lib/utils/disabledTip.d.ts.map +1 -0
  93. package/dist/selects/permission-group.js +21 -0
  94. package/dist/selects/permission-group.js.map +1 -0
  95. package/dist/types/catalog-resolver.js +1 -1
  96. package/dist/types/catalog-resolver.js.map +1 -1
  97. package/dist/useTimer.js +2 -1
  98. package/dist/useTimer.js.map +1 -1
  99. package/dist/utils/motion.js +2 -2
  100. package/dist/value.js +1 -1
  101. package/package.json +5 -1
  102. package/dist/index39.js +0 -84
  103. package/dist/index39.js.map +0 -1
  104. package/dist/index40.js +0 -199
  105. package/dist/index40.js.map +0 -1
package/dist/index5.js CHANGED
@@ -1,10 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index20.js';
3
- import { c as createContextScope } from './index21.js';
4
- import { u as useLayoutEffect2 } from './index30.js';
3
+ import { u as useId, P as Presence, c as createContextScope } from './index21.js';
4
+ import { u as useLayoutEffect2 } from './index28.js';
5
5
  import { u as useComposedRefs } from './index12.js';
6
- import { P as Presence } from './index23.js';
7
- import { u as useId } from './index25.js';
8
6
  import { jsx } from 'react/jsx-runtime';
9
7
 
10
8
  var COLLAPSIBLE_NAME = "Collapsible";
@@ -1 +1 @@
1
- {"version":3,"file":"index5.js","sources":["../node_modules/.pnpm/@radix-ui+react-collapsible@1.1.12_@types+react-dom@19.2.3_@types+react@19.2.14__@types_f33eb5e944edcffc4be9ac071951afef/node_modules/@radix-ui/react-collapsible/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["useLayoutEffect"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index5.js","sources":["../node_modules/.pnpm/@radix-ui+react-collapsible@1.1.12_@types+react-dom@19.2.3_@types+react@19.2.14__@types_f33eb5e944edcffc4be9ac071951afef/node_modules/@radix-ui/react-collapsible/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["useLayoutEffect"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index8.js CHANGED
@@ -26,6 +26,9 @@ const defaultConfig = {
26
26
  currency: {
27
27
  resolveCurrency: void 0
28
28
  },
29
+ sse: {
30
+ onRequest: void 0
31
+ },
29
32
  views: {
30
33
  viewsEndpoint: "table-views",
31
34
  statesEndpoint: "table-states"
@@ -76,6 +79,10 @@ function configureQuantumUI(userConfig) {
76
79
  ...defaultConfig.currency,
77
80
  ...userConfig.currency || {}
78
81
  },
82
+ sse: {
83
+ ...defaultConfig.sse,
84
+ ...userConfig.sse || {}
85
+ },
79
86
  views: {
80
87
  ...defaultConfig.views,
81
88
  ...userConfig.views || {}
@@ -1 +1 @@
1
- {"version":3,"file":"index8.js","sources":["../lib/config/index.ts"],"sourcesContent":["export interface CsrfConfig {\n endpoint: string;\n\n enabled: boolean;\n\n headerName: string;\n}\n\nexport interface AxiosConfig {\n baseURL: string;\n\n timeout: number;\n\n withCredentials: boolean;\n\n headers?: Record<string, string>;\n\n onRequest?: (config: import('axios').InternalAxiosRequestConfig) => void | Promise<void>;\n}\n\nexport interface AuthConfig {\n tokenHeaderName: string;\n\n tokenPrefix: string;\n\n tokenEndpoint: string;\n\n refreshEndpoint: string;\n\n sessionRecoveryEnabled: boolean;\n}\n\nexport interface ViewsConfig {\n viewsEndpoint: string;\n\n statesEndpoint: string;\n}\n\nexport interface TimeZoneConfig {\n resolveTimeZone?: () => string | null | undefined;\n}\n\nexport interface CurrencyConfig {\n resolveCurrency?: () => string | null | undefined;\n}\n\nexport interface QuantumUIConfig {\n csrf?: Partial<CsrfConfig>;\n\n axios?: Partial<AxiosConfig>;\n\n auth?: Partial<AuthConfig>;\n\n timeZone?: TimeZoneConfig;\n\n currency?: CurrencyConfig;\n\n views: ViewsConfig;\n}\n\nconst defaultConfig: {\n csrf: CsrfConfig;\n axios: AxiosConfig;\n auth: AuthConfig;\n views: Required<ViewsConfig>;\n timeZone: TimeZoneConfig;\n currency: CurrencyConfig;\n} = {\n csrf: {\n endpoint: 'csrf/token',\n enabled: true,\n headerName: 'x-csrf-token',\n },\n axios: {\n baseURL: '/api',\n timeout: 30000,\n withCredentials: true,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n },\n auth: {\n tokenHeaderName: 'Authorization',\n tokenPrefix: 'Bearer',\n tokenEndpoint: 'auth/access-token',\n refreshEndpoint: 'auth/refresh-tokens',\n sessionRecoveryEnabled: true,\n },\n timeZone: {\n resolveTimeZone: undefined,\n },\n currency: {\n resolveCurrency: undefined,\n },\n views: {\n viewsEndpoint: 'table-views',\n statesEndpoint: 'table-states',\n },\n};\n\nconst GLOBAL_CONFIG_KEY = '__QUANTUM_UI_CONFIG__';\n\ntype GlobalWindow = Window & typeof globalThis & { [GLOBAL_CONFIG_KEY]?: typeof defaultConfig };\n\n// Get the current config from global storage or initialize with defaults\nfunction getGlobalConfig(): typeof defaultConfig {\n if (typeof window !== 'undefined') {\n const globalWindow = window as GlobalWindow;\n if (!globalWindow[GLOBAL_CONFIG_KEY]) {\n globalWindow[GLOBAL_CONFIG_KEY] = { ...defaultConfig };\n }\n return globalWindow[GLOBAL_CONFIG_KEY] ?? { ...defaultConfig };\n }\n return { ...defaultConfig };\n}\n\n// Set the global config\nfunction setGlobalConfig(config: typeof defaultConfig): void {\n if (typeof window !== 'undefined') {\n (window as GlobalWindow)[GLOBAL_CONFIG_KEY] = config;\n }\n}\n\n// Helper function to define configuration with type safety.\nexport function defineConfig(config: QuantumUIConfig): QuantumUIConfig {\n return config;\n}\n\n// Configure quantum-ui with user settings; call once in the application entry point.\nexport function configureQuantumUI(userConfig: QuantumUIConfig): void {\n const newConfig = {\n csrf: {\n ...defaultConfig.csrf,\n ...(userConfig.csrf || {}),\n },\n axios: {\n ...defaultConfig.axios,\n ...(userConfig.axios || {}),\n headers: {\n ...defaultConfig.axios.headers,\n ...(userConfig.axios?.headers || {}),\n },\n },\n auth: {\n ...defaultConfig.auth,\n ...(userConfig.auth || {}),\n },\n timeZone: {\n ...defaultConfig.timeZone,\n ...(userConfig.timeZone || {}),\n },\n currency: {\n ...defaultConfig.currency,\n ...(userConfig.currency || {}),\n },\n views: {\n ...defaultConfig.views,\n ...(userConfig.views || {}),\n },\n };\n setGlobalConfig(newConfig);\n}\n\n// Get the current configuration.\nexport function getConfig(): typeof defaultConfig {\n return getGlobalConfig();\n}\n\n// Reset configuration to defaults; mainly useful for testing.\nexport function resetConfig(): void {\n setGlobalConfig({ ...defaultConfig });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index8.js","sources":["../lib/config/index.ts"],"sourcesContent":["export interface CsrfConfig {\n endpoint: string;\n\n enabled: boolean;\n\n headerName: string;\n}\n\nexport interface AxiosConfig {\n baseURL: string;\n\n timeout: number;\n\n withCredentials: boolean;\n\n headers?: Record<string, string>;\n\n onRequest?: (config: import('axios').InternalAxiosRequestConfig) => void | Promise<void>;\n}\n\nexport interface AuthConfig {\n tokenHeaderName: string;\n\n tokenPrefix: string;\n\n tokenEndpoint: string;\n\n refreshEndpoint: string;\n\n sessionRecoveryEnabled: boolean;\n}\n\nexport interface ViewsConfig {\n viewsEndpoint: string;\n\n statesEndpoint: string;\n}\n\nexport interface TimeZoneConfig {\n resolveTimeZone?: () => string | null | undefined;\n}\n\nexport interface CurrencyConfig {\n resolveCurrency?: () => string | null | undefined;\n}\n\nexport interface SseConfig {\n // Rewrites an SSE URL before the EventSource opens — the counterpart to axios.onRequest. EventSource\n // cannot set request headers, so whatever an HTTP call carries in a header (workspace/tenant context)\n // has to ride the query string here instead. Returns the URL to connect to.\n onRequest?: (url: string) => string;\n}\n\nexport interface QuantumUIConfig {\n csrf?: Partial<CsrfConfig>;\n\n axios?: Partial<AxiosConfig>;\n\n auth?: Partial<AuthConfig>;\n\n timeZone?: TimeZoneConfig;\n\n currency?: CurrencyConfig;\n\n sse?: SseConfig;\n\n views: ViewsConfig;\n}\n\nconst defaultConfig: {\n csrf: CsrfConfig;\n axios: AxiosConfig;\n auth: AuthConfig;\n views: Required<ViewsConfig>;\n timeZone: TimeZoneConfig;\n currency: CurrencyConfig;\n sse: SseConfig;\n} = {\n csrf: {\n endpoint: 'csrf/token',\n enabled: true,\n headerName: 'x-csrf-token',\n },\n axios: {\n baseURL: '/api',\n timeout: 30000,\n withCredentials: true,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n },\n auth: {\n tokenHeaderName: 'Authorization',\n tokenPrefix: 'Bearer',\n tokenEndpoint: 'auth/access-token',\n refreshEndpoint: 'auth/refresh-tokens',\n sessionRecoveryEnabled: true,\n },\n timeZone: {\n resolveTimeZone: undefined,\n },\n currency: {\n resolveCurrency: undefined,\n },\n sse: {\n onRequest: undefined,\n },\n views: {\n viewsEndpoint: 'table-views',\n statesEndpoint: 'table-states',\n },\n};\n\nconst GLOBAL_CONFIG_KEY = '__QUANTUM_UI_CONFIG__';\n\ntype GlobalWindow = Window & typeof globalThis & { [GLOBAL_CONFIG_KEY]?: typeof defaultConfig };\n\n// Get the current config from global storage or initialize with defaults\nfunction getGlobalConfig(): typeof defaultConfig {\n if (typeof window !== 'undefined') {\n const globalWindow = window as GlobalWindow;\n if (!globalWindow[GLOBAL_CONFIG_KEY]) {\n globalWindow[GLOBAL_CONFIG_KEY] = { ...defaultConfig };\n }\n return globalWindow[GLOBAL_CONFIG_KEY] ?? { ...defaultConfig };\n }\n return { ...defaultConfig };\n}\n\n// Set the global config\nfunction setGlobalConfig(config: typeof defaultConfig): void {\n if (typeof window !== 'undefined') {\n (window as GlobalWindow)[GLOBAL_CONFIG_KEY] = config;\n }\n}\n\n// Helper function to define configuration with type safety.\nexport function defineConfig(config: QuantumUIConfig): QuantumUIConfig {\n return config;\n}\n\n// Configure quantum-ui with user settings; call once in the application entry point.\nexport function configureQuantumUI(userConfig: QuantumUIConfig): void {\n const newConfig = {\n csrf: {\n ...defaultConfig.csrf,\n ...(userConfig.csrf || {}),\n },\n axios: {\n ...defaultConfig.axios,\n ...(userConfig.axios || {}),\n headers: {\n ...defaultConfig.axios.headers,\n ...(userConfig.axios?.headers || {}),\n },\n },\n auth: {\n ...defaultConfig.auth,\n ...(userConfig.auth || {}),\n },\n timeZone: {\n ...defaultConfig.timeZone,\n ...(userConfig.timeZone || {}),\n },\n currency: {\n ...defaultConfig.currency,\n ...(userConfig.currency || {}),\n },\n sse: {\n ...defaultConfig.sse,\n ...(userConfig.sse || {}),\n },\n views: {\n ...defaultConfig.views,\n ...(userConfig.views || {}),\n },\n };\n setGlobalConfig(newConfig);\n}\n\n// Get the current configuration.\nexport function getConfig(): typeof defaultConfig {\n return getGlobalConfig();\n}\n\n// Reset configuration to defaults; mainly useful for testing.\nexport function resetConfig(): void {\n setGlobalConfig({ ...defaultConfig });\n}\n"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof Sha
4
4
  label?: React.ReactNode;
5
5
  description?: React.ReactNode;
6
6
  error?: string;
7
+ disabledTip?: string;
7
8
  }
8
9
  export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLButtonElement>>;
9
10
  //# sourceMappingURL=Checkbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../lib/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAG5E,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC;IAC1F,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,QAAQ,yFAkCpB,CAAC"}
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../lib/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAI5E,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC;IAC1F,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE9B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,eAAO,MAAM,QAAQ,yFAsCpB,CAAC"}
@@ -4,8 +4,11 @@ export interface SwitchProps extends React.ComponentPropsWithoutRef<typeof Shadc
4
4
  label?: React.ReactNode;
5
5
  description: React.ReactNode;
6
6
  error?: string;
7
+ disabledTip?: string;
7
8
  }
8
9
  export declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
9
- export type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch>;
10
+ export type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch> & {
11
+ disabledTip?: string;
12
+ };
10
13
  export declare const CompactSwitch: React.FC<CompactSwitchProps>;
11
14
  //# sourceMappingURL=Switch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../../lib/components/Switch/Switch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,YAAY,CAAC;IACtF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAE7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,MAAM,uFAoClB,CAAC;AAIF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AAG3E,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAEtD,CAAC"}
1
+ {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../../lib/components/Switch/Switch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGtE,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,YAAY,CAAC;IACtF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAE7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,eAAO,MAAM,MAAM,uFAwClB,CAAC;AAIF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAGtG,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CACgC,CAAC"}
@@ -27,12 +27,16 @@ export interface TimeZoneConfig {
27
27
  export interface CurrencyConfig {
28
28
  resolveCurrency?: () => string | null | undefined;
29
29
  }
30
+ export interface SseConfig {
31
+ onRequest?: (url: string) => string;
32
+ }
30
33
  export interface QuantumUIConfig {
31
34
  csrf?: Partial<CsrfConfig>;
32
35
  axios?: Partial<AxiosConfig>;
33
36
  auth?: Partial<AuthConfig>;
34
37
  timeZone?: TimeZoneConfig;
35
38
  currency?: CurrencyConfig;
39
+ sse?: SseConfig;
36
40
  views: ViewsConfig;
37
41
  }
38
42
  declare const defaultConfig: {
@@ -42,6 +46,7 @@ declare const defaultConfig: {
42
46
  views: Required<ViewsConfig>;
43
47
  timeZone: TimeZoneConfig;
44
48
  currency: CurrencyConfig;
49
+ sse: SseConfig;
45
50
  };
46
51
  export declare function defineConfig(config: QuantumUIConfig): QuantumUIConfig;
47
52
  export declare function configureQuantumUI(userConfig: QuantumUIConfig): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/config/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,OAAO,CAAC;IAEjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,eAAe,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IAExB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;IAEtB,eAAe,EAAE,MAAM,CAAC;IAExB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3B,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAE7B,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,QAAA,MAAM,aAAa,EAAE;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;CAiC1B,CAAC;AA0BF,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAErE;AAGD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAgCpE;AAGD,wBAAgB,SAAS,IAAI,OAAO,aAAa,CAEhD;AAGD,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/config/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,OAAO,CAAC;IAEjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,eAAe,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IAExB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;IAEtB,eAAe,EAAE,MAAM,CAAC;IAExB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,SAAS;IAIxB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3B,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAE7B,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAEhB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,QAAA,MAAM,aAAa,EAAE;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,SAAS,CAAC;CAoChB,CAAC;AA0BF,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAErE;AAGD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAoCpE;AAGD,wBAAgB,SAAS,IAAI,OAAO,aAAa,CAEhD;AAGD,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSSE.d.ts","sourceRoot":"","sources":["../../../lib/hooks/useSSE.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,SAAS,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE;SAAG,CAAC,IAAI,MAAM,QAAQ,IAAI,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;KAAE,CAAC;IAClE,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAGD,wBAAgB,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvF,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,QAAQ,CAAC,CAmGxB"}
1
+ {"version":3,"file":"useSSE.d.ts","sourceRoot":"","sources":["../../../lib/hooks/useSSE.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,SAAS,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE;SAAG,CAAC,IAAI,MAAM,QAAQ,IAAI,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;KAAE,CAAC;IAClE,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAGD,wBAAgB,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvF,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,QAAQ,CAAC,CAqGxB"}
@@ -0,0 +1,4 @@
1
+ import { SelectProps } from '../../components/Select/Select';
2
+ export type PermissionGroupSelectorProps = Omit<SelectProps, 'optionsEndpoint'>;
3
+ export declare const PermissionGroupSelector: import('react').ForwardRefExoticComponent<PermissionGroupSelectorProps & import('react').RefAttributes<HTMLButtonElement>>;
4
+ //# sourceMappingURL=PermissionGroupSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionGroupSelector.d.ts","sourceRoot":"","sources":["../../../../lib/selects/permission-group/PermissionGroupSelector.tsx"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE1E,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAGhF,eAAO,MAAM,uBAAuB,4HAWlC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { PermissionGroupSelector, type PermissionGroupSelectorProps } from './PermissionGroupSelector';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/selects/permission-group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,KAAK,4BAA4B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -24,12 +24,19 @@ export interface PlatformDenyCodes {
24
24
  export type FeatureUnlocks = Record<string, PlatformCodes>;
25
25
  export type FeatureLocks = Record<string, PlatformDenyCodes>;
26
26
  export type SiteFeatureLocks = FeatureLocks;
27
+ export interface PermissionGroupRef {
28
+ code: string;
29
+ label: string;
30
+ sortOrder: number;
31
+ }
27
32
  export interface SnapshotPermission {
28
33
  code: string;
29
34
  label: string;
30
35
  isGlobal: boolean;
31
36
  businesses: string[];
32
37
  dependsOn: string[];
38
+ platforms: PlatformBucket[];
39
+ group?: string;
33
40
  }
34
41
  export interface SnapshotMicrofrontendWeb {
35
42
  code: string;
@@ -64,8 +71,9 @@ export interface SnapshotFeature {
64
71
  applicableSiteTypes: SiteType[];
65
72
  permissions: SnapshotPermission[];
66
73
  microfrontends: SnapshotMicrofrontends;
67
- requiredServices?: ServiceCode[];
68
- apiSurfaces?: ApiSurface[];
74
+ requiredServices: ServiceCode[];
75
+ permissionGroups: PermissionGroupRef[];
76
+ apiSurfaces: ApiSurface[];
69
77
  }
70
78
  export interface SnapshotAppFeatureRef {
71
79
  code: string;
@@ -116,7 +124,7 @@ export interface VersionSnapshot {
116
124
  businesses: Record<string, SnapshotBusiness>;
117
125
  }
118
126
  export declare function snapshotFeatureKey(code: string, scope: ScopeType): string;
119
- export declare const SNAPSHOT_SCHEMA_VERSION = 4;
127
+ export declare const SNAPSHOT_SCHEMA_VERSION = 5;
120
128
  export type LockReason = 'PLAN' | 'SITE' | 'SERVICE';
121
129
  export interface CatalogPermission {
122
130
  code: string;
@@ -162,6 +170,7 @@ export interface SiteMatrixPermission {
162
170
  code: string;
163
171
  label: string;
164
172
  dependsOn: string[];
173
+ group?: PermissionGroupRef;
165
174
  web: SiteMatrixCell | null;
166
175
  mobile: SiteMatrixCell | null;
167
176
  graphql: SiteMatrixCell | null;
@@ -176,15 +185,18 @@ export interface SiteMatrixFeature {
176
185
  platforms: PlatformBucket[];
177
186
  inPlan: boolean;
178
187
  availableIn: string[];
179
- apiSurfaces?: ApiSurface[];
188
+ apiSurfaces: ApiSurface[];
180
189
  permissions: SiteMatrixPermission[];
181
190
  }
191
+ export interface MatrixCounts {
192
+ unlocked: number;
193
+ total: number;
194
+ }
182
195
  export interface SiteMatrixApp {
183
196
  code: string;
184
197
  name: string;
185
198
  icon: string | null;
186
- unlockedCount: number;
187
- totalCount: number;
199
+ counts: Record<PlatformBucket, MatrixCounts>;
188
200
  features: SiteMatrixFeature[];
189
201
  }
190
202
  export interface SiteMatrix {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-resolver.d.ts","sourceRoot":"","sources":["../../../lib/types/catalog-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-resolver.d.ts","sourceRoot":"","sources":["../../../lib/types/catalog-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { default as React } from 'react';
2
+ export declare function withDisabledTip(control: React.ReactElement, tip: string | undefined, disabled: boolean | undefined): React.ReactElement;
3
+ //# sourceMappingURL=disabledTip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disabledTip.d.ts","sourceRoot":"","sources":["../../../lib/utils/disabledTip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC,YAAY,EAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC5B,KAAK,CAAC,YAAY,CAcpB"}
@@ -0,0 +1,21 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { S as Select } from '../Select.js';
4
+
5
+ const PermissionGroupSelector = forwardRef((props, ref) => /* @__PURE__ */ jsx(
6
+ Select,
7
+ {
8
+ ref,
9
+ label: "Group",
10
+ placeholder: "No group",
11
+ searchable: true,
12
+ clearable: true,
13
+ optionsEndpoint: "select-api/permission-groups",
14
+ fieldKeys: { valueKey: "id", labelKey: "label", descriptionKey: "code", additionalKeys: "code" },
15
+ ...props
16
+ }
17
+ ));
18
+ PermissionGroupSelector.displayName = "PermissionGroupSelector";
19
+
20
+ export { PermissionGroupSelector };
21
+ //# sourceMappingURL=permission-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-group.js","sources":["../../lib/selects/permission-group/PermissionGroupSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type PermissionGroupSelectorProps = Omit<SelectProps, 'optionsEndpoint'>;\n\n// Pre-configured Select for a version's permission groups; scope with params={{ versionId }}.\nexport const PermissionGroupSelector = forwardRef<HTMLButtonElement, PermissionGroupSelectorProps>((props, ref) => (\n <Select\n ref={ref}\n label=\"Group\"\n placeholder=\"No group\"\n searchable\n clearable\n optionsEndpoint=\"select-api/permission-groups\"\n fieldKeys={{ valueKey: 'id', labelKey: 'label', descriptionKey: 'code', additionalKeys: 'code' }}\n {...props}\n />\n));\nPermissionGroupSelector.displayName = 'PermissionGroupSelector';\n"],"names":[],"mappings":";;;;AAMO,MAAM,uBAAA,GAA0B,UAAA,CAA4D,CAAC,KAAA,EAAO,GAAA,qBACzG,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAY,UAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,SAAA,EAAS,IAAA;AAAA,IACT,eAAA,EAAgB,8BAAA;AAAA,IAChB,SAAA,EAAW,EAAE,QAAA,EAAU,IAAA,EAAM,UAAU,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,cAAA,EAAgB,MAAA,EAAO;AAAA,IAC9F,GAAG;AAAA;AACN,CACD;AACD,uBAAA,CAAwB,WAAA,GAAc,yBAAA;;;;"}
@@ -11,7 +11,7 @@ const SERVICE_CODES = ["GITEA"];
11
11
  function snapshotFeatureKey(code, scope) {
12
12
  return `${scope}.${code}`;
13
13
  }
14
- const SNAPSHOT_SCHEMA_VERSION = 4;
14
+ const SNAPSHOT_SCHEMA_VERSION = 5;
15
15
 
16
16
  export { API_BUCKETS, API_SURFACES, BUCKET_BY_SURFACE, PLATFORMS, SERVICE_CODES, SNAPSHOT_SCHEMA_VERSION, SURFACE_BY_BUCKET, UI_PLATFORMS, isApiBucket, snapshotFeatureKey };
17
17
  //# sourceMappingURL=catalog-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-resolver.js","sources":["../../lib/types/catalog-resolver.ts"],"sourcesContent":["// Frontend mirror of @vritti/api-sdk/catalog-resolver types — keep field-for-field in sync\n\n/**\n * The surfaces a permission can be granted on.\n *\n * `web` and `mobile` are UI buckets, reached by loading a microfrontend. `graphql` and `http` are\n * API surfaces a credential signs its own requests against — no microfrontend and no route, so a\n * headless feature is grantable there and nowhere else, and each surface is entitled independently.\n */\nexport type PlatformBucket = 'web' | 'mobile' | 'graphql' | 'http';\n\nexport const PLATFORMS: PlatformBucket[] = ['web', 'mobile', 'graphql', 'http'];\n\n/** Buckets that reach their feature through a microfrontend, and so require one to resolve. */\nexport type UiPlatformBucket = 'web' | 'mobile';\n\nexport const UI_PLATFORMS: UiPlatformBucket[] = ['web', 'mobile'];\n\n// The API surfaces an app credential can present — the values of core's `app_type` enum\nexport const API_SURFACES = ['GRAPHQL', 'HTTP'] as const;\nexport type ApiSurface = (typeof API_SURFACES)[number];\n\n/** Buckets that admit an API credential rather than a person — exactly one per surface. */\nexport type ApiBucket = Exclude<PlatformBucket, UiPlatformBucket>;\n\nexport const API_BUCKETS: ApiBucket[] = ['graphql', 'http'];\n\nexport const SURFACE_BY_BUCKET: Record<ApiBucket, ApiSurface> = { graphql: 'GRAPHQL', http: 'HTTP' };\nexport const BUCKET_BY_SURFACE: Record<ApiSurface, ApiBucket> = { GRAPHQL: 'graphql', HTTP: 'http' };\n\nexport function isApiBucket(bucket: PlatformBucket): bucket is ApiBucket {\n return bucket === 'graphql' || bucket === 'http';\n}\n\n// A legacy single `app` bucket may still occur in stored documents from before the split; it is\n// deliberately not part of these shapes — the server's resolvers honour it at read time only.\nexport interface PlatformCodes {\n web?: string[];\n mobile?: string[];\n graphql?: string[];\n http?: string[];\n}\n\nexport interface PlatformDenyCodes {\n web?: string[] | null;\n mobile?: string[] | null;\n graphql?: string[] | null;\n http?: string[] | null;\n}\n\nexport type FeatureUnlocks = Record<string, PlatformCodes>;\n\nexport type FeatureLocks = Record<string, PlatformDenyCodes>;\nexport type SiteFeatureLocks = FeatureLocks;\n\nexport interface SnapshotPermission {\n code: string;\n label: string;\n isGlobal: boolean;\n businesses: string[];\n dependsOn: string[];\n}\n\nexport interface SnapshotMicrofrontendWeb {\n code: string;\n name: string;\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n}\n\nexport interface SnapshotMicrofrontendMobile {\n code: string;\n name: string;\n remoteEntryAndroid: string;\n remoteEntryIos: string;\n exposedModule: string;\n routePrefix: string;\n}\n\nexport interface SnapshotMicrofrontends {\n web?: SnapshotMicrofrontendWeb;\n mobile?: SnapshotMicrofrontendMobile;\n}\n\nexport type ScopeType = 'ORG' | 'LE' | 'SITE_GROUP' | 'SITE';\nexport type SiteType = 'OUTLET' | 'WAREHOUSE' | 'PRODUCTION';\nexport const SERVICE_CODES = ['GITEA'] as const;\nexport type ServiceCode = (typeof SERVICE_CODES)[number];\nexport interface SnapshotFeature {\n code: string;\n name: string;\n lucideIcon: string;\n sfSymbol: string;\n materialSymbol: string;\n scope: ScopeType;\n applicableSiteTypes: SiteType[];\n permissions: SnapshotPermission[];\n microfrontends: SnapshotMicrofrontends;\n requiredServices?: ServiceCode[];\n // Absent on pre-flag snapshots, which reads as \"reachable by any app credential\"\n apiSurfaces?: ApiSurface[];\n}\n\nexport interface SnapshotAppFeatureRef {\n code: string;\n scope: ScopeType;\n}\n\nexport interface SnapshotApp {\n code: string;\n name: string;\n icon: string;\n sortOrder: number;\n features: SnapshotAppFeatureRef[];\n}\n\nexport interface SnapshotRoleTemplate {\n name: string;\n code: string;\n scope: ScopeType;\n siteType: SiteType;\n features: FeatureUnlocks;\n}\n\nexport interface SnapshotPlan {\n code: string;\n name: string;\n isCustom: boolean;\n maxSites: number | null;\n unlockedPermissions: FeatureUnlocks;\n}\n\nexport interface VocabularyEntry {\n singular: string;\n plural: string;\n}\nexport interface BusinessVocabulary {\n site?: VocabularyEntry;\n siteGroup?: VocabularyEntry;\n outlet?: VocabularyEntry;\n warehouse?: VocabularyEntry;\n production?: VocabularyEntry;\n}\nexport interface SnapshotBusiness {\n name: string;\n vocabulary?: BusinessVocabulary;\n apps: SnapshotApp[];\n roleTemplates: Record<string, SnapshotRoleTemplate>;\n plans: Record<string, SnapshotPlan>;\n}\n\nexport interface VersionSnapshot {\n schemaVersion?: number;\n // Flat feature dictionary keyed by `${scope}.${code}` (see snapshotFeatureKey) — same-code features at different scopes stay distinct\n features: Record<string, SnapshotFeature>;\n businesses: Record<string, SnapshotBusiness>;\n}\n\n// Composite key for the snapshot feature dictionary — feature identity is (scope, code)\nexport function snapshotFeatureKey(code: string, scope: ScopeType): string {\n return `${scope}.${code}`;\n}\n\nexport const SNAPSHOT_SCHEMA_VERSION = 4;\n\nexport type LockReason = 'PLAN' | 'SITE' | 'SERVICE';\n\nexport interface CatalogPermission {\n code: string;\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n missingServices: ServiceCode[];\n}\n\nexport interface FeatureCatalogEntry {\n code: string;\n name: string;\n lucideIcon: string | null;\n sfSymbol: string;\n materialSymbol: string;\n web: {\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n } | null;\n mobile: {\n remoteEntryAndroid: string;\n remoteEntryIos: string;\n exposedModule: string;\n routePrefix: string;\n } | null;\n appCode: string;\n appName: string;\n appIcon: string | null;\n appSortOrder: number;\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n missingServices: ServiceCode[];\n permissions: CatalogPermission[];\n}\n\nexport type RoleItem = SnapshotRoleTemplate;\n\nexport interface SiteMatrixCell {\n inPlan: boolean;\n selected: boolean;\n availableIn: string[];\n}\n\nexport interface SiteMatrixPermission {\n code: string;\n label: string;\n dependsOn: string[];\n web: SiteMatrixCell | null;\n mobile: SiteMatrixCell | null;\n graphql: SiteMatrixCell | null;\n http: SiteMatrixCell | null;\n}\n\nexport interface SiteMatrixFeature {\n code: string;\n name: string;\n icon: string | null;\n scope: ScopeType;\n applicableSiteTypes: SiteType[];\n platforms: PlatformBucket[];\n inPlan: boolean;\n availableIn: string[];\n // API surfaces the feature declares — lets the app-credential editor filter by credential type\n apiSurfaces?: ApiSurface[];\n permissions: SiteMatrixPermission[];\n}\n\nexport interface SiteMatrixApp {\n code: string;\n name: string;\n icon: string | null;\n unlockedCount: number;\n totalCount: number;\n features: SiteMatrixFeature[];\n}\n\nexport interface SiteMatrix {\n plan: { code: string; name: string };\n apps: SiteMatrixApp[];\n locks: SiteFeatureLocks;\n}\n\nexport type RevokedGrants = Record<string, PlatformDenyCodes>;\n\nexport type ClientPlatform = 'web' | 'ios' | 'android' | 'graphql' | 'http';\n\nexport interface LockedPermission {\n code: string;\n reason: LockReason | null;\n unlockPlans: string[];\n missingServices: ServiceCode[];\n}\n\nexport interface PlanUpsell {\n plan: string;\n features: string[];\n}\n\nexport interface PermissionFeature {\n code: string;\n name: string;\n lucideIcon: string | null;\n sfSymbol: string;\n materialSymbol: string;\n permissions: string[];\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n // Which declared services the org has not provisioned — empty unless lockReason is 'SERVICE'\n missingServices: ServiceCode[];\n lockedPermissions: LockedPermission[];\n upsell: PlanUpsell[];\n route: {\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n };\n appCode: string;\n appName: string;\n appIcon: string | null;\n appSortOrder: number;\n}\n\nexport interface ResolveUserFeaturesParams {\n snapshot: VersionSnapshot;\n businessCode: string;\n planCode: string | undefined;\n siteLocks: SiteFeatureLocks | undefined;\n roleFeatures: FeatureUnlocks;\n platform: ClientPlatform;\n}\n\nexport interface ComposeRoleGrantsParams {\n baseFeatures: FeatureUnlocks | undefined;\n additions: FeatureUnlocks;\n revoked: RevokedGrants | undefined;\n}\n"],"names":[],"mappings":"AAWO,MAAM,SAAA,GAA8B,CAAC,KAAA,EAAO,QAAA,EAAU,WAAW,MAAM;AAKvE,MAAM,YAAA,GAAmC,CAAC,KAAA,EAAO,QAAQ;AAGzD,MAAM,YAAA,GAAe,CAAC,SAAA,EAAW,MAAM;AAMvC,MAAM,WAAA,GAA2B,CAAC,SAAA,EAAW,MAAM;AAEnD,MAAM,iBAAA,GAAmD,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,MAAA;AACrF,MAAM,iBAAA,GAAmD,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,MAAA;AAErF,SAAS,YAAY,MAAA,EAA6C;AACvE,EAAA,OAAO,MAAA,KAAW,aAAa,MAAA,KAAW,MAAA;AAC5C;AAuDO,MAAM,aAAA,GAAgB,CAAC,OAAO;AAyE9B,SAAS,kBAAA,CAAmB,MAAc,KAAA,EAA0B;AACzE,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACzB;AAEO,MAAM,uBAAA,GAA0B;;;;"}
1
+ {"version":3,"file":"catalog-resolver.js","sources":["../../lib/types/catalog-resolver.ts"],"sourcesContent":["// Frontend mirror of @vritti/api-sdk/catalog-resolver types — keep field-for-field in sync\n\n/**\n * The surfaces a permission can be granted on.\n *\n * `web` and `mobile` are UI buckets, reached by loading a microfrontend. `graphql` and `http` are\n * API surfaces a credential signs its own requests against — no microfrontend and no route, so a\n * headless feature is grantable there and nowhere else, and each surface is entitled independently.\n */\nexport type PlatformBucket = 'web' | 'mobile' | 'graphql' | 'http';\n\nexport const PLATFORMS: PlatformBucket[] = ['web', 'mobile', 'graphql', 'http'];\n\n/** Buckets that reach their feature through a microfrontend, and so require one to resolve. */\nexport type UiPlatformBucket = 'web' | 'mobile';\n\nexport const UI_PLATFORMS: UiPlatformBucket[] = ['web', 'mobile'];\n\n// The API surfaces an app credential can present — the values of core's `app_type` enum\nexport const API_SURFACES = ['GRAPHQL', 'HTTP'] as const;\nexport type ApiSurface = (typeof API_SURFACES)[number];\n\n/** Buckets that admit an API credential rather than a person — exactly one per surface. */\nexport type ApiBucket = Exclude<PlatformBucket, UiPlatformBucket>;\n\nexport const API_BUCKETS: ApiBucket[] = ['graphql', 'http'];\n\nexport const SURFACE_BY_BUCKET: Record<ApiBucket, ApiSurface> = { graphql: 'GRAPHQL', http: 'HTTP' };\nexport const BUCKET_BY_SURFACE: Record<ApiSurface, ApiBucket> = { GRAPHQL: 'graphql', HTTP: 'http' };\n\nexport function isApiBucket(bucket: PlatformBucket): bucket is ApiBucket {\n return bucket === 'graphql' || bucket === 'http';\n}\n\nexport interface PlatformCodes {\n web?: string[];\n mobile?: string[];\n graphql?: string[];\n http?: string[];\n}\n\nexport interface PlatformDenyCodes {\n web?: string[] | null;\n mobile?: string[] | null;\n graphql?: string[] | null;\n http?: string[] | null;\n}\n\nexport type FeatureUnlocks = Record<string, PlatformCodes>;\n\nexport type FeatureLocks = Record<string, PlatformDenyCodes>;\nexport type SiteFeatureLocks = FeatureLocks;\n\nexport interface PermissionGroupRef {\n code: string;\n label: string;\n sortOrder: number;\n}\n\nexport interface SnapshotPermission {\n code: string;\n label: string;\n isGlobal: boolean;\n businesses: string[];\n dependsOn: string[];\n platforms: PlatformBucket[];\n group?: string;\n}\n\nexport interface SnapshotMicrofrontendWeb {\n code: string;\n name: string;\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n}\n\nexport interface SnapshotMicrofrontendMobile {\n code: string;\n name: string;\n remoteEntryAndroid: string;\n remoteEntryIos: string;\n exposedModule: string;\n routePrefix: string;\n}\n\nexport interface SnapshotMicrofrontends {\n web?: SnapshotMicrofrontendWeb;\n mobile?: SnapshotMicrofrontendMobile;\n}\n\nexport type ScopeType = 'ORG' | 'LE' | 'SITE_GROUP' | 'SITE';\nexport type SiteType = 'OUTLET' | 'WAREHOUSE' | 'PRODUCTION';\nexport const SERVICE_CODES = ['GITEA'] as const;\nexport type ServiceCode = (typeof SERVICE_CODES)[number];\nexport interface SnapshotFeature {\n code: string;\n name: string;\n lucideIcon: string;\n sfSymbol: string;\n materialSymbol: string;\n scope: ScopeType;\n applicableSiteTypes: SiteType[];\n permissions: SnapshotPermission[];\n microfrontends: SnapshotMicrofrontends;\n requiredServices: ServiceCode[];\n permissionGroups: PermissionGroupRef[];\n // Strict — it decides which of the `graphql`/`http` buckets the feature offers at all\n apiSurfaces: ApiSurface[];\n}\n\nexport interface SnapshotAppFeatureRef {\n code: string;\n scope: ScopeType;\n}\n\nexport interface SnapshotApp {\n code: string;\n name: string;\n icon: string;\n sortOrder: number;\n features: SnapshotAppFeatureRef[];\n}\n\nexport interface SnapshotRoleTemplate {\n name: string;\n code: string;\n scope: ScopeType;\n siteType: SiteType;\n features: FeatureUnlocks;\n}\n\nexport interface SnapshotPlan {\n code: string;\n name: string;\n isCustom: boolean;\n maxSites: number | null;\n unlockedPermissions: FeatureUnlocks;\n}\n\nexport interface VocabularyEntry {\n singular: string;\n plural: string;\n}\nexport interface BusinessVocabulary {\n site?: VocabularyEntry;\n siteGroup?: VocabularyEntry;\n outlet?: VocabularyEntry;\n warehouse?: VocabularyEntry;\n production?: VocabularyEntry;\n}\nexport interface SnapshotBusiness {\n name: string;\n vocabulary?: BusinessVocabulary;\n apps: SnapshotApp[];\n roleTemplates: Record<string, SnapshotRoleTemplate>;\n plans: Record<string, SnapshotPlan>;\n}\n\nexport interface VersionSnapshot {\n schemaVersion?: number;\n // Flat feature dictionary keyed by `${scope}.${code}` (see snapshotFeatureKey) — same-code features at different scopes stay distinct\n features: Record<string, SnapshotFeature>;\n businesses: Record<string, SnapshotBusiness>;\n}\n\n// Composite key for the snapshot feature dictionary — feature identity is (scope, code)\nexport function snapshotFeatureKey(code: string, scope: ScopeType): string {\n return `${scope}.${code}`;\n}\n\nexport const SNAPSHOT_SCHEMA_VERSION = 5;\n\nexport type LockReason = 'PLAN' | 'SITE' | 'SERVICE';\n\nexport interface CatalogPermission {\n code: string;\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n missingServices: ServiceCode[];\n}\n\nexport interface FeatureCatalogEntry {\n code: string;\n name: string;\n lucideIcon: string | null;\n sfSymbol: string;\n materialSymbol: string;\n web: {\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n } | null;\n mobile: {\n remoteEntryAndroid: string;\n remoteEntryIos: string;\n exposedModule: string;\n routePrefix: string;\n } | null;\n appCode: string;\n appName: string;\n appIcon: string | null;\n appSortOrder: number;\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n missingServices: ServiceCode[];\n permissions: CatalogPermission[];\n}\n\nexport type RoleItem = SnapshotRoleTemplate;\n\nexport interface SiteMatrixCell {\n inPlan: boolean;\n selected: boolean;\n availableIn: string[];\n}\n\nexport interface SiteMatrixPermission {\n code: string;\n label: string;\n dependsOn: string[];\n group?: PermissionGroupRef;\n web: SiteMatrixCell | null;\n mobile: SiteMatrixCell | null;\n graphql: SiteMatrixCell | null;\n http: SiteMatrixCell | null;\n}\n\nexport interface SiteMatrixFeature {\n code: string;\n name: string;\n icon: string | null;\n scope: ScopeType;\n applicableSiteTypes: SiteType[];\n platforms: PlatformBucket[];\n inPlan: boolean;\n availableIn: string[];\n // API surfaces the feature declares — lets the app-credential editor filter by credential type\n apiSurfaces: ApiSurface[];\n permissions: SiteMatrixPermission[];\n}\n\nexport interface MatrixCounts {\n unlocked: number;\n total: number;\n}\n\nexport interface SiteMatrixApp {\n code: string;\n name: string;\n icon: string | null;\n counts: Record<PlatformBucket, MatrixCounts>;\n features: SiteMatrixFeature[];\n}\n\nexport interface SiteMatrix {\n plan: { code: string; name: string };\n apps: SiteMatrixApp[];\n locks: SiteFeatureLocks;\n}\n\nexport type RevokedGrants = Record<string, PlatformDenyCodes>;\n\nexport type ClientPlatform = 'web' | 'ios' | 'android' | 'graphql' | 'http';\n\nexport interface LockedPermission {\n code: string;\n reason: LockReason | null;\n unlockPlans: string[];\n missingServices: ServiceCode[];\n}\n\nexport interface PlanUpsell {\n plan: string;\n features: string[];\n}\n\nexport interface PermissionFeature {\n code: string;\n name: string;\n lucideIcon: string | null;\n sfSymbol: string;\n materialSymbol: string;\n permissions: string[];\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n // Which declared services the org has not provisioned — empty unless lockReason is 'SERVICE'\n missingServices: ServiceCode[];\n lockedPermissions: LockedPermission[];\n upsell: PlanUpsell[];\n route: {\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n };\n appCode: string;\n appName: string;\n appIcon: string | null;\n appSortOrder: number;\n}\n\nexport interface ResolveUserFeaturesParams {\n snapshot: VersionSnapshot;\n businessCode: string;\n planCode: string | undefined;\n siteLocks: SiteFeatureLocks | undefined;\n roleFeatures: FeatureUnlocks;\n platform: ClientPlatform;\n}\n\nexport interface ComposeRoleGrantsParams {\n baseFeatures: FeatureUnlocks | undefined;\n additions: FeatureUnlocks;\n revoked: RevokedGrants | undefined;\n}\n"],"names":[],"mappings":"AAWO,MAAM,SAAA,GAA8B,CAAC,KAAA,EAAO,QAAA,EAAU,WAAW,MAAM;AAKvE,MAAM,YAAA,GAAmC,CAAC,KAAA,EAAO,QAAQ;AAGzD,MAAM,YAAA,GAAe,CAAC,SAAA,EAAW,MAAM;AAMvC,MAAM,WAAA,GAA2B,CAAC,SAAA,EAAW,MAAM;AAEnD,MAAM,iBAAA,GAAmD,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,MAAA;AACrF,MAAM,iBAAA,GAAmD,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,MAAA;AAErF,SAAS,YAAY,MAAA,EAA6C;AACvE,EAAA,OAAO,MAAA,KAAW,aAAa,MAAA,KAAW,MAAA;AAC5C;AA6DO,MAAM,aAAA,GAAgB,CAAC,OAAO;AA0E9B,SAAS,kBAAA,CAAmB,MAAc,KAAA,EAA0B;AACzE,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACzB;AAEO,MAAM,uBAAA,GAA0B;;;;"}
package/dist/useTimer.js CHANGED
@@ -122,7 +122,8 @@ function useSSE(options) {
122
122
  return;
123
123
  }
124
124
  const config = getConfig();
125
- const sseUrl = `${config.axios.baseURL}${path}`;
125
+ const baseUrl = `${config.axios.baseURL}${path}`;
126
+ const sseUrl = config.sse.onRequest?.(baseUrl) ?? baseUrl;
126
127
  const eventSource = new EventSource(sseUrl, { withCredentials });
127
128
  eventSourceRef.current = eventSource;
128
129
  eventSource.onopen = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useTimer.js","sources":["../lib/hooks/useBarcodeScanner.ts","../lib/hooks/useSlugParams.ts","../lib/hooks/useSSE.ts","../lib/hooks/useTimer.ts"],"sourcesContent":["import type { UseMutationResult } from '@tanstack/react-query';\nimport { useEffect, useRef, useState } from 'react';\nimport { useHotkeys } from '../utils/hotkeys';\n\nconst DEFAULT_MIN_LENGTH = 3;\nconst DEFAULT_MAX_INTERVAL_MS = 50;\nconst MAX_SCAN_DURATION_MS = 500;\n\nexport interface UseBarcodeScannerOptions<TData, TError, TVariables> {\n mutation: UseMutationResult<TData, TError, TVariables>;\n toVariables: (code: string) => TVariables;\n enabled?: boolean;\n toggleShortcut?: string;\n exitShortcut?: string;\n minLength?: number;\n maxIntervalMs?: number;\n}\n\nexport interface UseBarcodeScannerResult {\n isActive: boolean;\n isPending: boolean;\n enable: () => void;\n disable: () => void;\n toggle: () => void;\n toggleShortcut: string;\n exitShortcut: string;\n}\n\nexport function useBarcodeScanner<TData, TError, TVariables>({\n mutation,\n toVariables,\n enabled = true,\n toggleShortcut = 'alt+s',\n exitShortcut = 'escape',\n minLength = DEFAULT_MIN_LENGTH,\n maxIntervalMs = DEFAULT_MAX_INTERVAL_MS,\n}: UseBarcodeScannerOptions<TData, TError, TVariables>): UseBarcodeScannerResult {\n const [isActive, setIsActive] = useState(false);\n\n const enable = () => setIsActive(true);\n const disable = () => setIsActive(false);\n const toggle = () => setIsActive((v) => !v);\n\n // Auto-disable when the gating condition turns false\n useEffect(() => {\n if (!enabled) setIsActive(false);\n }, [enabled]);\n\n // Cross-platform toggle shortcut\n useHotkeys(toggleShortcut, toggle, { enabled: enabled });\n // Escape exits only when active\n useHotkeys(exitShortcut, disable, { enabled: isActive });\n\n // Keyboard-wedge burst detector\n const bufferRef = useRef('');\n const lastKeyTimeRef = useRef(0);\n const scanStartTimeRef = useRef(0);\n const mutateRef = useRef(mutation.mutate);\n mutateRef.current = mutation.mutate;\n const toVariablesRef = useRef(toVariables);\n toVariablesRef.current = toVariables;\n\n useEffect(() => {\n if (!isActive || !enabled) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const target = event.target as Element | null;\n if (\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target?.hasAttribute('contenteditable')\n )\n return;\n\n const now = Date.now();\n const gap = now - lastKeyTimeRef.current;\n\n if (event.key === 'Enter') {\n const elapsed = now - scanStartTimeRef.current;\n const code = bufferRef.current;\n bufferRef.current = '';\n lastKeyTimeRef.current = 0;\n scanStartTimeRef.current = 0;\n if (code.length >= minLength && elapsed <= MAX_SCAN_DURATION_MS) {\n event.preventDefault();\n mutateRef.current(toVariablesRef.current(code));\n }\n return;\n }\n\n if (event.key.length !== 1) return;\n\n if (gap > maxIntervalMs && bufferRef.current.length > 0) {\n bufferRef.current = '';\n scanStartTimeRef.current = 0;\n }\n\n if (bufferRef.current.length === 0) scanStartTimeRef.current = now;\n\n bufferRef.current += event.key;\n lastKeyTimeRef.current = now;\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n bufferRef.current = '';\n lastKeyTimeRef.current = 0;\n scanStartTimeRef.current = 0;\n };\n }, [isActive, enabled, minLength, maxIntervalMs]);\n\n return {\n isActive,\n isPending: mutation.isPending,\n enable,\n disable,\n toggle,\n toggleShortcut,\n exitShortcut,\n };\n}\n","import { useParams } from 'react-router-dom';\nimport { parseSlug } from '../utils/slug';\n\nexport interface SlugParam {\n slug: string;\n name: string;\n id: string;\n}\n\ntype SlugParamMap<T extends string[]> = { [K in T[number]]: SlugParam };\n\nfunction parseParam(value: string | undefined): SlugParam {\n const v = value ?? '';\n const parsed = parseSlug(v);\n return { slug: v, name: parsed?.slug ?? '', id: parsed?.id ?? v };\n}\n\n// Single param — returns SlugParam directly for clean destructuring\nexport function useSlugParams<T extends string>(param: T): SlugParam;\n// Multiple params — returns { paramA: SlugParam; paramB: SlugParam }\nexport function useSlugParams<T extends string[]>(...params: T): SlugParamMap<T>;\nexport function useSlugParams(...params: string[]): SlugParam | SlugParamMap<string[]> {\n const routeParams = useParams();\n\n if (params.length === 1) {\n return parseParam(routeParams[params[0]]);\n }\n\n const result: Record<string, SlugParam> = {};\n for (const param of params) {\n result[param] = parseParam(routeParams[param]);\n }\n return result;\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { getConfig } from '../config';\n\nexport interface UseSSEOptions<EventMap extends Record<string, unknown> = Record<string, unknown>> {\n path: string;\n events: (keyof EventMap & string)[];\n enabled?: boolean;\n autoReconnect?: boolean;\n withCredentials?: boolean;\n onError?: (event: Event) => void;\n onOpen?: () => void;\n}\n\nexport interface UseSSEReturn<EventMap extends Record<string, unknown>> {\n eventType: keyof EventMap | null;\n data: EventMap[keyof EventMap] | null;\n eventTypes: { [K in keyof EventMap as Uppercase<K & string>]: K };\n isConnected: boolean;\n error: string | null;\n disconnect: () => void;\n}\n\n// Generic Server-Sent Events hook that returns the last event as `eventType` + `data`.\nexport function useSSE<EventMap extends Record<string, unknown> = Record<string, unknown>>(\n options: UseSSEOptions<EventMap>,\n): UseSSEReturn<EventMap> {\n const { path, events: eventNames = [], enabled = true, withCredentials = true } = options;\n\n const eventSourceRef = useRef<EventSource | null>(null);\n const [eventType, setEventType] = useState<keyof EventMap | null>(null);\n const [data, setData] = useState<EventMap[keyof EventMap] | null>(null);\n const [isConnected, setIsConnected] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Store options in a ref for stable access inside event handlers\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n // Stable serialized key for the events array\n const eventsKey = eventNames.join(',');\n\n const disconnect = useCallback(() => {\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n setIsConnected(false);\n }\n }, []);\n\n useEffect(() => {\n if (!enabled) {\n disconnect();\n setEventType(null);\n setData(null);\n return;\n }\n\n // Build full URL from quantum-ui config\n const config = getConfig();\n const sseUrl = `${config.axios.baseURL}${path}`;\n\n const eventSource = new EventSource(sseUrl, { withCredentials });\n eventSourceRef.current = eventSource;\n\n eventSource.onopen = () => {\n setIsConnected(true);\n setError(null);\n optionsRef.current.onOpen?.();\n };\n\n eventSource.onerror = (event) => {\n setIsConnected(false);\n\n // When autoReconnect is false, close on any error to prevent browser reconnect\n if (!optionsRef.current.autoReconnect && optionsRef.current.autoReconnect !== undefined) {\n eventSource.close();\n eventSourceRef.current = null;\n return;\n }\n\n if (eventSource.readyState === EventSource.CLOSED) {\n setError('Connection lost.');\n optionsRef.current.onError?.(event);\n }\n };\n\n // Register one addEventListener per event name\n const handlers: { name: string; handler: EventListener }[] = [];\n const names = eventsKey.split(',').filter(Boolean);\n\n for (const name of names) {\n const handler = (event: Event) => {\n try {\n const parsed = JSON.parse((event as MessageEvent).data as string);\n setEventType(name as keyof EventMap);\n setData(parsed);\n } catch (e) {\n console.error(`Failed to parse SSE event '${name}':`, e);\n }\n };\n\n eventSource.addEventListener(name, handler);\n handlers.push({ name, handler });\n }\n\n return () => {\n for (const { name, handler } of handlers) {\n eventSource.removeEventListener(name, handler);\n }\n disconnect();\n };\n }, [enabled, path, eventsKey, withCredentials, disconnect]);\n\n // Build UPPER_CASE enum from event names: { INITIATED: 'initiated', VERIFIED: 'verified', ... }\n type EventTypesMap = { [K in keyof EventMap as Uppercase<K & string>]: K };\n const eventTypes = useMemo(() => {\n const map = {} as EventTypesMap;\n for (const name of eventsKey.split(',').filter(Boolean)) {\n (map as Record<string, string>)[name.toUpperCase()] = name;\n }\n return map;\n }, [eventsKey]);\n\n return { eventType, data, eventTypes, isConnected, error, disconnect };\n}\n","import { useEffect, useState } from 'react';\n\nexport interface TimerHandle {\n timer: number;\n startTimer: (seconds?: number) => void;\n}\n\n// Generic countdown timer — decrements every second until 0\nexport function useTimer(initial = 0): TimerHandle {\n const [timer, setTimer] = useState(initial);\n\n useEffect(() => {\n if (timer > 0) {\n const t = setTimeout(() => setTimer(timer - 1), 1000);\n return () => clearTimeout(t);\n }\n }, [timer]);\n\n return { timer, startTimer: (seconds = 45) => setTimer(seconds) };\n}\n"],"names":["useHotkeys"],"mappings":"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"}
1
+ {"version":3,"file":"useTimer.js","sources":["../lib/hooks/useBarcodeScanner.ts","../lib/hooks/useSlugParams.ts","../lib/hooks/useSSE.ts","../lib/hooks/useTimer.ts"],"sourcesContent":["import type { UseMutationResult } from '@tanstack/react-query';\nimport { useEffect, useRef, useState } from 'react';\nimport { useHotkeys } from '../utils/hotkeys';\n\nconst DEFAULT_MIN_LENGTH = 3;\nconst DEFAULT_MAX_INTERVAL_MS = 50;\nconst MAX_SCAN_DURATION_MS = 500;\n\nexport interface UseBarcodeScannerOptions<TData, TError, TVariables> {\n mutation: UseMutationResult<TData, TError, TVariables>;\n toVariables: (code: string) => TVariables;\n enabled?: boolean;\n toggleShortcut?: string;\n exitShortcut?: string;\n minLength?: number;\n maxIntervalMs?: number;\n}\n\nexport interface UseBarcodeScannerResult {\n isActive: boolean;\n isPending: boolean;\n enable: () => void;\n disable: () => void;\n toggle: () => void;\n toggleShortcut: string;\n exitShortcut: string;\n}\n\nexport function useBarcodeScanner<TData, TError, TVariables>({\n mutation,\n toVariables,\n enabled = true,\n toggleShortcut = 'alt+s',\n exitShortcut = 'escape',\n minLength = DEFAULT_MIN_LENGTH,\n maxIntervalMs = DEFAULT_MAX_INTERVAL_MS,\n}: UseBarcodeScannerOptions<TData, TError, TVariables>): UseBarcodeScannerResult {\n const [isActive, setIsActive] = useState(false);\n\n const enable = () => setIsActive(true);\n const disable = () => setIsActive(false);\n const toggle = () => setIsActive((v) => !v);\n\n // Auto-disable when the gating condition turns false\n useEffect(() => {\n if (!enabled) setIsActive(false);\n }, [enabled]);\n\n // Cross-platform toggle shortcut\n useHotkeys(toggleShortcut, toggle, { enabled: enabled });\n // Escape exits only when active\n useHotkeys(exitShortcut, disable, { enabled: isActive });\n\n // Keyboard-wedge burst detector\n const bufferRef = useRef('');\n const lastKeyTimeRef = useRef(0);\n const scanStartTimeRef = useRef(0);\n const mutateRef = useRef(mutation.mutate);\n mutateRef.current = mutation.mutate;\n const toVariablesRef = useRef(toVariables);\n toVariablesRef.current = toVariables;\n\n useEffect(() => {\n if (!isActive || !enabled) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const target = event.target as Element | null;\n if (\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target?.hasAttribute('contenteditable')\n )\n return;\n\n const now = Date.now();\n const gap = now - lastKeyTimeRef.current;\n\n if (event.key === 'Enter') {\n const elapsed = now - scanStartTimeRef.current;\n const code = bufferRef.current;\n bufferRef.current = '';\n lastKeyTimeRef.current = 0;\n scanStartTimeRef.current = 0;\n if (code.length >= minLength && elapsed <= MAX_SCAN_DURATION_MS) {\n event.preventDefault();\n mutateRef.current(toVariablesRef.current(code));\n }\n return;\n }\n\n if (event.key.length !== 1) return;\n\n if (gap > maxIntervalMs && bufferRef.current.length > 0) {\n bufferRef.current = '';\n scanStartTimeRef.current = 0;\n }\n\n if (bufferRef.current.length === 0) scanStartTimeRef.current = now;\n\n bufferRef.current += event.key;\n lastKeyTimeRef.current = now;\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n bufferRef.current = '';\n lastKeyTimeRef.current = 0;\n scanStartTimeRef.current = 0;\n };\n }, [isActive, enabled, minLength, maxIntervalMs]);\n\n return {\n isActive,\n isPending: mutation.isPending,\n enable,\n disable,\n toggle,\n toggleShortcut,\n exitShortcut,\n };\n}\n","import { useParams } from 'react-router-dom';\nimport { parseSlug } from '../utils/slug';\n\nexport interface SlugParam {\n slug: string;\n name: string;\n id: string;\n}\n\ntype SlugParamMap<T extends string[]> = { [K in T[number]]: SlugParam };\n\nfunction parseParam(value: string | undefined): SlugParam {\n const v = value ?? '';\n const parsed = parseSlug(v);\n return { slug: v, name: parsed?.slug ?? '', id: parsed?.id ?? v };\n}\n\n// Single param — returns SlugParam directly for clean destructuring\nexport function useSlugParams<T extends string>(param: T): SlugParam;\n// Multiple params — returns { paramA: SlugParam; paramB: SlugParam }\nexport function useSlugParams<T extends string[]>(...params: T): SlugParamMap<T>;\nexport function useSlugParams(...params: string[]): SlugParam | SlugParamMap<string[]> {\n const routeParams = useParams();\n\n if (params.length === 1) {\n return parseParam(routeParams[params[0]]);\n }\n\n const result: Record<string, SlugParam> = {};\n for (const param of params) {\n result[param] = parseParam(routeParams[param]);\n }\n return result;\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { getConfig } from '../config';\n\nexport interface UseSSEOptions<EventMap extends Record<string, unknown> = Record<string, unknown>> {\n path: string;\n events: (keyof EventMap & string)[];\n enabled?: boolean;\n autoReconnect?: boolean;\n withCredentials?: boolean;\n onError?: (event: Event) => void;\n onOpen?: () => void;\n}\n\nexport interface UseSSEReturn<EventMap extends Record<string, unknown>> {\n eventType: keyof EventMap | null;\n data: EventMap[keyof EventMap] | null;\n eventTypes: { [K in keyof EventMap as Uppercase<K & string>]: K };\n isConnected: boolean;\n error: string | null;\n disconnect: () => void;\n}\n\n// Generic Server-Sent Events hook that returns the last event as `eventType` + `data`.\nexport function useSSE<EventMap extends Record<string, unknown> = Record<string, unknown>>(\n options: UseSSEOptions<EventMap>,\n): UseSSEReturn<EventMap> {\n const { path, events: eventNames = [], enabled = true, withCredentials = true } = options;\n\n const eventSourceRef = useRef<EventSource | null>(null);\n const [eventType, setEventType] = useState<keyof EventMap | null>(null);\n const [data, setData] = useState<EventMap[keyof EventMap] | null>(null);\n const [isConnected, setIsConnected] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Store options in a ref for stable access inside event handlers\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n // Stable serialized key for the events array\n const eventsKey = eventNames.join(',');\n\n const disconnect = useCallback(() => {\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n setIsConnected(false);\n }\n }, []);\n\n useEffect(() => {\n if (!enabled) {\n disconnect();\n setEventType(null);\n setData(null);\n return;\n }\n\n // Build full URL from quantum-ui config, letting the app attach whatever an axios request would carry\n // in a header — EventSource cannot set headers, so that context has to ride the query string.\n const config = getConfig();\n const baseUrl = `${config.axios.baseURL}${path}`;\n const sseUrl = config.sse.onRequest?.(baseUrl) ?? baseUrl;\n\n const eventSource = new EventSource(sseUrl, { withCredentials });\n eventSourceRef.current = eventSource;\n\n eventSource.onopen = () => {\n setIsConnected(true);\n setError(null);\n optionsRef.current.onOpen?.();\n };\n\n eventSource.onerror = (event) => {\n setIsConnected(false);\n\n // When autoReconnect is false, close on any error to prevent browser reconnect\n if (!optionsRef.current.autoReconnect && optionsRef.current.autoReconnect !== undefined) {\n eventSource.close();\n eventSourceRef.current = null;\n return;\n }\n\n if (eventSource.readyState === EventSource.CLOSED) {\n setError('Connection lost.');\n optionsRef.current.onError?.(event);\n }\n };\n\n // Register one addEventListener per event name\n const handlers: { name: string; handler: EventListener }[] = [];\n const names = eventsKey.split(',').filter(Boolean);\n\n for (const name of names) {\n const handler = (event: Event) => {\n try {\n const parsed = JSON.parse((event as MessageEvent).data as string);\n setEventType(name as keyof EventMap);\n setData(parsed);\n } catch (e) {\n console.error(`Failed to parse SSE event '${name}':`, e);\n }\n };\n\n eventSource.addEventListener(name, handler);\n handlers.push({ name, handler });\n }\n\n return () => {\n for (const { name, handler } of handlers) {\n eventSource.removeEventListener(name, handler);\n }\n disconnect();\n };\n }, [enabled, path, eventsKey, withCredentials, disconnect]);\n\n // Build UPPER_CASE enum from event names: { INITIATED: 'initiated', VERIFIED: 'verified', ... }\n type EventTypesMap = { [K in keyof EventMap as Uppercase<K & string>]: K };\n const eventTypes = useMemo(() => {\n const map = {} as EventTypesMap;\n for (const name of eventsKey.split(',').filter(Boolean)) {\n (map as Record<string, string>)[name.toUpperCase()] = name;\n }\n return map;\n }, [eventsKey]);\n\n return { eventType, data, eventTypes, isConnected, error, disconnect };\n}\n","import { useEffect, useState } from 'react';\n\nexport interface TimerHandle {\n timer: number;\n startTimer: (seconds?: number) => void;\n}\n\n// Generic countdown timer — decrements every second until 0\nexport function useTimer(initial = 0): TimerHandle {\n const [timer, setTimer] = useState(initial);\n\n useEffect(() => {\n if (timer > 0) {\n const t = setTimeout(() => setTimer(timer - 1), 1000);\n return () => clearTimeout(t);\n }\n }, [timer]);\n\n return { timer, startTimer: (seconds = 45) => setTimer(seconds) };\n}\n"],"names":["useHotkeys"],"mappings":"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"}
@@ -3,8 +3,8 @@ export { A as AnimatePresence, aE as AsyncMotionValueAnimation, aF as DOMKeyfram
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
  import * as React from 'react';
5
5
  import { useState, useRef, useEffect, useContext, useMemo, useInsertionEffect, useCallback, useLayoutEffect, createContext, forwardRef } from 'react';
6
- import { u as useForceUpdate, L as LayoutGroup } from '../index39.js';
7
- export { D as DeprecatedLayoutGroupContext, n as nodeGroup } from '../index39.js';
6
+ import { u as useForceUpdate, L as LayoutGroup } from '../index37.js';
7
+ export { D as DeprecatedLayoutGroupContext, n as nodeGroup } from '../index37.js';
8
8
 
9
9
  const wrap = (min, max, v) => {
10
10
  const rangeSize = max - min;
package/dist/value.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers.js';
2
2
  import React__default from 'react';
3
- import { r as requireShim } from './index40.js';
3
+ import { r as requireShim } from './index38.js';
4
4
 
5
5
  var withSelector = {exports: {}};
6
6
 
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.3.27",
8
+ "version": "0.4.1",
9
9
  "type": "module",
10
10
  "sideEffects": false,
11
11
  "repository": {
@@ -224,6 +224,10 @@
224
224
  "types": "./dist/lib/selects/feature-permission/index.d.ts",
225
225
  "import": "./dist/selects/feature-permission.js"
226
226
  },
227
+ "./selects/permission-group": {
228
+ "types": "./dist/lib/selects/permission-group/index.d.ts",
229
+ "import": "./dist/selects/permission-group.js"
230
+ },
227
231
  "./selects/icon": {
228
232
  "types": "./dist/lib/selects/icon/index.d.ts",
229
233
  "import": "./dist/selects/icon.js"