@hjmds/react 0.8.2

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 (135) hide show
  1. package/README.md +146 -0
  2. package/dist/actions.d.ts +61 -0
  3. package/dist/actions.d.ts.map +1 -0
  4. package/dist/actions.js +54 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/advanced-display.d.ts +133 -0
  7. package/dist/advanced-display.d.ts.map +1 -0
  8. package/dist/advanced-display.js +201 -0
  9. package/dist/advanced-display.js.map +1 -0
  10. package/dist/advanced-forms.d.ts +116 -0
  11. package/dist/advanced-forms.d.ts.map +1 -0
  12. package/dist/advanced-forms.js +234 -0
  13. package/dist/advanced-forms.js.map +1 -0
  14. package/dist/advanced-navigation.d.ts +24 -0
  15. package/dist/advanced-navigation.d.ts.map +1 -0
  16. package/dist/advanced-navigation.js +25 -0
  17. package/dist/advanced-navigation.js.map +1 -0
  18. package/dist/bottom-navigation.d.ts +37 -0
  19. package/dist/bottom-navigation.d.ts.map +1 -0
  20. package/dist/bottom-navigation.js +132 -0
  21. package/dist/bottom-navigation.js.map +1 -0
  22. package/dist/date-picker.d.ts +24 -0
  23. package/dist/date-picker.d.ts.map +1 -0
  24. package/dist/date-picker.js +81 -0
  25. package/dist/date-picker.js.map +1 -0
  26. package/dist/display-public.d.ts +5 -0
  27. package/dist/display-public.d.ts.map +1 -0
  28. package/dist/display-public.js +5 -0
  29. package/dist/display-public.js.map +1 -0
  30. package/dist/display.d.ts +77 -0
  31. package/dist/display.d.ts.map +1 -0
  32. package/dist/display.js +51 -0
  33. package/dist/display.js.map +1 -0
  34. package/dist/evidence.d.ts +940 -0
  35. package/dist/evidence.d.ts.map +1 -0
  36. package/dist/evidence.js +98 -0
  37. package/dist/evidence.js.map +1 -0
  38. package/dist/feedback.d.ts +89 -0
  39. package/dist/feedback.d.ts.map +1 -0
  40. package/dist/feedback.js +41 -0
  41. package/dist/feedback.js.map +1 -0
  42. package/dist/file-picker.d.ts +30 -0
  43. package/dist/file-picker.d.ts.map +1 -0
  44. package/dist/file-picker.js +40 -0
  45. package/dist/file-picker.js.map +1 -0
  46. package/dist/forms-public.d.ts +8 -0
  47. package/dist/forms-public.d.ts.map +1 -0
  48. package/dist/forms-public.js +8 -0
  49. package/dist/forms-public.js.map +1 -0
  50. package/dist/forms.d.ts +160 -0
  51. package/dist/forms.d.ts.map +1 -0
  52. package/dist/forms.js +178 -0
  53. package/dist/forms.js.map +1 -0
  54. package/dist/index.d.ts +24 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +24 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/internal.d.ts +17 -0
  59. package/dist/internal.d.ts.map +1 -0
  60. package/dist/internal.js +68 -0
  61. package/dist/internal.js.map +1 -0
  62. package/dist/layout.d.ts +134 -0
  63. package/dist/layout.d.ts.map +1 -0
  64. package/dist/layout.js +167 -0
  65. package/dist/layout.js.map +1 -0
  66. package/dist/navigation-public.d.ts +6 -0
  67. package/dist/navigation-public.d.ts.map +1 -0
  68. package/dist/navigation-public.js +6 -0
  69. package/dist/navigation-public.js.map +1 -0
  70. package/dist/navigation.d.ts +65 -0
  71. package/dist/navigation.d.ts.map +1 -0
  72. package/dist/navigation.js +196 -0
  73. package/dist/navigation.js.map +1 -0
  74. package/dist/number-field.d.ts +55 -0
  75. package/dist/number-field.d.ts.map +1 -0
  76. package/dist/number-field.js +107 -0
  77. package/dist/number-field.js.map +1 -0
  78. package/dist/otp-field.d.ts +2 -0
  79. package/dist/otp-field.d.ts.map +1 -0
  80. package/dist/otp-field.js +2 -0
  81. package/dist/otp-field.js.map +1 -0
  82. package/dist/overlays.d.ts +192 -0
  83. package/dist/overlays.d.ts.map +1 -0
  84. package/dist/overlays.js +949 -0
  85. package/dist/overlays.js.map +1 -0
  86. package/dist/password-field.d.ts +2 -0
  87. package/dist/password-field.d.ts.map +1 -0
  88. package/dist/password-field.js +2 -0
  89. package/dist/password-field.js.map +1 -0
  90. package/dist/portal.d.ts +32 -0
  91. package/dist/portal.d.ts.map +1 -0
  92. package/dist/portal.js +264 -0
  93. package/dist/portal.js.map +1 -0
  94. package/dist/provider.d.ts +38 -0
  95. package/dist/provider.d.ts.map +1 -0
  96. package/dist/provider.js +87 -0
  97. package/dist/provider.js.map +1 -0
  98. package/dist/select.d.ts +72 -0
  99. package/dist/select.d.ts.map +1 -0
  100. package/dist/select.js +353 -0
  101. package/dist/select.js.map +1 -0
  102. package/dist/selection.d.ts +160 -0
  103. package/dist/selection.d.ts.map +1 -0
  104. package/dist/selection.js +225 -0
  105. package/dist/selection.js.map +1 -0
  106. package/dist/slider.d.ts +35 -0
  107. package/dist/slider.d.ts.map +1 -0
  108. package/dist/slider.js +150 -0
  109. package/dist/slider.js.map +1 -0
  110. package/dist/steps.d.ts +29 -0
  111. package/dist/steps.d.ts.map +1 -0
  112. package/dist/steps.js +10 -0
  113. package/dist/steps.js.map +1 -0
  114. package/dist/styles.css +1349 -0
  115. package/dist/supplemental-display.d.ts +59 -0
  116. package/dist/supplemental-display.d.ts.map +1 -0
  117. package/dist/supplemental-display.js +136 -0
  118. package/dist/supplemental-display.js.map +1 -0
  119. package/dist/supplemental-navigation.d.ts +28 -0
  120. package/dist/supplemental-navigation.d.ts.map +1 -0
  121. package/dist/supplemental-navigation.js +106 -0
  122. package/dist/supplemental-navigation.js.map +1 -0
  123. package/dist/theme.d.ts +5 -0
  124. package/dist/theme.d.ts.map +1 -0
  125. package/dist/theme.js +55 -0
  126. package/dist/theme.js.map +1 -0
  127. package/dist/toast.d.ts +41 -0
  128. package/dist/toast.d.ts.map +1 -0
  129. package/dist/toast.js +250 -0
  130. package/dist/toast.js.map +1 -0
  131. package/dist/upload-item.d.ts +18 -0
  132. package/dist/upload-item.d.ts.map +1 -0
  133. package/dist/upload-item.js +19 -0
  134. package/dist/upload-item.js.map +1 -0
  135. package/package.json +151 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../src/portal.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport type PortalProps = Readonly<{\n anchorRef: RefObject<HTMLElement | null>;\n children: ReactNode;\n container?: HTMLElement;\n /** Anchored non-modal popups may render inline until hydration moves them. */\n ssrFallback?: \"none\" | \"inline\";\n}>;\n\n/**\n * Copies the closest provider DOM boundary instead of importing provider\n * runtime code, keeping granular form/overlay entry points lightweight.\n */\nfunction synchronizePortalEnvironment(host: HTMLDivElement, anchor: HTMLElement | null): void {\n const source = anchor?.closest<HTMLElement>(\"[data-hjm-provider], [data-hjm-portal]\") ?? null;\n const directModalOwner = anchor?.closest<HTMLElement>(\"[data-hjm-modal-content]\") ?? null;\n const inheritedOwnerId = anchor\n ?.closest<HTMLElement>(\"[data-hjm-popup-owner]\")\n ?.getAttribute(\"data-hjm-popup-owner\") ?? null;\n const modalOwner = directModalOwner ??\n (inheritedOwnerId === null ? null : document.getElementById(inheritedOwnerId));\n if (modalOwner?.id) host.setAttribute(\"data-hjm-popup-owner\", modalOwner.id);\n else host.removeAttribute(\"data-hjm-popup-owner\");\n if (source) {\n host.removeAttribute(\"style\");\n for (let index = 0; index < source.style.length; index += 1) {\n const property = source.style.item(index);\n if (\n property.startsWith(\"--hjm-\") ||\n property === \"background-color\" ||\n property === \"color\" ||\n property === \"color-scheme\" ||\n property === \"font-family\" ||\n property === \"font-size\" ||\n property === \"line-height\"\n ) {\n host.style.setProperty(\n property,\n source.style.getPropertyValue(property),\n source.style.getPropertyPriority(property),\n );\n }\n }\n for (const attribute of [\"data-motion\", \"data-theme\", \"data-text-scale\"] as const) {\n const value = source.getAttribute(attribute);\n if (value === null) host.removeAttribute(attribute);\n else host.setAttribute(attribute, value);\n }\n host.dir = source.dir;\n return;\n }\n host.removeAttribute(\"style\");\n host.removeAttribute(\"data-motion\");\n host.removeAttribute(\"data-theme\");\n host.removeAttribute(\"data-text-scale\");\n host.dir = anchor?.closest<HTMLElement>(\"[dir]\")?.dir ?? \"\";\n}\n\nexport function AnchoredPortal({\n anchorRef,\n children,\n container,\n ssrFallback = \"none\",\n}: PortalProps) {\n const [mounted, setMounted] = useState(false);\n const hostRef = useRef<HTMLDivElement | null>(null);\n const setHostRef = useCallback((host: HTMLDivElement | null) => {\n hostRef.current = host;\n if (host) synchronizePortalEnvironment(host, anchorRef.current);\n }, [anchorRef]);\n useEffect(() => setMounted(true), []);\n useEffect(() => {\n const host = hostRef.current;\n const source = anchorRef.current?.closest<HTMLElement>(\n \"[data-hjm-provider], [data-hjm-portal]\",\n ) ?? null;\n if (!host || !source || typeof MutationObserver === \"undefined\") return;\n const observer = new MutationObserver(() => {\n synchronizePortalEnvironment(host, anchorRef.current);\n });\n observer.observe(source, {\n attributes: true,\n attributeFilter: [\"data-motion\", \"data-theme\", \"data-text-scale\", \"dir\", \"style\"],\n });\n return () => observer.disconnect();\n }, [anchorRef, mounted]);\n if (!mounted) return ssrFallback === \"inline\" ? children : null;\n return createPortal(\n <div ref={setHostRef} className=\"hjm-root hjm-portal\" data-hjm-portal=\"\">\n {children}\n </div>,\n container ?? document.body,\n );\n}\n\nexport type AnchoredPopupAlign = \"start\" | \"center\" | \"end\";\nexport type AnchoredPopupPlacement = \"bottom\" | \"top\" | \"start\" | \"end\";\n\ntype AnchoredPopupPosition = Readonly<{\n align: AnchoredPopupAlign;\n placement: AnchoredPopupPlacement;\n style: CSSProperties;\n}>;\n\ntype AnchoredPopupOptions = Readonly<{\n align?: AnchoredPopupAlign;\n gap?: number;\n matchAnchorWidth?: boolean;\n placement?: AnchoredPopupPlacement;\n viewportPadding?: number;\n zIndex?: number;\n}>;\n\nconst hiddenPopupPosition: AnchoredPopupPosition = {\n align: \"start\",\n placement: \"bottom\",\n style: {\n position: \"fixed\",\n inset: \"auto\",\n left: 0,\n top: 0,\n visibility: \"hidden\",\n },\n};\n\nfunction samePosition(\n previous: AnchoredPopupPosition,\n next: AnchoredPopupPosition,\n): boolean {\n return previous.align === next.align &&\n previous.placement === next.placement &&\n previous.style.left === next.style.left &&\n previous.style.top === next.style.top &&\n previous.style.minWidth === next.style.minWidth &&\n previous.style.maxWidth === next.style.maxWidth &&\n previous.style.maxHeight === next.style.maxHeight &&\n previous.style.zIndex === next.style.zIndex &&\n previous.style.visibility === next.style.visibility;\n}\n\n/**\n * Positions a fixed portal popup against its anchor using logical alignment.\n * The popup flips vertically and shifts horizontally to stay inside the visual\n * viewport, then follows every scroll/resize source that can move either node.\n */\nexport function useAnchoredPopup(\n anchorRef: RefObject<HTMLElement | null>,\n popup: HTMLElement | null,\n {\n align = \"start\",\n gap = 8,\n matchAnchorWidth = false,\n placement: preferredPlacement = \"bottom\",\n viewportPadding = 16,\n zIndex = 800,\n }: AnchoredPopupOptions = {},\n): AnchoredPopupPosition {\n const [position, setPosition] = useState<AnchoredPopupPosition>(() => ({\n ...hiddenPopupPosition,\n align,\n }));\n\n const update = useCallback(() => {\n const anchor = anchorRef.current;\n if (!anchor || !popup || !anchor.isConnected || !popup.isConnected) return;\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = popup.getBoundingClientRect();\n const visualViewport = window.visualViewport;\n const viewportLeft = visualViewport?.offsetLeft ?? 0;\n const viewportTop = visualViewport?.offsetTop ?? 0;\n const viewportWidth = visualViewport?.width ?? window.innerWidth;\n const viewportHeight = visualViewport?.height ?? window.innerHeight;\n const viewportRight = viewportLeft + viewportWidth;\n const viewportBottom = viewportTop + viewportHeight;\n const availableBottom = Math.max(0, viewportBottom - viewportPadding - anchorRect.bottom - gap);\n const availableTop = Math.max(0, anchorRect.top - viewportTop - viewportPadding - gap);\n const availableLeft = Math.max(0, anchorRect.left - viewportLeft - viewportPadding - gap);\n const availableRight = Math.max(0, viewportRight - viewportPadding - anchorRect.right - gap);\n const maximumPopupHeight = Math.max(0, viewportHeight - (2 * viewportPadding));\n const maximumPopupWidth = Math.max(0, viewportWidth - (2 * viewportPadding));\n const desiredPopupHeight = Math.min(\n Math.max(popupRect.height, popup.scrollHeight),\n maximumPopupHeight,\n );\n const desiredPopupWidth = Math.min(\n Math.max(popupRect.width, popup.scrollWidth, matchAnchorWidth ? anchorRect.width : 0),\n maximumPopupWidth,\n );\n const direction = getComputedStyle(anchor).direction;\n const directModalOwner = anchor.closest<HTMLElement>(\"[data-hjm-modal-content]\");\n const inheritedOwnerId = anchor\n .closest<HTMLElement>(\"[data-hjm-popup-owner]\")\n ?.getAttribute(\"data-hjm-popup-owner\") ?? null;\n const modalOwner = directModalOwner ??\n (inheritedOwnerId === null ? null : document.getElementById(inheritedOwnerId));\n const modalLayerValue = modalOwner\n ?.closest<HTMLElement>(\".hjm-overlay\")\n ?.style.zIndex ?? \"\";\n const modalLayer = Number.parseInt(modalLayerValue, 10);\n const resolvedZIndex = Number.isFinite(modalLayer) ? modalLayer + 1 : zIndex;\n const logicalStartAtLeft = direction !== \"rtl\";\n const preferredPhysicalPlacement = preferredPlacement === \"start\"\n ? (logicalStartAtLeft ? \"left\" : \"right\")\n : preferredPlacement === \"end\"\n ? (logicalStartAtLeft ? \"right\" : \"left\")\n : preferredPlacement;\n let physicalPlacement: \"bottom\" | \"top\" | \"left\" | \"right\" =\n preferredPhysicalPlacement;\n if (\n physicalPlacement === \"bottom\" &&\n desiredPopupHeight > availableBottom &&\n availableTop > availableBottom\n ) physicalPlacement = \"top\";\n else if (\n physicalPlacement === \"top\" &&\n desiredPopupHeight > availableTop &&\n availableBottom > availableTop\n ) physicalPlacement = \"bottom\";\n else if (\n physicalPlacement === \"left\" &&\n desiredPopupWidth > availableLeft &&\n availableRight > availableLeft\n ) physicalPlacement = \"right\";\n else if (\n physicalPlacement === \"right\" &&\n desiredPopupWidth > availableRight &&\n availableLeft > availableRight\n ) physicalPlacement = \"left\";\n const placement: AnchoredPopupPlacement = physicalPlacement === \"left\"\n ? (logicalStartAtLeft ? \"start\" : \"end\")\n : physicalPlacement === \"right\"\n ? (logicalStartAtLeft ? \"end\" : \"start\")\n : physicalPlacement;\n const availableHeight = physicalPlacement === \"bottom\"\n ? availableBottom\n : physicalPlacement === \"top\"\n ? availableTop\n : maximumPopupHeight;\n const availableWidth = physicalPlacement === \"left\"\n ? availableLeft\n : physicalPlacement === \"right\"\n ? availableRight\n : maximumPopupWidth;\n const popupHeight = Math.min(desiredPopupHeight, Math.max(0, availableHeight));\n const popupWidth = Math.min(desiredPopupWidth, Math.max(0, availableWidth));\n const alignLeftEdge = align === \"start\" ? logicalStartAtLeft : !logicalStartAtLeft;\n const inlineAlignedLeft = align === \"center\"\n ? anchorRect.left + ((anchorRect.width - popupWidth) / 2)\n : alignLeftEdge\n ? anchorRect.left\n : anchorRect.right - popupWidth;\n const blockAlignedTop = align === \"center\"\n ? anchorRect.top + ((anchorRect.height - popupHeight) / 2)\n : align === \"start\"\n ? anchorRect.top\n : anchorRect.bottom - popupHeight;\n const desiredLeft = physicalPlacement === \"left\"\n ? anchorRect.left - gap - popupWidth\n : physicalPlacement === \"right\"\n ? anchorRect.right + gap\n : inlineAlignedLeft;\n const maximumLeft = Math.max(\n viewportLeft + viewportPadding,\n viewportRight - viewportPadding - popupWidth,\n );\n const left = Math.min(\n Math.max(desiredLeft, viewportLeft + viewportPadding),\n maximumLeft,\n );\n const desiredTop = physicalPlacement === \"bottom\"\n ? anchorRect.bottom + gap\n : physicalPlacement === \"top\"\n ? anchorRect.top - gap - popupHeight\n : blockAlignedTop;\n const maximumTop = Math.max(\n viewportTop + viewportPadding,\n viewportBottom - viewportPadding - popupHeight,\n );\n const top = Math.min(\n Math.max(desiredTop, viewportTop + viewportPadding),\n maximumTop,\n );\n const next: AnchoredPopupPosition = {\n align,\n placement,\n style: {\n position: \"fixed\",\n inset: \"auto\",\n left: Math.round(left),\n top: Math.round(top),\n minWidth: matchAnchorWidth\n ? Math.round(Math.min(anchorRect.width, availableWidth, maximumPopupWidth))\n : undefined,\n maxWidth: Math.max(0, availableWidth),\n maxHeight: Math.max(0, availableHeight),\n visibility: \"visible\",\n zIndex: resolvedZIndex,\n },\n };\n setPosition((previous) => samePosition(previous, next) ? previous : next);\n }, [\n align,\n anchorRef,\n gap,\n matchAnchorWidth,\n popup,\n preferredPlacement,\n viewportPadding,\n zIndex,\n ]);\n\n useEffect(() => {\n if (!popup) {\n setPosition({ ...hiddenPopupPosition, align });\n return;\n }\n update();\n const frame = requestAnimationFrame(update);\n const handleViewportChange = () => update();\n window.addEventListener(\"resize\", handleViewportChange);\n window.addEventListener(\"scroll\", handleViewportChange, true);\n window.visualViewport?.addEventListener(\"resize\", handleViewportChange);\n window.visualViewport?.addEventListener(\"scroll\", handleViewportChange);\n const resizeObserver = typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(update);\n if (anchorRef.current) resizeObserver?.observe(anchorRef.current);\n resizeObserver?.observe(popup);\n return () => {\n cancelAnimationFrame(frame);\n window.removeEventListener(\"resize\", handleViewportChange);\n window.removeEventListener(\"scroll\", handleViewportChange, true);\n window.visualViewport?.removeEventListener(\"resize\", handleViewportChange);\n window.visualViewport?.removeEventListener(\"scroll\", handleViewportChange);\n resizeObserver?.disconnect();\n };\n }, [align, anchorRef, popup, update]);\n\n return position;\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { type DesignSystemDirection, type DesignSystemProviderValue, type DesignSystemTextScale } from "@hjmds/design-contracts/components/design-system-provider";
2
+ import type { ResolvedTheme, ThemePreference } from "@hjmds/design-contracts/colors";
3
+ import { type HTMLAttributes, type ReactNode } from "react";
4
+ export type TooltipCoordinator = Readonly<{
5
+ activeId: string | null;
6
+ activate(id: string): void;
7
+ deactivate(id: string): void;
8
+ shouldSkipDelay(): boolean;
9
+ }>;
10
+ type HjmProviderEnvironmentProps = Readonly<{
11
+ value?: never;
12
+ theme?: ThemePreference;
13
+ direction?: DesignSystemDirection;
14
+ textScale?: DesignSystemTextScale;
15
+ reducedMotion?: boolean;
16
+ /** Deterministic SSR/test override; otherwise prefers-color-scheme is observed. */
17
+ systemTheme?: ResolvedTheme;
18
+ }>;
19
+ type HjmProviderValueProps = Readonly<{
20
+ /** Complete, validated environment and semantic product palette. */
21
+ value: DesignSystemProviderValue;
22
+ theme?: never;
23
+ direction?: never;
24
+ textScale?: never;
25
+ reducedMotion?: never;
26
+ systemTheme?: never;
27
+ }>;
28
+ export type HjmProviderProps = Omit<HTMLAttributes<HTMLDivElement>, "children" | "dir"> & Readonly<{
29
+ children: ReactNode;
30
+ }> & (HjmProviderEnvironmentProps | HjmProviderValueProps);
31
+ export declare const HjmProvider: import("react").ForwardRefExoticComponent<HjmProviderProps & import("react").RefAttributes<HTMLDivElement>>;
32
+ export declare function useHjmTheme(): DesignSystemProviderValue;
33
+ /** Renderer components use the browser default direction when no provider is present. */
34
+ export declare function useOptionalHjmTheme(): DesignSystemProviderValue | null;
35
+ /** Internal provider-scoped coordination used by Tooltip renderers. */
36
+ export declare function useTooltipCoordinator(): TooltipCoordinator | null;
37
+ export {};
38
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC3B,MAAM,2DAA2D,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAQL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,IAAI,OAAO,CAAC;CAC5B,CAAC,CAAC;AAkBH,KAAK,2BAA2B,GAAG,QAAQ,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,CAAC;IACpC,oEAAoE;IACpE,KAAK,EAAE,yBAAyB,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,cAAc,CAAC,cAAc,CAAC,EAC9B,UAAU,GAAG,KAAK,CACnB,GACC,QAAQ,CAAC;IACP,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC,GAAG,CAAC,2BAA2B,GAAG,qBAAqB,CAAC,CAAC;AAE7D,eAAO,MAAM,WAAW,6GA6FvB,CAAC;AAEF,wBAAgB,WAAW,IAAI,yBAAyB,CAMvD;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,IAAI,yBAAyB,GAAG,IAAI,CAEtE;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAEjE"}
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { resolveDesignSystemProviderValue, validateDesignSystemProviderValue, } from "@hjmds/design-contracts/components/design-system-provider";
3
+ import { tooltipBehaviorDefaults } from "@hjmds/design-contracts/components/tooltip";
4
+ import { createContext, forwardRef, useCallback, useContext, useRef, useState, useSyncExternalStore, } from "react";
5
+ import { classNames } from "./internal.js";
6
+ import { createHjmThemeStyle } from "./theme.js";
7
+ const HjmThemeContext = createContext(null);
8
+ const TooltipCoordinatorContext = createContext(null);
9
+ function subscribeMedia(query, callback) {
10
+ const media = window.matchMedia(query);
11
+ media.addEventListener("change", callback);
12
+ return () => media.removeEventListener("change", callback);
13
+ }
14
+ function useMediaQuery(query, observe = true) {
15
+ return useSyncExternalStore((callback) => observe ? subscribeMedia(query, callback) : () => undefined, () => observe && window.matchMedia(query).matches, () => false);
16
+ }
17
+ export const HjmProvider = forwardRef(function HjmProvider({ children, theme, direction, textScale, reducedMotion, systemTheme, value: suppliedValue, className, style, ...rest }, ref) {
18
+ const parent = useContext(HjmThemeContext);
19
+ const observesSystem = suppliedValue === undefined;
20
+ const prefersDark = useMediaQuery("(prefers-color-scheme: dark)", observesSystem);
21
+ const prefersReducedMotion = useMediaQuery("(prefers-reduced-motion: reduce)", observesSystem);
22
+ const resolvedSystemTheme = systemTheme ?? (prefersDark ? "dark" : "light");
23
+ const input = {
24
+ ...(theme === undefined ? {} : { theme }),
25
+ ...(direction === undefined ? {} : { direction }),
26
+ ...(textScale === undefined ? {} : { textScale }),
27
+ ...(reducedMotion === undefined ? {} : { reducedMotion }),
28
+ };
29
+ const value = suppliedValue ?? resolveDesignSystemProviderValue(input, {
30
+ systemTheme: resolvedSystemTheme,
31
+ ...(parent === null ? {} : { parent: parent.environment }),
32
+ ...(reducedMotion === undefined && parent === null
33
+ ? { systemReducedMotion: prefersReducedMotion }
34
+ : {}),
35
+ });
36
+ validateDesignSystemProviderValue(value);
37
+ const environment = value.environment;
38
+ const [activeTooltipId, setActiveTooltipId] = useState(null);
39
+ const activeTooltipIdRef = useRef(null);
40
+ const lastTooltipTransitionAtRef = useRef(Number.NEGATIVE_INFINITY);
41
+ activeTooltipIdRef.current = activeTooltipId;
42
+ const activateTooltip = useCallback((id) => {
43
+ setActiveTooltipId((current) => {
44
+ if (current === id)
45
+ return current;
46
+ if (current !== null)
47
+ lastTooltipTransitionAtRef.current = Date.now();
48
+ activeTooltipIdRef.current = id;
49
+ return id;
50
+ });
51
+ }, []);
52
+ const deactivateTooltip = useCallback((id) => {
53
+ setActiveTooltipId((current) => {
54
+ if (current !== id)
55
+ return current;
56
+ lastTooltipTransitionAtRef.current = Date.now();
57
+ activeTooltipIdRef.current = null;
58
+ return null;
59
+ });
60
+ }, []);
61
+ const shouldSkipTooltipDelay = useCallback(() => activeTooltipIdRef.current !== null ||
62
+ Date.now() - lastTooltipTransitionAtRef.current <
63
+ tooltipBehaviorDefaults.skipDelayMs, []);
64
+ const tooltipCoordinator = {
65
+ activeId: activeTooltipId,
66
+ activate: activateTooltip,
67
+ deactivate: deactivateTooltip,
68
+ shouldSkipDelay: shouldSkipTooltipDelay,
69
+ };
70
+ return (_jsx(HjmThemeContext.Provider, { value: value, children: _jsx(TooltipCoordinatorContext.Provider, { value: tooltipCoordinator, children: _jsx("div", { ...rest, ref: ref, className: classNames("hjm-root", className), "data-hjm-provider": "", "data-motion": environment.reducedMotion ? "reduced" : "full", "data-theme": environment.theme, "data-text-scale": environment.textScale, dir: environment.direction, style: { ...createHjmThemeStyle(value), ...style }, children: children }) }) }));
71
+ });
72
+ export function useHjmTheme() {
73
+ const value = useContext(HjmThemeContext);
74
+ if (value === null) {
75
+ throw new Error("useHjmTheme must be used inside HjmProvider");
76
+ }
77
+ return value;
78
+ }
79
+ /** Renderer components use the browser default direction when no provider is present. */
80
+ export function useOptionalHjmTheme() {
81
+ return useContext(HjmThemeContext);
82
+ }
83
+ /** Internal provider-scoped coordination used by Tooltip renderers. */
84
+ export function useTooltipCoordinator() {
85
+ return useContext(TooltipCoordinatorContext);
86
+ }
87
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveDesignSystemProviderValue,\n validateDesignSystemProviderValue,\n type DesignSystemDirection,\n type DesignSystemProviderValue,\n type DesignSystemTextScale,\n} from \"@hjmds/design-contracts/components/design-system-provider\";\nimport type { ResolvedTheme, ThemePreference } from \"@hjmds/design-contracts/colors\";\nimport { tooltipBehaviorDefaults } from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useRef,\n useState,\n useSyncExternalStore,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { classNames } from \"./internal.js\";\nimport { createHjmThemeStyle } from \"./theme.js\";\n\nconst HjmThemeContext = createContext<DesignSystemProviderValue | null>(null);\n\nexport type TooltipCoordinator = Readonly<{\n activeId: string | null;\n activate(id: string): void;\n deactivate(id: string): void;\n shouldSkipDelay(): boolean;\n}>;\n\nconst TooltipCoordinatorContext = createContext<TooltipCoordinator | null>(null);\n\nfunction subscribeMedia(query: string, callback: () => void): () => void {\n const media = window.matchMedia(query);\n media.addEventListener(\"change\", callback);\n return () => media.removeEventListener(\"change\", callback);\n}\n\nfunction useMediaQuery(query: string, observe = true): boolean {\n return useSyncExternalStore(\n (callback) => observe ? subscribeMedia(query, callback) : () => undefined,\n () => observe && window.matchMedia(query).matches,\n () => false,\n );\n}\n\ntype HjmProviderEnvironmentProps = Readonly<{\n value?: never;\n theme?: ThemePreference;\n direction?: DesignSystemDirection;\n textScale?: DesignSystemTextScale;\n reducedMotion?: boolean;\n /** Deterministic SSR/test override; otherwise prefers-color-scheme is observed. */\n systemTheme?: ResolvedTheme;\n}>;\n\ntype HjmProviderValueProps = Readonly<{\n /** Complete, validated environment and semantic product palette. */\n value: DesignSystemProviderValue;\n theme?: never;\n direction?: never;\n textScale?: never;\n reducedMotion?: never;\n systemTheme?: never;\n}>;\n\nexport type HjmProviderProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n \"children\" | \"dir\"\n> &\n Readonly<{\n children: ReactNode;\n }> & (HjmProviderEnvironmentProps | HjmProviderValueProps);\n\nexport const HjmProvider = forwardRef<HTMLDivElement, HjmProviderProps>(\n function HjmProvider(\n {\n children,\n theme,\n direction,\n textScale,\n reducedMotion,\n systemTheme,\n value: suppliedValue,\n className,\n style,\n ...rest\n },\n ref,\n ) {\n const parent = useContext(HjmThemeContext);\n const observesSystem = suppliedValue === undefined;\n const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\", observesSystem);\n const prefersReducedMotion = useMediaQuery(\n \"(prefers-reduced-motion: reduce)\",\n observesSystem,\n );\n const resolvedSystemTheme = systemTheme ?? (prefersDark ? \"dark\" : \"light\");\n const input = {\n ...(theme === undefined ? {} : { theme }),\n ...(direction === undefined ? {} : { direction }),\n ...(textScale === undefined ? {} : { textScale }),\n ...(reducedMotion === undefined ? {} : { reducedMotion }),\n };\n const value = suppliedValue ?? resolveDesignSystemProviderValue(input, {\n systemTheme: resolvedSystemTheme,\n ...(parent === null ? {} : { parent: parent.environment }),\n ...(reducedMotion === undefined && parent === null\n ? { systemReducedMotion: prefersReducedMotion }\n : {}),\n });\n validateDesignSystemProviderValue(value);\n const environment = value.environment;\n const [activeTooltipId, setActiveTooltipId] = useState<string | null>(null);\n const activeTooltipIdRef = useRef<string | null>(null);\n const lastTooltipTransitionAtRef = useRef(Number.NEGATIVE_INFINITY);\n activeTooltipIdRef.current = activeTooltipId;\n const activateTooltip = useCallback((id: string) => {\n setActiveTooltipId((current) => {\n if (current === id) return current;\n if (current !== null) lastTooltipTransitionAtRef.current = Date.now();\n activeTooltipIdRef.current = id;\n return id;\n });\n }, []);\n const deactivateTooltip = useCallback((id: string) => {\n setActiveTooltipId((current) => {\n if (current !== id) return current;\n lastTooltipTransitionAtRef.current = Date.now();\n activeTooltipIdRef.current = null;\n return null;\n });\n }, []);\n const shouldSkipTooltipDelay = useCallback(\n () =>\n activeTooltipIdRef.current !== null ||\n Date.now() - lastTooltipTransitionAtRef.current <\n tooltipBehaviorDefaults.skipDelayMs,\n [],\n );\n const tooltipCoordinator: TooltipCoordinator = {\n activeId: activeTooltipId,\n activate: activateTooltip,\n deactivate: deactivateTooltip,\n shouldSkipDelay: shouldSkipTooltipDelay,\n };\n\n return (\n <HjmThemeContext.Provider value={value}>\n <TooltipCoordinatorContext.Provider value={tooltipCoordinator}>\n <div\n {...rest}\n ref={ref}\n className={classNames(\"hjm-root\", className)}\n data-hjm-provider=\"\"\n data-motion={environment.reducedMotion ? \"reduced\" : \"full\"}\n data-theme={environment.theme}\n data-text-scale={environment.textScale}\n dir={environment.direction}\n style={{ ...createHjmThemeStyle(value), ...style }}\n >\n {children}\n </div>\n </TooltipCoordinatorContext.Provider>\n </HjmThemeContext.Provider>\n );\n },\n);\n\nexport function useHjmTheme(): DesignSystemProviderValue {\n const value = useContext(HjmThemeContext);\n if (value === null) {\n throw new Error(\"useHjmTheme must be used inside HjmProvider\");\n }\n return value;\n}\n\n/** Renderer components use the browser default direction when no provider is present. */\nexport function useOptionalHjmTheme(): DesignSystemProviderValue | null {\n return useContext(HjmThemeContext);\n}\n\n/** Internal provider-scoped coordination used by Tooltip renderers. */\nexport function useTooltipCoordinator(): TooltipCoordinator | null {\n return useContext(TooltipCoordinatorContext);\n}\n"]}
@@ -0,0 +1,72 @@
1
+ import { type SelectCollectionSectionDescriptor, type SelectCollectionSource, type SelectOpenChangeReason } from "@hjmds/design-contracts/components/collection";
2
+ import { type AsyncCollectionState, type SelectItemDescriptor } from "@hjmds/design-contracts/behaviors";
3
+ import { type SelectDensity, type SelectSize } from "@hjmds/design-contracts/recipes";
4
+ import { type ButtonHTMLAttributes, type ReactElement, type ReactNode, type RefAttributes } from "react";
5
+ import { type AnchoredPopupAlign } from "./portal.js";
6
+ export type SelectItem<Key extends string = string> = SelectItemDescriptor<Key>;
7
+ export type SelectSection<Key extends string = string, SectionKey extends string = string> = SelectCollectionSectionDescriptor<Key, SectionKey>;
8
+ export type SelectLeadingRenderProps = Readonly<{
9
+ color: "currentColor";
10
+ size: number;
11
+ glyphSize: number;
12
+ }>;
13
+ export type SelectOptionLeadingRenderProps = SelectLeadingRenderProps & Readonly<{
14
+ selected: boolean;
15
+ highlighted: boolean;
16
+ disabled: boolean;
17
+ }>;
18
+ type SelectSourceProps<Key extends string, SectionKey extends string> = SelectCollectionSource<Key, SectionKey>;
19
+ type SelectSelectionProps<Key extends string> = Readonly<{
20
+ selectedKey: Key | null;
21
+ defaultSelectedKey?: never;
22
+ onSelectionChange(key: Key | null): void;
23
+ }> | Readonly<{
24
+ selectedKey?: never;
25
+ defaultSelectedKey?: Key | null;
26
+ onSelectionChange?: (key: Key | null) => void;
27
+ }>;
28
+ type SelectOpenProps = Readonly<{
29
+ open: boolean;
30
+ defaultOpen?: never;
31
+ onOpenChange(open: boolean, reason: SelectOpenChangeReason): void;
32
+ }> | Readonly<{
33
+ open?: never;
34
+ defaultOpen?: boolean;
35
+ onOpenChange?: (open: boolean, reason: SelectOpenChangeReason) => void;
36
+ }>;
37
+ type SelectLabelProps = Readonly<{
38
+ label: string;
39
+ accessibilityLabel?: string;
40
+ }> | Readonly<{
41
+ label?: never;
42
+ accessibilityLabel: string;
43
+ }>;
44
+ type SelectBaseProps<Key extends string> = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "aria-label" | "children" | "defaultValue" | "onChange" | "role" | "value"> & Readonly<{
45
+ description?: ReactNode;
46
+ error?: ReactNode;
47
+ /** Localized text shown when no item is selected. */
48
+ placeholder: string;
49
+ /** Localized label for the nullable empty-selection option. */
50
+ emptySelectionLabel: string;
51
+ asyncState?: AsyncCollectionState;
52
+ selectedItem?: SelectItemDescriptor<Key>;
53
+ disallowEmptySelection?: boolean;
54
+ loop?: boolean;
55
+ /** Locks interaction without removing the trigger from the focus order. */
56
+ busy?: boolean;
57
+ readOnly?: boolean;
58
+ required?: boolean;
59
+ size?: SelectSize;
60
+ density?: SelectDensity;
61
+ /** Logical listbox alignment against the trigger; automatically mirrors in RTL. */
62
+ align?: AnchoredPopupAlign;
63
+ fieldClassName?: string;
64
+ portalContainer?: HTMLElement;
65
+ locale?: string | readonly string[];
66
+ renderLeading?: (item: SelectItemDescriptor<Key> | null, appearance: SelectLeadingRenderProps) => ReactNode;
67
+ renderOptionLeading?: (item: SelectItemDescriptor<Key>, appearance: SelectOptionLeadingRenderProps) => ReactNode;
68
+ }>;
69
+ export type SelectProps<Key extends string = string, SectionKey extends string = string> = SelectBaseProps<Key> & SelectSourceProps<Key, SectionKey> & SelectSelectionProps<Key> & SelectOpenProps & SelectLabelProps;
70
+ export declare const Select: <Key extends string = string, SectionKey extends string = string>(props: SelectProps<Key, SectionKey> & RefAttributes<HTMLButtonElement>) => ReactElement | null;
71
+ export {};
72
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAE1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAOL,KAAK,oBAAoB,EAGzB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,CACvB,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,UAAU,SAAS,MAAM,GAAG,MAAM,IAChC,iCAAiC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAEvD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,wBAAwB,GAAG,QAAQ,CAAC;IAC/E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAKH,KAAK,iBAAiB,CAAC,GAAG,SAAS,MAAM,EAAE,UAAU,SAAS,MAAM,IAClE,sBAAsB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAE1C,KAAK,oBAAoB,CAAC,GAAG,SAAS,MAAM,IACxC,QAAQ,CAAC;IACP,WAAW,EAAE,GAAG,GAAG,IAAI,CAAC;IACxB,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;CAC1C,CAAC,GACF,QAAQ,CAAC;IACP,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,kBAAkB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC;CAC/C,CAAC,CAAC;AAEP,KAAK,eAAe,GAChB,QAAQ,CAAC;IACP,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACnE,CAAC,GACF,QAAQ,CAAC;IACP,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACxE,CAAC,CAAC;AAEP,KAAK,gBAAgB,GACjB,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE5D,KAAK,eAAe,CAAC,GAAG,SAAS,MAAM,IAAI,IAAI,CAC7C,oBAAoB,CAAC,iBAAiB,CAAC,EACrC,YAAY,GACZ,UAAU,GACV,cAAc,GACd,UAAU,GACV,MAAM,GACN,OAAO,CACV,GACC,QAAQ,CAAC;IACP,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,YAAY,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACzC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,mFAAmF;IACnF,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,EACtC,UAAU,EAAE,wBAAwB,KACjC,SAAS,CAAC;IACf,mBAAmB,CAAC,EAAE,CACpB,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAC/B,UAAU,EAAE,8BAA8B,KACvC,SAAS,CAAC;CAChB,CAAC,CAAC;AAEL,MAAM,MAAM,WAAW,CACrB,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,UAAU,SAAS,MAAM,GAAG,MAAM,IAChC,eAAe,CAAC,GAAG,CAAC,GACtB,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,GAClC,oBAAoB,CAAC,GAAG,CAAC,GACzB,eAAe,GACf,gBAAgB,CAAC;AA4iBnB,eAAO,MAAM,MAAM,EAA8B,CAC/C,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,UAAU,SAAS,MAAM,GAAG,MAAM,EAElC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC,KACnE,YAAY,GAAG,IAAI,CAAC"}