@alkimi.org/ui-kit 0.9.9 → 0.9.10

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 (91) hide show
  1. package/dist/chunk-2RQVAC3C.mjs +3 -0
  2. package/dist/{chunk-X3QDPETP.mjs.map → chunk-2RQVAC3C.mjs.map} +1 -1
  3. package/dist/{chunk-L2WR54R7.mjs → chunk-B4YKLEVL.mjs} +2 -2
  4. package/dist/chunk-B4YKLEVL.mjs.map +1 -0
  5. package/dist/chunk-DP2FXFMQ.mjs +3 -0
  6. package/dist/chunk-DP2FXFMQ.mjs.map +1 -0
  7. package/dist/{chunk-Y5LKHHUX.js → chunk-IFS4OO3L.js} +2 -2
  8. package/dist/{chunk-Y5LKHHUX.js.map → chunk-IFS4OO3L.js.map} +1 -1
  9. package/dist/chunk-IOHKGN45.js +3 -0
  10. package/dist/{chunk-BA7YSYLL.js.map → chunk-IOHKGN45.js.map} +1 -1
  11. package/dist/{chunk-TFNJNZMW.mjs → chunk-IUCIWRTI.mjs} +2 -2
  12. package/dist/{chunk-TFNJNZMW.mjs.map → chunk-IUCIWRTI.mjs.map} +1 -1
  13. package/dist/chunk-JNK2KBEK.mjs +3 -0
  14. package/dist/chunk-JNK2KBEK.mjs.map +1 -0
  15. package/dist/{chunk-CPD4PX64.js → chunk-JVQJZ5HP.js} +2 -2
  16. package/dist/{chunk-CPD4PX64.js.map → chunk-JVQJZ5HP.js.map} +1 -1
  17. package/dist/{chunk-7Z2JFWQY.js → chunk-K5ARCQIP.js} +2 -2
  18. package/dist/{chunk-7Z2JFWQY.js.map → chunk-K5ARCQIP.js.map} +1 -1
  19. package/dist/{chunk-ZUBIKQDO.js → chunk-M2PMK5S2.js} +2 -2
  20. package/dist/{chunk-ZUBIKQDO.js.map → chunk-M2PMK5S2.js.map} +1 -1
  21. package/dist/{chunk-CCNH4HFX.js → chunk-MKLABTST.js} +2 -2
  22. package/dist/{chunk-CCNH4HFX.js.map → chunk-MKLABTST.js.map} +1 -1
  23. package/dist/chunk-N4LDE7DZ.mjs +3 -0
  24. package/dist/chunk-N4LDE7DZ.mjs.map +1 -0
  25. package/dist/chunk-QJ7457IP.js +3 -0
  26. package/dist/chunk-QJ7457IP.js.map +1 -0
  27. package/dist/{chunk-ZJBCOTJL.mjs → chunk-SKA5YFCS.mjs} +2 -2
  28. package/dist/{chunk-ZJBCOTJL.mjs.map → chunk-SKA5YFCS.mjs.map} +1 -1
  29. package/dist/{chunk-4F4J7RIS.js → chunk-SOZAPZ65.js} +2 -2
  30. package/dist/{chunk-4F4J7RIS.js.map → chunk-SOZAPZ65.js.map} +1 -1
  31. package/dist/{chunk-T63HKL4M.js → chunk-SUZ2FZQ2.js} +2 -2
  32. package/dist/{chunk-T63HKL4M.js.map → chunk-SUZ2FZQ2.js.map} +1 -1
  33. package/dist/chunk-TOTBP4CJ.js +3 -0
  34. package/dist/{chunk-HF6H7CTA.js.map → chunk-TOTBP4CJ.js.map} +1 -1
  35. package/dist/chunk-VNPIYQD6.mjs +3 -0
  36. package/dist/chunk-VNPIYQD6.mjs.map +1 -0
  37. package/dist/chunk-ZWYGJJTH.mjs +3 -0
  38. package/dist/chunk-ZWYGJJTH.mjs.map +1 -0
  39. package/dist/{chunk-N43UVAL7.mjs → chunk-ZX7652AR.mjs} +2 -2
  40. package/dist/{chunk-N43UVAL7.mjs.map → chunk-ZX7652AR.mjs.map} +1 -1
  41. package/dist/components/accordion.js +1 -1
  42. package/dist/components/accordion.mjs +1 -1
  43. package/dist/components/breadcrumb.js +1 -1
  44. package/dist/components/breadcrumb.js.map +1 -1
  45. package/dist/components/breadcrumb.mjs +1 -1
  46. package/dist/components/breadcrumb.mjs.map +1 -1
  47. package/dist/components/checkbox.js +1 -1
  48. package/dist/components/checkbox.mjs +1 -1
  49. package/dist/components/combobox.js +1 -1
  50. package/dist/components/combobox.mjs +1 -1
  51. package/dist/components/command.js +1 -1
  52. package/dist/components/command.mjs +1 -1
  53. package/dist/components/dropdown-menu.js +1 -1
  54. package/dist/components/dropdown-menu.mjs +1 -1
  55. package/dist/components/file-upload.js +1 -1
  56. package/dist/components/file-upload.mjs +1 -1
  57. package/dist/components/radio-group.js +1 -1
  58. package/dist/components/radio-group.mjs +1 -1
  59. package/dist/components/switch.js +1 -1
  60. package/dist/components/switch.js.map +1 -1
  61. package/dist/components/switch.mjs +1 -1
  62. package/dist/components/switch.mjs.map +1 -1
  63. package/dist/components/tabs.js +1 -1
  64. package/dist/components/tabs.mjs +1 -1
  65. package/dist/components/toast.js +1 -1
  66. package/dist/components/toast.mjs +1 -1
  67. package/dist/components/tree-select.js +1 -1
  68. package/dist/components/tree-select.mjs +1 -1
  69. package/dist/index.css +1 -1
  70. package/dist/index.css.map +1 -1
  71. package/dist/index.js +1 -1
  72. package/dist/index.mjs +1 -1
  73. package/dist/styles.css +1 -1
  74. package/dist/styles.css.map +1 -1
  75. package/package.json +1 -1
  76. package/dist/chunk-4TH3WPF3.js +0 -3
  77. package/dist/chunk-4TH3WPF3.js.map +0 -1
  78. package/dist/chunk-BA7YSYLL.js +0 -3
  79. package/dist/chunk-HF6H7CTA.js +0 -3
  80. package/dist/chunk-IZE2MHHY.mjs +0 -3
  81. package/dist/chunk-IZE2MHHY.mjs.map +0 -1
  82. package/dist/chunk-L2WR54R7.mjs.map +0 -1
  83. package/dist/chunk-QP4A5SPE.mjs +0 -3
  84. package/dist/chunk-QP4A5SPE.mjs.map +0 -1
  85. package/dist/chunk-QUDNJOXZ.mjs +0 -3
  86. package/dist/chunk-QUDNJOXZ.mjs.map +0 -1
  87. package/dist/chunk-TXOT3G2Z.mjs +0 -3
  88. package/dist/chunk-TXOT3G2Z.mjs.map +0 -1
  89. package/dist/chunk-X3QDPETP.mjs +0 -3
  90. package/dist/chunk-YHYWSBWL.mjs +0 -3
  91. package/dist/chunk-YHYWSBWL.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alkimi.org/ui-kit",
3
- "version": "0.9.9",
3
+ "version": "0.9.10",
4
4
  "packageManager": "pnpm@10.26.0",
5
5
  "description": "A React component library built with shadcn/ui and Tailwind CSS",
6
6
  "main": "./dist/index.js",
@@ -1,3 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
- var _sileo = require('sileo');var _jsxruntime = require('react/jsx-runtime');function p({...t}){return _jsxruntime.jsx.call(void 0, _sileo.Toaster,{options:{fill:"#000000",styles:{title:"text-primary-accent!",description:"text-secondary-text!",badge:"bg-white/20!",button:"bg-white/10!"}},...t})}exports.a = _sileo.sileo; exports.b = p;
3
- //# sourceMappingURL=chunk-4TH3WPF3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["c:\\Users\\Dell\\Documents\\NextJS\\alkimi-ui-kit\\dist\\chunk-4TH3WPF3.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ,8BAA0C,+CAAwC,SAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,6BAAC,cAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,wCAAqB","file":"C:\\Users\\Dell\\Documents\\NextJS\\alkimi-ui-kit\\dist\\chunk-4TH3WPF3.js","sourcesContent":[null]}
@@ -1,3 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
- var _chunkT63HKL4Mjs = require('./chunk-T63HKL4M.js');var _chunk5ESMRNR3js = require('./chunk-5ESMRNR3.js');var _chunkVBARF35Njs = require('./chunk-VBARF35N.js');var _react = require('react'); var i = _interopRequireWildcard(_react);var _lucidereact = require('lucide-react');var _jsxruntime = require('react/jsx-runtime');function M(e){let n=[e.value];if(e.children)for(let a of e.children)n.push(...M(a));return n}function $(e,n){if(!e.children||e.children.length===0)return n.has(e.value)?"checked":"unchecked";let a=M(e),r=a.filter(l=>n.has(l)).length;return r===0?"unchecked":r===a.length?"checked":"indeterminate"}function J(e,n){let a=n.toLowerCase().trim();if(!a)return e;let r=[];for(let l of e){let f=l.label.toLowerCase().includes(a);if(l.children&&l.children.length>0){let h=J(l.children,n);f?r.push(l):h&&h.length>0&&r.push({...l,children:h})}else f&&r.push(l)}return r.length>0?r:null}function le(e,n){let a=n.toLowerCase().trim(),r=new Set;function l(f){let h=!1;for(let g of f){let w=g.label.toLowerCase().includes(a),S=!1;g.children&&(S=l(g.children)),(w||S)&&(r.add(g.value),h=!0)}return h}return l(e),r}function N(e,n){for(let a of e){if(a.value===n)return a;if(a.children){let r=N(a.children,n);if(r)return r}}}function Q(e){let n=new Set;for(let a of e)if(a.children&&a.children.length>0){n.add(a.value);for(let r of Q(a.children))n.add(r)}return n}function oe(e,n){if(!n)return e;let a=n.toLowerCase().trim();if(!a)return e;let r=e.toLowerCase().indexOf(a);return r===-1?e:_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[e.slice(0,r),_jsxruntime.jsx.call(void 0, "span",{className:"font-semibold underline",children:e.slice(r,r+a.length)}),e.slice(r+a.length)]})}function W({node:e,depth:n,multiple:a,selectedSet:r,expandedValues:l,focusedValue:f,onToggleExpand:h,onSelect:g,onFocus:w,searchTerm:S}){let V=e.children&&e.children.length>0,y=l.has(e.value),b=a?$(e,r):r.has(e.value)?"checked":"unchecked",A=n*20;return _jsxruntime.jsxs.call(void 0, "div",{role:"treeitem","aria-expanded":V?y:void 0,"aria-selected":b==="checked",children:[_jsxruntime.jsxs.call(void 0, "div",{className:_chunkVBARF35Njs.a.call(void 0, "relative flex items-center gap-2 rounded-sm px-2 py-1.5 my-0.5 text-sm cursor-pointer select-none outline-none","hover:bg-muted",b==="checked"&&!a&&"bg-muted"),style:{paddingLeft:`${8+A}px`},onClick:()=>g(e),onFocus:()=>w(e.value),"data-tree-value":e.value,tabIndex:f===e.value?0:-1,children:[V?_jsxruntime.jsx.call(void 0, "button",{type:"button",className:"h-4 w-4 shrink-0 flex items-center justify-center rounded-sm hover:bg-secondary",onClick:m=>{m.stopPropagation(),h(e.value)},"aria-label":y?`Collapse ${e.label}`:`Expand ${e.label}`,tabIndex:-1,children:y?_jsxruntime.jsx.call(void 0, _lucidereact.ChevronDown,{className:"h-3.5 w-3.5"}):_jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight,{className:"h-3.5 w-3.5"})}):_jsxruntime.jsx.call(void 0, "span",{className:"h-4 w-4 shrink-0"}),a?_jsxruntime.jsx.call(void 0, _chunkT63HKL4Mjs.a,{checked:b==="checked"?!0:b==="indeterminate"?"indeterminate":!1,onCheckedChange:()=>g(e),onClick:m=>m.stopPropagation(),className:"shrink-0","aria-label":e.label}):_jsxruntime.jsx.call(void 0, _lucidereact.Check,{className:_chunkVBARF35Njs.a.call(void 0, "h-4 w-4 shrink-0",b==="checked"?"opacity-100":"opacity-0")}),_jsxruntime.jsx.call(void 0, "span",{className:"truncate",children:oe(e.label,S)})]}),V&&y&&_jsxruntime.jsx.call(void 0, "div",{role:"group",children:e.children.map(m=>_jsxruntime.jsx.call(void 0, W,{node:m,depth:n+1,multiple:a,selectedSet:r,expandedValues:l,focusedValue:f,onToggleExpand:h,onSelect:g,onFocus:w,searchTerm:S},m.value))})]})}function ge({nodes:e,value:n,onValueChange:a,multiple:r=!1,values:l=[],onValuesChange:f,placeholder:h="Select...",searchPlaceholder:g="Search...",emptyMessage:w="No results found.",disabled:S=!1,className:V,error:y=!1,defaultExpandedValues:b,expandAll:A=!1}){let[m,B]=i.useState(!1),[v,K]=i.useState(""),[p,k]=i.useState(null),[D,L]=i.useState(()=>A?Q(e):b?new Set(b):new Set),P=i.useRef(null),I=i.useRef(null),C=i.useMemo(()=>new Set(r?l:n?[n]:[]),[r,l,n]),F=i.useMemo(()=>v?J(e,v):e,[e,v]);i.useEffect(()=>{if(v){P.current||(P.current=new Set(D));let t=le(e,v);L(t)}else P.current&&(L(P.current),P.current=null)},[v,e]);let Y=i.useCallback(t=>{B(t),t||(K(""),k(null))},[]),T=i.useCallback(t=>{L(s=>{let d=new Set(s);return d.has(t)?d.delete(t):d.add(t),d})},[]),H=i.useCallback(t=>{if(r){let s=M(t),d=$(t,C),c;if(d==="checked"){let u=new Set(s);c=l.filter(R=>!u.has(R))}else{let u=s.filter(R=>!C.has(R));c=[...l,...u]}_optionalChain([f, 'optionalCall', _2 => _2(c)])}else{if(t.children&&t.children.length>0){T(t.value);return}let d=t.value===n?"":t.value;_optionalChain([a, 'optionalCall', _3 => _3(d)]),B(!1)}},[r,l,n,C,f,a,T]),Z=i.useCallback((t,s)=>{s.preventDefault(),s.stopPropagation();let d=N(e,t);if(d){let c=new Set(M(d)),u=l.filter(R=>!c.has(R));_optionalChain([f, 'optionalCall', _4 => _4(u)])}},[e,l,f]),q=i.useMemo(()=>{if(!r)return[];let t=[];function s(d){for(let c of d){let u=$(c,C);u==="checked"?t.push(c.value):u==="indeterminate"&&c.children&&s(c.children)}}return s(e),t},[e,C,r]),O=i.useCallback(()=>I.current?Array.from(I.current.querySelectorAll("[data-tree-value]")):[],[]),_=i.useCallback(t=>{let s=O(),d=s.findIndex(c=>c.dataset.treeValue===p);switch(t.key){case"ArrowDown":{t.preventDefault();let c=Math.min(d+1,s.length-1),u=_optionalChain([s, 'access', _5 => _5[c], 'optionalAccess', _6 => _6.dataset, 'access', _7 => _7.treeValue]);u&&(k(u),_optionalChain([s, 'access', _8 => _8[c], 'optionalAccess', _9 => _9.focus, 'call', _10 => _10()]));break}case"ArrowUp":{t.preventDefault();let c=Math.max(d-1,0),u=_optionalChain([s, 'access', _11 => _11[c], 'optionalAccess', _12 => _12.dataset, 'access', _13 => _13.treeValue]);u&&(k(u),_optionalChain([s, 'access', _14 => _14[c], 'optionalAccess', _15 => _15.focus, 'call', _16 => _16()]));break}case"ArrowRight":{if(t.preventDefault(),p){let c=N(e,p);if(_optionalChain([c, 'optionalAccess', _17 => _17.children, 'optionalAccess', _18 => _18.length]))if(!D.has(p))T(p);else{let u=c.children[0].value;k(u),requestAnimationFrame(()=>{_optionalChain([O, 'call', _19 => _19(), 'access', _20 => _20.find, 'call', _21 => _21(re=>re.dataset.treeValue===u), 'optionalAccess', _22 => _22.focus, 'call', _23 => _23()])})}}break}case"ArrowLeft":{t.preventDefault(),p&&D.has(p)&&T(p);break}case"Enter":case" ":{if(t.preventDefault(),p){let c=N(e,p);c&&H(c)}break}case"Home":{t.preventDefault();let c=_optionalChain([s, 'access', _24 => _24[0], 'optionalAccess', _25 => _25.dataset, 'access', _26 => _26.treeValue]);c&&(k(c),_optionalChain([s, 'access', _27 => _27[0], 'optionalAccess', _28 => _28.focus, 'call', _29 => _29()]));break}case"End":{t.preventDefault();let c=_optionalChain([s, 'access', _30 => _30[s.length-1], 'optionalAccess', _31 => _31.dataset, 'access', _32 => _32.treeValue]);c&&(k(c),_optionalChain([s, 'access', _33 => _33[s.length-1], 'optionalAccess', _34 => _34.focus, 'call', _35 => _35()]));break}}},[p,e,D,O,T,H]),ee=()=>r?l.length===0?h:l.length===1?_nullishCoalesce(_optionalChain([N, 'call', _36 => _36(e,l[0]), 'optionalAccess', _37 => _37.label]), () => (l[0])):`${l.length} selected`:n?_nullishCoalesce(_optionalChain([N, 'call', _38 => _38(e,n), 'optionalAccess', _39 => _39.label]), () => (n)):h,te=()=>{if(!r||q.length===0)return null;let t=q.map(s=>N(e,s)).filter(Boolean);return _jsxruntime.jsx.call(void 0, "div",{className:"max-h-[100px] overflow-y-auto px-2 py-1.5 border-b border-border",children:_jsxruntime.jsx.call(void 0, "div",{className:"flex flex-wrap gap-1",children:t.map(s=>_jsxruntime.jsxs.call(void 0, "div",{className:"inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-0.5 text-xs",children:[_jsxruntime.jsx.call(void 0, "span",{className:"truncate max-w-[120px]",children:s.label}),_jsxruntime.jsx.call(void 0, _lucidereact.X,{className:"h-3 w-3 cursor-pointer shrink-0",onClick:d=>Z(s.value,d),"aria-label":`Remove ${s.label}`})]},s.value))})})};return _jsxruntime.jsxs.call(void 0, _chunk5ESMRNR3js.a,{open:m,onOpenChange:Y,children:[_jsxruntime.jsx.call(void 0, _chunk5ESMRNR3js.b,{asChild:!0,children:_jsxruntime.jsxs.call(void 0, "button",{type:"button",role:"combobox","aria-expanded":m,"aria-haspopup":"tree",disabled:S,className:_chunkVBARF35Njs.a.call(void 0, "cursor-pointer flex my-2 h-9 w-full items-center justify-between rounded-3xl border border-border bg-background hover:bg-secondary px-4 py-2 text-sm text-primary-accent ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",!n&&!l.length&&"text-secondary-text",y&&"border-destructive-foreground focus-visible:ring-destructive-foreground",V),children:[_jsxruntime.jsx.call(void 0, "span",{className:"truncate",children:ee()}),_jsxruntime.jsx.call(void 0, _lucidereact.ChevronDown,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),_jsxruntime.jsxs.call(void 0, _chunk5ESMRNR3js.c,{className:"p-0",align:"start",style:{width:"var(--radix-popover-trigger-width)"},children:[_jsxruntime.jsxs.call(void 0, "div",{className:"flex items-center border-b px-3",children:[_jsxruntime.jsx.call(void 0, _lucidereact.Search,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),_jsxruntime.jsx.call(void 0, "input",{value:v,onChange:t=>K(t.target.value),placeholder:g,className:"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50","aria-label":"Search tree"})]}),te(),_jsxruntime.jsx.call(void 0, "div",{className:"max-h-[300px] overflow-y-auto",children:F&&F.length>0?_jsxruntime.jsx.call(void 0, "div",{ref:I,role:"tree","aria-label":"Options",className:"p-1",onKeyDown:_,children:F.map(t=>_jsxruntime.jsx.call(void 0, W,{node:t,depth:0,multiple:r,selectedSet:C,expandedValues:D,focusedValue:p,onToggleExpand:T,onSelect:H,onFocus:k,searchTerm:v},t.value))}):_jsxruntime.jsx.call(void 0, "div",{className:"py-6 text-center text-sm text-muted-foreground",children:w})})]})]})}exports.a = ge;
3
- //# sourceMappingURL=chunk-BA7YSYLL.js.map
@@ -1,3 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }"use client";
2
- var _chunkVBARF35Njs = require('./chunk-VBARF35N.js');var _react = require('react'); var d = _interopRequireWildcard(_react);var _reactdropdownmenu = require('@radix-ui/react-dropdown-menu'); var e = _interopRequireWildcard(_reactdropdownmenu);var _lucidereact = require('lucide-react');var _jsxruntime = require('react/jsx-runtime');var g=e.Root,N= exports.b =e.Trigger,x= exports.c =e.Group,C= exports.d =e.Portal,I= exports.e =e.Sub,S= exports.f =e.RadioGroup,c= exports.g =d.forwardRef(({className:o,inset:t,children:n,...r},p)=>_jsxruntime.jsxs.call(void 0, e.SubTrigger,{ref:p,className:_chunkVBARF35Njs.a.call(void 0, "flex cursor-default select-none items-center rounded-[12px] px-2 py-1.5 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-[state=open]:bg-secondary",t&&"pl-8",o),...r,children:[n,_jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight,{className:"ml-auto h-4 w-4"})]}));c.displayName=e.SubTrigger.displayName;var f=d.forwardRef(({className:o,...t},n)=>_jsxruntime.jsx.call(void 0, e.SubContent,{ref:n,className:_chunkVBARF35Njs.a.call(void 0, "z-50 min-w-32 overflow-hidden rounded-md border bg-dropdown-menu p-1 text-dropdown-menu-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",o),...t}));f.displayName=e.SubContent.displayName;var w=d.forwardRef(({className:o,sideOffset:t=4,...n},r)=>_jsxruntime.jsx.call(void 0, e.Portal,{children:_jsxruntime.jsx.call(void 0, e.Content,{ref:r,sideOffset:t,className:_chunkVBARF35Njs.a.call(void 0, "z-50 min-w-32 overflow-hidden rounded-xl border border-border bg-dropdown-menu p-1 text-dropdown-menu-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",o),...n})}));w.displayName=e.Content.displayName;var M=d.forwardRef(({className:o,inset:t,...n},r)=>_jsxruntime.jsx.call(void 0, e.Item,{ref:r,className:_chunkVBARF35Njs.a.call(void 0, "relative flex cursor-pointer select-none items-center rounded-[12px] p-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50",t&&"pl-8",o),...n}));M.displayName=e.Item.displayName;var D=d.forwardRef(({className:o,children:t,checked:n,...r},p)=>_jsxruntime.jsxs.call(void 0, e.CheckboxItem,{ref:p,className:_chunkVBARF35Njs.a.call(void 0, "relative flex cursor-default select-none items-center rounded-[12px] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50",o),checked:n,...r,children:[_jsxruntime.jsx.call(void 0, "span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:_jsxruntime.jsx.call(void 0, e.ItemIndicator,{children:_jsxruntime.jsx.call(void 0, _lucidereact.Check,{className:"h-4 w-4"})})}),t]}));D.displayName=e.CheckboxItem.displayName;var v=d.forwardRef(({className:o,children:t,...n},r)=>_jsxruntime.jsxs.call(void 0, e.RadioItem,{ref:r,className:_chunkVBARF35Njs.a.call(void 0, "relative flex cursor-default select-none items-center rounded-[12px] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50",o),...n,children:[_jsxruntime.jsx.call(void 0, "span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:_jsxruntime.jsx.call(void 0, e.ItemIndicator,{children:_jsxruntime.jsx.call(void 0, _lucidereact.Circle,{className:"h-2 w-2 fill-current"})})}),t]}));v.displayName=e.RadioItem.displayName;var P=d.forwardRef(({className:o,inset:t,...n},r)=>_jsxruntime.jsx.call(void 0, e.Label,{ref:r,className:_chunkVBARF35Njs.a.call(void 0, "px-2 py-1.5 text-sm font-semibold",t&&"pl-8",o),...n}));P.displayName=e.Label.displayName;var R=d.forwardRef(({className:o,...t},n)=>_jsxruntime.jsx.call(void 0, e.Separator,{ref:n,className:_chunkVBARF35Njs.a.call(void 0, "-mx-1 my-1 h-px bg-muted",o),...t}));R.displayName=e.Separator.displayName;var b=({className:o,...t})=>_jsxruntime.jsx.call(void 0, "span",{className:_chunkVBARF35Njs.a.call(void 0, "ml-auto text-xs tracking-widest opacity-60",o),...t});b.displayName="DropdownMenuShortcut";exports.a = g; exports.b = N; exports.c = x; exports.d = C; exports.e = I; exports.f = S; exports.g = c; exports.h = f; exports.i = w; exports.j = M; exports.k = D; exports.l = v; exports.m = P; exports.n = R; exports.o = b;
3
- //# sourceMappingURL=chunk-HF6H7CTA.js.map
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as N}from"./chunk-KBEHHIN6.mjs";import{a as p}from"./chunk-AJM7GGVC.mjs";import*as n from"react";import{Upload as T,X as I,File as B}from"lucide-react";import{jsx as r,jsxs as a}from"react/jsx-runtime";var H=n.forwardRef(({accept:o,maxSize:s,multiple:f=!1,onFilesChange:m,error:h,disabled:l,className:D,description:g},F)=>{let[y,d]=n.useState(!1),[i,v]=n.useState([]),c=n.useRef(null),R=e=>{e.preventDefault(),e.stopPropagation(),l||d(!0)},C=e=>{e.preventDefault(),e.stopPropagation(),d(!1)},E=e=>{e.preventDefault(),e.stopPropagation()},U=e=>!(s&&e.size>s),x=e=>{if(!e)return;let t=Array.from(e).filter(U),u=f?[...i,...t]:t.slice(0,1);v(u),m?.(u)},k=e=>{e.preventDefault(),e.stopPropagation(),d(!1),!l&&x(e.dataTransfer.files)},w=()=>{l||c.current?.click()},L=e=>{x(e.target.files),c.current&&(c.current.value="")},M=e=>{let t=i.filter((u,$)=>$!==e);v(t),m?.(t)},b=e=>e<1024?`${e} B`:e<1024*1024?`${Math.round(e/1024)} KB`:`${Math.round(e/(1024*1024))} MB`,P=e=>e.split(",").map(t=>t.trim()).map(t=>t.includes("/*")?t.replace("/*","").toUpperCase():t.startsWith(".")?t.slice(1).toUpperCase():t.includes("/")?t.split("/")[1].toUpperCase():t.toUpperCase());return a("div",{ref:F,className:p("w-full",D),children:[a("div",{onClick:w,onDragEnter:R,onDragLeave:C,onDragOver:E,onDrop:k,className:p("flex my-2 flex-col items-center justify-center gap-3 rounded-lg border border-border bg-background px-6 py-4 text-center transition-all cursor-pointer",y&&"bg-secondary",h?"border-destructive-foreground":"border-border hover:bg-secondary",l&&"cursor-not-allowed opacity-50"),children:[r("span",{className:N({variant:"outline",size:"icon"}),children:r(T,{size:16,className:p("text-primary-accent")})}),a("div",{className:"flex flex-col gap-1",children:[a("p",{className:"text-sm text-secondary-text",children:[r("span",{className:"text-primary-accent",children:"Click to upload"})," or drag and drop"]}),(o||s)&&a("p",{className:"text-xs text-secondary-text",children:[o&&P(o).join(", "),o&&s&&" ",s&&`up to ${b(s)}`]}),g&&r("p",{className:"text-xs text-secondary-text",children:g})]})]}),r("input",{ref:c,type:"file",accept:o,multiple:f,onChange:L,disabled:l,className:"hidden"}),i.length>0&&r("div",{className:"mt-3 space-y-2",children:i.map((e,t)=>a("div",{className:"flex items-center justify-between rounded-2xl border border-border bg-background px-4 py-2",children:[a("div",{className:"flex items-center gap-3",children:[r(B,{className:"h-5 w-5 text-secondary-text"}),a("div",{className:"flex flex-col",children:[r("span",{className:"text-sm text-primary-accent truncate max-w-[200px]",children:e.name}),r("span",{className:"text-xs text-secondary-text",children:b(e.size)})]})]}),r("button",{type:"button",onClick:()=>M(t),className:"rounded-full p-1 hover:bg-secondary transition-colors",children:r(I,{className:"h-4 w-4 text-secondary-text"})})]},`${e.name}-${t}`))})]})});H.displayName="FileUpload";export{H as a};
3
- //# sourceMappingURL=chunk-IZE2MHHY.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/file-upload.tsx"],"sourcesContent":["import * as React from \"react\"\r\nimport { Upload, X, File } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { buttonVariants } from \"./button\"\r\n\r\nexport interface FileUploadProps {\r\n /** Accepted file formats (e.g., \".png,.jpg,.pdf\" or \"image/*\") */\r\n accept?: string\r\n /** Maximum file size in bytes */\r\n maxSize?: number\r\n /** Allow multiple files */\r\n multiple?: boolean\r\n /** Callback when files are selected */\r\n onFilesChange?: (files: File[]) => void\r\n /** Error state */\r\n error?: boolean\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Placeholder text */\r\n placeholder?: string\r\n /** Description text (e.g., \"PNG, JPG up to 10MB\") */\r\n description?: string\r\n}\r\n\r\nconst FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\r\n (\r\n {\r\n accept,\r\n maxSize,\r\n multiple = false,\r\n onFilesChange,\r\n error,\r\n disabled,\r\n className,\r\n description,\r\n },\r\n ref\r\n ) => {\r\n const [isDragging, setIsDragging] = React.useState(false)\r\n const [files, setFiles] = React.useState<File[]>([])\r\n const inputRef = React.useRef<HTMLInputElement>(null)\r\n\r\n const handleDragEnter = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n if (!disabled) setIsDragging(true)\r\n }\r\n\r\n const handleDragLeave = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n setIsDragging(false)\r\n }\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n\r\n const validateFile = (file: File): boolean => {\r\n if (maxSize && file.size > maxSize) {\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n const handleFiles = (newFiles: FileList | null) => {\r\n if (!newFiles) return\r\n\r\n const validFiles = Array.from(newFiles).filter(validateFile)\r\n const updatedFiles = multiple\r\n ? [...files, ...validFiles]\r\n : validFiles.slice(0, 1)\r\n\r\n setFiles(updatedFiles)\r\n onFilesChange?.(updatedFiles)\r\n }\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n setIsDragging(false)\r\n\r\n if (disabled) return\r\n handleFiles(e.dataTransfer.files)\r\n }\r\n\r\n const handleClick = () => {\r\n if (!disabled) inputRef.current?.click()\r\n }\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n handleFiles(e.target.files)\r\n if (inputRef.current) inputRef.current.value = \"\"\r\n }\r\n\r\n const removeFile = (index: number) => {\r\n const updatedFiles = files.filter((_, i) => i !== index)\r\n setFiles(updatedFiles)\r\n onFilesChange?.(updatedFiles)\r\n }\r\n\r\n const formatFileSize = (bytes: number): string => {\r\n if (bytes < 1024) return `${bytes} B`\r\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`\r\n return `${Math.round(bytes / (1024 * 1024))} MB`\r\n }\r\n\r\n const formatAcceptedTypes = (acceptStr: string): string[] => {\r\n return acceptStr\r\n .split(\",\")\r\n .map((type) => type.trim())\r\n .map((type) => {\r\n // Handle wildcards like \"image/*\"\r\n if (type.includes(\"/*\")) {\r\n return type.replace(\"/*\", \"\").toUpperCase()\r\n }\r\n // Handle extensions like \".png\"\r\n if (type.startsWith(\".\")) {\r\n return type.slice(1).toUpperCase()\r\n }\r\n // Handle MIME types like \"image/png\"\r\n if (type.includes(\"/\")) {\r\n return type.split(\"/\")[1].toUpperCase()\r\n }\r\n return type.toUpperCase()\r\n })\r\n }\r\n\r\n return (\r\n <div ref={ref} className={cn(\"w-full\", className)}>\r\n <div\r\n onClick={handleClick}\r\n onDragEnter={handleDragEnter}\r\n onDragLeave={handleDragLeave}\r\n onDragOver={handleDragOver}\r\n onDrop={handleDrop}\r\n className={cn(\r\n \"flex my-2 flex-col items-center justify-center gap-3 rounded-lg border border-border bg-background px-6 py-4 text-center transition-all cursor-pointer\",\r\n isDragging && \"bg-secondary\",\r\n error\r\n ? \"border-destructive-foreground\"\r\n : \"border-border hover:bg-secondary\",\r\n disabled && \"cursor-not-allowed opacity-50\"\r\n )}\r\n >\r\n <span\r\n className={buttonVariants({\r\n variant: \"outline\",\r\n size: \"icon\",\r\n })}\r\n >\r\n <Upload size={16} className={cn(\"text-primary-accent\")} />\r\n </span>\r\n\r\n <div className=\"flex flex-col gap-1\">\r\n <p className=\"text-sm text-secondary-text\">\r\n <span className=\"text-primary-accent\">Click to upload</span> or\r\n drag and drop\r\n </p>\r\n {(accept || maxSize) && (\r\n <p className=\"text-xs text-secondary-text\">\r\n {accept && formatAcceptedTypes(accept).join(\", \")}\r\n {accept && maxSize && \" \"}\r\n {maxSize && `up to ${formatFileSize(maxSize)}`}\r\n </p>\r\n )}\r\n {description && (\r\n <p className=\"text-xs text-secondary-text\">{description}</p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n onChange={handleInputChange}\r\n disabled={disabled}\r\n className=\"hidden\"\r\n />\r\n\r\n {files.length > 0 && (\r\n <div className=\"mt-3 space-y-2\">\r\n {files.map((file, index) => (\r\n <div\r\n key={`${file.name}-${index}`}\r\n className=\"flex items-center justify-between rounded-2xl border border-border bg-background px-4 py-2\"\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n <File className=\"h-5 w-5 text-secondary-text\" />\r\n <div className=\"flex flex-col\">\r\n <span className=\"text-sm text-primary-accent truncate max-w-[200px]\">\r\n {file.name}\r\n </span>\r\n <span className=\"text-xs text-secondary-text\">\r\n {formatFileSize(file.size)}\r\n </span>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={() => removeFile(index)}\r\n className=\"rounded-full p-1 hover:bg-secondary transition-colors\"\r\n >\r\n <X className=\"h-4 w-4 text-secondary-text\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n }\r\n)\r\nFileUpload.displayName = \"FileUpload\"\r\n\r\nexport { FileUpload }\r\n"],"mappings":"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","names":["React","Upload","X","File","jsx","jsxs","FileUpload","accept","maxSize","multiple","onFilesChange","error","disabled","className","description","ref","isDragging","setIsDragging","files","setFiles","inputRef","handleDragEnter","handleDragLeave","handleDragOver","validateFile","file","handleFiles","newFiles","validFiles","updatedFiles","handleDrop","handleClick","handleInputChange","removeFile","index","_","i","formatFileSize","bytes","formatAcceptedTypes","acceptStr","type","cn","buttonVariants","Upload","File","X"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/accordion.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\r\nimport { ChevronRight } from \"lucide-react\"\r\n\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst accordionItemVariants = cva(\"rounded-3xl\", {\r\n variants: {\r\n variant: {\r\n default: \"border border-border bg-background\",\r\n ghost: \"\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n})\r\n\r\nconst Accordion = React.forwardRef<\r\n React.ElementRef<typeof AccordionPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <AccordionPrimitive.Root\r\n ref={ref}\r\n className={cn(\"flex flex-col gap-4\", className)}\r\n {...props}\r\n />\r\n))\r\nAccordion.displayName = \"Accordion\"\r\n\r\nconst AccordionItem = React.forwardRef<\r\n React.ElementRef<typeof AccordionPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> &\r\n VariantProps<typeof accordionItemVariants>\r\n>(({ className, variant, ...props }, ref) => (\r\n <AccordionPrimitive.Item\r\n ref={ref}\r\n className={cn(accordionItemVariants({ variant }), className)}\r\n {...props}\r\n />\r\n))\r\nAccordionItem.displayName = \"AccordionItem\"\r\n\r\nconst AccordionTrigger = React.forwardRef<\r\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\r\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\r\n aside?: React.ReactNode\r\n }\r\n>(({ className, children, aside, ...props }, ref) => (\r\n <AccordionPrimitive.Header className=\"flex\">\r\n <AccordionPrimitive.Trigger\r\n ref={ref}\r\n className={cn(\r\n \"flex flex-1 cursor-pointer items-center gap-4 px-4.5 py-3.5 text-sm transition-all text-left [&[data-state=open]>svg]:rotate-90 data-disabled:cursor-not-allowed\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronRight className=\"h-4 w-4 shrink-0 transition-transform duration-200 in-data-disabled:opacity-40\" />\r\n <span className=\"in-data-disabled:opacity-40\">{children}</span>\r\n {aside && <span className=\"ml-auto\">{aside}</span>}\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n))\r\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\r\n\r\nconst AccordionContent = React.forwardRef<\r\n React.ElementRef<typeof AccordionPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> & {\r\n description?: React.ReactNode\r\n }\r\n>(({ className, children, description, ...props }, ref) => (\r\n <AccordionPrimitive.Content\r\n ref={ref}\r\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\r\n {...props}\r\n >\r\n {description && (\r\n <>\r\n <div className=\"pl-12.5 pr-4.5 pb-3 text-sm text-secondary-text\">\r\n {description}\r\n </div>\r\n <div className=\"border-t border-border\" />\r\n </>\r\n )}\r\n\r\n <div className={cn(\"px-4.5 pb-4 pt-3\", className)}>{children}</div>\r\n </AccordionPrimitive.Content>\r\n))\r\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\r\n"],"mappings":";yCAEA,UAAYA,MAAW,QACvB,UAAYC,MAAwB,4BACpC,OAAS,gBAAAC,MAAoB,eAE7B,OAAS,OAAAC,MAA8B,2BAoBrC,OAwDI,YAAAC,EAxDJ,OAAAC,EA4BE,QAAAC,MA5BF,oBAhBF,IAAMC,EAAwBC,EAAI,cAAe,CAC/C,SAAU,CACR,QAAS,CACP,QAAS,qCACT,MAAO,EACT,CACF,EACA,gBAAiB,CACf,QAAS,SACX,CACF,CAAC,EAEKC,EAAkB,aAGtB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAM,EAAGC,IAC1BP,EAAoB,OAAnB,CACC,IAAKO,EACL,UAAWC,EAAG,sBAAuBH,CAAS,EAC7C,GAAGC,EACN,CACD,EACDF,EAAU,YAAc,YAExB,IAAMK,EAAsB,aAI1B,CAAC,CAAE,UAAAJ,EAAW,QAAAK,EAAS,GAAGJ,CAAM,EAAGC,IACnCP,EAAoB,OAAnB,CACC,IAAKO,EACL,UAAWC,EAAGN,EAAsB,CAAE,QAAAQ,CAAQ,CAAC,EAAGL,CAAS,EAC1D,GAAGC,EACN,CACD,EACDG,EAAc,YAAc,gBAE5B,IAAME,EAAyB,aAK7B,CAAC,CAAE,UAAAN,EAAW,SAAAO,EAAU,MAAAC,EAAO,GAAGP,CAAM,EAAGC,IAC3CP,EAAoB,SAAnB,CAA0B,UAAU,OACnC,SAAAC,EAAoB,UAAnB,CACC,IAAKM,EACL,UAAWC,EACT,mKACAH,CACF,EACC,GAAGC,EAEJ,UAAAN,EAACc,EAAA,CAAa,UAAU,iFAAiF,EACzGd,EAAC,QAAK,UAAU,8BAA+B,SAAAY,EAAS,EACvDC,GAASb,EAAC,QAAK,UAAU,UAAW,SAAAa,EAAM,GAC7C,EACF,CACD,EACDF,EAAiB,YAAiC,UAAQ,YAE1D,IAAMI,EAAyB,aAK7B,CAAC,CAAE,UAAAV,EAAW,SAAAO,EAAU,YAAAI,EAAa,GAAGV,CAAM,EAAGC,IACjDN,EAAoB,UAAnB,CACC,IAAKM,EACL,UAAU,4GACT,GAAGD,EAEH,UAAAU,GACCf,EAAAF,EAAA,CACE,UAAAC,EAAC,OAAI,UAAU,kDACZ,SAAAgB,EACH,EACAhB,EAAC,OAAI,UAAU,yBAAyB,GAC1C,EAGFA,EAAC,OAAI,UAAWQ,EAAG,mBAAoBH,CAAS,EAAI,SAAAO,EAAS,GAC/D,CACD,EACDG,EAAiB,YAAiC,UAAQ","names":["React","AccordionPrimitive","ChevronRight","cva","Fragment","jsx","jsxs","accordionItemVariants","cva","Accordion","className","props","ref","cn","AccordionItem","variant","AccordionTrigger","children","aside","ChevronRight","AccordionContent","description"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a}from"./chunk-AJM7GGVC.mjs";import*as d from"react";import*as e from"@radix-ui/react-dropdown-menu";import{Check as m,ChevronRight as u,Circle as l}from"lucide-react";import{jsx as i,jsxs as s}from"react/jsx-runtime";var g=e.Root,N=e.Trigger,x=e.Group,C=e.Portal,I=e.Sub,S=e.RadioGroup,c=d.forwardRef(({className:o,inset:t,children:n,...r},p)=>s(e.SubTrigger,{ref:p,className:a("flex cursor-default select-none items-center rounded-[12px] px-2 py-1.5 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-[state=open]:bg-secondary",t&&"pl-8",o),...r,children:[n,i(u,{className:"ml-auto h-4 w-4"})]}));c.displayName=e.SubTrigger.displayName;var f=d.forwardRef(({className:o,...t},n)=>i(e.SubContent,{ref:n,className:a("z-50 min-w-32 overflow-hidden rounded-md border bg-dropdown-menu p-1 text-dropdown-menu-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",o),...t}));f.displayName=e.SubContent.displayName;var w=d.forwardRef(({className:o,sideOffset:t=4,...n},r)=>i(e.Portal,{children:i(e.Content,{ref:r,sideOffset:t,className:a("z-50 min-w-32 overflow-hidden rounded-xl border border-border bg-dropdown-menu p-1 text-dropdown-menu-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",o),...n})}));w.displayName=e.Content.displayName;var M=d.forwardRef(({className:o,inset:t,...n},r)=>i(e.Item,{ref:r,className:a("relative flex cursor-pointer select-none items-center rounded-[12px] p-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50",t&&"pl-8",o),...n}));M.displayName=e.Item.displayName;var D=d.forwardRef(({className:o,children:t,checked:n,...r},p)=>s(e.CheckboxItem,{ref:p,className:a("relative flex cursor-default select-none items-center rounded-[12px] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50",o),checked:n,...r,children:[i("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:i(e.ItemIndicator,{children:i(m,{className:"h-4 w-4"})})}),t]}));D.displayName=e.CheckboxItem.displayName;var v=d.forwardRef(({className:o,children:t,...n},r)=>s(e.RadioItem,{ref:r,className:a("relative flex cursor-default select-none items-center rounded-[12px] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50",o),...n,children:[i("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:i(e.ItemIndicator,{children:i(l,{className:"h-2 w-2 fill-current"})})}),t]}));v.displayName=e.RadioItem.displayName;var P=d.forwardRef(({className:o,inset:t,...n},r)=>i(e.Label,{ref:r,className:a("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",o),...n}));P.displayName=e.Label.displayName;var R=d.forwardRef(({className:o,...t},n)=>i(e.Separator,{ref:n,className:a("-mx-1 my-1 h-px bg-muted",o),...t}));R.displayName=e.Separator.displayName;var b=({className:o,...t})=>i("span",{className:a("ml-auto text-xs tracking-widest opacity-60",o),...t});b.displayName="DropdownMenuShortcut";export{g as a,N as b,x as c,C as d,I as e,S as f,c as g,f as h,w as i,M as j,D as k,v as l,P as m,R as n,b as o};
3
- //# sourceMappingURL=chunk-QP4A5SPE.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dropdown-menu.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\r\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\n\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\n\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\n\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\n\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\n\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n \"flex cursor-default select-none items-center rounded-[12px] px-2 py-1.5 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-[state=open]:bg-secondary\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ml-auto h-4 w-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName =\r\n DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(\r\n \"z-50 min-w-32 overflow-hidden rounded-md border bg-dropdown-menu p-1 text-dropdown-menu-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName =\r\n DropdownMenuPrimitive.SubContent.displayName\r\n\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 min-w-32 overflow-hidden rounded-xl border border-border bg-dropdown-menu p-1 text-dropdown-menu-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-pointer select-none items-center rounded-[12px] p-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-[12px] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName =\r\n DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-[12px] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-secondary focus:bg-secondary data-disabled:pointer-events-none data-disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Circle className=\"h-2 w-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-semibold\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\nconst DropdownMenuShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n}\r\n"],"mappings":"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","names":["React","DropdownMenuPrimitive","Check","ChevronRight","Circle","jsx","jsxs","DropdownMenu","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuSub","DropdownMenuRadioGroup","DropdownMenuSubTrigger","className","inset","children","props","ref","cn","ChevronRight","DropdownMenuSubContent","DropdownMenuContent","sideOffset","DropdownMenuItem","DropdownMenuCheckboxItem","checked","Check","DropdownMenuRadioItem","Circle","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{sileo as s,Toaster as o}from"sileo";import{jsx as e}from"react/jsx-runtime";function p({...t}){return e(o,{options:{fill:"#000000",styles:{title:"text-primary-accent!",description:"text-secondary-text!",badge:"bg-white/20!",button:"bg-white/10!"}},...t})}export{s as a,p as b};
3
- //# sourceMappingURL=chunk-QUDNJOXZ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/toast.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport { sileo, Toaster as SileoToaster } from \"sileo\"\r\nimport type { ComponentProps } from \"react\"\r\n\r\ntype ToasterProps = ComponentProps<typeof SileoToaster>\r\n\r\nfunction Toaster({ ...props }: ToasterProps) {\r\n return (\r\n <SileoToaster\r\n options={{\r\n fill: \"#000000\",\r\n styles: {\r\n title: \"text-primary-accent!\",\r\n description: \"text-secondary-text!\",\r\n badge: \"bg-white/20!\",\r\n button: \"bg-white/10!\",\r\n },\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Toaster, sileo as toast }"],"mappings":";AAEA,OAAS,SAAAA,EAAO,WAAWC,MAAoB,QAO3C,cAAAC,MAAA,oBAFJ,SAASC,EAAQ,CAAE,GAAGC,CAAM,EAAiB,CAC3C,OACEF,EAACD,EAAA,CACC,QAAS,CACP,KAAM,UACN,OAAQ,CACN,MAAO,uBACP,YAAa,uBACb,MAAO,eACP,OAAQ,cACV,CACF,EACC,GAAGG,EACN,CAEJ","names":["sileo","SileoToaster","jsx","Toaster","props"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as z}from"./chunk-YHYWSBWL.mjs";import{a as j,b as U,c as X}from"./chunk-6HUPRCXQ.mjs";import{a as E}from"./chunk-AJM7GGVC.mjs";import*as i from"react";import{Check as ne,ChevronDown as G,ChevronRight as ae,Search as se,X as ce}from"lucide-react";import{Fragment as ie,jsx as o,jsxs as x}from"react/jsx-runtime";function M(e){let n=[e.value];if(e.children)for(let a of e.children)n.push(...M(a));return n}function $(e,n){if(!e.children||e.children.length===0)return n.has(e.value)?"checked":"unchecked";let a=M(e),r=a.filter(l=>n.has(l)).length;return r===0?"unchecked":r===a.length?"checked":"indeterminate"}function J(e,n){let a=n.toLowerCase().trim();if(!a)return e;let r=[];for(let l of e){let f=l.label.toLowerCase().includes(a);if(l.children&&l.children.length>0){let h=J(l.children,n);f?r.push(l):h&&h.length>0&&r.push({...l,children:h})}else f&&r.push(l)}return r.length>0?r:null}function le(e,n){let a=n.toLowerCase().trim(),r=new Set;function l(f){let h=!1;for(let g of f){let w=g.label.toLowerCase().includes(a),S=!1;g.children&&(S=l(g.children)),(w||S)&&(r.add(g.value),h=!0)}return h}return l(e),r}function N(e,n){for(let a of e){if(a.value===n)return a;if(a.children){let r=N(a.children,n);if(r)return r}}}function Q(e){let n=new Set;for(let a of e)if(a.children&&a.children.length>0){n.add(a.value);for(let r of Q(a.children))n.add(r)}return n}function oe(e,n){if(!n)return e;let a=n.toLowerCase().trim();if(!a)return e;let r=e.toLowerCase().indexOf(a);return r===-1?e:x(ie,{children:[e.slice(0,r),o("span",{className:"font-semibold underline",children:e.slice(r,r+a.length)}),e.slice(r+a.length)]})}function W({node:e,depth:n,multiple:a,selectedSet:r,expandedValues:l,focusedValue:f,onToggleExpand:h,onSelect:g,onFocus:w,searchTerm:S}){let V=e.children&&e.children.length>0,y=l.has(e.value),b=a?$(e,r):r.has(e.value)?"checked":"unchecked",A=n*20;return x("div",{role:"treeitem","aria-expanded":V?y:void 0,"aria-selected":b==="checked",children:[x("div",{className:E("relative flex items-center gap-2 rounded-sm px-2 py-1.5 my-0.5 text-sm cursor-pointer select-none outline-none","hover:bg-muted",b==="checked"&&!a&&"bg-muted"),style:{paddingLeft:`${8+A}px`},onClick:()=>g(e),onFocus:()=>w(e.value),"data-tree-value":e.value,tabIndex:f===e.value?0:-1,children:[V?o("button",{type:"button",className:"h-4 w-4 shrink-0 flex items-center justify-center rounded-sm hover:bg-secondary",onClick:m=>{m.stopPropagation(),h(e.value)},"aria-label":y?`Collapse ${e.label}`:`Expand ${e.label}`,tabIndex:-1,children:y?o(G,{className:"h-3.5 w-3.5"}):o(ae,{className:"h-3.5 w-3.5"})}):o("span",{className:"h-4 w-4 shrink-0"}),a?o(z,{checked:b==="checked"?!0:b==="indeterminate"?"indeterminate":!1,onCheckedChange:()=>g(e),onClick:m=>m.stopPropagation(),className:"shrink-0","aria-label":e.label}):o(ne,{className:E("h-4 w-4 shrink-0",b==="checked"?"opacity-100":"opacity-0")}),o("span",{className:"truncate",children:oe(e.label,S)})]}),V&&y&&o("div",{role:"group",children:e.children.map(m=>o(W,{node:m,depth:n+1,multiple:a,selectedSet:r,expandedValues:l,focusedValue:f,onToggleExpand:h,onSelect:g,onFocus:w,searchTerm:S},m.value))})]})}function ge({nodes:e,value:n,onValueChange:a,multiple:r=!1,values:l=[],onValuesChange:f,placeholder:h="Select...",searchPlaceholder:g="Search...",emptyMessage:w="No results found.",disabled:S=!1,className:V,error:y=!1,defaultExpandedValues:b,expandAll:A=!1}){let[m,B]=i.useState(!1),[v,K]=i.useState(""),[p,k]=i.useState(null),[D,L]=i.useState(()=>A?Q(e):b?new Set(b):new Set),P=i.useRef(null),I=i.useRef(null),C=i.useMemo(()=>new Set(r?l:n?[n]:[]),[r,l,n]),F=i.useMemo(()=>v?J(e,v):e,[e,v]);i.useEffect(()=>{if(v){P.current||(P.current=new Set(D));let t=le(e,v);L(t)}else P.current&&(L(P.current),P.current=null)},[v,e]);let Y=i.useCallback(t=>{B(t),t||(K(""),k(null))},[]),T=i.useCallback(t=>{L(s=>{let d=new Set(s);return d.has(t)?d.delete(t):d.add(t),d})},[]),H=i.useCallback(t=>{if(r){let s=M(t),d=$(t,C),c;if(d==="checked"){let u=new Set(s);c=l.filter(R=>!u.has(R))}else{let u=s.filter(R=>!C.has(R));c=[...l,...u]}f?.(c)}else{if(t.children&&t.children.length>0){T(t.value);return}let d=t.value===n?"":t.value;a?.(d),B(!1)}},[r,l,n,C,f,a,T]),Z=i.useCallback((t,s)=>{s.preventDefault(),s.stopPropagation();let d=N(e,t);if(d){let c=new Set(M(d)),u=l.filter(R=>!c.has(R));f?.(u)}},[e,l,f]),q=i.useMemo(()=>{if(!r)return[];let t=[];function s(d){for(let c of d){let u=$(c,C);u==="checked"?t.push(c.value):u==="indeterminate"&&c.children&&s(c.children)}}return s(e),t},[e,C,r]),O=i.useCallback(()=>I.current?Array.from(I.current.querySelectorAll("[data-tree-value]")):[],[]),_=i.useCallback(t=>{let s=O(),d=s.findIndex(c=>c.dataset.treeValue===p);switch(t.key){case"ArrowDown":{t.preventDefault();let c=Math.min(d+1,s.length-1),u=s[c]?.dataset.treeValue;u&&(k(u),s[c]?.focus());break}case"ArrowUp":{t.preventDefault();let c=Math.max(d-1,0),u=s[c]?.dataset.treeValue;u&&(k(u),s[c]?.focus());break}case"ArrowRight":{if(t.preventDefault(),p){let c=N(e,p);if(c?.children?.length)if(!D.has(p))T(p);else{let u=c.children[0].value;k(u),requestAnimationFrame(()=>{O().find(re=>re.dataset.treeValue===u)?.focus()})}}break}case"ArrowLeft":{t.preventDefault(),p&&D.has(p)&&T(p);break}case"Enter":case" ":{if(t.preventDefault(),p){let c=N(e,p);c&&H(c)}break}case"Home":{t.preventDefault();let c=s[0]?.dataset.treeValue;c&&(k(c),s[0]?.focus());break}case"End":{t.preventDefault();let c=s[s.length-1]?.dataset.treeValue;c&&(k(c),s[s.length-1]?.focus());break}}},[p,e,D,O,T,H]),ee=()=>r?l.length===0?h:l.length===1?N(e,l[0])?.label??l[0]:`${l.length} selected`:n?N(e,n)?.label??n:h,te=()=>{if(!r||q.length===0)return null;let t=q.map(s=>N(e,s)).filter(Boolean);return o("div",{className:"max-h-[100px] overflow-y-auto px-2 py-1.5 border-b border-border",children:o("div",{className:"flex flex-wrap gap-1",children:t.map(s=>x("div",{className:"inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-0.5 text-xs",children:[o("span",{className:"truncate max-w-[120px]",children:s.label}),o(ce,{className:"h-3 w-3 cursor-pointer shrink-0",onClick:d=>Z(s.value,d),"aria-label":`Remove ${s.label}`})]},s.value))})})};return x(j,{open:m,onOpenChange:Y,children:[o(U,{asChild:!0,children:x("button",{type:"button",role:"combobox","aria-expanded":m,"aria-haspopup":"tree",disabled:S,className:E("cursor-pointer flex my-2 h-9 w-full items-center justify-between rounded-3xl border border-border bg-background hover:bg-secondary px-4 py-2 text-sm text-primary-accent ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",!n&&!l.length&&"text-secondary-text",y&&"border-destructive-foreground focus-visible:ring-destructive-foreground",V),children:[o("span",{className:"truncate",children:ee()}),o(G,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),x(X,{className:"p-0",align:"start",style:{width:"var(--radix-popover-trigger-width)"},children:[x("div",{className:"flex items-center border-b px-3",children:[o(se,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),o("input",{value:v,onChange:t=>K(t.target.value),placeholder:g,className:"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50","aria-label":"Search tree"})]}),te(),o("div",{className:"max-h-[300px] overflow-y-auto",children:F&&F.length>0?o("div",{ref:I,role:"tree","aria-label":"Options",className:"p-1",onKeyDown:_,children:F.map(t=>o(W,{node:t,depth:0,multiple:r,selectedSet:C,expandedValues:D,focusedValue:p,onToggleExpand:T,onSelect:H,onFocus:k,searchTerm:v},t.value))}):o("div",{className:"py-6 text-center text-sm text-muted-foreground",children:w})})]})]})}export{ge as a};
3
- //# sourceMappingURL=chunk-TXOT3G2Z.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/tree-select.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Check, ChevronDown, ChevronRight, Search, X } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Checkbox } from \"@/components/checkbox\"\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/popover\"\r\n\r\n// --- Public types ---\r\n\r\nexport interface TreeSelectNode {\r\n value: string\r\n label: string\r\n children?: TreeSelectNode[]\r\n}\r\n\r\nexport interface TreeSelectProps {\r\n nodes: TreeSelectNode[]\r\n value?: string\r\n onValueChange?: (value: string) => void\r\n multiple?: boolean\r\n values?: string[]\r\n onValuesChange?: (values: string[]) => void\r\n placeholder?: string\r\n searchPlaceholder?: string\r\n emptyMessage?: string\r\n disabled?: boolean\r\n className?: string\r\n error?: boolean\r\n defaultExpandedValues?: string[]\r\n expandAll?: boolean\r\n}\r\n\r\n// --- Internal types ---\r\n\r\ntype CheckState = \"checked\" | \"indeterminate\" | \"unchecked\"\r\n\r\n// --- Utility functions ---\r\n\r\nfunction getAllDescendantValues(node: TreeSelectNode): string[] {\r\n const values: string[] = [node.value]\r\n if (node.children) {\r\n for (const child of node.children) {\r\n values.push(...getAllDescendantValues(child))\r\n }\r\n }\r\n return values\r\n}\r\n\r\nfunction getCheckState(\r\n node: TreeSelectNode,\r\n selectedSet: Set<string>\r\n): CheckState {\r\n if (!node.children || node.children.length === 0) {\r\n return selectedSet.has(node.value) ? \"checked\" : \"unchecked\"\r\n }\r\n\r\n const descendants = getAllDescendantValues(node)\r\n const selectedCount = descendants.filter((v) => selectedSet.has(v)).length\r\n\r\n if (selectedCount === 0) return \"unchecked\"\r\n if (selectedCount === descendants.length) return \"checked\"\r\n return \"indeterminate\"\r\n}\r\n\r\nfunction filterTree(\r\n nodes: TreeSelectNode[],\r\n searchTerm: string\r\n): TreeSelectNode[] | null {\r\n const term = searchTerm.toLowerCase().trim()\r\n if (!term) return nodes\r\n\r\n const result: TreeSelectNode[] = []\r\n\r\n for (const node of nodes) {\r\n const labelMatches = node.label.toLowerCase().includes(term)\r\n\r\n if (node.children && node.children.length > 0) {\r\n const filteredChildren = filterTree(node.children, searchTerm)\r\n\r\n if (labelMatches) {\r\n result.push(node)\r\n } else if (filteredChildren && filteredChildren.length > 0) {\r\n result.push({ ...node, children: filteredChildren })\r\n }\r\n } else if (labelMatches) {\r\n result.push(node)\r\n }\r\n }\r\n\r\n return result.length > 0 ? result : null\r\n}\r\n\r\nfunction getValuesOfMatchingNodes(\r\n nodes: TreeSelectNode[],\r\n searchTerm: string\r\n): Set<string> {\r\n const term = searchTerm.toLowerCase().trim()\r\n const result = new Set<string>()\r\n\r\n function walk(nodeList: TreeSelectNode[]): boolean {\r\n let hasMatch = false\r\n for (const node of nodeList) {\r\n const labelMatches = node.label.toLowerCase().includes(term)\r\n let childHasMatch = false\r\n\r\n if (node.children) {\r\n childHasMatch = walk(node.children)\r\n }\r\n\r\n if (labelMatches || childHasMatch) {\r\n result.add(node.value)\r\n hasMatch = true\r\n }\r\n }\r\n return hasMatch\r\n }\r\n\r\n walk(nodes)\r\n return result\r\n}\r\n\r\nfunction findNodeByValue(\r\n nodes: TreeSelectNode[],\r\n value: string\r\n): TreeSelectNode | undefined {\r\n for (const node of nodes) {\r\n if (node.value === value) return node\r\n if (node.children) {\r\n const found = findNodeByValue(node.children, value)\r\n if (found) return found\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction collectAllBranchValues(nodes: TreeSelectNode[]): Set<string> {\r\n const result = new Set<string>()\r\n for (const node of nodes) {\r\n if (node.children && node.children.length > 0) {\r\n result.add(node.value)\r\n for (const v of collectAllBranchValues(node.children)) {\r\n result.add(v)\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n\r\nfunction renderHighlightedLabel(\r\n label: string,\r\n searchTerm: string\r\n): React.ReactNode {\r\n if (!searchTerm) return label\r\n\r\n const term = searchTerm.toLowerCase().trim()\r\n if (!term) return label\r\n\r\n const index = label.toLowerCase().indexOf(term)\r\n if (index === -1) return label\r\n\r\n return (\r\n <>\r\n {label.slice(0, index)}\r\n <span className=\"font-semibold underline\">\r\n {label.slice(index, index + term.length)}\r\n </span>\r\n {label.slice(index + term.length)}\r\n </>\r\n )\r\n}\r\n\r\n// --- TreeNodeItem (internal) ---\r\n\r\ninterface TreeNodeItemProps {\r\n node: TreeSelectNode\r\n depth: number\r\n multiple: boolean\r\n selectedSet: Set<string>\r\n expandedValues: Set<string>\r\n focusedValue: string | null\r\n onToggleExpand: (value: string) => void\r\n onSelect: (node: TreeSelectNode) => void\r\n onFocus: (value: string) => void\r\n searchTerm: string\r\n}\r\n\r\nfunction TreeNodeItem({\r\n node,\r\n depth,\r\n multiple,\r\n selectedSet,\r\n expandedValues,\r\n focusedValue,\r\n onToggleExpand,\r\n onSelect,\r\n onFocus,\r\n searchTerm,\r\n}: TreeNodeItemProps) {\r\n const hasChildren = node.children && node.children.length > 0\r\n const isExpanded = expandedValues.has(node.value)\r\n const checkState = multiple\r\n ? getCheckState(node, selectedSet)\r\n : selectedSet.has(node.value)\r\n ? \"checked\"\r\n : \"unchecked\"\r\n\r\n const indentPx = depth * 20\r\n\r\n return (\r\n <div\r\n role=\"treeitem\"\r\n aria-expanded={hasChildren ? isExpanded : undefined}\r\n aria-selected={checkState === \"checked\"}\r\n >\r\n <div\r\n className={cn(\r\n \"relative flex items-center gap-2 rounded-sm px-2 py-1.5 my-0.5 text-sm cursor-pointer select-none outline-none\",\r\n \"hover:bg-muted\",\r\n checkState === \"checked\" && !multiple && \"bg-muted\"\r\n // This adds a focus ring when the node is focused, but it's not needed for the tree-select component.\r\n // focusedValue === node.value && \"z-10 ring-2 ring-ring\"\r\n )}\r\n style={{ paddingLeft: `${8 + indentPx}px` }}\r\n onClick={() => onSelect(node)}\r\n onFocus={() => onFocus(node.value)}\r\n data-tree-value={node.value}\r\n tabIndex={focusedValue === node.value ? 0 : -1}\r\n >\r\n {hasChildren ? (\r\n <button\r\n type=\"button\"\r\n className=\"h-4 w-4 shrink-0 flex items-center justify-center rounded-sm hover:bg-secondary\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n onToggleExpand(node.value)\r\n }}\r\n aria-label={\r\n isExpanded ? `Collapse ${node.label}` : `Expand ${node.label}`\r\n }\r\n tabIndex={-1}\r\n >\r\n {isExpanded ? (\r\n <ChevronDown className=\"h-3.5 w-3.5\" />\r\n ) : (\r\n <ChevronRight className=\"h-3.5 w-3.5\" />\r\n )}\r\n </button>\r\n ) : (\r\n <span className=\"h-4 w-4 shrink-0\" />\r\n )}\r\n\r\n {multiple ? (\r\n <Checkbox\r\n checked={\r\n checkState === \"checked\"\r\n ? true\r\n : checkState === \"indeterminate\"\r\n ? \"indeterminate\"\r\n : false\r\n }\r\n onCheckedChange={() => onSelect(node)}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shrink-0\"\r\n aria-label={node.label}\r\n />\r\n ) : (\r\n <Check\r\n className={cn(\r\n \"h-4 w-4 shrink-0\",\r\n checkState === \"checked\" ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n />\r\n )}\r\n\r\n <span className=\"truncate\">\r\n {renderHighlightedLabel(node.label, searchTerm)}\r\n </span>\r\n </div>\r\n\r\n {hasChildren && isExpanded && (\r\n <div role=\"group\">\r\n {node.children!.map((child) => (\r\n <TreeNodeItem\r\n key={child.value}\r\n node={child}\r\n depth={depth + 1}\r\n multiple={multiple}\r\n selectedSet={selectedSet}\r\n expandedValues={expandedValues}\r\n focusedValue={focusedValue}\r\n onToggleExpand={onToggleExpand}\r\n onSelect={onSelect}\r\n onFocus={onFocus}\r\n searchTerm={searchTerm}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\n// --- TreeSelect (main component) ---\r\n\r\nexport function TreeSelect({\r\n nodes,\r\n value,\r\n onValueChange,\r\n multiple = false,\r\n values = [],\r\n onValuesChange,\r\n placeholder = \"Select...\",\r\n searchPlaceholder = \"Search...\",\r\n emptyMessage = \"No results found.\",\r\n disabled = false,\r\n className,\r\n error = false,\r\n defaultExpandedValues,\r\n expandAll = false,\r\n}: TreeSelectProps) {\r\n const [open, setOpen] = React.useState(false)\r\n const [searchTerm, setSearchTerm] = React.useState(\"\")\r\n const [focusedValue, setFocusedValue] = React.useState<string | null>(null)\r\n const [expandedValues, setExpandedValues] = React.useState<Set<string>>(\r\n () => {\r\n if (expandAll) return collectAllBranchValues(nodes)\r\n if (defaultExpandedValues) return new Set(defaultExpandedValues)\r\n return new Set<string>()\r\n }\r\n )\r\n\r\n const preSearchExpandedRef = React.useRef<Set<string> | null>(null)\r\n const treeRef = React.useRef<HTMLDivElement>(null)\r\n\r\n const selectedSet = React.useMemo(\r\n () => new Set(multiple ? values : value ? [value] : []),\r\n [multiple, values, value]\r\n )\r\n\r\n const filteredNodes = React.useMemo(\r\n () => (searchTerm ? filterTree(nodes, searchTerm) : nodes),\r\n [nodes, searchTerm]\r\n )\r\n\r\n // Auto-expand matching ancestors during search\r\n React.useEffect(() => {\r\n if (searchTerm) {\r\n if (!preSearchExpandedRef.current) {\r\n preSearchExpandedRef.current = new Set(expandedValues)\r\n }\r\n const matchingAncestors = getValuesOfMatchingNodes(nodes, searchTerm)\r\n setExpandedValues(matchingAncestors)\r\n } else if (preSearchExpandedRef.current) {\r\n setExpandedValues(preSearchExpandedRef.current)\r\n preSearchExpandedRef.current = null\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchTerm, nodes])\r\n\r\n const handleOpenChange = React.useCallback((isOpen: boolean) => {\r\n setOpen(isOpen)\r\n if (!isOpen) {\r\n setSearchTerm(\"\")\r\n setFocusedValue(null)\r\n }\r\n }, [])\r\n\r\n const handleToggleExpand = React.useCallback((nodeValue: string) => {\r\n setExpandedValues((prev) => {\r\n const next = new Set(prev)\r\n if (next.has(nodeValue)) {\r\n next.delete(nodeValue)\r\n } else {\r\n next.add(nodeValue)\r\n }\r\n return next\r\n })\r\n }, [])\r\n\r\n const handleSelect = React.useCallback(\r\n (node: TreeSelectNode) => {\r\n if (multiple) {\r\n const allDescendants = getAllDescendantValues(node)\r\n const currentState = getCheckState(node, selectedSet)\r\n\r\n let newValues: string[]\r\n if (currentState === \"checked\") {\r\n const toRemove = new Set(allDescendants)\r\n newValues = values.filter((v) => !toRemove.has(v))\r\n } else {\r\n const toAdd = allDescendants.filter((v) => !selectedSet.has(v))\r\n newValues = [...values, ...toAdd]\r\n }\r\n onValuesChange?.(newValues)\r\n } else {\r\n // Single-select: clicking a parent toggles expand instead of selecting\r\n const hasChildren = node.children && node.children.length > 0\r\n if (hasChildren) {\r\n handleToggleExpand(node.value)\r\n return\r\n }\r\n const newValue = node.value === value ? \"\" : node.value\r\n onValueChange?.(newValue)\r\n setOpen(false)\r\n }\r\n },\r\n [\r\n multiple,\r\n values,\r\n value,\r\n selectedSet,\r\n onValuesChange,\r\n onValueChange,\r\n handleToggleExpand,\r\n ]\r\n )\r\n\r\n const handleRemoveChip = React.useCallback(\r\n (chipValue: string, e: React.MouseEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n const node = findNodeByValue(nodes, chipValue)\r\n if (node) {\r\n const toRemove = new Set(getAllDescendantValues(node))\r\n const newValues = values.filter((v) => !toRemove.has(v))\r\n onValuesChange?.(newValues)\r\n }\r\n },\r\n [nodes, values, onValuesChange]\r\n )\r\n\r\n // Smart chips: minimal set representing the selection\r\n const chipValues = React.useMemo(() => {\r\n if (!multiple) return []\r\n\r\n const chips: string[] = []\r\n\r\n function walk(nodeList: TreeSelectNode[]) {\r\n for (const node of nodeList) {\r\n const state = getCheckState(node, selectedSet)\r\n if (state === \"checked\") {\r\n chips.push(node.value)\r\n } else if (state === \"indeterminate\" && node.children) {\r\n walk(node.children)\r\n }\r\n }\r\n }\r\n\r\n walk(nodes)\r\n return chips\r\n }, [nodes, selectedSet, multiple])\r\n\r\n // Keyboard navigation\r\n const getVisibleNodes = React.useCallback((): HTMLElement[] => {\r\n if (!treeRef.current) return []\r\n return Array.from(treeRef.current.querySelectorAll(\"[data-tree-value]\"))\r\n }, [])\r\n\r\n const handleTreeKeyDown = React.useCallback(\r\n (e: React.KeyboardEvent) => {\r\n const visibleNodes = getVisibleNodes()\r\n const currentIndex = visibleNodes.findIndex(\r\n (el) => el.dataset.treeValue === focusedValue\r\n )\r\n\r\n switch (e.key) {\r\n case \"ArrowDown\": {\r\n e.preventDefault()\r\n const nextIndex = Math.min(currentIndex + 1, visibleNodes.length - 1)\r\n const nextValue = visibleNodes[nextIndex]?.dataset.treeValue\r\n if (nextValue) {\r\n setFocusedValue(nextValue)\r\n visibleNodes[nextIndex]?.focus()\r\n }\r\n break\r\n }\r\n case \"ArrowUp\": {\r\n e.preventDefault()\r\n const prevIndex = Math.max(currentIndex - 1, 0)\r\n const prevValue = visibleNodes[prevIndex]?.dataset.treeValue\r\n if (prevValue) {\r\n setFocusedValue(prevValue)\r\n visibleNodes[prevIndex]?.focus()\r\n }\r\n break\r\n }\r\n case \"ArrowRight\": {\r\n e.preventDefault()\r\n if (focusedValue) {\r\n const node = findNodeByValue(nodes, focusedValue)\r\n if (node?.children?.length) {\r\n if (!expandedValues.has(focusedValue)) {\r\n handleToggleExpand(focusedValue)\r\n } else {\r\n const firstChildValue = node.children[0].value\r\n setFocusedValue(firstChildValue)\r\n requestAnimationFrame(() => {\r\n const els = getVisibleNodes()\r\n const el = els.find(\r\n (n) => n.dataset.treeValue === firstChildValue\r\n )\r\n el?.focus()\r\n })\r\n }\r\n }\r\n }\r\n break\r\n }\r\n case \"ArrowLeft\": {\r\n e.preventDefault()\r\n if (focusedValue && expandedValues.has(focusedValue)) {\r\n handleToggleExpand(focusedValue)\r\n }\r\n break\r\n }\r\n case \"Enter\":\r\n case \" \": {\r\n e.preventDefault()\r\n if (focusedValue) {\r\n const node = findNodeByValue(nodes, focusedValue)\r\n if (node) handleSelect(node)\r\n }\r\n break\r\n }\r\n case \"Home\": {\r\n e.preventDefault()\r\n const firstValue = visibleNodes[0]?.dataset.treeValue\r\n if (firstValue) {\r\n setFocusedValue(firstValue)\r\n visibleNodes[0]?.focus()\r\n }\r\n break\r\n }\r\n case \"End\": {\r\n e.preventDefault()\r\n const lastValue =\r\n visibleNodes[visibleNodes.length - 1]?.dataset.treeValue\r\n if (lastValue) {\r\n setFocusedValue(lastValue)\r\n visibleNodes[visibleNodes.length - 1]?.focus()\r\n }\r\n break\r\n }\r\n }\r\n },\r\n [\r\n focusedValue,\r\n nodes,\r\n expandedValues,\r\n getVisibleNodes,\r\n handleToggleExpand,\r\n handleSelect,\r\n ]\r\n )\r\n\r\n const getDisplayText = () => {\r\n if (multiple) {\r\n if (values.length === 0) return placeholder\r\n if (values.length === 1) {\r\n const node = findNodeByValue(nodes, values[0])\r\n return node?.label ?? values[0]\r\n }\r\n return `${values.length} selected`\r\n }\r\n if (value) {\r\n const node = findNodeByValue(nodes, value)\r\n return node?.label ?? value\r\n }\r\n return placeholder\r\n }\r\n\r\n const renderSelectedChips = () => {\r\n if (!multiple || chipValues.length === 0) return null\r\n\r\n const chipNodes = chipValues\r\n .map((v) => findNodeByValue(nodes, v))\r\n .filter(Boolean) as TreeSelectNode[]\r\n\r\n return (\r\n <div className=\"max-h-[100px] overflow-y-auto px-2 py-1.5 border-b border-border\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {chipNodes.map((node) => (\r\n <div\r\n key={node.value}\r\n className=\"inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-0.5 text-xs\"\r\n >\r\n <span className=\"truncate max-w-[120px]\">{node.label}</span>\r\n <X\r\n className=\"h-3 w-3 cursor-pointer shrink-0\"\r\n onClick={(e) => handleRemoveChip(node.value, e)}\r\n aria-label={`Remove ${node.label}`}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <Popover open={open} onOpenChange={handleOpenChange}>\r\n <PopoverTrigger asChild>\r\n <button\r\n type=\"button\"\r\n role=\"combobox\"\r\n aria-expanded={open}\r\n aria-haspopup=\"tree\"\r\n disabled={disabled}\r\n className={cn(\r\n \"cursor-pointer flex my-2 h-9 w-full items-center justify-between rounded-3xl border border-border bg-background hover:bg-secondary px-4 py-2 text-sm text-primary-accent ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\r\n !value && !values.length && \"text-secondary-text\",\r\n error &&\r\n \"border-destructive-foreground focus-visible:ring-destructive-foreground\",\r\n className\r\n )}\r\n >\r\n <span className=\"truncate\">{getDisplayText()}</span>\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className=\"p-0\"\r\n align=\"start\"\r\n style={{ width: \"var(--radix-popover-trigger-width)\" }}\r\n >\r\n <div className=\"flex items-center border-b px-3\">\r\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\r\n <input\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder={searchPlaceholder}\r\n className=\"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\r\n aria-label=\"Search tree\"\r\n />\r\n </div>\r\n\r\n {renderSelectedChips()}\r\n\r\n <div className=\"max-h-[300px] overflow-y-auto\">\r\n {filteredNodes && filteredNodes.length > 0 ? (\r\n <div\r\n ref={treeRef}\r\n role=\"tree\"\r\n aria-label=\"Options\"\r\n className=\"p-1\"\r\n onKeyDown={handleTreeKeyDown}\r\n >\r\n {filteredNodes.map((node) => (\r\n <TreeNodeItem\r\n key={node.value}\r\n node={node}\r\n depth={0}\r\n multiple={multiple}\r\n selectedSet={selectedSet}\r\n expandedValues={expandedValues}\r\n focusedValue={focusedValue}\r\n onToggleExpand={handleToggleExpand}\r\n onSelect={handleSelect}\r\n onFocus={setFocusedValue}\r\n searchTerm={searchTerm}\r\n />\r\n ))}\r\n </div>\r\n ) : (\r\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\r\n {emptyMessage}\r\n </div>\r\n )}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n"],"mappings":"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","names":["React","Check","ChevronDown","ChevronRight","Search","X","Fragment","jsx","jsxs","getAllDescendantValues","node","values","child","getCheckState","selectedSet","descendants","selectedCount","v","filterTree","nodes","searchTerm","term","result","labelMatches","filteredChildren","getValuesOfMatchingNodes","walk","nodeList","hasMatch","childHasMatch","findNodeByValue","value","found","collectAllBranchValues","renderHighlightedLabel","label","index","TreeNodeItem","depth","multiple","expandedValues","focusedValue","onToggleExpand","onSelect","onFocus","hasChildren","isExpanded","checkState","indentPx","cn","e","ChevronDown","ChevronRight","Checkbox","Check","TreeSelect","onValueChange","onValuesChange","placeholder","searchPlaceholder","emptyMessage","disabled","className","error","defaultExpandedValues","expandAll","open","setOpen","setSearchTerm","setFocusedValue","setExpandedValues","preSearchExpandedRef","treeRef","filteredNodes","matchingAncestors","handleOpenChange","isOpen","handleToggleExpand","nodeValue","prev","next","handleSelect","allDescendants","currentState","newValues","toRemove","toAdd","newValue","handleRemoveChip","chipValue","chipValues","chips","state","getVisibleNodes","handleTreeKeyDown","visibleNodes","currentIndex","el","nextIndex","nextValue","prevIndex","prevValue","firstChildValue","n","firstValue","lastValue","getDisplayText","renderSelectedChips","chipNodes","X","Popover","PopoverTrigger","PopoverContent","Search"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as N,b as w,c as O}from"./chunk-6HUPRCXQ.mjs";import{a as P,c as k,d as S,e as G,f as b,h as R}from"./chunk-TFNJNZMW.mjs";import{a as p}from"./chunk-AJM7GGVC.mjs";import*as d from"react";import{Check as z,ChevronDown as A,X as B}from"lucide-react";import{Fragment as F,jsx as o,jsxs as t}from"react/jsx-runtime";function U({options:c=[],groups:s,value:i,onValueChange:M,placeholder:u="Select option...",searchPlaceholder:D="Search...",emptyMessage:E="No option found.",disabled:I=!1,className:T,error:L=!1,multiple:l=!1,values:r=[],onValuesChange:f}){let[g,v]=d.useState(!1),x=d.useMemo(()=>s?s.flatMap(e=>e.options):c,[s,c]),C=x.find(e=>e.value===i),a=x.filter(e=>r.includes(e.value)),X=e=>{if(l){let n=r.includes(e)?r.filter(m=>m!==e):[...r,e];f?.(n)}else M?.(e===i?"":e),v(!1)},$=(e,n)=>{n.preventDefault(),n.stopPropagation();let m=r.filter(q=>q!==e);f?.(m)},j=()=>l?a.length===0?u:a.length===1?a[0].label:`${a.length} selected`:C?C.label:u,h=e=>{let n=l?r.includes(e.value):i===e.value;return t(R,{value:e.value,onSelect:X,className:"rounded-[12px]",children:[o("span",{className:"truncate",children:e.label}),o(z,{className:p("ml-auto h-4 w-4 shrink-0",n?"opacity-100":"opacity-0")})]},e.value)},y=()=>!l||a.length===0?null:o("div",{className:"px-2 py-1.5",children:o("div",{className:"flex flex-wrap gap-1",children:a.map(e=>t("div",{className:"inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-0.5 text-xs",children:[o("span",{className:"truncate",children:e.label}),o(B,{className:"h-3 w-3 cursor-pointer",onClick:n=>$(e.value,n)})]},e.value))})});return t(N,{open:g,onOpenChange:v,children:[o(w,{asChild:!0,children:t("button",{type:"button",role:"combobox","aria-expanded":g,disabled:I,className:p("cursor-pointer flex my-2 h-9 w-full items-center justify-between rounded-3xl border border-border bg-background hover:bg-secondary px-4 py-2 text-sm text-primary-accent ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",!i&&!r.length&&"text-secondary-text",L&&"border-destructive-foreground focus-visible:ring-destructive-foreground",T),children:[o("span",{className:"truncate",children:j()}),o(A,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),o(O,{className:"overflow-hidden rounded-xl p-0",align:"start",style:{width:"var(--radix-popover-trigger-width)"},children:t(P,{children:[o(k,{placeholder:D}),t(S,{children:[o(G,{children:E}),s?t(F,{children:[y(),s.map(e=>o(b,{heading:e.label,children:e.options.map(h)},e.label))]}):t(b,{children:[y(),c.map(h)]})]})]})})]})}export{U as a};
3
- //# sourceMappingURL=chunk-X3QDPETP.mjs.map
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as t}from"./chunk-AJM7GGVC.mjs";import*as o from"react";import*as e from"@radix-ui/react-checkbox";import{Check as n,Minus as d}from"lucide-react";import{jsx as i,jsxs as m}from"react/jsx-runtime";var s=o.forwardRef(({className:a,...r},c)=>i(e.Root,{ref:c,className:t("group peer h-4 w-4 bg-background shrink-0 rounded-xs border border-accent-muted ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-accent data-[state=checked]:border-accent data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-accent data-[state=indeterminate]:border-accent data-[state=indeterminate]:text-primary-foreground",a),...r,children:m(e.Indicator,{className:t("flex items-center justify-center text-current"),children:[i(n,{className:"h-4 w-4 group-data-[state=indeterminate]:hidden"}),i(d,{className:"h-4 w-4 hidden group-data-[state=indeterminate]:block"})]})}));s.displayName=e.Root.displayName;export{s as a};
3
- //# sourceMappingURL=chunk-YHYWSBWL.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/checkbox.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\r\nimport { Check, Minus } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Checkbox = React.forwardRef<\r\n React.ElementRef<typeof CheckboxPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <CheckboxPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n \"group peer h-4 w-4 bg-background shrink-0 rounded-xs border border-accent-muted ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-accent data-[state=checked]:border-accent data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-accent data-[state=indeterminate]:border-accent data-[state=indeterminate]:text-primary-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator\r\n className={cn(\"flex items-center justify-center text-current\")}\r\n >\r\n <Check className=\"h-4 w-4 group-data-[state=indeterminate]:hidden\" />\r\n <Minus className=\"h-4 w-4 hidden group-data-[state=indeterminate]:block\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n))\r\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\r\n\r\nexport { Checkbox }\r\n"],"mappings":";yCAEA,UAAYA,MAAW,QACvB,UAAYC,MAAuB,2BACnC,OAAS,SAAAC,EAAO,SAAAC,MAAa,eAgBzB,OAGE,OAAAC,EAHF,QAAAC,MAAA,oBAZJ,IAAMC,EAAiB,aAGrB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAM,EAAGC,IAC1BL,EAAmB,OAAlB,CACC,IAAKK,EACL,UAAWC,EACT,6eACAH,CACF,EACC,GAAGC,EAEJ,SAAAH,EAAmB,YAAlB,CACC,UAAWK,EAAG,+CAA+C,EAE7D,UAAAN,EAACO,EAAA,CAAM,UAAU,kDAAkD,EACnEP,EAACQ,EAAA,CAAM,UAAU,wDAAwD,GAC3E,EACF,CACD,EACDN,EAAS,YAAgC,OAAK","names":["React","CheckboxPrimitive","Check","Minus","jsx","jsxs","Checkbox","className","props","ref","cn","Check","Minus"]}