@solibo/solibo-ui 1.0.4 → 1.0.6
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.
- package/dist/assets/index.css +1 -1
- package/dist/assets/index10.css +1 -1
- package/dist/assets/index11.css +1 -1
- package/dist/assets/index12.css +1 -1
- package/dist/assets/index13.css +1 -1
- package/dist/assets/index14.css +1 -1
- package/dist/assets/index15.css +1 -1
- package/dist/assets/index17.css +1 -1
- package/dist/assets/index20.css +1 -1
- package/dist/assets/index26.css +1 -1
- package/dist/assets/index3.css +1 -1
- package/dist/assets/index31.css +1 -1
- package/dist/assets/index32.css +1 -1
- package/dist/assets/index39.css +1 -1
- package/dist/assets/index4.css +1 -1
- package/dist/assets/index41.css +1 -1
- package/dist/assets/index42.css +1 -1
- package/dist/assets/index47.css +1 -1
- package/dist/assets/index5.css +1 -1
- package/dist/assets/index6.css +1 -1
- package/dist/assets/index7.css +1 -1
- package/dist/assets/index8.css +1 -1
- package/dist/assets/index9.css +1 -1
- package/dist/components/aside/index.cjs +1 -1
- package/dist/components/aside/index.js +15 -15
- package/dist/components/button/index.cjs +1 -1
- package/dist/components/button/index.js +10 -10
- package/dist/components/card/index.cjs +1 -1
- package/dist/components/card/index.cjs.map +1 -1
- package/dist/components/card/index.js +44 -34
- package/dist/components/card/index.js.map +1 -1
- package/dist/components/checkbox/index.cjs +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/dropdown/index.cjs +1 -1
- package/dist/components/dropdown/index.js +101 -101
- package/dist/components/editor/index.cjs +21 -21
- package/dist/components/editor/index.cjs.map +1 -1
- package/dist/components/editor/index.js +1646 -1636
- package/dist/components/editor/index.js.map +1 -1
- package/dist/components/header/index.cjs +1 -1
- package/dist/components/header/index.js +10 -10
- package/dist/components/icon/index.cjs +1 -1
- package/dist/components/icon/index.js +1 -1
- package/dist/components/input/index.cjs +1 -1
- package/dist/components/input/index.js +2 -2
- package/dist/components/menu/index.cjs +1 -1
- package/dist/components/menu/index.cjs.map +1 -1
- package/dist/components/menu/index.js +14 -13
- package/dist/components/menu/index.js.map +1 -1
- package/dist/components/message/index.cjs +1 -1
- package/dist/components/message/index.cjs.map +1 -1
- package/dist/components/message/index.js +22 -21
- package/dist/components/message/index.js.map +1 -1
- package/dist/components/messages/index.cjs +1 -1
- package/dist/components/messages/index.cjs.map +1 -1
- package/dist/components/messages/index.js +34 -31
- package/dist/components/messages/index.js.map +1 -1
- package/dist/components/nav/index.cjs +1 -1
- package/dist/components/nav/index.cjs.map +1 -1
- package/dist/components/nav/index.js +34 -29
- package/dist/components/nav/index.js.map +1 -1
- package/dist/components/object/index.cjs +1 -1
- package/dist/components/object/index.js +1 -1
- package/dist/components/popover/index.cjs +1 -1
- package/dist/components/popover/index.cjs.map +1 -1
- package/dist/components/popover/index.js +83 -39
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/portal/index.cjs +1 -1
- package/dist/components/portal/index.js +17 -17
- package/dist/components/search/index.cjs +1 -1
- package/dist/components/search/index.js +37 -37
- package/dist/components/select/index.cjs +1 -1
- package/dist/components/select/index.js +2 -2
- package/dist/components/sortable/index.cjs +1 -1
- package/dist/components/sortable/index.js +1 -1
- package/dist/components/table/index.cjs +1 -1
- package/dist/components/table/index.js +1 -1
- package/dist/components/textarea/index.cjs +1 -1
- package/dist/components/textarea/index.js +1 -1
- package/dist/components/toast/index.cjs +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toasts/index.cjs +1 -1
- package/dist/components/toasts/index.js +1 -1
- package/dist/components/toggle/index.cjs +1 -1
- package/dist/components/toggle/index.js +1 -1
- package/dist/components/tooltip/index.cjs +1 -1
- package/dist/components/tooltip/index.js +6 -6
- package/dist/{icons-DYCSlAoX.cjs → icons-BoBeAmLe.cjs} +2 -2
- package/dist/{icons-DYCSlAoX.cjs.map → icons-BoBeAmLe.cjs.map} +1 -1
- package/dist/{icons-CKzd_L4D.js → icons-Dhj9mAkR.js} +9 -2
- package/dist/{icons-CKzd_L4D.js.map → icons-Dhj9mAkR.js.map} +1 -1
- package/dist/{index-N4IMha5Q.cjs → index-Ct0mJ-KK.cjs} +2 -2
- package/dist/{index-N4IMha5Q.cjs.map → index-Ct0mJ-KK.cjs.map} +1 -1
- package/dist/{index-DFXqYJat.js → index-D4LZQ-JF.js} +2 -2
- package/dist/{index-DFXqYJat.js.map → index-D4LZQ-JF.js.map} +1 -1
- package/dist/{index-CP5A_BGJ.cjs → index-D9Hq7ewF.cjs} +2 -2
- package/dist/{index-CP5A_BGJ.cjs.map → index-D9Hq7ewF.cjs.map} +1 -1
- package/dist/{index-B9xtLe2w.js → index-uQRsVtP-.js} +2 -2
- package/dist/{index-B9xtLe2w.js.map → index-uQRsVtP-.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +37 -11
- package/dist/index.js +39 -38
- package/dist/tokens.css +7 -2
- package/dist/tokens.json +105 -33
- package/package.json +1 -1
|
@@ -1,38 +1,43 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { t as
|
|
3
|
-
import { useState as
|
|
4
|
-
import { i as
|
|
5
|
-
import '../../assets/
|
|
6
|
-
nav:
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { t as r } from "../../classix-DG18itHa.js";
|
|
3
|
+
import { useState as b } from "react";
|
|
4
|
+
import { i as f } from "../../icons-Dhj9mAkR.js";
|
|
5
|
+
import '../../assets/index12.css';const h = "_nav_mhwz8_3", u = "_label_mhwz8_9", v = "_horizontal_mhwz8_17", w = "_sidebar_mhwz8_27", z = "_tabs_mhwz8_73", N = "_pills_mhwz8_93", a = {
|
|
6
|
+
nav: h,
|
|
7
|
+
label: u,
|
|
7
8
|
horizontal: v,
|
|
8
|
-
sidebar:
|
|
9
|
-
tabs:
|
|
10
|
-
pills:
|
|
9
|
+
sidebar: w,
|
|
10
|
+
tabs: z,
|
|
11
|
+
pills: N
|
|
11
12
|
}, g = {
|
|
12
|
-
default:
|
|
13
|
-
pills:
|
|
14
|
-
sidebar:
|
|
15
|
-
tabs:
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
default: a.default,
|
|
14
|
+
pills: a.pills,
|
|
15
|
+
sidebar: a.sidebar,
|
|
16
|
+
tabs: a.tabs
|
|
17
|
+
}, T = ({
|
|
18
|
+
className: n,
|
|
19
|
+
...s
|
|
20
|
+
}) => /* @__PURE__ */ i("span", { className: r(n, a.label), ...s, "data-component": "navlabel" }), V = ({
|
|
21
|
+
animation: n,
|
|
22
|
+
children: s,
|
|
23
|
+
className: c,
|
|
24
|
+
horizontal: e = !1,
|
|
25
|
+
variant: o = "default",
|
|
26
|
+
...m
|
|
23
27
|
}) => {
|
|
24
|
-
const [
|
|
25
|
-
"--icon-svg":
|
|
28
|
+
const [p, l] = b(!1), d = {
|
|
29
|
+
"--icon-svg": f("chevron")
|
|
26
30
|
};
|
|
27
|
-
return /* @__PURE__ */
|
|
28
|
-
if (
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
+
return /* @__PURE__ */ i("nav", { className: r(c, e && a.horizontal, a.nav, g[o]), "data-animation": n, "data-open": p ? "true" : "false", "data-orientation": e ? "horizontal" : "vertical", onBlurCapture: (t) => {
|
|
32
|
+
if (o !== "pills" || window.innerWidth > 960) return;
|
|
33
|
+
const _ = t.relatedTarget;
|
|
34
|
+
t.currentTarget.contains(_) || l(!1);
|
|
31
35
|
}, onClick: () => {
|
|
32
|
-
|
|
33
|
-
}, style: d, ...
|
|
36
|
+
o !== "pills" || window.innerWidth > 960 || l((t) => !t);
|
|
37
|
+
}, style: d, ...m, "data-component": "nav", children: s });
|
|
34
38
|
};
|
|
35
39
|
export {
|
|
36
|
-
|
|
40
|
+
V as Nav,
|
|
41
|
+
T as NavLabel
|
|
37
42
|
};
|
|
38
43
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/nav/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useState } from 'react';\n\nimport { iconSVG } from '@/components/icon/icons.ts';\n\nimport styles from './styles.module.css';\n\nconst variants = {\n default: styles.default,\n pills: styles.pills,\n sidebar: styles.sidebar,\n tabs: styles.tabs,\n};\n\nexport type NavProps = React.HTMLAttributes<HTMLElement> & {\n animation?: string;\n children?: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n variant?: keyof typeof variants;\n};\n\nexport const Nav = ({\n animation,\n children,\n className,\n horizontal = false,\n variant = 'default',\n ...props\n}: NavProps) => {\n const [open, setOpen] = useState(false);\n\n type withVars = React.CSSProperties & {\n '--icon-svg'?: string;\n };\n const withVars: withVars = {\n '--icon-svg': iconSVG('chevron'),\n };\n\n return (\n <nav\n className={cx(className, horizontal && styles.horizontal, styles.nav, variants[variant])}\n data-animation={animation}\n data-open={open ? 'true' : 'false'}\n data-orientation={horizontal ? 'horizontal' : 'vertical'}\n onBlurCapture={(e) => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n const next = e.relatedTarget as Node | null;\n if (!e.currentTarget.contains(next)) {\n setOpen(false);\n }\n }}\n onClick={() => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n setOpen((v) => !v);\n }}\n style={withVars}\n {...props}\n >\n {children}\n </nav>\n );\n};\n"],"names":["variants","default","styles","pills","sidebar","tabs","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/nav/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useState } from 'react';\n\nimport { iconSVG } from '@/components/icon/icons.ts';\n\nimport styles from './styles.module.css';\n\nconst variants = {\n default: styles.default,\n pills: styles.pills,\n sidebar: styles.sidebar,\n tabs: styles.tabs,\n};\n\nexport type NavProps = React.HTMLAttributes<HTMLElement> & {\n animation?: string;\n children?: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n variant?: keyof typeof variants;\n};\n\nexport type NavLabelProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const NavLabel = ({ className, ...props }: NavLabelProps) => (\n <span\n className={cx(className, styles.label)}\n {...props}\n />\n);\n\nexport const Nav = ({\n animation,\n children,\n className,\n horizontal = false,\n variant = 'default',\n ...props\n}: NavProps) => {\n const [open, setOpen] = useState(false);\n\n type withVars = React.CSSProperties & {\n '--icon-svg'?: string;\n };\n const withVars: withVars = {\n '--icon-svg': iconSVG('chevron'),\n };\n\n return (\n <nav\n className={cx(className, horizontal && styles.horizontal, styles.nav, variants[variant])}\n data-animation={animation}\n data-open={open ? 'true' : 'false'}\n data-orientation={horizontal ? 'horizontal' : 'vertical'}\n onBlurCapture={(e) => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n const next = e.relatedTarget as Node | null;\n if (!e.currentTarget.contains(next)) {\n setOpen(false);\n }\n }}\n onClick={() => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n setOpen((v) => !v);\n }}\n style={withVars}\n {...props}\n >\n {children}\n </nav>\n );\n};\n"],"names":["variants","default","styles","pills","sidebar","tabs","NavLabel","className","props","jsx","cx","label","Nav","animation","children","horizontal","variant","open","setOpen","useState","withVars","iconSVG","nav","e","window","innerWidth","next","relatedTarget","currentTarget","contains","v"],"mappings":";;;;;;;;;;;GAOMA,IAAW;AAAA,EACfC,SAASC,EAAOD;AAAAA,EAChBE,OAAOD,EAAOC;AAAAA,EACdC,SAASF,EAAOE;AAAAA,EAChBC,MAAMH,EAAOG;AACf,GAYaC,IAAWA,CAAC;AAAA,EAAEC,WAAAA;AAAAA,EAAW,GAAGC;AAAqB,MAC5D,gBAAAC,EAAC,QAAA,EACC,WAAWC,EAAGH,GAAWL,EAAOS,KAAK,GACrC,GAAIH,GAAM,kBAAA,WAAA,CAAA,GAIDI,IAAMA,CAAC;AAAA,EAClBC,WAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAP,WAAAA;AAAAA,EACAQ,YAAAA,IAAa;AAAA,EACbC,SAAAA,IAAU;AAAA,EACV,GAAGR;AACK,MAAM;AACd,QAAM,CAACS,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAKhCC,IAAqB;AAAA,IACzB,cAAcC,EAAQ,SAAS;AAAA,EAAA;AAGjC,SACE,gBAAAZ,EAAC,OAAA,EACC,WAAWC,EAAGH,GAAWQ,KAAcb,EAAOa,YAAYb,EAAOoB,KAAKtB,EAASgB,CAAO,CAAC,GACvF,kBAAgBH,GAChB,aAAWI,IAAO,SAAS,SAC3B,oBAAkBF,IAAa,eAAe,YAC9C,eAAgBQ,CAAAA,MAAM;AACpB,QAAIP,MAAY,WAAWQ,OAAOC,aAAa,IAAK;AAEpD,UAAMC,IAAOH,EAAEI;AACf,IAAKJ,EAAEK,cAAcC,SAASH,CAAI,KAChCR,EAAQ,EAAK;AAAA,EAEjB,GACA,SAAS,MAAM;AACb,IAAIF,MAAY,WAAWQ,OAAOC,aAAa,OAE/CP,EAASY,CAAAA,MAAM,CAACA,CAAC;AAAA,EACnB,GACA,OAAOV,GACP,GAAIZ,GAAM,kBAAA,OAETM,UAAAA,GACH;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index11.css');const e=require("react/jsx-runtime"),n="_object_xxgm1_1",s={object:n},a=({accessibleLabel:c,url:t,...o})=>e.jsx("object",{"aria-label":c,className:s.object,data:t,type:"application/pdf",...o,"data-component":"objectcomponent",children:t&&e.jsxs(e.Fragment,{children:["We cannot show this file. You can try accessing it directly:",e.jsx("br",{}),e.jsx("a",{href:t,children:t})]})});exports.Object=a;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index17.css');const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index17.css');const w=require("react/jsx-runtime"),C=require("../../classix-5H4IWnMA.cjs"),o=require("react"),K=require("react-dom"),O=require("../button/index.cjs"),H="_popover_1szho_1",N="_inline_1szho_6",W="_below_1szho_38",M="_above_1szho_43",U="_left_1szho_53",X="_right_1szho_58",Y="_trigger_1szho_63",s={popover:H,inline:N,"popover-panel":"_popover-panel_1szho_21",below:W,above:M,"inline-panel":"_inline-panel_1szho_48",left:U,right:X,trigger:Y,"inline-trigger":"_inline-trigger_1szho_77"},G=({children:m,inline:n=!1,position:p="left",triggerAccessibleLabel:L,triggerAriaHasPopup:F,triggerButtonContent:z})=>{var T;const P=o.useRef(null),R=o.useRef(void 0),b=o.useRef(null),D=o.useId(),l=o.useRef(null),[t,x]=o.useState(!1),[d,k]=o.useState(!1),g=p==="auto"?"right":p,[v,E]=o.useState(g),h=({initialFocus:e}={})=>{R.current=e,k(!1),E(g),x(!0)},c=o.useCallback(({restoreFocus:e=!0}={})=>{var a;x(!1),e&&((a=l.current)==null||a.focus())},[]),q=e=>{t&&e.key==="Escape"&&c()},A=e=>{if(!t){if(n&&(e.key==="Enter"||e.key===" ")){e.preventDefault(),h();return}if(e.key==="ArrowDown"){e.preventDefault(),h({initialFocus:"first"});return}e.key==="ArrowUp"&&(e.preventDefault(),h({initialFocus:"last"}))}};o.useEffect(()=>{if(!t)return;const e=a=>{var r,_;const f=a.target;(r=P.current)!=null&&r.contains(f)||(_=b.current)!=null&&_.contains(f)||c({restoreFocus:!1})};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[c,t]);const i=o.useCallback(()=>{const e=b.current,a=l.current;if(!e||!a)return;const f=e.getBoundingClientRect(),r=a.getBoundingClientRect(),_=r.top,j=window.innerHeight-r.bottom;k(f.height>j&&_>j),E(p==="auto"&&f.width>window.innerWidth-r.left&&r.right>window.innerWidth-r.left?"left":g)},[p,g]);o.useLayoutEffect(()=>{if(t)return i(),window.addEventListener("resize",i),window.addEventListener("scroll",i,!0),()=>{window.removeEventListener("resize",i),window.removeEventListener("scroll",i,!0)}},[t,i]);const S=e=>{n&&e.preventDefault(),e.stopPropagation(),t?c({restoreFocus:!1}):h()},B={"aria-controls":t?D:void 0,"aria-expanded":t,"aria-haspopup":F,"aria-label":L,className:n?s["inline-trigger"]:s.trigger,onClick:S,onKeyDown:A},u=n?(T=l.current)==null?void 0:T.getBoundingClientRect():void 0,I=[v==="left"?"translateX(-100%)":"",d?"translateY(calc(-100% - var(--shape-spacing-2xs)))":""].filter(Boolean).join(" "),y=t?w.jsx("div",{className:C.t(s["popover-panel"],s[d?"above":"below"],n&&s["inline-panel"],!n&&s[v]),"data-horizontal-placement":v,"data-placement":d?"above":"below",id:D,ref:b,style:u?{left:v==="left"?u.right:u.left,position:"fixed",top:d?u.top:u.bottom,transform:I||void 0}:void 0,children:typeof m=="function"?m({close:c,initialFocus:R.current,isOpen:t}):m}):null;return w.jsxs("div",{className:C.t(s.popover,n&&s.inline),"data-open":t,onKeyDown:q,onClick:e=>{n&&e.preventDefault(),e.stopPropagation()},ref:P,"data-component":"popover",children:[n?w.jsx("span",{...B,ref:l,role:"button",tabIndex:0,children:z}):w.jsx(O.Button,{...B,ref:l,variant:"secondary",children:z}),n&&y&&typeof document<"u"?K.createPortal(y,document.body):y]})};exports.Popover=G;
|
|
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 useRef,\n useState,\n} from 'react';\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 position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n position = 'left',\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\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<HTMLButtonElement>) => {\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 if (!containerRef.current?.contains(event.target as Node)) {\n closePopover({ restoreFocus: false });\n }\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n return (\n <div\n className={styles.popover}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n ref={containerRef}\n >\n <Button\n aria-controls={isOpen ? panelId : undefined}\n aria-expanded={isOpen}\n aria-haspopup={triggerAriaHasPopup}\n aria-label={triggerAccessibleLabel}\n className={cx(styles.trigger)}\n onKeyDown={handleTriggerKeyDown}\n onClick={() => (isOpen ? closePopover({ restoreFocus: false }) : openPopover())}\n ref={triggerRef}\n variant='secondary'\n >\n {triggerButtonContent}\n </Button>\n {isOpen && (\n <div\n className={cx(styles['popover-panel'], styles[position])}\n id={panelId}\n >\n {typeof children === 'function'\n ? children({ close: closePopover, initialFocus: initialFocusRef.current, isOpen })\n : children}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Popover","children","position","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelId","useId","triggerRef","isOpen","setIsOpen","useState","openPopover","initialFocus","current","closePopover","useCallback","restoreFocus","focus","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","contains","target","document","addEventListener","removeEventListener","jsxs","styles","popover","e","stopPropagation","jsx","Button","cx","trigger","close"],"mappings":"mXAuCaA,EAAUA,CAAC,CACtBC,SAAAA,EACAC,SAAAA,EAAW,OACXC,uBAAAA,EACAC,oBAAAA,EACAC,qBAAAA,CACY,IAAM,CAClB,MAAMC,EAAeC,EAAAA,OAAuB,IAAI,EAC1CC,EAAkBD,EAAAA,OAAwCE,MAAS,EACnEC,EAAUC,EAAAA,MAAAA,EACVC,EAAaL,EAAAA,OAA0B,IAAI,EAC3C,CAACM,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAEpCC,EAAcA,CAAC,CAAEC,aAAAA,CAAAA,EAAqC,KAAO,CACjET,EAAgBU,QAAUD,EAC1BH,EAAU,EAAI,CAChB,EAEMK,EAAeC,EAAAA,YAAY,CAAC,CAAEC,aAAAA,EAAe,EAAA,EAA8B,KAAO,OACtFP,EAAU,EAAK,EAEXO,KACFT,EAAAA,EAAWM,UAAXN,MAAAA,EAAoBU,QAExB,EAAG,CAAA,CAAE,EAECC,EAAiBC,GAA+C,CAChEX,GAAUW,EAAMC,MAAQ,UAC1BN,EAAAA,CAEJ,EAEMO,EAAwBF,GAAkD,CAC9E,GAAIX,CAAAA,EAIJ,IAAIW,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,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACf,EACH,OAGF,MAAMgB,EAAqBL,GAAsB,QAC1ClB,EAAAA,EAAaY,UAAbZ,MAAAA,EAAsBwB,SAASN,EAAMO,SACxCZ,EAAa,CAAEE,aAAc,EAAA,CAAO,CAExC,EAEAW,gBAASC,iBAAiB,YAAaJ,CAAiB,EAEjD,IAAM,CACXG,SAASE,oBAAoB,YAAaL,CAAiB,CAC7D,CACF,EAAG,CAACV,EAAcN,CAAM,CAAC,EAGvBsB,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAOC,QAClB,UAAWd,EACX,QAAUe,GAAMA,EAAEC,kBAClB,IAAKjC,EAAa,iBAAA,UAElB,SAAA,CAAAkC,EAAAA,IAACC,EAAAA,OAAA,CACC,gBAAe5B,EAASH,EAAUD,OAClC,gBAAeI,EACf,gBAAeT,EACf,aAAYD,EACZ,UAAWuC,EAAAA,EAAGN,EAAOO,OAAO,EAC5B,UAAWjB,EACX,QAAS,IAAOb,EAASM,EAAa,CAAEE,aAAc,EAAA,CAAO,EAAIL,EAAAA,EACjE,IAAKJ,EACL,QAAQ,YAEPP,SAAAA,EACH,EACCQ,GACC2B,EAAAA,IAAC,MAAA,CACC,UAAWE,IAAGN,EAAO,eAAe,EAAGA,EAAOlC,CAAQ,CAAC,EACvD,GAAIQ,EAEH,SAAA,OAAOT,GAAa,WACjBA,EAAS,CAAE2C,MAAOzB,EAAcF,aAAcT,EAAgBU,QAASL,OAAAA,CAAAA,CAAQ,EAC/EZ,CAAAA,CACN,CAAA,EAEJ,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};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n inline?: boolean;\n position?: 'auto' | 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n inline = false,\n position = 'left',\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 | HTMLSpanElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [opensAbove, setOpensAbove] = useState(false);\n const preferredHorizontalPlacement = position === 'auto' ? 'right' : position;\n const [horizontalPlacement, setHorizontalPlacement] = useState<'left' | 'right'>(\n preferredHorizontalPlacement\n );\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setOpensAbove(false);\n setHorizontalPlacement(preferredHorizontalPlacement);\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 (inline && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n openPopover();\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 position === 'auto' &&\n panelBounds.width > window.innerWidth - triggerBounds.left &&\n triggerBounds.right > window.innerWidth - triggerBounds.left\n ? 'left'\n : preferredHorizontalPlacement\n );\n }, [position, preferredHorizontalPlacement]);\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 if (inline) 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 if (inline) event.preventDefault();\n event.stopPropagation();\n }}\n ref={containerRef}\n >\n {inline ? (\n <span\n {...triggerProps}\n ref={triggerRef}\n role='button'\n tabIndex={0}\n >\n {triggerButtonContent}\n </span>\n ) : (\n <Button\n {...triggerProps}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n variant='secondary'\n >\n {triggerButtonContent}\n </Button>\n )}\n {inline && panel && typeof document !== 'undefined'\n ? createPortal(panel, document.body)\n : panel}\n </div>\n );\n};\n"],"names":["Popover","children","inline","position","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelRef","panelId","useId","triggerRef","isOpen","setIsOpen","useState","opensAbove","setOpensAbove","preferredHorizontalPlacement","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","transform","close","jsxs","popover","Button","createPortal","body"],"mappings":"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"}
|
|
@@ -1,68 +1,112 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import { useRef as
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { jsx as z, jsxs as W } from "react/jsx-runtime";
|
|
2
|
+
import { t as F } from "../../classix-DG18itHa.js";
|
|
3
|
+
import { useRef as h, useId as S, useState as y, useCallback as A, 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/index17.css';const G = "_popover_1szho_1", J = "_inline_1szho_6", M = "_below_1szho_38", Q = "_above_1szho_43", V = "_left_1szho_53", Z = "_right_1szho_58", $ = "_trigger_1szho_63", r = {
|
|
7
|
+
popover: G,
|
|
8
|
+
inline: J,
|
|
9
|
+
"popover-panel": "_popover-panel_1szho_21",
|
|
10
|
+
below: M,
|
|
11
|
+
above: Q,
|
|
12
|
+
"inline-panel": "_inline-panel_1szho_48",
|
|
13
|
+
left: V,
|
|
14
|
+
right: Z,
|
|
15
|
+
trigger: $,
|
|
16
|
+
"inline-trigger": "_inline-trigger_1szho_77"
|
|
17
|
+
}, ae = ({
|
|
18
|
+
children: w,
|
|
19
|
+
inline: t = !1,
|
|
20
|
+
position: f = "left",
|
|
21
|
+
triggerAccessibleLabel: I,
|
|
22
|
+
triggerAriaHasPopup: K,
|
|
23
|
+
triggerButtonContent: P
|
|
17
24
|
}) => {
|
|
18
|
-
|
|
25
|
+
var T;
|
|
26
|
+
const D = h(null), E = h(void 0), _ = h(null), k = S(), a = h(null), [o, B] = y(!1), [u, R] = y(!1), d = f === "auto" ? "right" : f, [g, x] = y(d), v = ({
|
|
19
27
|
initialFocus: e
|
|
20
28
|
} = {}) => {
|
|
21
|
-
|
|
22
|
-
},
|
|
29
|
+
E.current = e, R(!1), x(d), B(!0);
|
|
30
|
+
}, l = A(({
|
|
23
31
|
restoreFocus: e = !0
|
|
24
32
|
} = {}) => {
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
}, []),
|
|
28
|
-
o && e.key === "Escape" &&
|
|
29
|
-
},
|
|
33
|
+
var s;
|
|
34
|
+
B(!1), e && ((s = a.current) == null || s.focus());
|
|
35
|
+
}, []), j = (e) => {
|
|
36
|
+
o && e.key === "Escape" && l();
|
|
37
|
+
}, H = (e) => {
|
|
30
38
|
if (!o) {
|
|
39
|
+
if (t && (e.key === "Enter" || e.key === " ")) {
|
|
40
|
+
e.preventDefault(), v();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
31
43
|
if (e.key === "ArrowDown") {
|
|
32
|
-
e.preventDefault(),
|
|
44
|
+
e.preventDefault(), v({
|
|
33
45
|
initialFocus: "first"
|
|
34
46
|
});
|
|
35
47
|
return;
|
|
36
48
|
}
|
|
37
|
-
e.key === "ArrowUp" && (e.preventDefault(),
|
|
49
|
+
e.key === "ArrowUp" && (e.preventDefault(), v({
|
|
38
50
|
initialFocus: "last"
|
|
39
51
|
}));
|
|
40
52
|
}
|
|
41
53
|
};
|
|
42
|
-
|
|
54
|
+
U(() => {
|
|
43
55
|
if (!o)
|
|
44
56
|
return;
|
|
45
|
-
const e = (
|
|
46
|
-
var
|
|
47
|
-
|
|
57
|
+
const e = (s) => {
|
|
58
|
+
var n, m;
|
|
59
|
+
const p = s.target;
|
|
60
|
+
(n = D.current) != null && n.contains(p) || (m = _.current) != null && m.contains(p) || l({
|
|
48
61
|
restoreFocus: !1
|
|
49
62
|
});
|
|
50
63
|
};
|
|
51
64
|
return document.addEventListener("mousedown", e), () => {
|
|
52
65
|
document.removeEventListener("mousedown", e);
|
|
53
66
|
};
|
|
54
|
-
}, [
|
|
55
|
-
|
|
67
|
+
}, [l, o]);
|
|
68
|
+
const i = A(() => {
|
|
69
|
+
const e = _.current, s = a.current;
|
|
70
|
+
if (!e || !s) return;
|
|
71
|
+
const p = e.getBoundingClientRect(), n = s.getBoundingClientRect(), m = n.top, C = window.innerHeight - n.bottom;
|
|
72
|
+
R(p.height > C && m > C), x(f === "auto" && p.width > window.innerWidth - n.left && n.right > window.innerWidth - n.left ? "left" : d);
|
|
73
|
+
}, [f, d]);
|
|
74
|
+
X(() => {
|
|
75
|
+
if (o)
|
|
76
|
+
return i(), window.addEventListener("resize", i), window.addEventListener("scroll", i, !0), () => {
|
|
77
|
+
window.removeEventListener("resize", i), window.removeEventListener("scroll", i, !0);
|
|
78
|
+
};
|
|
79
|
+
}, [o, i]);
|
|
80
|
+
const N = (e) => {
|
|
81
|
+
t && e.preventDefault(), e.stopPropagation(), o ? l({
|
|
56
82
|
restoreFocus: !1
|
|
57
|
-
}) :
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
83
|
+
}) : v();
|
|
84
|
+
}, L = {
|
|
85
|
+
"aria-controls": o ? k : void 0,
|
|
86
|
+
"aria-expanded": o,
|
|
87
|
+
"aria-haspopup": K,
|
|
88
|
+
"aria-label": I,
|
|
89
|
+
className: t ? r["inline-trigger"] : r.trigger,
|
|
90
|
+
onClick: N,
|
|
91
|
+
onKeyDown: H
|
|
92
|
+
}, c = t ? (T = a.current) == null ? void 0 : T.getBoundingClientRect() : void 0, O = [g === "left" ? "translateX(-100%)" : "", u ? "translateY(calc(-100% - var(--shape-spacing-2xs)))" : ""].filter(Boolean).join(" "), b = o ? /* @__PURE__ */ z("div", { className: F(r["popover-panel"], r[u ? "above" : "below"], t && r["inline-panel"], !t && r[g]), "data-horizontal-placement": g, "data-placement": u ? "above" : "below", id: k, ref: _, style: c ? {
|
|
93
|
+
left: g === "left" ? c.right : c.left,
|
|
94
|
+
position: "fixed",
|
|
95
|
+
top: u ? c.top : c.bottom,
|
|
96
|
+
transform: O || void 0
|
|
97
|
+
} : void 0, children: typeof w == "function" ? w({
|
|
98
|
+
close: l,
|
|
99
|
+
initialFocus: E.current,
|
|
100
|
+
isOpen: o
|
|
101
|
+
}) : w }) : null;
|
|
102
|
+
return /* @__PURE__ */ W("div", { className: F(r.popover, t && r.inline), "data-open": o, onKeyDown: j, onClick: (e) => {
|
|
103
|
+
t && e.preventDefault(), e.stopPropagation();
|
|
104
|
+
}, ref: D, "data-component": "popover", children: [
|
|
105
|
+
t ? /* @__PURE__ */ z("span", { ...L, ref: a, role: "button", tabIndex: 0, children: P }) : /* @__PURE__ */ z(q, { ...L, ref: a, variant: "secondary", children: P }),
|
|
106
|
+
t && b && typeof document < "u" ? Y(b, document.body) : b
|
|
63
107
|
] });
|
|
64
108
|
};
|
|
65
109
|
export {
|
|
66
|
-
|
|
110
|
+
ae as Popover
|
|
67
111
|
};
|
|
68
112
|
//# sourceMappingURL=index.js.map
|
|
@@ -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 useRef,\n useState,\n} from 'react';\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 position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n position = 'left',\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\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<HTMLButtonElement>) => {\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 if (!containerRef.current?.contains(event.target as Node)) {\n closePopover({ restoreFocus: false });\n }\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n return (\n <div\n className={styles.popover}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n ref={containerRef}\n >\n <Button\n aria-controls={isOpen ? panelId : undefined}\n aria-expanded={isOpen}\n aria-haspopup={triggerAriaHasPopup}\n aria-label={triggerAccessibleLabel}\n className={cx(styles.trigger)}\n onKeyDown={handleTriggerKeyDown}\n onClick={() => (isOpen ? closePopover({ restoreFocus: false }) : openPopover())}\n ref={triggerRef}\n variant='secondary'\n >\n {triggerButtonContent}\n </Button>\n {isOpen && (\n <div\n className={cx(styles['popover-panel'], styles[position])}\n id={panelId}\n >\n {typeof children === 'function'\n ? children({ close: closePopover, initialFocus: initialFocusRef.current, isOpen })\n : children}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Popover","children","position","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelId","useId","triggerRef","isOpen","setIsOpen","useState","openPopover","initialFocus","current","closePopover","useCallback","restoreFocus","focus","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","contains","target","document","addEventListener","removeEventListener","jsxs","styles","popover","e","stopPropagation","jsx","Button","cx","trigger","close"],"mappings":";;;;;;;;;;GAuCaA,IAAUA,CAAC;AAAA,EACtBC,UAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,wBAAAA;AAAAA,EACAC,qBAAAA;AAAAA,EACAC,sBAAAA;AACY,MAAM;AAClB,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAkBD,EAAwCE,MAAS,GACnEC,IAAUC,EAAAA,GACVC,IAAaL,EAA0B,IAAI,GAC3C,CAACM,GAAQC,CAAS,IAAIC,EAAS,EAAK,GAEpCC,IAAcA,CAAC;AAAA,IAAEC,cAAAA;AAAAA,EAAAA,IAAqC,OAAO;AACjET,IAAAA,EAAgBU,UAAUD,GAC1BH,EAAU,EAAI;AAAA,EAChB,GAEMK,IAAeC,EAAY,CAAC;AAAA,IAAEC,cAAAA,IAAe;AAAA,EAAA,IAA8B,OAAO;;AACtFP,IAAAA,EAAU,EAAK,GAEXO,OACFT,IAAAA,EAAWM,YAAXN,QAAAA,EAAoBU;AAAAA,EAExB,GAAG,CAAA,CAAE,GAECC,IAAgBA,CAACC,MAA+C;AACpE,IAAIX,KAAUW,EAAMC,QAAQ,YAC1BN,EAAAA;AAAAA,EAEJ,GAEMO,IAAuBA,CAACF,MAAkD;AAC9E,QAAIX,CAAAA,GAIJ;AAAA,UAAIW,EAAMC,QAAQ,aAAa;AAC7BD,QAAAA,EAAMG,eAAAA,GACNX,EAAY;AAAA,UAAEC,cAAc;AAAA,QAAA,CAAS;AACrC;AAAA,MACF;AAEA,MAAIO,EAAMC,QAAQ,cAChBD,EAAMG,eAAAA,GACNX,EAAY;AAAA,QAAEC,cAAc;AAAA,MAAA,CAAQ;AAAA;AAAA,EAExC;AAEAW,SAAAA,EAAU,MAAM;AACd,QAAI,CAACf;AACH;AAGF,UAAMgB,IAAoBA,CAACL,MAAsB;;AAC/C,OAAKlB,IAAAA,EAAaY,YAAbZ,QAAAA,EAAsBwB,SAASN,EAAMO,WACxCZ,EAAa;AAAA,QAAEE,cAAc;AAAA,MAAA,CAAO;AAAA,IAExC;AAEAW,oBAASC,iBAAiB,aAAaJ,CAAiB,GAEjD,MAAM;AACXG,eAASE,oBAAoB,aAAaL,CAAiB;AAAA,IAC7D;AAAA,EACF,GAAG,CAACV,GAAcN,CAAM,CAAC,GAGvB,gBAAAsB,EAAC,OAAA,EACC,WAAWC,EAAOC,SAClB,WAAWd,GACX,SAAUe,CAAAA,MAAMA,EAAEC,mBAClB,KAAKjC,GAAa,kBAAA,WAElB,UAAA;AAAA,IAAA,gBAAAkC,EAACC,GAAA,EACC,iBAAe5B,IAASH,IAAUD,QAClC,iBAAeI,GACf,iBAAeT,GACf,cAAYD,GACZ,WAAWuC,EAAGN,EAAOO,OAAO,GAC5B,WAAWjB,GACX,SAAS,MAAOb,IAASM,EAAa;AAAA,MAAEE,cAAc;AAAA,IAAA,CAAO,IAAIL,EAAAA,GACjE,KAAKJ,GACL,SAAQ,aAEPP,UAAAA,GACH;AAAA,IACCQ,KACC,gBAAA2B,EAAC,OAAA,EACC,WAAWE,EAAGN,EAAO,eAAe,GAAGA,EAAOlC,CAAQ,CAAC,GACvD,IAAIQ,GAEH,UAAA,OAAOT,KAAa,aACjBA,EAAS;AAAA,MAAE2C,OAAOzB;AAAAA,MAAcF,cAAcT,EAAgBU;AAAAA,MAASL,QAAAA;AAAAA,IAAAA,CAAQ,IAC/EZ,EAAAA,CACN;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
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 position?: 'auto' | 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n inline = false,\n position = 'left',\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 | HTMLSpanElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [opensAbove, setOpensAbove] = useState(false);\n const preferredHorizontalPlacement = position === 'auto' ? 'right' : position;\n const [horizontalPlacement, setHorizontalPlacement] = useState<'left' | 'right'>(\n preferredHorizontalPlacement\n );\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setOpensAbove(false);\n setHorizontalPlacement(preferredHorizontalPlacement);\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 (inline && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n openPopover();\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 position === 'auto' &&\n panelBounds.width > window.innerWidth - triggerBounds.left &&\n triggerBounds.right > window.innerWidth - triggerBounds.left\n ? 'left'\n : preferredHorizontalPlacement\n );\n }, [position, preferredHorizontalPlacement]);\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 if (inline) 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 if (inline) event.preventDefault();\n event.stopPropagation();\n }}\n ref={containerRef}\n >\n {inline ? (\n <span\n {...triggerProps}\n ref={triggerRef}\n role='button'\n tabIndex={0}\n >\n {triggerButtonContent}\n </span>\n ) : (\n <Button\n {...triggerProps}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n variant='secondary'\n >\n {triggerButtonContent}\n </Button>\n )}\n {inline && panel && typeof document !== 'undefined'\n ? createPortal(panel, document.body)\n : panel}\n </div>\n );\n};\n"],"names":["Popover","children","inline","position","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelRef","panelId","useId","triggerRef","isOpen","setIsOpen","useState","opensAbove","setOpensAbove","preferredHorizontalPlacement","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","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/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index10.css');const e=require("react/jsx-runtime"),i=require("../../classix-5H4IWnMA.cjs"),c=require("../button/index.cjs"),a=require("../icon/index.cjs"),l=require("../aside/index.cjs"),_=require("../branding/index.cjs"),d=require("../figure/index.cjs"),m=require("../nav/index.cjs"),u="_portal_115mr_39",g="_content_115mr_267",p="_toggle_115mr_274",x="_open_115mr_338",n={portal:u,content:g,toggle:p,open:x},j=({children:t,portals:o,open:r,setOpen:s})=>e.jsxs(l.Aside,{className:i.t(n.portal,r&&n.open),sticky:!0,"data-component":"portal",children:[e.jsx(c.Button,{className:n.toggle,onClick:()=>s(!r),variant:"tertiary",children:e.jsx(a.Icon,{name:"sidebar"})}),e.jsx(d.Figure,{children:e.jsx(_.Branding,{name:"logo",size:48,variant:"white"})}),e.jsxs("div",{className:n.content,children:[o&&e.jsx(m.Nav,{horizontal:!0,children:o}),t&&t]})]});exports.Portal=j;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { t as
|
|
1
|
+
import { jsxs as m, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { t as a } from "../../classix-DG18itHa.js";
|
|
3
3
|
import { Button as c } from "../button/index.js";
|
|
4
4
|
import { Icon as l } from "../icon/index.js";
|
|
5
5
|
import { Aside as s } from "../aside/index.js";
|
|
6
6
|
import { Branding as p } from "../branding/index.js";
|
|
7
|
-
import { Figure as
|
|
8
|
-
import { Nav as
|
|
9
|
-
import '../../assets/
|
|
10
|
-
portal:
|
|
11
|
-
content:
|
|
12
|
-
toggle:
|
|
13
|
-
open:
|
|
7
|
+
import { Figure as _ } from "../figure/index.js";
|
|
8
|
+
import { Nav as g } from "../nav/index.js";
|
|
9
|
+
import '../../assets/index10.css';const d = "_portal_115mr_39", f = "_content_115mr_267", h = "_toggle_115mr_274", u = "_open_115mr_338", t = {
|
|
10
|
+
portal: d,
|
|
11
|
+
content: f,
|
|
12
|
+
toggle: h,
|
|
13
|
+
open: u
|
|
14
14
|
}, b = ({
|
|
15
15
|
children: r,
|
|
16
|
-
portals:
|
|
17
|
-
open:
|
|
18
|
-
setOpen:
|
|
19
|
-
}) => /* @__PURE__ */
|
|
20
|
-
/* @__PURE__ */ o(c, { className: t.toggle, onClick: () =>
|
|
21
|
-
/* @__PURE__ */ o(
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
-
|
|
16
|
+
portals: n,
|
|
17
|
+
open: e,
|
|
18
|
+
setOpen: i
|
|
19
|
+
}) => /* @__PURE__ */ m(s, { className: a(t.portal, e && t.open), sticky: !0, "data-component": "portal", children: [
|
|
20
|
+
/* @__PURE__ */ o(c, { className: t.toggle, onClick: () => i(!e), variant: "tertiary", children: /* @__PURE__ */ o(l, { name: "sidebar" }) }),
|
|
21
|
+
/* @__PURE__ */ o(_, { children: /* @__PURE__ */ o(p, { name: "logo", size: 48, variant: "white" }) }),
|
|
22
|
+
/* @__PURE__ */ m("div", { className: t.content, children: [
|
|
23
|
+
n && /* @__PURE__ */ o(g, { horizontal: !0, children: n }),
|
|
24
24
|
r && r
|
|
25
25
|
] })
|
|
26
26
|
] });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index9.css');const n=require("react/jsx-runtime"),p=require("react"),h=require("../button/index.cjs"),N=require("../checkbox/index.cjs"),M=require("../chip/index.cjs"),w=require("../controls/index.cjs"),C=require("../dialog/index.cjs"),I=require("../../index-D9Hq7ewF.cjs"),O="_search_1tuej_3",R="_controls_1tuej_15",B="_chips_1tuej_29",t={search:O,controls:R,chips:B,"dialog-content":"_dialog-content_1tuej_36","filter-groups":"_filter-groups_1tuej_45","filter-group":"_filter-group_1tuej_45"},S=({closeLabel:j="Close",filterButtonLabel:_="Filters",filterDialogTitle:m="Filters",filterGroups:c=[],onChange:b,onSelectedFiltersChange:o,removeFilterLabel:g=i=>`Remove ${i.label} filter`,resetLabel:v="Reset",searchLabel:y="Search",searchPlaceholder:f="Search",selectedFilters:l=[],value:k=""})=>{const i=p.useId(),[x,r]=p.useState(!1),q=p.useMemo(()=>new Map(c.flatMap(e=>e.options).map(e=>[e.value,e])),[c]),u=l.flatMap(e=>{const s=q.get(e);return s?[s]:[]}),d=(e,s)=>{o&&o(s?[...new Set([...l,e])]:l.filter(a=>a!==e))};return n.jsxs("div",{className:t.search,"data-component":"search",children:[n.jsxs("div",{className:t.controls,children:[n.jsx(I.Input,{"aria-label":y,icon:"search",onChange:e=>b(e.target.value),placeholder:f,type:"search",value:k}),c.length>0&&n.jsx(h.Button,{"aria-expanded":x,"aria-haspopup":"dialog",badge:u.length,icon:"funnel",onClick:()=>r(!0),variant:"tertiary",children:_})]}),u.length>0&&n.jsxs("div",{"aria-label":_,className:t.chips,children:[u.map(e=>n.jsx(M.Chip,{accessibleLabel:g(e),label:e.label,onClick:()=>d(e.value,!1),onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d(e.value,!1))},role:"button"},e.value)),n.jsx(h.Button,{onClick:()=>o==null?void 0:o([]),variant:"tertiary",children:v})]}),x&&n.jsx(C.Dialog,{"aria-labelledby":i,onKeyDown:e=>{e.key==="Escape"&&r(!1)},open:!0,setOpen:r,children:n.jsxs("div",{className:t["dialog-content"],children:[n.jsx("h2",{id:i,children:m}),n.jsx("div",{className:t["filter-groups"],children:c.map((e,s)=>n.jsxs("fieldset",{className:t["filter-group"],children:[e.label&&n.jsx("legend",{children:e.label}),e.options.map(a=>n.jsx(N.Checkbox,{checked:l.includes(a.value),label:a.label,onChange:D=>d(a.value,D.target.checked)},a.value))]},e.label??s))}),n.jsx(w.Controls,{children:n.jsx(h.Button,{onClick:()=>r(!1),children:j})})]})})]})};exports.Search=S;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useId as
|
|
1
|
+
import { jsxs as n, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { useId as I, useState as w, useMemo as C } from "react";
|
|
3
3
|
import { Button as m } from "../button/index.js";
|
|
4
|
-
import { Checkbox as
|
|
5
|
-
import { Chip as
|
|
4
|
+
import { Checkbox as M } from "../checkbox/index.js";
|
|
5
|
+
import { Chip as O } from "../chip/index.js";
|
|
6
6
|
import { Controls as E } from "../controls/index.js";
|
|
7
7
|
import { Dialog as K } from "../dialog/index.js";
|
|
8
|
-
import { I as R } from "../../index-
|
|
9
|
-
import '../../assets/
|
|
8
|
+
import { I as R } from "../../index-D4LZQ-JF.js";
|
|
9
|
+
import '../../assets/index9.css';const B = "_search_1tuej_3", T = "_controls_1tuej_15", $ = "_chips_1tuej_29", r = {
|
|
10
10
|
search: B,
|
|
11
11
|
controls: T,
|
|
12
12
|
chips: $,
|
|
13
|
-
"dialog-content": "_dialog-
|
|
14
|
-
"filter-groups": "_filter-
|
|
15
|
-
"filter-group": "_filter-
|
|
13
|
+
"dialog-content": "_dialog-content_1tuej_36",
|
|
14
|
+
"filter-groups": "_filter-groups_1tuej_45",
|
|
15
|
+
"filter-group": "_filter-group_1tuej_45"
|
|
16
16
|
}, S = ({
|
|
17
17
|
closeLabel: _ = "Close",
|
|
18
18
|
filterButtonLabel: u = "Filters",
|
|
19
19
|
filterDialogTitle: b = "Filters",
|
|
20
|
-
filterGroups:
|
|
20
|
+
filterGroups: c = [],
|
|
21
21
|
onChange: v,
|
|
22
|
-
onSelectedFiltersChange:
|
|
23
|
-
removeFilterLabel: g = (
|
|
22
|
+
onSelectedFiltersChange: t,
|
|
23
|
+
removeFilterLabel: g = (s) => `Remove ${s.label} filter`,
|
|
24
24
|
resetLabel: y = "Reset",
|
|
25
25
|
searchLabel: k = "Search",
|
|
26
|
-
searchPlaceholder:
|
|
27
|
-
selectedFilters:
|
|
28
|
-
value:
|
|
26
|
+
searchPlaceholder: j = "Search",
|
|
27
|
+
selectedFilters: i = [],
|
|
28
|
+
value: D = ""
|
|
29
29
|
}) => {
|
|
30
|
-
const
|
|
31
|
-
const l =
|
|
30
|
+
const s = I(), [f, p] = w(!1), N = C(() => new Map(c.flatMap((e) => e.options).map((e) => [e.value, e])), [c]), h = i.flatMap((e) => {
|
|
31
|
+
const l = N.get(e);
|
|
32
32
|
return l ? [l] : [];
|
|
33
|
-
}), d = (
|
|
34
|
-
|
|
33
|
+
}), d = (e, l) => {
|
|
34
|
+
t && t(l ? [.../* @__PURE__ */ new Set([...i, e])] : i.filter((o) => o !== e));
|
|
35
35
|
};
|
|
36
|
-
return /* @__PURE__ */
|
|
37
|
-
/* @__PURE__ */
|
|
38
|
-
/* @__PURE__ */
|
|
39
|
-
|
|
36
|
+
return /* @__PURE__ */ n("div", { className: r.search, "data-component": "search", children: [
|
|
37
|
+
/* @__PURE__ */ n("div", { className: r.controls, children: [
|
|
38
|
+
/* @__PURE__ */ a(R, { "aria-label": k, icon: "search", onChange: (e) => v(e.target.value), placeholder: j, type: "search", value: D }),
|
|
39
|
+
c.length > 0 && /* @__PURE__ */ a(m, { "aria-expanded": f, "aria-haspopup": "dialog", badge: h.length, icon: "funnel", onClick: () => p(!0), variant: "tertiary", children: u })
|
|
40
40
|
] }),
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
(l.key === "Enter" || l.key === " ") && (l.preventDefault(), d(
|
|
44
|
-
}, role: "button" },
|
|
45
|
-
/* @__PURE__ */
|
|
41
|
+
h.length > 0 && /* @__PURE__ */ n("div", { "aria-label": u, className: r.chips, children: [
|
|
42
|
+
h.map((e) => /* @__PURE__ */ a(O, { accessibleLabel: g(e), label: e.label, onClick: () => d(e.value, !1), onKeyDown: (l) => {
|
|
43
|
+
(l.key === "Enter" || l.key === " ") && (l.preventDefault(), d(e.value, !1));
|
|
44
|
+
}, role: "button" }, e.value)),
|
|
45
|
+
/* @__PURE__ */ a(m, { onClick: () => t == null ? void 0 : t([]), variant: "tertiary", children: y })
|
|
46
46
|
] }),
|
|
47
|
-
f && /* @__PURE__ */
|
|
48
|
-
|
|
49
|
-
}, open: !0, setOpen:
|
|
50
|
-
/* @__PURE__ */
|
|
51
|
-
/* @__PURE__ */
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
] },
|
|
55
|
-
/* @__PURE__ */
|
|
47
|
+
f && /* @__PURE__ */ a(K, { "aria-labelledby": s, onKeyDown: (e) => {
|
|
48
|
+
e.key === "Escape" && p(!1);
|
|
49
|
+
}, open: !0, setOpen: p, children: /* @__PURE__ */ n("div", { className: r["dialog-content"], children: [
|
|
50
|
+
/* @__PURE__ */ a("h2", { id: s, children: b }),
|
|
51
|
+
/* @__PURE__ */ a("div", { className: r["filter-groups"], children: c.map((e, l) => /* @__PURE__ */ n("fieldset", { className: r["filter-group"], children: [
|
|
52
|
+
e.label && /* @__PURE__ */ a("legend", { children: e.label }),
|
|
53
|
+
e.options.map((o) => /* @__PURE__ */ a(M, { checked: i.includes(o.value), label: o.label, onChange: (x) => d(o.value, x.target.checked) }, o.value))
|
|
54
|
+
] }, e.label ?? l)) }),
|
|
55
|
+
/* @__PURE__ */ a(E, { children: /* @__PURE__ */ a(m, { onClick: () => p(!1), children: _ }) })
|
|
56
56
|
] }) })
|
|
57
57
|
] });
|
|
58
58
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../classix-5H4IWnMA.cjs");require("../../icons-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../classix-5H4IWnMA.cjs");require("../../icons-BoBeAmLe.cjs");const e=require("../../index-Ct0mJ-KK.cjs");require("../../use-touched-D_TJ8wDc.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-
|
|
4
|
-
import { S as e } from "../../index-
|
|
3
|
+
import "../../icons-Dhj9mAkR.js";
|
|
4
|
+
import { S as e } from "../../index-uQRsVtP-.js";
|
|
5
5
|
import "../../use-touched-DXIJVVzz.js";
|
|
6
6
|
export {
|
|
7
7
|
e as Select
|