@solibo/solibo-ui 2.0.3 → 2.1.0

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 (145) hide show
  1. package/dist/assets/index.css +1 -1
  2. package/dist/assets/index13.css +1 -1
  3. package/dist/assets/index16.css +1 -1
  4. package/dist/assets/index18.css +1 -1
  5. package/dist/assets/index19.css +1 -1
  6. package/dist/assets/index2.css +1 -1
  7. package/dist/assets/index28.css +1 -1
  8. package/dist/assets/index35.css +1 -1
  9. package/dist/assets/index36.css +1 -1
  10. package/dist/assets/index37.css +1 -1
  11. package/dist/assets/index38.css +1 -1
  12. package/dist/assets/index39.css +1 -1
  13. package/dist/assets/index40.css +1 -1
  14. package/dist/assets/index41.css +1 -1
  15. package/dist/assets/index42.css +1 -1
  16. package/dist/assets/index43.css +1 -1
  17. package/dist/assets/index44.css +1 -1
  18. package/dist/assets/index45.css +1 -1
  19. package/dist/assets/index46.css +1 -1
  20. package/dist/assets/index47.css +1 -1
  21. package/dist/assets/index48.css +1 -1
  22. package/dist/assets/index49.css +1 -1
  23. package/dist/assets/index50.css +1 -1
  24. package/dist/assets/index51.css +1 -1
  25. package/dist/assets/index52.css +1 -1
  26. package/dist/assets/index53.css +1 -1
  27. package/dist/assets/index54.css +1 -1
  28. package/dist/assets/index55.css +1 -0
  29. package/dist/assets/index6.css +1 -1
  30. package/dist/components/badge/index.cjs +1 -1
  31. package/dist/components/badge/index.js +38 -38
  32. package/dist/components/checkbox/index.cjs +1 -1
  33. package/dist/components/checkbox/index.js +1 -1
  34. package/dist/components/clipboard/index.cjs +2 -0
  35. package/dist/components/clipboard/index.cjs.map +1 -0
  36. package/dist/components/clipboard/index.js +29 -0
  37. package/dist/components/clipboard/index.js.map +1 -0
  38. package/dist/components/collapsible/index.cjs +1 -1
  39. package/dist/components/collapsible/index.js +1 -1
  40. package/dist/components/controls/index.cjs +1 -1
  41. package/dist/components/controls/index.js +2 -2
  42. package/dist/components/croppable/index.cjs +1 -1
  43. package/dist/components/croppable/index.js +1 -1
  44. package/dist/components/dialog/index.cjs +1 -1
  45. package/dist/components/dialog/index.js +35 -35
  46. package/dist/components/divider/index.cjs +1 -1
  47. package/dist/components/divider/index.js +3 -3
  48. package/dist/components/dropdown/index.cjs +1 -1
  49. package/dist/components/dropdown/index.js +4 -4
  50. package/dist/components/dropzone/index.cjs +1 -1
  51. package/dist/components/dropzone/index.js +1 -1
  52. package/dist/components/editor/index.cjs +1 -1
  53. package/dist/components/editor/index.js +2 -2
  54. package/dist/components/empty-state/index.cjs +1 -1
  55. package/dist/components/empty-state/index.cjs.map +1 -1
  56. package/dist/components/empty-state/index.js +16 -11
  57. package/dist/components/empty-state/index.js.map +1 -1
  58. package/dist/components/fieldset/index.cjs +1 -1
  59. package/dist/components/fieldset/index.js +1 -1
  60. package/dist/components/figure/index.cjs +1 -1
  61. package/dist/components/figure/index.js +1 -1
  62. package/dist/components/file/index.cjs +1 -1
  63. package/dist/components/file/index.js +1 -1
  64. package/dist/components/group/index.cjs +1 -1
  65. package/dist/components/group/index.js +3 -3
  66. package/dist/components/header/index.cjs +1 -1
  67. package/dist/components/header/index.cjs.map +1 -1
  68. package/dist/components/header/index.js +22 -22
  69. package/dist/components/icon/index.cjs +1 -1
  70. package/dist/components/icon/index.cjs.map +1 -1
  71. package/dist/components/icon/index.js +28 -26
  72. package/dist/components/icon/index.js.map +1 -1
  73. package/dist/components/iframe/index.cjs +1 -1
  74. package/dist/components/iframe/index.cjs.map +1 -1
  75. package/dist/components/iframe/index.js +45 -44
  76. package/dist/components/iframe/index.js.map +1 -1
  77. package/dist/components/input/index.cjs +1 -1
  78. package/dist/components/input/index.js +2 -2
  79. package/dist/components/link/index.cjs +1 -1
  80. package/dist/components/link/index.js +1 -1
  81. package/dist/components/list/index.cjs +1 -1
  82. package/dist/components/list/index.cjs.map +1 -1
  83. package/dist/components/list/index.js +72 -44
  84. package/dist/components/list/index.js.map +1 -1
  85. package/dist/components/loading/index.cjs +1 -1
  86. package/dist/components/loading/index.js +1 -1
  87. package/dist/components/menu/index.cjs +1 -1
  88. package/dist/components/menu/index.cjs.map +1 -1
  89. package/dist/components/menu/index.js +23 -22
  90. package/dist/components/menu/index.js.map +1 -1
  91. package/dist/components/message/index.cjs +1 -1
  92. package/dist/components/message/index.cjs.map +1 -1
  93. package/dist/components/message/index.js +33 -33
  94. package/dist/components/message/index.js.map +1 -1
  95. package/dist/components/nav/index.cjs +1 -1
  96. package/dist/components/nav/index.js +36 -36
  97. package/dist/components/popover/index.cjs +1 -1
  98. package/dist/components/popover/index.cjs.map +1 -1
  99. package/dist/components/popover/index.js +81 -69
  100. package/dist/components/popover/index.js.map +1 -1
  101. package/dist/components/search/index.cjs +1 -1
  102. package/dist/components/search/index.js +1 -1
  103. package/dist/components/select/index.cjs +1 -1
  104. package/dist/components/select/index.js +2 -2
  105. package/dist/components/sortable/index.cjs.map +1 -1
  106. package/dist/components/sortable/index.js.map +1 -1
  107. package/dist/components/table/index.cjs.map +1 -1
  108. package/dist/components/table/index.js.map +1 -1
  109. package/dist/components/textarea/index.cjs +1 -1
  110. package/dist/components/textarea/index.js +12 -12
  111. package/dist/components/toolbar/index.cjs +1 -1
  112. package/dist/components/toolbar/index.js +1 -1
  113. package/dist/components/widget/index.cjs +1 -1
  114. package/dist/components/widget/index.cjs.map +1 -1
  115. package/dist/components/widget/index.js +13 -8
  116. package/dist/components/widget/index.js.map +1 -1
  117. package/dist/icons-BTif0nDb.cjs +2 -0
  118. package/dist/icons-BTif0nDb.cjs.map +1 -0
  119. package/dist/{icons-dUP7sKyt.js → icons-CBbpxsJF.js} +32 -5
  120. package/dist/icons-CBbpxsJF.js.map +1 -0
  121. package/dist/{index-Bt7vnwji.cjs → index-5qUTKX7P.cjs} +2 -2
  122. package/dist/{index-Bt7vnwji.cjs.map → index-5qUTKX7P.cjs.map} +1 -1
  123. package/dist/{index-BLb3JiCr.js → index-BuSfz4qx.js} +3 -3
  124. package/dist/{index-BLb3JiCr.js.map → index-BuSfz4qx.js.map} +1 -1
  125. package/dist/{index-DWDp66fp.cjs → index-CeHwRKAg.cjs} +2 -2
  126. package/dist/{index-DWDp66fp.cjs.map → index-CeHwRKAg.cjs.map} +1 -1
  127. package/dist/{index-Ds-Ocs4L.js → index-DBWgRXp9.js} +3 -3
  128. package/dist/{index-Ds-Ocs4L.js.map → index-DBWgRXp9.js.map} +1 -1
  129. package/dist/index.cjs +1 -1
  130. package/dist/index.d.ts +45 -7
  131. package/dist/index.js +97 -95
  132. package/dist/index.js.map +1 -1
  133. package/dist/menu-popover-CdhAgSQb.cjs +2 -0
  134. package/dist/menu-popover-CdhAgSQb.cjs.map +1 -0
  135. package/dist/menu-popover-D-Ax5zzy.js +77 -0
  136. package/dist/menu-popover-D-Ax5zzy.js.map +1 -0
  137. package/dist/tokens.json +1 -1
  138. package/package.json +1 -1
  139. package/dist/icons-Dv_p0bUF.cjs +0 -2
  140. package/dist/icons-Dv_p0bUF.cjs.map +0 -1
  141. package/dist/icons-dUP7sKyt.js.map +0 -1
  142. package/dist/menu-popover-CM3v5s-5.cjs +0 -2
  143. package/dist/menu-popover-CM3v5s-5.cjs.map +0 -1
  144. package/dist/menu-popover-DOkciab5.js +0 -74
  145. package/dist/menu-popover-DOkciab5.js.map +0 -1
@@ -1,52 +1,52 @@
1
- import { jsx as l, jsxs as p } from "react/jsx-runtime";
2
- import { t as c } from "../../classix-DG18itHa.js";
3
- import { useState as b } from "react";
4
- import { i as f } from "../../icons-dUP7sKyt.js";
5
- import '../../assets/index13.css';const v = "_nav_1cda7_3", u = "_label_1cda7_9", g = "_item_1cda7_17", N = "_actions_1cda7_36", w = "_highlighted_1cda7_60", x = "_horizontal_1cda7_64", z = "_sidebar_1cda7_74", C = "_tabs_1cda7_131", j = "_pills_1cda7_151", a = {
1
+ import { jsx as o, jsxs as h } from "react/jsx-runtime";
2
+ import { t as r } from "../../classix-DG18itHa.js";
3
+ import { useState as p } from "react";
4
+ import { i as b } from "../../icons-CBbpxsJF.js";
5
+ import '../../assets/index13.css';const v = "_nav_1lfxs_3", x = "_label_1lfxs_9", u = "_item_1lfxs_17", g = "_actions_1lfxs_36", N = "_highlighted_1lfxs_60", w = "_horizontal_1lfxs_64", z = "_sidebar_1lfxs_74", C = "_tabs_1lfxs_130", j = "_pills_1lfxs_150", t = {
6
6
  nav: v,
7
- label: u,
8
- item: g,
9
- actions: N,
10
- highlighted: w,
11
- horizontal: x,
7
+ label: x,
8
+ item: u,
9
+ actions: g,
10
+ highlighted: N,
11
+ horizontal: w,
12
12
  sidebar: z,
13
13
  tabs: C,
14
14
  pills: j
15
15
  }, y = {
16
- default: a.default,
17
- pills: a.pills,
18
- sidebar: a.sidebar,
19
- tabs: a.tabs
16
+ default: t.default,
17
+ pills: t.pills,
18
+ sidebar: t.sidebar,
19
+ tabs: t.tabs
20
20
  }, k = ({
21
- className: t,
22
- ...n
23
- }) => /* @__PURE__ */ l("span", { className: c(t, a.label), ...n, "data-component": "navlabel" }), B = ({
24
- actions: t,
25
- children: n,
26
- className: o,
27
- highlighted: e = !1,
21
+ className: a,
28
22
  ...s
29
- }) => /* @__PURE__ */ p("div", { className: c(a.item, e && a.highlighted, o), "data-nav-item": !0, ...s, "data-component": "navitem", children: [
30
- n,
31
- t && /* @__PURE__ */ l("span", { className: a.actions, children: t })
23
+ }) => /* @__PURE__ */ o("span", { className: r(a, t.label), ...s, "data-component": "navlabel" }), B = ({
24
+ actions: a,
25
+ children: s,
26
+ className: i,
27
+ highlighted: e = !1,
28
+ ...n
29
+ }) => /* @__PURE__ */ h("div", { className: r(t.item, e && t.highlighted, i), "data-nav-item": !0, ...n, "data-component": "navitem", children: [
30
+ s,
31
+ a && /* @__PURE__ */ o("span", { className: t.actions, children: a })
32
32
  ] }), D = ({
33
- animation: t,
34
- children: n,
35
- className: o,
33
+ animation: a,
34
+ children: s,
35
+ className: i,
36
36
  horizontal: e = !1,
37
- variant: s = "default",
37
+ variant: n = "default",
38
38
  ...d
39
39
  }) => {
40
- const [_, r] = b(!1), m = {
41
- "--icon-svg": f("CaretDown")
40
+ const [_, c] = p(!1), f = {
41
+ "--icon-svg": b("CaretDown")
42
42
  };
43
- return /* @__PURE__ */ l("nav", { className: c(o, e && a.horizontal, a.nav, y[s]), "data-animation": t, "data-open": _ ? "true" : "false", "data-orientation": e ? "horizontal" : "vertical", onBlurCapture: (i) => {
44
- if (s !== "pills" || window.innerWidth > 960) return;
45
- const h = i.relatedTarget;
46
- i.currentTarget.contains(h) || r(!1);
43
+ return /* @__PURE__ */ o("nav", { className: r(i, e && t.horizontal, t.nav, y[n]), "data-animation": a, "data-open": _ ? "true" : "false", "data-orientation": e ? "horizontal" : "vertical", onBlurCapture: (l) => {
44
+ if (n !== "pills" || window.innerWidth > 960) return;
45
+ const m = l.relatedTarget;
46
+ l.currentTarget.contains(m) || c(!1);
47
47
  }, onClick: () => {
48
- s !== "pills" || window.innerWidth > 960 || r((i) => !i);
49
- }, style: m, ...d, "data-component": "nav", children: n });
48
+ n !== "pills" || window.innerWidth > 960 || c((l) => !l);
49
+ }, style: f, ...d, "data-component": "nav", children: s });
50
50
  };
51
51
  export {
52
52
  D as Nav,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index52.css');const m=require("react/jsx-runtime"),k=require("../../classix-5H4IWnMA.cjs"),o=require("react"),S=require("react-dom"),K=require("../button/index.cjs"),O="_popover_14bo5_1",I="_inline_14bo5_6",N="_below_14bo5_47",H="_above_14bo5_52",W="_left_14bo5_62",M="_right_14bo5_67",U="_trigger_14bo5_72",r={popover:O,inline:I,"popover-panel":"_popover-panel_14bo5_26",below:N,above:H,"inline-panel":"_inline-panel_14bo5_57",left:W,right:M,trigger:U,"inline-trigger":"_inline-trigger_14bo5_76"},X=({children:v,inline:s=!1,triggerAccessibleLabel:C,triggerAriaHasPopup:T,triggerButtonContent:z})=>{var B;const h=o.useRef(null),y=o.useRef(void 0),b=o.useRef(null),P=o.useId(),p=o.useRef(null),[t,R]=o.useState(!1),[f,D]=o.useState(!1),[d,x]=o.useState("right"),_=({initialFocus:e}={})=>{y.current=e,D(!1),x("right"),R(!0)},l=o.useCallback(({restoreFocus:e=!0}={})=>{var i;R(!1),e&&((i=p.current)==null||i.focus())},[]),L=e=>{t&&e.key==="Escape"&&l()},j=e=>{if(!t){if(e.key==="ArrowDown"){e.preventDefault(),_({initialFocus:"first"});return}e.key==="ArrowUp"&&(e.preventDefault(),_({initialFocus:"last"}))}};o.useEffect(()=>{if(!t)return;const e=i=>{var n,g;const u=i.target;(n=h.current)!=null&&n.contains(u)||(g=b.current)!=null&&g.contains(u)||l({restoreFocus:!1})};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[l,t]);const a=o.useCallback(()=>{const e=b.current,i=p.current;if(!e||!i)return;const u=e.getBoundingClientRect(),n=i.getBoundingClientRect(),g=n.top,E=window.innerHeight-n.bottom;D(u.height>E&&g>E),x(u.width>window.innerWidth-n.left&&n.right>window.innerWidth-n.left?"left":"right")},[]);o.useLayoutEffect(()=>{if(t)return a(),window.addEventListener("resize",a),window.addEventListener("scroll",a,!0),()=>{window.removeEventListener("resize",a),window.removeEventListener("scroll",a,!0)}},[t,a]);const F=e=>{e.preventDefault(),e.stopPropagation(),t?l({restoreFocus:!1}):_()},q={"aria-controls":t?P:void 0,"aria-expanded":t,"aria-haspopup":T,"aria-label":C,className:s?r["inline-trigger"]:r.trigger,onClick:F,onKeyDown:j},c=s?(B=p.current)==null?void 0:B.getBoundingClientRect():void 0,A=[d==="left"?"translateX(-100%)":"",f?"translateY(calc(-100% - var(--shape-spacing-2xs)))":""].filter(Boolean).join(" "),w=t?m.jsx("div",{className:k.t(r["popover-panel"],r[f?"above":"below"],s&&r["inline-panel"],!s&&r[d]),"data-horizontal-placement":d,"data-placement":f?"above":"below",id:P,ref:b,style:c?{left:d==="left"?c.right:c.left,position:"fixed",top:f?c.top:c.bottom,transform:A||void 0}:void 0,children:typeof v=="function"?v({close:l,initialFocus:y.current,isOpen:t}):v}):null;return m.jsxs("div",{className:k.t(r.popover,s&&r.inline),"data-open":t,onKeyDown:L,onClick:e=>{e.preventDefault(),e.stopPropagation()},ref:h,"data-component":"popover",children:[m.jsx(K.Button,{...q,ref:p,variant:"simple",children:z}),s&&w&&typeof document<"u"?S.createPortal(w,document.body):w]})};exports.Popover=X;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index53.css');const h=require("react/jsx-runtime"),S=require("../../classix-5H4IWnMA.cjs"),t=require("react"),K=require("react-dom"),N=require("../button/index.cjs"),O="_popover_9ekpx_1",H="_inline_9ekpx_6",W="_below_9ekpx_47",M="_above_9ekpx_52",U="_trigger_9ekpx_62",a={popover:O,inline:H,"popover-panel":"_popover-panel_9ekpx_26",below:W,above:M,"floating-panel":"_floating-panel_9ekpx_57",trigger:U,"inline-trigger":"_inline-trigger_9ekpx_66"},X=({children:v,inline:b=!1,triggerAccessibleLabel:T,triggerAriaHasPopup:C,triggerButtonContent:z})=>{const x=t.useRef(null),k=t.useRef(void 0),c=t.useRef(null),y=t.useId(),f=t.useRef(null),[n,P]=t.useState(!1),[F,R]=t.useState(!1),[u,D]=t.useState(),[d,B]=t.useState(!1),[m,E]=t.useState("right"),w=({initialFocus:e}={})=>{var r;k.current=e,D((r=f.current)==null?void 0:r.getBoundingClientRect()),R(!1),B(!1),E("right"),P(!0)},l=t.useCallback(({restoreFocus:e=!0}={})=>{var r;P(!1),e&&((r=f.current)==null||r.focus({preventScroll:!0}))},[]),L=e=>{n&&e.key==="Escape"&&l()},j=e=>{if(!n){if(e.key==="ArrowDown"){e.preventDefault(),w({initialFocus:"first"});return}e.key==="ArrowUp"&&(e.preventDefault(),w({initialFocus:"last"}))}};t.useEffect(()=>{if(!n)return;const e=s=>{var i,p;const o=s.target;(i=x.current)!=null&&i.contains(o)||(p=c.current)!=null&&p.contains(o)||l({restoreFocus:!1})},r=s=>{var o,i;s.target instanceof Node&&((o=c.current)!=null&&o.contains(s.target))||l({restoreFocus:((i=c.current)==null?void 0:i.contains(document.activeElement))??!1})};return document.addEventListener("mousedown",e),window.addEventListener("scroll",r,!0),()=>{document.removeEventListener("mousedown",e),window.removeEventListener("scroll",r,!0)}},[l,n]);const g=t.useCallback(()=>{const e=c.current,r=f.current;if(!e||!r)return;const s=e.getBoundingClientRect(),o=r.getBoundingClientRect();D(o),R(!0);const i=o.top,p=window.innerHeight-o.bottom;B(s.height>p&&i>p),E(s.width>window.innerWidth-o.left&&o.right>window.innerWidth-o.left?"left":"right")},[]);t.useLayoutEffect(()=>{if(n)return g(),window.addEventListener("resize",g),()=>{window.removeEventListener("resize",g)}},[n,g]);const q=e=>{e.preventDefault(),e.stopPropagation(),n?l({restoreFocus:!1}):w()},A={"aria-controls":n?y:void 0,"aria-expanded":n,"aria-haspopup":C,"aria-label":T,className:b?a["inline-trigger"]:a.trigger,onClick:q,onKeyDown:j},I=[m==="left"?"translateX(-100%)":"",d?"translateY(calc(-100% - var(--shape-spacing-2xs)))":""].filter(Boolean).join(" "),_=n?h.jsx("div",{className:S.t(a["popover-panel"],a[d?"above":"below"],a["floating-panel"]),"data-horizontal-placement":m,"data-placement":d?"above":"below",id:y,ref:c,style:u?{left:m==="left"?u.right:u.left,position:"fixed",top:d?u.top:u.bottom,transform:I||void 0}:{position:"fixed",left:0,top:0},children:typeof v=="function"?v({close:l,initialFocus:k.current,isOpen:n,isPositioned:F}):v}):null;return h.jsxs("div",{className:S.t(a.popover,b&&a.inline),"data-open":n,onKeyDown:L,onClick:e=>{e.preventDefault(),e.stopPropagation()},ref:x,"data-component":"popover",children:[h.jsx(N.Button,{...A,ref:f,variant:"simple",children:z}),_&&typeof document<"u"?K.createPortal(_,document.body):_]})};exports.Popover=X;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n inline = false,\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [opensAbove, setOpensAbove] = useState(false);\n const [horizontalPlacement, setHorizontalPlacement] = useState<'left' | 'right'>('right');\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setOpensAbove(false);\n setHorizontalPlacement('right');\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n\n closePopover({ restoreFocus: false });\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n const updatePosition = useCallback(() => {\n const panel = panelRef.current;\n const trigger = triggerRef.current;\n if (!panel || !trigger) return;\n\n const panelBounds = panel.getBoundingClientRect();\n const triggerBounds = trigger.getBoundingClientRect();\n const spaceAbove = triggerBounds.top;\n const spaceBelow = window.innerHeight - triggerBounds.bottom;\n\n setOpensAbove(panelBounds.height > spaceBelow && spaceAbove > spaceBelow);\n setHorizontalPlacement(\n panelBounds.width > window.innerWidth - triggerBounds.left &&\n triggerBounds.right > window.innerWidth - triggerBounds.left\n ? 'left'\n : 'right'\n );\n }, []);\n\n useLayoutEffect(() => {\n if (!isOpen) return undefined;\n\n updatePosition();\n window.addEventListener('resize', updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n\n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n }, [isOpen, updatePosition]);\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (isOpen) {\n closePopover({ restoreFocus: false });\n } else {\n openPopover();\n }\n };\n\n const triggerProps = {\n 'aria-controls': isOpen ? panelId : undefined,\n 'aria-expanded': isOpen,\n 'aria-haspopup': triggerAriaHasPopup,\n 'aria-label': triggerAccessibleLabel,\n className: inline ? styles['inline-trigger'] : styles.trigger,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n };\n\n const triggerBounds = inline ? triggerRef.current?.getBoundingClientRect() : undefined;\n const horizontalTransform = horizontalPlacement === 'left' ? 'translateX(-100%)' : '';\n const verticalTransform = opensAbove ? 'translateY(calc(-100% - var(--shape-spacing-2xs)))' : '';\n const inlineTransform = [horizontalTransform, verticalTransform].filter(Boolean).join(' ');\n const panel = isOpen ? (\n <div\n className={cx(\n styles['popover-panel'],\n styles[opensAbove ? 'above' : 'below'],\n inline && styles['inline-panel'],\n !inline && styles[horizontalPlacement]\n )}\n data-horizontal-placement={horizontalPlacement}\n data-placement={opensAbove ? 'above' : 'below'}\n id={panelId}\n ref={panelRef}\n style={\n triggerBounds\n ? {\n left: horizontalPlacement === 'left' ? triggerBounds.right : triggerBounds.left,\n position: 'fixed',\n top: opensAbove ? triggerBounds.top : triggerBounds.bottom,\n transform: inlineTransform || undefined,\n }\n : undefined\n }\n >\n {typeof children === 'function'\n ? children({ close: closePopover, initialFocus: initialFocusRef.current, isOpen })\n : children}\n </div>\n ) : null;\n\n return (\n <div\n className={cx(styles.popover, inline && styles.inline)}\n data-open={isOpen}\n onKeyDown={handleKeyDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n ref={containerRef}\n >\n <Button\n {...triggerProps}\n ref={triggerRef}\n variant='simple'\n >\n {triggerButtonContent}\n </Button>\n {inline && panel && typeof document !== 'undefined'\n ? createPortal(panel, document.body)\n : panel}\n </div>\n );\n};\n"],"names":["Popover","children","inline","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelRef","panelId","useId","triggerRef","isOpen","setIsOpen","useState","opensAbove","setOpensAbove","horizontalPlacement","setHorizontalPlacement","openPopover","initialFocus","current","closePopover","useCallback","restoreFocus","focus","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","target","contains","document","addEventListener","removeEventListener","updatePosition","panel","trigger","panelBounds","getBoundingClientRect","triggerBounds","spaceAbove","top","spaceBelow","window","innerHeight","bottom","height","width","innerWidth","left","right","useLayoutEffect","handleTriggerClick","stopPropagation","triggerProps","className","styles","onClick","onKeyDown","inlineTransform","filter","Boolean","join","jsx","cx","position","transform","close","jsxs","popover","Button","createPortal","body"],"mappings":"ojBAyCaA,EAAUA,CAAC,CACtBC,SAAAA,EACAC,OAAAA,EAAS,GACTC,uBAAAA,EACAC,oBAAAA,EACAC,qBAAAA,CACY,IAAM,OAClB,MAAMC,EAAeC,EAAAA,OAAuB,IAAI,EAC1CC,EAAkBD,EAAAA,OAAwCE,MAAS,EACnEC,EAAWH,EAAAA,OAAuB,IAAI,EACtCI,EAAUC,EAAAA,MAAAA,EACVC,EAAaN,EAAAA,OAA0B,IAAI,EAC3C,CAACO,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpC,CAACC,EAAYC,CAAa,EAAIF,EAAAA,SAAS,EAAK,EAC5C,CAACG,EAAqBC,CAAsB,EAAIJ,EAAAA,SAA2B,OAAO,EAElFK,EAAcA,CAAC,CAAEC,aAAAA,CAAAA,EAAqC,KAAO,CACjEd,EAAgBe,QAAUD,EAC1BJ,EAAc,EAAK,EACnBE,EAAuB,OAAO,EAC9BL,EAAU,EAAI,CAChB,EAEMS,EAAeC,EAAAA,YAAY,CAAC,CAAEC,aAAAA,EAAe,EAAA,EAA8B,KAAO,OACtFX,EAAU,EAAK,EAEXW,KACFb,EAAAA,EAAWU,UAAXV,MAAAA,EAAoBc,QAExB,EAAG,CAAA,CAAE,EAECC,EAAiBC,GAA+C,CAChEf,GAAUe,EAAMC,MAAQ,UAC1BN,EAAAA,CAEJ,EAEMO,EAAwBF,GAA4C,CACxE,GAAIf,CAAAA,EAIJ,IAAIe,EAAMC,MAAQ,YAAa,CAC7BD,EAAMG,eAAAA,EACNX,EAAY,CAAEC,aAAc,OAAA,CAAS,EACrC,MACF,CAEIO,EAAMC,MAAQ,YAChBD,EAAMG,eAAAA,EACNX,EAAY,CAAEC,aAAc,MAAA,CAAQ,GAExC,EAEAW,EAAAA,UAAU,IAAM,CACd,GAAI,CAACnB,EACH,OAGF,MAAMoB,EAAqBL,GAAsB,SAC/C,MAAMM,EAASN,EAAMM,QACjB7B,EAAAA,EAAaiB,UAAbjB,MAAAA,EAAsB8B,SAASD,KAAWzB,EAAAA,EAASa,UAATb,MAAAA,EAAkB0B,SAASD,IAEzEX,EAAa,CAAEE,aAAc,EAAA,CAAO,CACtC,EAEAW,gBAASC,iBAAiB,YAAaJ,CAAiB,EAEjD,IAAM,CACXG,SAASE,oBAAoB,YAAaL,CAAiB,CAC7D,CACF,EAAG,CAACV,EAAcV,CAAM,CAAC,EAEzB,MAAM0B,EAAiBf,EAAAA,YAAY,IAAM,CACvC,MAAMgB,EAAQ/B,EAASa,QACjBmB,EAAU7B,EAAWU,QAC3B,GAAI,CAACkB,GAAS,CAACC,EAAS,OAExB,MAAMC,EAAcF,EAAMG,sBAAAA,EACpBC,EAAgBH,EAAQE,sBAAAA,EACxBE,EAAaD,EAAcE,IAC3BC,EAAaC,OAAOC,YAAcL,EAAcM,OAEtDjC,EAAcyB,EAAYS,OAASJ,GAAcF,EAAaE,CAAU,EACxE5B,EACEuB,EAAYU,MAAQJ,OAAOK,WAAaT,EAAcU,MACpDV,EAAcW,MAAQP,OAAOK,WAAaT,EAAcU,KACtD,OACA,OACN,CACF,EAAG,CAAA,CAAE,EAELE,EAAAA,gBAAgB,IAAM,CACpB,GAAK3C,EAEL0B,OAAAA,EAAAA,EACAS,OAAOX,iBAAiB,SAAUE,CAAc,EAChDS,OAAOX,iBAAiB,SAAUE,EAAgB,EAAI,EAE/C,IAAM,CACXS,OAAOV,oBAAoB,SAAUC,CAAc,EACnDS,OAAOV,oBAAoB,SAAUC,EAAgB,EAAI,CAC3D,CACF,EAAG,CAAC1B,EAAQ0B,CAAc,CAAC,EAE3B,MAAMkB,EAAsB7B,GAAyC,CACnEA,EAAMG,eAAAA,EACNH,EAAM8B,gBAAAA,EACF7C,EACFU,EAAa,CAAEE,aAAc,EAAA,CAAO,EAEpCL,EAAAA,CAEJ,EAEMuC,EAAe,CACnB,gBAAiB9C,EAASH,EAAUF,OACpC,gBAAiBK,EACjB,gBAAiBV,EACjB,aAAcD,EACd0D,UAAW3D,EAAS4D,EAAO,gBAAgB,EAAIA,EAAOpB,QACtDqB,QAASL,EACTM,UAAWjC,CAAAA,EAGPc,EAAgB3C,GAASW,EAAAA,EAAWU,UAAXV,YAAAA,EAAoB+B,wBAA0BnC,OAGvEwD,EAAkB,CAFI9C,IAAwB,OAAS,oBAAsB,GACzDF,EAAa,qDAAuD,EAC/B,EAAEiD,OAAOC,OAAO,EAAEC,KAAK,GAAG,EACnF3B,EAAQ3B,EACZuD,EAAAA,IAAC,MAAA,CACC,UAAWC,IACTR,EAAO,eAAe,EACtBA,EAAO7C,EAAa,QAAU,OAAO,EACrCf,GAAU4D,EAAO,cAAc,EAC/B,CAAC5D,GAAU4D,EAAO3C,CAAmB,CACvC,EACA,4BAA2BA,EAC3B,iBAAgBF,EAAa,QAAU,QACvC,GAAIN,EACJ,IAAKD,EACL,MACEmC,EACI,CACEU,KAAMpC,IAAwB,OAAS0B,EAAcW,MAAQX,EAAcU,KAC3EgB,SAAU,QACVxB,IAAK9B,EAAa4B,EAAcE,IAAMF,EAAcM,OACpDqB,UAAWP,GAAmBxD,MAAAA,EAEhCA,OAGL,SAAA,OAAOR,GAAa,WACjBA,EAAS,CAAEwE,MAAOjD,EAAcF,aAAcd,EAAgBe,QAAST,OAAAA,CAAAA,CAAQ,EAC/Eb,CAAAA,CACN,EACE,KAEJ,OACEyE,EAAAA,KAAC,MAAA,CACC,UAAWJ,EAAAA,EAAGR,EAAOa,QAASzE,GAAU4D,EAAO5D,MAAM,EACrD,YAAWY,EACX,UAAWc,EACX,QAAUC,GAAU,CAClBA,EAAMG,eAAAA,EACNH,EAAM8B,gBAAAA,CACR,EACA,IAAKrD,EAAa,iBAAA,UAElB,SAAA,CAAA+D,EAAAA,IAACO,EAAAA,QACC,GAAIhB,EACJ,IAAK/C,EACL,QAAQ,SAEPR,SAAAA,EACH,EACCH,GAAUuC,GAAS,OAAOJ,SAAa,IACpCwC,EAAAA,aAAapC,EAAOJ,SAASyC,IAAI,EACjCrC,CAAAA,EACN,CAEJ"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n isPositioned: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n inline = false,\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [isPositioned, setIsPositioned] = useState(false);\n const [triggerBounds, setTriggerBounds] = useState<DOMRect>();\n const [opensAbove, setOpensAbove] = useState(false);\n const [horizontalPlacement, setHorizontalPlacement] = useState<'left' | 'right'>('right');\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setTriggerBounds(triggerRef.current?.getBoundingClientRect());\n setIsPositioned(false);\n setOpensAbove(false);\n setHorizontalPlacement('right');\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus({ preventScroll: true });\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n\n closePopover({ restoreFocus: false });\n };\n\n const handleScroll = (event: Event) => {\n if (event.target instanceof Node && panelRef.current?.contains(event.target)) return;\n closePopover({ restoreFocus: panelRef.current?.contains(document.activeElement) ?? false });\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n window.addEventListener('scroll', handleScroll, true);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n window.removeEventListener('scroll', handleScroll, true);\n };\n }, [closePopover, isOpen]);\n\n const updatePosition = useCallback(() => {\n const panel = panelRef.current;\n const trigger = triggerRef.current;\n if (!panel || !trigger) return;\n\n const panelBounds = panel.getBoundingClientRect();\n const triggerBounds = trigger.getBoundingClientRect();\n setTriggerBounds(triggerBounds);\n setIsPositioned(true);\n const spaceAbove = triggerBounds.top;\n const spaceBelow = window.innerHeight - triggerBounds.bottom;\n\n setOpensAbove(panelBounds.height > spaceBelow && spaceAbove > spaceBelow);\n setHorizontalPlacement(\n panelBounds.width > window.innerWidth - triggerBounds.left &&\n triggerBounds.right > window.innerWidth - triggerBounds.left\n ? 'left'\n : 'right'\n );\n }, []);\n\n useLayoutEffect(() => {\n if (!isOpen) return undefined;\n\n updatePosition();\n window.addEventListener('resize', updatePosition);\n\n return () => {\n window.removeEventListener('resize', updatePosition);\n };\n }, [isOpen, updatePosition]);\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (isOpen) {\n closePopover({ restoreFocus: false });\n } else {\n openPopover();\n }\n };\n\n const triggerProps = {\n 'aria-controls': isOpen ? panelId : undefined,\n 'aria-expanded': isOpen,\n 'aria-haspopup': triggerAriaHasPopup,\n 'aria-label': triggerAccessibleLabel,\n className: inline ? styles['inline-trigger'] : styles.trigger,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n };\n\n const horizontalTransform = horizontalPlacement === 'left' ? 'translateX(-100%)' : '';\n const verticalTransform = opensAbove ? 'translateY(calc(-100% - var(--shape-spacing-2xs)))' : '';\n const panelTransform = [horizontalTransform, verticalTransform].filter(Boolean).join(' ');\n const panel = isOpen ? (\n <div\n className={cx(\n styles['popover-panel'],\n styles[opensAbove ? 'above' : 'below'],\n styles['floating-panel']\n )}\n data-horizontal-placement={horizontalPlacement}\n data-placement={opensAbove ? 'above' : 'below'}\n id={panelId}\n ref={panelRef}\n style={\n triggerBounds\n ? {\n left: horizontalPlacement === 'left' ? triggerBounds.right : triggerBounds.left,\n position: 'fixed',\n top: opensAbove ? triggerBounds.top : triggerBounds.bottom,\n transform: panelTransform || undefined,\n }\n : { position: 'fixed', left: 0, top: 0 }\n }\n >\n {typeof children === 'function'\n ? children({\n close: closePopover,\n initialFocus: initialFocusRef.current,\n isOpen,\n isPositioned,\n })\n : children}\n </div>\n ) : null;\n\n return (\n <div\n className={cx(styles.popover, inline && styles.inline)}\n data-open={isOpen}\n onKeyDown={handleKeyDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n ref={containerRef}\n >\n <Button\n {...triggerProps}\n ref={triggerRef}\n variant='simple'\n >\n {triggerButtonContent}\n </Button>\n {panel && typeof document !== 'undefined' ? createPortal(panel, document.body) : panel}\n </div>\n );\n};\n"],"names":["Popover","children","inline","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelRef","panelId","useId","triggerRef","isOpen","setIsOpen","useState","isPositioned","setIsPositioned","triggerBounds","setTriggerBounds","opensAbove","setOpensAbove","horizontalPlacement","setHorizontalPlacement","openPopover","initialFocus","current","getBoundingClientRect","closePopover","useCallback","restoreFocus","focus","preventScroll","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","target","contains","handleScroll","Node","document","activeElement","addEventListener","window","removeEventListener","updatePosition","panel","trigger","panelBounds","spaceAbove","top","spaceBelow","innerHeight","bottom","height","width","innerWidth","left","right","useLayoutEffect","handleTriggerClick","stopPropagation","triggerProps","className","styles","onClick","onKeyDown","panelTransform","filter","Boolean","join","jsx","cx","position","transform","close","jsxs","popover","Button","createPortal","body"],"mappings":"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"}
@@ -1,104 +1,116 @@
1
- import { jsx as z, jsxs as O } from "react/jsx-runtime";
2
- import { t as C } from "../../classix-DG18itHa.js";
3
- import { useRef as g, useId as H, useState as b, useCallback as L, useEffect as W, useLayoutEffect as S } from "react";
4
- import { createPortal as U } from "react-dom";
5
- import { Button as X } from "../button/index.js";
6
- import '../../assets/index52.css';const Y = "_popover_14bo5_1", q = "_inline_14bo5_6", G = "_below_14bo5_47", J = "_above_14bo5_52", M = "_left_14bo5_62", Q = "_right_14bo5_67", V = "_trigger_14bo5_72", n = {
7
- popover: Y,
8
- inline: q,
9
- "popover-panel": "_popover-panel_14bo5_26",
10
- below: G,
11
- above: J,
12
- "inline-panel": "_inline-panel_14bo5_57",
13
- left: M,
14
- right: Q,
1
+ import { jsx as T, jsxs as H } from "react/jsx-runtime";
2
+ import { t as z } from "../../classix-DG18itHa.js";
3
+ import { useRef as m, useId as W, useState as f, useCallback as C, useEffect as U, useLayoutEffect as X } from "react";
4
+ import { createPortal as Y } from "react-dom";
5
+ import { Button as q } from "../button/index.js";
6
+ import '../../assets/index53.css';const G = "_popover_9ekpx_1", J = "_inline_9ekpx_6", M = "_below_9ekpx_47", Q = "_above_9ekpx_52", V = "_trigger_9ekpx_62", s = {
7
+ popover: G,
8
+ inline: J,
9
+ "popover-panel": "_popover-panel_9ekpx_26",
10
+ below: M,
11
+ above: Q,
12
+ "floating-panel": "_floating-panel_9ekpx_57",
15
13
  trigger: V,
16
- "inline-trigger": "_inline-trigger_14bo5_76"
14
+ "inline-trigger": "_inline-trigger_9ekpx_66"
17
15
  }, ie = ({
18
16
  children: v,
19
- inline: i = !1,
20
- triggerAccessibleLabel: T,
21
- triggerAriaHasPopup: x,
22
- triggerButtonContent: F
17
+ inline: b = !1,
18
+ triggerAccessibleLabel: F,
19
+ triggerAriaHasPopup: L,
20
+ triggerButtonContent: A
23
21
  }) => {
24
- var R;
25
- const h = g(null), y = g(void 0), m = g(null), P = H(), p = g(null), [o, D] = b(!1), [f, B] = b(!1), [u, E] = b("right"), w = ({
22
+ const k = m(null), x = m(void 0), l = m(null), y = W(), u = m(null), [t, P] = f(!1), [I, B] = f(!1), [c, D] = f(), [d, E] = f(!1), [w, R] = f("right"), _ = ({
26
23
  initialFocus: e
27
24
  } = {}) => {
28
- y.current = e, B(!1), E("right"), D(!0);
29
- }, a = L(({
25
+ var n;
26
+ x.current = e, D((n = u.current) == null ? void 0 : n.getBoundingClientRect()), B(!1), E(!1), R("right"), P(!0);
27
+ }, a = C(({
30
28
  restoreFocus: e = !0
31
29
  } = {}) => {
32
- var r;
33
- D(!1), e && ((r = p.current) == null || r.focus());
34
- }, []), A = (e) => {
35
- o && e.key === "Escape" && a();
36
- }, K = (e) => {
37
- if (!o) {
30
+ var n;
31
+ P(!1), e && ((n = u.current) == null || n.focus({
32
+ preventScroll: !0
33
+ }));
34
+ }, []), K = (e) => {
35
+ t && e.key === "Escape" && a();
36
+ }, N = (e) => {
37
+ if (!t) {
38
38
  if (e.key === "ArrowDown") {
39
- e.preventDefault(), w({
39
+ e.preventDefault(), _({
40
40
  initialFocus: "first"
41
41
  });
42
42
  return;
43
43
  }
44
- e.key === "ArrowUp" && (e.preventDefault(), w({
44
+ e.key === "ArrowUp" && (e.preventDefault(), _({
45
45
  initialFocus: "last"
46
46
  }));
47
47
  }
48
48
  };
49
- W(() => {
50
- if (!o)
49
+ U(() => {
50
+ if (!t)
51
51
  return;
52
52
  const e = (r) => {
53
- var t, d;
54
- const c = r.target;
55
- (t = h.current) != null && t.contains(c) || (d = m.current) != null && d.contains(c) || a({
53
+ var i, p;
54
+ const o = r.target;
55
+ (i = k.current) != null && i.contains(o) || (p = l.current) != null && p.contains(o) || a({
56
56
  restoreFocus: !1
57
57
  });
58
+ }, n = (r) => {
59
+ var o, i;
60
+ r.target instanceof Node && ((o = l.current) != null && o.contains(r.target)) || a({
61
+ restoreFocus: ((i = l.current) == null ? void 0 : i.contains(document.activeElement)) ?? !1
62
+ });
58
63
  };
59
- return document.addEventListener("mousedown", e), () => {
60
- document.removeEventListener("mousedown", e);
64
+ return document.addEventListener("mousedown", e), window.addEventListener("scroll", n, !0), () => {
65
+ document.removeEventListener("mousedown", e), window.removeEventListener("scroll", n, !0);
61
66
  };
62
- }, [a, o]);
63
- const s = L(() => {
64
- const e = m.current, r = p.current;
65
- if (!e || !r) return;
66
- const c = e.getBoundingClientRect(), t = r.getBoundingClientRect(), d = t.top, k = window.innerHeight - t.bottom;
67
- B(c.height > k && d > k), E(c.width > window.innerWidth - t.left && t.right > window.innerWidth - t.left ? "left" : "right");
67
+ }, [a, t]);
68
+ const g = C(() => {
69
+ const e = l.current, n = u.current;
70
+ if (!e || !n) return;
71
+ const r = e.getBoundingClientRect(), o = n.getBoundingClientRect();
72
+ D(o), B(!0);
73
+ const i = o.top, p = window.innerHeight - o.bottom;
74
+ E(r.height > p && i > p), R(r.width > window.innerWidth - o.left && o.right > window.innerWidth - o.left ? "left" : "right");
68
75
  }, []);
69
- S(() => {
70
- if (o)
71
- return s(), window.addEventListener("resize", s), window.addEventListener("scroll", s, !0), () => {
72
- window.removeEventListener("resize", s), window.removeEventListener("scroll", s, !0);
76
+ X(() => {
77
+ if (t)
78
+ return g(), window.addEventListener("resize", g), () => {
79
+ window.removeEventListener("resize", g);
73
80
  };
74
- }, [o, s]);
81
+ }, [t, g]);
75
82
  const j = (e) => {
76
- e.preventDefault(), e.stopPropagation(), o ? a({
83
+ e.preventDefault(), e.stopPropagation(), t ? a({
77
84
  restoreFocus: !1
78
- }) : w();
79
- }, I = {
80
- "aria-controls": o ? P : void 0,
81
- "aria-expanded": o,
82
- "aria-haspopup": x,
83
- "aria-label": T,
84
- className: i ? n["inline-trigger"] : n.trigger,
85
+ }) : _();
86
+ }, O = {
87
+ "aria-controls": t ? y : void 0,
88
+ "aria-expanded": t,
89
+ "aria-haspopup": L,
90
+ "aria-label": F,
91
+ className: b ? s["inline-trigger"] : s.trigger,
85
92
  onClick: j,
86
- onKeyDown: K
87
- }, l = i ? (R = p.current) == null ? void 0 : R.getBoundingClientRect() : void 0, N = [u === "left" ? "translateX(-100%)" : "", f ? "translateY(calc(-100% - var(--shape-spacing-2xs)))" : ""].filter(Boolean).join(" "), _ = o ? /* @__PURE__ */ z("div", { className: C(n["popover-panel"], n[f ? "above" : "below"], i && n["inline-panel"], !i && n[u]), "data-horizontal-placement": u, "data-placement": f ? "above" : "below", id: P, ref: m, style: l ? {
88
- left: u === "left" ? l.right : l.left,
93
+ onKeyDown: N
94
+ }, S = [w === "left" ? "translateX(-100%)" : "", d ? "translateY(calc(-100% - var(--shape-spacing-2xs)))" : ""].filter(Boolean).join(" "), h = t ? /* @__PURE__ */ T("div", { className: z(s["popover-panel"], s[d ? "above" : "below"], s["floating-panel"]), "data-horizontal-placement": w, "data-placement": d ? "above" : "below", id: y, ref: l, style: c ? {
95
+ left: w === "left" ? c.right : c.left,
96
+ position: "fixed",
97
+ top: d ? c.top : c.bottom,
98
+ transform: S || void 0
99
+ } : {
89
100
  position: "fixed",
90
- top: f ? l.top : l.bottom,
91
- transform: N || void 0
92
- } : void 0, children: typeof v == "function" ? v({
101
+ left: 0,
102
+ top: 0
103
+ }, children: typeof v == "function" ? v({
93
104
  close: a,
94
- initialFocus: y.current,
95
- isOpen: o
105
+ initialFocus: x.current,
106
+ isOpen: t,
107
+ isPositioned: I
96
108
  }) : v }) : null;
97
- return /* @__PURE__ */ O("div", { className: C(n.popover, i && n.inline), "data-open": o, onKeyDown: A, onClick: (e) => {
109
+ return /* @__PURE__ */ H("div", { className: z(s.popover, b && s.inline), "data-open": t, onKeyDown: K, onClick: (e) => {
98
110
  e.preventDefault(), e.stopPropagation();
99
- }, ref: h, "data-component": "popover", children: [
100
- /* @__PURE__ */ z(X, { ...I, ref: p, variant: "simple", children: F }),
101
- i && _ && typeof document < "u" ? U(_, document.body) : _
111
+ }, ref: k, "data-component": "popover", children: [
112
+ /* @__PURE__ */ T(q, { ...O, ref: u, variant: "simple", children: A }),
113
+ h && typeof document < "u" ? Y(h, document.body) : h
102
114
  ] });
103
115
  };
104
116
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n inline = false,\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [opensAbove, setOpensAbove] = useState(false);\n const [horizontalPlacement, setHorizontalPlacement] = useState<'left' | 'right'>('right');\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setOpensAbove(false);\n setHorizontalPlacement('right');\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n\n closePopover({ restoreFocus: false });\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n const updatePosition = useCallback(() => {\n const panel = panelRef.current;\n const trigger = triggerRef.current;\n if (!panel || !trigger) return;\n\n const panelBounds = panel.getBoundingClientRect();\n const triggerBounds = trigger.getBoundingClientRect();\n const spaceAbove = triggerBounds.top;\n const spaceBelow = window.innerHeight - triggerBounds.bottom;\n\n setOpensAbove(panelBounds.height > spaceBelow && spaceAbove > spaceBelow);\n setHorizontalPlacement(\n panelBounds.width > window.innerWidth - triggerBounds.left &&\n triggerBounds.right > window.innerWidth - triggerBounds.left\n ? 'left'\n : 'right'\n );\n }, []);\n\n useLayoutEffect(() => {\n if (!isOpen) return undefined;\n\n updatePosition();\n window.addEventListener('resize', updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n\n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n }, [isOpen, updatePosition]);\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (isOpen) {\n closePopover({ restoreFocus: false });\n } else {\n openPopover();\n }\n };\n\n const triggerProps = {\n 'aria-controls': isOpen ? panelId : undefined,\n 'aria-expanded': isOpen,\n 'aria-haspopup': triggerAriaHasPopup,\n 'aria-label': triggerAccessibleLabel,\n className: inline ? styles['inline-trigger'] : styles.trigger,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n };\n\n const triggerBounds = inline ? triggerRef.current?.getBoundingClientRect() : undefined;\n const horizontalTransform = horizontalPlacement === 'left' ? 'translateX(-100%)' : '';\n const verticalTransform = opensAbove ? 'translateY(calc(-100% - var(--shape-spacing-2xs)))' : '';\n const inlineTransform = [horizontalTransform, verticalTransform].filter(Boolean).join(' ');\n const panel = isOpen ? (\n <div\n className={cx(\n styles['popover-panel'],\n styles[opensAbove ? 'above' : 'below'],\n inline && styles['inline-panel'],\n !inline && styles[horizontalPlacement]\n )}\n data-horizontal-placement={horizontalPlacement}\n data-placement={opensAbove ? 'above' : 'below'}\n id={panelId}\n ref={panelRef}\n style={\n triggerBounds\n ? {\n left: horizontalPlacement === 'left' ? triggerBounds.right : triggerBounds.left,\n position: 'fixed',\n top: opensAbove ? triggerBounds.top : triggerBounds.bottom,\n transform: inlineTransform || undefined,\n }\n : undefined\n }\n >\n {typeof children === 'function'\n ? children({ close: closePopover, initialFocus: initialFocusRef.current, isOpen })\n : children}\n </div>\n ) : null;\n\n return (\n <div\n className={cx(styles.popover, inline && styles.inline)}\n data-open={isOpen}\n onKeyDown={handleKeyDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n ref={containerRef}\n >\n <Button\n {...triggerProps}\n ref={triggerRef}\n variant='simple'\n >\n {triggerButtonContent}\n </Button>\n {inline && panel && typeof document !== 'undefined'\n ? createPortal(panel, document.body)\n : panel}\n </div>\n );\n};\n"],"names":["Popover","children","inline","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelRef","panelId","useId","triggerRef","isOpen","setIsOpen","useState","opensAbove","setOpensAbove","horizontalPlacement","setHorizontalPlacement","openPopover","initialFocus","current","closePopover","useCallback","restoreFocus","focus","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","target","contains","document","addEventListener","removeEventListener","updatePosition","panel","trigger","panelBounds","getBoundingClientRect","triggerBounds","spaceAbove","top","spaceBelow","window","innerHeight","bottom","height","width","innerWidth","left","right","useLayoutEffect","handleTriggerClick","stopPropagation","triggerProps","className","styles","onClick","onKeyDown","inlineTransform","filter","Boolean","join","jsx","cx","position","transform","close","jsxs","popover","Button","createPortal","body"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n isPositioned: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n inline = false,\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [isPositioned, setIsPositioned] = useState(false);\n const [triggerBounds, setTriggerBounds] = useState<DOMRect>();\n const [opensAbove, setOpensAbove] = useState(false);\n const [horizontalPlacement, setHorizontalPlacement] = useState<'left' | 'right'>('right');\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setTriggerBounds(triggerRef.current?.getBoundingClientRect());\n setIsPositioned(false);\n setOpensAbove(false);\n setHorizontalPlacement('right');\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus({ preventScroll: true });\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n\n closePopover({ restoreFocus: false });\n };\n\n const handleScroll = (event: Event) => {\n if (event.target instanceof Node && panelRef.current?.contains(event.target)) return;\n closePopover({ restoreFocus: panelRef.current?.contains(document.activeElement) ?? false });\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n window.addEventListener('scroll', handleScroll, true);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n window.removeEventListener('scroll', handleScroll, true);\n };\n }, [closePopover, isOpen]);\n\n const updatePosition = useCallback(() => {\n const panel = panelRef.current;\n const trigger = triggerRef.current;\n if (!panel || !trigger) return;\n\n const panelBounds = panel.getBoundingClientRect();\n const triggerBounds = trigger.getBoundingClientRect();\n setTriggerBounds(triggerBounds);\n setIsPositioned(true);\n const spaceAbove = triggerBounds.top;\n const spaceBelow = window.innerHeight - triggerBounds.bottom;\n\n setOpensAbove(panelBounds.height > spaceBelow && spaceAbove > spaceBelow);\n setHorizontalPlacement(\n panelBounds.width > window.innerWidth - triggerBounds.left &&\n triggerBounds.right > window.innerWidth - triggerBounds.left\n ? 'left'\n : 'right'\n );\n }, []);\n\n useLayoutEffect(() => {\n if (!isOpen) return undefined;\n\n updatePosition();\n window.addEventListener('resize', updatePosition);\n\n return () => {\n window.removeEventListener('resize', updatePosition);\n };\n }, [isOpen, updatePosition]);\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (isOpen) {\n closePopover({ restoreFocus: false });\n } else {\n openPopover();\n }\n };\n\n const triggerProps = {\n 'aria-controls': isOpen ? panelId : undefined,\n 'aria-expanded': isOpen,\n 'aria-haspopup': triggerAriaHasPopup,\n 'aria-label': triggerAccessibleLabel,\n className: inline ? styles['inline-trigger'] : styles.trigger,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n };\n\n const horizontalTransform = horizontalPlacement === 'left' ? 'translateX(-100%)' : '';\n const verticalTransform = opensAbove ? 'translateY(calc(-100% - var(--shape-spacing-2xs)))' : '';\n const panelTransform = [horizontalTransform, verticalTransform].filter(Boolean).join(' ');\n const panel = isOpen ? (\n <div\n className={cx(\n styles['popover-panel'],\n styles[opensAbove ? 'above' : 'below'],\n styles['floating-panel']\n )}\n data-horizontal-placement={horizontalPlacement}\n data-placement={opensAbove ? 'above' : 'below'}\n id={panelId}\n ref={panelRef}\n style={\n triggerBounds\n ? {\n left: horizontalPlacement === 'left' ? triggerBounds.right : triggerBounds.left,\n position: 'fixed',\n top: opensAbove ? triggerBounds.top : triggerBounds.bottom,\n transform: panelTransform || undefined,\n }\n : { position: 'fixed', left: 0, top: 0 }\n }\n >\n {typeof children === 'function'\n ? children({\n close: closePopover,\n initialFocus: initialFocusRef.current,\n isOpen,\n isPositioned,\n })\n : children}\n </div>\n ) : null;\n\n return (\n <div\n className={cx(styles.popover, inline && styles.inline)}\n data-open={isOpen}\n onKeyDown={handleKeyDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n ref={containerRef}\n >\n <Button\n {...triggerProps}\n ref={triggerRef}\n variant='simple'\n >\n {triggerButtonContent}\n </Button>\n {panel && typeof document !== 'undefined' ? createPortal(panel, document.body) : panel}\n </div>\n );\n};\n"],"names":["Popover","children","inline","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelRef","panelId","useId","triggerRef","isOpen","setIsOpen","useState","isPositioned","setIsPositioned","triggerBounds","setTriggerBounds","opensAbove","setOpensAbove","horizontalPlacement","setHorizontalPlacement","openPopover","initialFocus","current","getBoundingClientRect","closePopover","useCallback","restoreFocus","focus","preventScroll","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","target","contains","handleScroll","Node","document","activeElement","addEventListener","window","removeEventListener","updatePosition","panel","trigger","panelBounds","spaceAbove","top","spaceBelow","innerHeight","bottom","height","width","innerWidth","left","right","useLayoutEffect","handleTriggerClick","stopPropagation","triggerProps","className","styles","onClick","onKeyDown","panelTransform","filter","Boolean","join","jsx","cx","position","transform","close","jsxs","popover","Button","createPortal","body"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index9.css');const a=require("react/jsx-runtime"),b=require("react"),h=require("../button/index.cjs"),I=require("../checkbox/index.cjs"),T=require("../chip/index.cjs"),H=require("../collapsible/index.cjs"),P=require("../controls/index.cjs"),z=require("../dialog/index.cjs"),A=require("../header/index.cjs"),E=require("../../index-DWDp66fp.cjs"),J="_search_1rde5_3",K="_controls_1rde5_15",Q="_chips_1rde5_35",S="_radio_1rde5_101",l={search:J,controls:K,chips:Q,"filter-dialog":"_filter-dialog_1rde5_42","filter-groups":"_filter-groups_1rde5_47","filter-group":"_filter-group_1rde5_47","filter-option":"_filter-option_1rde5_83","option-copy":"_option-copy_1rde5_89",radio:S,"collapsible-options":"_collapsible-options_1rde5_128"},U=({filterButtonLabel:x="Filters",filterDialogColumns:k=1,filterDialogTitle:q="Filters",filterGroups:d=[],onChange:M,onSelectedFiltersChange:i,removeFilterLabel:$=c=>`Remove ${c.label} filter`,resetLabel:j="Reset",searchLabel:O="Search",searchPlaceholder:w="Search",selectedFilters:t=[],showResultsLabel:B="Show results",value:D=""})=>{const c=b.useId(),[v,r]=b.useState(!1),R=b.useMemo(()=>new Map(d.flatMap(e=>{var n;return[...e.options,...((n=e.collapsible)==null?void 0:n.options)??[]]}).map(e=>[e.value,e])),[d]),p=t.flatMap(e=>{const n=R.get(e);return n?[n]:[]}),_=(e,n,s)=>{var f;if(!i)return;const m=new Set([...(s==null?void 0:s.options.map(o=>o.value))??[],...((f=s==null?void 0:s.collapsible)==null?void 0:f.options.map(o=>o.value))??[]]),N=t.filter(o=>!m.has(o));if(n&&(s==null?void 0:s.defaultValue)===e){i(N);return}i(n?(s==null?void 0:s.control)==="radio"||(s==null?void 0:s.selectionMode)==="single"?[...N,e]:[...new Set([...t,e])]:t.filter(o=>o!==e))},u=(e,n)=>{var s;return t.includes(e)||n.defaultValue===e&&![...n.options,...((s=n.collapsible)==null?void 0:s.options)??[]].some(m=>t.includes(m.value))},y=(e,n)=>a.jsx("div",{className:l["filter-option"],"data-component":"renderfilter",children:n.control==="radio"?a.jsxs("label",{className:l.radio,children:[a.jsx("input",{checked:u(e.value,n),name:`${c}-filter-${n.label??"group"}`,onChange:s=>_(e.value,s.target.checked,n),type:"radio"}),a.jsxs("span",{className:l["option-copy"],children:[e.label,e.description&&a.jsx("sub",{children:e.description})]})]}):a.jsx(I.Checkbox,{checked:u(e.value,n),label:a.jsxs("span",{className:l["option-copy"],children:[e.label,e.description&&a.jsx("sub",{children:e.description})]}),onChange:s=>_(e.value,s.target.checked,n)})},e.value);return a.jsxs("div",{className:l.search,"data-component":"search",children:[a.jsxs("div",{className:l.controls,children:[a.jsx(E.Input,{"aria-label":O,icon:"MagnifyingGlass",onChange:e=>M(e.target.value),placeholder:w,type:"search",value:D}),d.length>0&&a.jsx(h.Button,{"aria-expanded":v,"aria-haspopup":"dialog",badge:p.length,icon:"Funnel",onClick:()=>r(!0),variant:"tertiary",children:x})]}),p.length>0&&a.jsxs("div",{"aria-label":x,className:l.chips,children:[p.map(e=>a.jsx(T.Chip,{accessibleLabel:$(e),label:e.label,onDelete:()=>_(e.value,!1)},e.value)),a.jsx(h.Button,{onClick:()=>i==null?void 0:i([]),variant:"tertiary",children:j})]}),v&&a.jsx(z.Dialog,{"aria-labelledby":c,className:l["filter-dialog"],controls:a.jsxs(P.Controls,{children:[a.jsx(h.Button,{onClick:()=>{i==null||i([]),r(!1)},children:j}),a.jsx(h.Button,{onClick:()=>r(!1),variant:"primary",children:B})]}),header:a.jsx(A.Header,{children:a.jsx("h2",{id:c,children:q})}),open:!0,setOpen:r,children:a.jsx("div",{className:l["filter-groups"],"data-columns":k,children:d.map((e,n)=>a.jsxs("section",{"aria-labelledby":e.label?`${c}-${n}`:void 0,className:l["filter-group"],"data-column-span":e.columnSpan??1,role:e.control==="radio"?"radiogroup":"group",children:[e.label&&a.jsx("h3",{id:`${c}-${n}`,children:e.label}),e.options.map(s=>y(s,e)),e.collapsible&&a.jsx(H.Collapsible,{summary:e.collapsible.label,children:a.jsx("div",{className:l["collapsible-options"],children:e.collapsible.options.map(s=>y(s,e))})})]},e.label??n))})})]})};exports.Search=U;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index9.css');const a=require("react/jsx-runtime"),b=require("react"),h=require("../button/index.cjs"),I=require("../checkbox/index.cjs"),T=require("../chip/index.cjs"),H=require("../collapsible/index.cjs"),P=require("../controls/index.cjs"),z=require("../dialog/index.cjs"),A=require("../header/index.cjs"),E=require("../../index-CeHwRKAg.cjs"),J="_search_1rde5_3",K="_controls_1rde5_15",Q="_chips_1rde5_35",S="_radio_1rde5_101",l={search:J,controls:K,chips:Q,"filter-dialog":"_filter-dialog_1rde5_42","filter-groups":"_filter-groups_1rde5_47","filter-group":"_filter-group_1rde5_47","filter-option":"_filter-option_1rde5_83","option-copy":"_option-copy_1rde5_89",radio:S,"collapsible-options":"_collapsible-options_1rde5_128"},U=({filterButtonLabel:x="Filters",filterDialogColumns:k=1,filterDialogTitle:q="Filters",filterGroups:d=[],onChange:M,onSelectedFiltersChange:i,removeFilterLabel:$=c=>`Remove ${c.label} filter`,resetLabel:j="Reset",searchLabel:O="Search",searchPlaceholder:w="Search",selectedFilters:t=[],showResultsLabel:B="Show results",value:D=""})=>{const c=b.useId(),[v,r]=b.useState(!1),R=b.useMemo(()=>new Map(d.flatMap(e=>{var n;return[...e.options,...((n=e.collapsible)==null?void 0:n.options)??[]]}).map(e=>[e.value,e])),[d]),p=t.flatMap(e=>{const n=R.get(e);return n?[n]:[]}),_=(e,n,s)=>{var f;if(!i)return;const m=new Set([...(s==null?void 0:s.options.map(o=>o.value))??[],...((f=s==null?void 0:s.collapsible)==null?void 0:f.options.map(o=>o.value))??[]]),N=t.filter(o=>!m.has(o));if(n&&(s==null?void 0:s.defaultValue)===e){i(N);return}i(n?(s==null?void 0:s.control)==="radio"||(s==null?void 0:s.selectionMode)==="single"?[...N,e]:[...new Set([...t,e])]:t.filter(o=>o!==e))},u=(e,n)=>{var s;return t.includes(e)||n.defaultValue===e&&![...n.options,...((s=n.collapsible)==null?void 0:s.options)??[]].some(m=>t.includes(m.value))},y=(e,n)=>a.jsx("div",{className:l["filter-option"],"data-component":"renderfilter",children:n.control==="radio"?a.jsxs("label",{className:l.radio,children:[a.jsx("input",{checked:u(e.value,n),name:`${c}-filter-${n.label??"group"}`,onChange:s=>_(e.value,s.target.checked,n),type:"radio"}),a.jsxs("span",{className:l["option-copy"],children:[e.label,e.description&&a.jsx("sub",{children:e.description})]})]}):a.jsx(I.Checkbox,{checked:u(e.value,n),label:a.jsxs("span",{className:l["option-copy"],children:[e.label,e.description&&a.jsx("sub",{children:e.description})]}),onChange:s=>_(e.value,s.target.checked,n)})},e.value);return a.jsxs("div",{className:l.search,"data-component":"search",children:[a.jsxs("div",{className:l.controls,children:[a.jsx(E.Input,{"aria-label":O,icon:"MagnifyingGlass",onChange:e=>M(e.target.value),placeholder:w,type:"search",value:D}),d.length>0&&a.jsx(h.Button,{"aria-expanded":v,"aria-haspopup":"dialog",badge:p.length,icon:"Funnel",onClick:()=>r(!0),variant:"tertiary",children:x})]}),p.length>0&&a.jsxs("div",{"aria-label":x,className:l.chips,children:[p.map(e=>a.jsx(T.Chip,{accessibleLabel:$(e),label:e.label,onDelete:()=>_(e.value,!1)},e.value)),a.jsx(h.Button,{onClick:()=>i==null?void 0:i([]),variant:"tertiary",children:j})]}),v&&a.jsx(z.Dialog,{"aria-labelledby":c,className:l["filter-dialog"],controls:a.jsxs(P.Controls,{children:[a.jsx(h.Button,{onClick:()=>{i==null||i([]),r(!1)},children:j}),a.jsx(h.Button,{onClick:()=>r(!1),variant:"primary",children:B})]}),header:a.jsx(A.Header,{children:a.jsx("h2",{id:c,children:q})}),open:!0,setOpen:r,children:a.jsx("div",{className:l["filter-groups"],"data-columns":k,children:d.map((e,n)=>a.jsxs("section",{"aria-labelledby":e.label?`${c}-${n}`:void 0,className:l["filter-group"],"data-column-span":e.columnSpan??1,role:e.control==="radio"?"radiogroup":"group",children:[e.label&&a.jsx("h3",{id:`${c}-${n}`,children:e.label}),e.options.map(s=>y(s,e)),e.collapsible&&a.jsx(H.Collapsible,{summary:e.collapsible.label,children:a.jsx("div",{className:l["collapsible-options"],children:e.collapsible.options.map(s=>y(s,e))})})]},e.label??n))})})]})};exports.Search=U;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -7,7 +7,7 @@ import { Collapsible as E } from "../collapsible/index.js";
7
7
  import { Controls as J } from "../controls/index.js";
8
8
  import { Dialog as K } from "../dialog/index.js";
9
9
  import { Header as P } from "../header/index.js";
10
- import { I as Q } from "../../index-Ds-Ocs4L.js";
10
+ import { I as Q } from "../../index-DBWgRXp9.js";
11
11
  import '../../assets/index9.css';const U = "_search_1rde5_3", V = "_controls_1rde5_15", W = "_chips_1rde5_35", X = "_radio_1rde5_101", o = {
12
12
  search: U,
13
13
  controls: V,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../classix-5H4IWnMA.cjs");require("../../icons-Dv_p0bUF.cjs");const e=require("../../index-Bt7vnwji.cjs");require("../../use-touched-Bq5Gjbpz.cjs");exports.Select=e.Select;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../classix-5H4IWnMA.cjs");require("../../icons-BTif0nDb.cjs");const e=require("../../index-5qUTKX7P.cjs");require("../../use-touched-Bq5Gjbpz.cjs");exports.Select=e.Select;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  import "react/jsx-runtime";
2
2
  import "../../classix-DG18itHa.js";
3
- import "../../icons-dUP7sKyt.js";
4
- import { S as e } from "../../index-BLb3JiCr.js";
3
+ import "../../icons-CBbpxsJF.js";
4
+ import { S as e } from "../../index-BuSfz4qx.js";
5
5
  import "../../use-touched-B999bBr8.js";
6
6
  export {
7
7
  e as Select