@flexkit/studio 0.0.25 → 0.0.27

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 (94) hide show
  1. package/dist/asset-REAMGMQL.js +2 -0
  2. package/dist/{asset-HOJ43RVO.js.map → asset-REAMGMQL.js.map} +1 -1
  3. package/dist/astro.js +1 -1
  4. package/dist/{chunk-OXTER7HO.js → chunk-27Y2SQ67.js} +2 -2
  5. package/dist/{chunk-OXTER7HO.js.map → chunk-27Y2SQ67.js.map} +1 -1
  6. package/dist/{chunk-SW6NNU5D.js → chunk-2FFSI7IK.js} +2 -2
  7. package/dist/chunk-2FFSI7IK.js.map +1 -0
  8. package/dist/chunk-2PEDKE5Z.js +2 -0
  9. package/dist/chunk-2PEDKE5Z.js.map +1 -0
  10. package/dist/chunk-553TQFSU.js +2 -0
  11. package/dist/chunk-553TQFSU.js.map +1 -0
  12. package/dist/{chunk-FPK7J4BP.js → chunk-7GBAYC7G.js} +2 -2
  13. package/dist/chunk-7GBAYC7G.js.map +1 -0
  14. package/dist/{chunk-53TUQIKJ.js → chunk-AALMEPYG.js} +2 -2
  15. package/dist/chunk-AALMEPYG.js.map +1 -0
  16. package/dist/{chunk-V2UTZEJQ.js → chunk-CWHDJ7Q4.js} +2 -2
  17. package/dist/{chunk-V2UTZEJQ.js.map → chunk-CWHDJ7Q4.js.map} +1 -1
  18. package/dist/{chunk-6MOUYNN4.js → chunk-KGYH74NA.js} +2 -2
  19. package/dist/chunk-KGYH74NA.js.map +1 -0
  20. package/dist/chunk-KR7CLPY2.js +2 -0
  21. package/dist/chunk-KR7CLPY2.js.map +1 -0
  22. package/dist/{chunk-ND3OZVR5.js → chunk-NNRD7YZU.js} +2 -2
  23. package/dist/chunk-NNRD7YZU.js.map +1 -0
  24. package/dist/{chunk-PEYW7XOU.js → chunk-OEWYLKO7.js} +2 -2
  25. package/dist/chunk-OEWYLKO7.js.map +1 -0
  26. package/dist/{chunk-Z5CZVKD4.js → chunk-QXCD5JR4.js} +2 -2
  27. package/dist/chunk-QXCD5JR4.js.map +1 -0
  28. package/dist/{chunk-YXRNHQPG.js → chunk-TBCSVE5L.js} +2 -2
  29. package/dist/{chunk-YXRNHQPG.js.map → chunk-TBCSVE5L.js.map} +1 -1
  30. package/dist/{chunk-PCZI6VXG.js → chunk-UKLE7J3K.js} +2 -2
  31. package/dist/chunk-UUGIVWK4.js +2 -0
  32. package/dist/chunk-UUGIVWK4.js.map +1 -0
  33. package/dist/chunk-WDRCARCP.js +3 -0
  34. package/dist/{chunk-ZBV4BY36.js.map → chunk-WDRCARCP.js.map} +1 -1
  35. package/dist/{chunk-V7UK6RMM.js → chunk-X3S7TRCM.js} +2 -2
  36. package/dist/{chunk-V7UK6RMM.js.map → chunk-X3S7TRCM.js.map} +1 -1
  37. package/dist/chunk-XU2JGXYC.js +2 -0
  38. package/dist/chunk-XU2JGXYC.js.map +1 -0
  39. package/dist/{chunk-5CKMFBWH.js → chunk-YW2EEXMV.js} +2 -2
  40. package/dist/chunk-YW2EEXMV.js.map +1 -0
  41. package/dist/{chunk-RVGMKQPC.js → chunk-ZSJAPCIZ.js} +2 -2
  42. package/dist/chunk-ZSJAPCIZ.js.map +1 -0
  43. package/dist/{chunk-7XBIC5RC.js → chunk-ZSSNAIMU.js} +2 -2
  44. package/dist/{chunk-7XBIC5RC.js.map → chunk-ZSSNAIMU.js.map} +1 -1
  45. package/dist/datetime-TWONUNXS.js +2 -0
  46. package/dist/{datetime-VZJ7XF33.js.map → datetime-TWONUNXS.js.map} +1 -1
  47. package/dist/index.css +45 -13
  48. package/dist/index.d.ts +38 -14
  49. package/dist/index.js +270 -231
  50. package/dist/index.js.map +1 -1
  51. package/dist/nextjs.js +1 -1
  52. package/dist/{project-selector-UDFHGEZI.js → project-selector-X6YVZYKL.js} +2 -2
  53. package/dist/{project-selector-UDFHGEZI.js.map → project-selector-X6YVZYKL.js.map} +1 -1
  54. package/dist/{search-MG2W4GGN.js → search-6ASIDGYA.js} +2 -2
  55. package/dist/{search-MG2W4GGN.js.map → search-6ASIDGYA.js.map} +1 -1
  56. package/dist/switch-KVO3JRNX.js +2 -0
  57. package/dist/{switch-FBS75HI4.js.map → switch-KVO3JRNX.js.map} +1 -1
  58. package/dist/tanstack-start.js +1 -1
  59. package/dist/text-ODG7ABSW.js +2 -0
  60. package/dist/{text-RZOXKHWE.js.map → text-ODG7ABSW.js.map} +1 -1
  61. package/dist/textarea-M4YPSJEC.js +2 -0
  62. package/dist/{textarea-OUJM7E6O.js.map → textarea-M4YPSJEC.js.map} +1 -1
  63. package/dist/{types.d-B-SE1ihC.d.ts → types.d-DiA0h3ut.d.ts} +37 -7
  64. package/dist/ui.d.ts +3 -2
  65. package/dist/ui.js +1 -1
  66. package/dist/ui.js.map +1 -1
  67. package/dist/{user-nav-E7MLJ36Y.js → user-nav-O5G4M2VA.js} +2 -2
  68. package/dist/{user-nav-E7MLJ36Y.js.map → user-nav-O5G4M2VA.js.map} +1 -1
  69. package/package.json +1 -1
  70. package/dist/asset-HOJ43RVO.js +0 -2
  71. package/dist/chunk-53TUQIKJ.js.map +0 -1
  72. package/dist/chunk-5CKMFBWH.js.map +0 -1
  73. package/dist/chunk-6MOUYNN4.js.map +0 -1
  74. package/dist/chunk-6YHHL4XI.js +0 -2
  75. package/dist/chunk-6YHHL4XI.js.map +0 -1
  76. package/dist/chunk-7WR64NTK.js +0 -2
  77. package/dist/chunk-7WR64NTK.js.map +0 -1
  78. package/dist/chunk-FPK7J4BP.js.map +0 -1
  79. package/dist/chunk-I4C65MUI.js +0 -2
  80. package/dist/chunk-I4C65MUI.js.map +0 -1
  81. package/dist/chunk-JHDZP6RC.js +0 -2
  82. package/dist/chunk-JHDZP6RC.js.map +0 -1
  83. package/dist/chunk-ND3OZVR5.js.map +0 -1
  84. package/dist/chunk-PEYW7XOU.js.map +0 -1
  85. package/dist/chunk-RVGMKQPC.js.map +0 -1
  86. package/dist/chunk-SW6NNU5D.js.map +0 -1
  87. package/dist/chunk-SXZZFHMJ.js +0 -2
  88. package/dist/chunk-SXZZFHMJ.js.map +0 -1
  89. package/dist/chunk-Z5CZVKD4.js.map +0 -1
  90. package/dist/chunk-ZBV4BY36.js +0 -3
  91. package/dist/datetime-VZJ7XF33.js +0 -2
  92. package/dist/switch-FBS75HI4.js +0 -2
  93. package/dist/text-RZOXKHWE.js +0 -2
  94. package/dist/textarea-OUJM7E6O.js +0 -2
package/dist/nextjs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-PCZI6VXG.js";
3
+ } from "./chunk-UKLE7J3K.js";
4
4
 
5
5
  // src/auth/nextjs-api.ts
6
6
  function resultToNextResponse(result, NextResponse) {
@@ -1,2 +1,2 @@
1
- import'./index.css';import {a,d,c,e,g}from'./chunk-7WR64NTK.js';import {b}from'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';import {useState}from'react';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';function V({projectId:S,projects:t}){let[r,f]=useState(t.find(e=>e.projectId===S)??t[0]),s=useNavigate();return jsxs(a,{defaultValue:r.projectId,onValueChange:e=>{let c=t.find(u=>u.projectId===e)??t[0],{basePath:d}=c;f(c),s(b(d,c.projectId));},children:[jsx(d,{className:"fk:w-48! fk:h-9 fk:py-1",id:"project",children:jsx(c,{"aria-label":r.title,children:r.title})}),jsx(e,{children:t.map(e=>jsx(g,{value:e.projectId,children:e.title},e.projectId))})]})}export{V as ProjectSelector};//# sourceMappingURL=project-selector-UDFHGEZI.js.map
2
- //# sourceMappingURL=project-selector-UDFHGEZI.js.map
1
+ import'./index.css';import {a,d,c,e,g}from'./chunk-XU2JGXYC.js';import {b}from'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';import {useState}from'react';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';function V({projectId:S,projects:t}){let[r,f]=useState(t.find(e=>e.projectId===S)??t[0]),s=useNavigate();return jsxs(a,{defaultValue:r.projectId,onValueChange:e=>{let c=t.find(u=>u.projectId===e)??t[0],{basePath:d}=c;f(c),s(b(d,c.projectId));},children:[jsx(d,{className:"fk:w-48! fk:h-9 fk:py-1",id:"project",children:jsx(c,{"aria-label":r.title,children:r.title})}),jsx(e,{children:t.map(e=>jsx(g,{value:e.projectId,children:e.title},e.projectId))})]})}export{V as ProjectSelector};//# sourceMappingURL=project-selector-X6YVZYKL.js.map
2
+ //# sourceMappingURL=project-selector-X6YVZYKL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/project-selector.tsx"],"names":["ProjectSelector","projectId","projects","selectedProject","setSelectedProject","useState","project","navigate","useNavigate","jsxs","Select","id","currentProject","basePath","joinBasePath","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem"],"mappings":"iPAYO,SAASA,CAAAA,CAAgB,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAuB,CAC3E,GAAM,CAACC,CAAAA,CAAiBC,CAAkB,CAAA,CAAIC,QAAAA,CAC5CH,CAAAA,CAAS,KAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAcL,CAAS,CAAA,EAAKC,CAAAA,CAAS,CAAC,CAC3E,CAAA,CACMK,CAAAA,CAAWC,WAAAA,EAAY,CAE7B,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,YAAA,CAAcP,CAAAA,CAAgB,SAAA,CAC9B,aAAA,CAAgBQ,CAAAA,EAAO,CACrB,IAAMC,CAAAA,CAAiBV,CAAAA,CAAS,IAAA,CAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAcK,CAAE,GAAKT,CAAAA,CAAS,CAAC,CAAA,CACnF,CAAE,QAAA,CAAAW,CAAS,CAAA,CAAID,CAAAA,CAErBR,CAAAA,CAAmBQ,CAAc,CAAA,CACjCL,CAAAA,CAASO,CAAAA,CAAaD,CAAAA,CAAUD,CAAAA,CAAe,SAAS,CAAC,EAC3D,CAAA,CAEA,QAAA,CAAA,CAAAG,GAAAA,CAACC,CAAAA,CAAA,CAAc,SAAA,CAAU,yBAAA,CAA0B,EAAA,CAAG,SAAA,CACpD,QAAA,CAAAD,GAAAA,CAACE,CAAAA,CAAA,CAAY,YAAA,CAAYd,CAAAA,CAAgB,KAAA,CAAQ,QAAA,CAAAA,CAAAA,CAAgB,KAAA,CAAM,CAAA,CACzE,CAAA,CACAY,GAAAA,CAACG,CAAAA,CAAA,CACE,QAAA,CAAAhB,CAAAA,CAAS,GAAA,CAAKI,CAAAA,EACbS,GAAAA,CAACI,CAAAA,CAAA,CAAmC,KAAA,CAAOb,CAAAA,CAAQ,SAAA,CAChD,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAA,CADMA,CAAAA,CAAQ,SAEzB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ","file":"project-selector-UDFHGEZI.js","sourcesContent":["import type { JSX } from 'react';\nimport { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { joinBasePath } from '../../core/base-path';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport type { ProjectOptions } from '../../core/config/types';\n\ntype Props = {\n projectId: string;\n projects: ProjectOptions[];\n};\n\nexport function ProjectSelector({ projectId, projects }: Props): JSX.Element {\n const [selectedProject, setSelectedProject] = useState(\n projects.find((project) => project.projectId === projectId) ?? projects[0]\n );\n const navigate = useNavigate();\n\n return (\n <Select\n defaultValue={selectedProject.projectId}\n onValueChange={(id) => {\n const currentProject = projects.find((project) => project.projectId === id) ?? projects[0];\n const { basePath } = currentProject;\n\n setSelectedProject(currentProject);\n navigate(joinBasePath(basePath, currentProject.projectId));\n }}\n >\n <SelectTrigger className=\"fk:w-48! fk:h-9 fk:py-1\" id=\"project\">\n <SelectValue aria-label={selectedProject.title}>{selectedProject.title}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {projects.map((project) => (\n <SelectItem key={project.projectId} value={project.projectId}>\n {project.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/project-selector.tsx"],"names":["ProjectSelector","projectId","projects","selectedProject","setSelectedProject","useState","project","navigate","useNavigate","jsxs","Select","id","currentProject","basePath","joinBasePath","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem"],"mappings":"iPAYO,SAASA,CAAAA,CAAgB,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAuB,CAC3E,GAAM,CAACC,CAAAA,CAAiBC,CAAkB,CAAA,CAAIC,QAAAA,CAC5CH,CAAAA,CAAS,KAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAcL,CAAS,CAAA,EAAKC,CAAAA,CAAS,CAAC,CAC3E,CAAA,CACMK,CAAAA,CAAWC,WAAAA,EAAY,CAE7B,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,YAAA,CAAcP,CAAAA,CAAgB,SAAA,CAC9B,aAAA,CAAgBQ,CAAAA,EAAO,CACrB,IAAMC,CAAAA,CAAiBV,CAAAA,CAAS,IAAA,CAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAcK,CAAE,GAAKT,CAAAA,CAAS,CAAC,CAAA,CACnF,CAAE,QAAA,CAAAW,CAAS,CAAA,CAAID,CAAAA,CAErBR,CAAAA,CAAmBQ,CAAc,CAAA,CACjCL,CAAAA,CAASO,CAAAA,CAAaD,CAAAA,CAAUD,CAAAA,CAAe,SAAS,CAAC,EAC3D,CAAA,CAEA,QAAA,CAAA,CAAAG,GAAAA,CAACC,CAAAA,CAAA,CAAc,SAAA,CAAU,yBAAA,CAA0B,EAAA,CAAG,SAAA,CACpD,QAAA,CAAAD,GAAAA,CAACE,CAAAA,CAAA,CAAY,YAAA,CAAYd,CAAAA,CAAgB,KAAA,CAAQ,QAAA,CAAAA,CAAAA,CAAgB,KAAA,CAAM,CAAA,CACzE,CAAA,CACAY,GAAAA,CAACG,CAAAA,CAAA,CACE,QAAA,CAAAhB,CAAAA,CAAS,GAAA,CAAKI,CAAAA,EACbS,GAAAA,CAACI,CAAAA,CAAA,CAAmC,KAAA,CAAOb,CAAAA,CAAQ,SAAA,CAChD,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAA,CADMA,CAAAA,CAAQ,SAEzB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ","file":"project-selector-X6YVZYKL.js","sourcesContent":["import type { JSX } from 'react';\nimport { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { joinBasePath } from '../../core/base-path';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport type { ProjectOptions } from '../../core/config/types';\n\ntype Props = {\n projectId: string;\n projects: ProjectOptions[];\n};\n\nexport function ProjectSelector({ projectId, projects }: Props): JSX.Element {\n const [selectedProject, setSelectedProject] = useState(\n projects.find((project) => project.projectId === projectId) ?? projects[0]\n );\n const navigate = useNavigate();\n\n return (\n <Select\n defaultValue={selectedProject.projectId}\n onValueChange={(id) => {\n const currentProject = projects.find((project) => project.projectId === id) ?? projects[0];\n const { basePath } = currentProject;\n\n setSelectedProject(currentProject);\n navigate(joinBasePath(basePath, currentProject.projectId));\n }}\n >\n <SelectTrigger className=\"fk:w-48! fk:h-9 fk:py-1\" id=\"project\">\n <SelectValue aria-label={selectedProject.title}>{selectedProject.title}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {projects.map((project) => (\n <SelectItem key={project.projectId} value={project.projectId}>\n {project.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- import'./index.css';import {e}from'./chunk-I4C65MUI.js';import {m,v,q,p,r,t,b}from'./chunk-ND3OZVR5.js';import'./chunk-6YHHL4XI.js';import'./chunk-ZBV4BY36.js';import'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import {a}from'./chunk-O2QMYUPS.js';import {useState,useMemo,useRef}from'react';import {LoaderCircle,Search,X}from'lucide-react';import {Command}from'cmdk';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';var z=f=>({searchRequests:{searches:f.filter(a=>a.attributes.some(i=>i.isSearchable)).map(a=>a.plural).map(a=>({collection:a}))},commonParams:{q:""}});function Y({onSelect:f,searchPlaceholder:d="Search...",noResultsMsg:a$1="Nothing found",className:i,onSearchChange:k,projectId:P,schema:u}){let[I,r$1]=useState(false),[p$1,h]=useState(""),l=useMemo(()=>z(u),[u]),[R,g]=useState(l),n=useRef(null),{results:y,isLoading:E}=e(P,R),L=useNavigate();function B(e){h(e),e.length>0&&(r$1(true),g({...l,commonParams:{q:e}})),e.length===0&&r$1(false),k&&k(e);}function _(){h(""),r$1(false),g(l),n.current&&(n.current.value="");let e=new URL(window.location.href);e.searchParams.has("id")&&(e.searchParams.delete("id"),L(e.pathname+e.search));}return jsxs(m,{className:"fk:relative fk:overflow-visible fk:h-auto fk:justify-center",onBlur:()=>{setTimeout(()=>{r$1(false);},300);},onKeyDown:e=>{e.key==="Escape"&&(e.preventDefault(),r$1(false));},shouldFilter:false,children:[jsxs("div",{className:a("fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background","fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2"),children:[E?jsx(LoaderCircle,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin"}):jsx(Search,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50"}),jsx(Command.Input,{className:a("fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50",i),placeholder:d,onMouseDown:()=>{(n.current?.value.length??0)>0&&r$1(true);},onValueChange:B,ref:n,value:p$1}),p$1&&jsx("button",{className:"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground",onClick:_,type:"button",children:jsx(X,{className:"fk:h-4 fk:w-4"})})]}),jsx("div",{className:"fk:relative fk:max-w-[600px]",children:jsx("div",{className:a("fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border",I?"fk:block":"fk:hidden"),children:jsxs(v,{className:"fk:max-h-[220px] fk:overflow-auto",children:[jsx(q,{children:a$1}),jsx(p,{children:jsxs(r,{children:[y.length>0&&jsx(t,{"aria-hidden":"true",className:"fk:hidden!",value:"-"}),y.map(e=>jsxs(t,{className:"fk:flex",value:e._id,onSelect:M=>{f({entityName:e._entityName,entityNamePlural:e._entityNamePlural,entityId:M});},children:[jsx("span",{className:"fk:basis-full",children:e[Object.keys(e)[3]]}),jsx(b,{className:"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400",children:e._entityName})]},e._id))]})})]})})})]})}export{Y as Search};//# sourceMappingURL=search-MG2W4GGN.js.map
2
- //# sourceMappingURL=search-MG2W4GGN.js.map
1
+ import'./index.css';import {e}from'./chunk-2PEDKE5Z.js';import {m,v,q,p,r,t,b}from'./chunk-NNRD7YZU.js';import'./chunk-UUGIVWK4.js';import'./chunk-WDRCARCP.js';import'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import {a}from'./chunk-O2QMYUPS.js';import {useState,useMemo,useRef}from'react';import {LoaderCircle,Search,X}from'lucide-react';import {Command}from'cmdk';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';var z=f=>({searchRequests:{searches:f.filter(a=>a.attributes.some(i=>i.isSearchable)).map(a=>a.plural).map(a=>({collection:a}))},commonParams:{q:""}});function Y({onSelect:f,searchPlaceholder:d="Search...",noResultsMsg:a$1="Nothing found",className:i,onSearchChange:k,projectId:P,schema:u}){let[I,r$1]=useState(false),[p$1,h]=useState(""),l=useMemo(()=>z(u),[u]),[R,g]=useState(l),n=useRef(null),{results:y,isLoading:E}=e(P,R),L=useNavigate();function B(e){h(e),e.length>0&&(r$1(true),g({...l,commonParams:{q:e}})),e.length===0&&r$1(false),k&&k(e);}function _(){h(""),r$1(false),g(l),n.current&&(n.current.value="");let e=new URL(window.location.href);e.searchParams.has("id")&&(e.searchParams.delete("id"),L(e.pathname+e.search));}return jsxs(m,{className:"fk:relative fk:overflow-visible fk:h-auto fk:justify-center",onBlur:()=>{setTimeout(()=>{r$1(false);},300);},onKeyDown:e=>{e.key==="Escape"&&(e.preventDefault(),r$1(false));},shouldFilter:false,children:[jsxs("div",{className:a("fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background","fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2"),children:[E?jsx(LoaderCircle,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin"}):jsx(Search,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50"}),jsx(Command.Input,{className:a("fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50",i),placeholder:d,onMouseDown:()=>{(n.current?.value.length??0)>0&&r$1(true);},onValueChange:B,ref:n,value:p$1}),p$1&&jsx("button",{className:"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground",onClick:_,type:"button",children:jsx(X,{className:"fk:h-4 fk:w-4"})})]}),jsx("div",{className:"fk:relative fk:max-w-[600px]",children:jsx("div",{className:a("fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border",I?"fk:block":"fk:hidden"),children:jsxs(v,{className:"fk:max-h-[220px] fk:overflow-auto",children:[jsx(q,{children:a$1}),jsx(p,{children:jsxs(r,{children:[y.length>0&&jsx(t,{"aria-hidden":"true",className:"fk:hidden!",value:"-"}),y.map(e=>jsxs(t,{className:"fk:flex",value:e._id,onSelect:M=>{f({entityName:e._entityName,entityNamePlural:e._entityNamePlural,entityId:M});},children:[jsx("span",{className:"fk:basis-full",children:e[Object.keys(e)[3]]}),jsx(b,{className:"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400",children:e._entityName})]},e._id))]})})]})})})]})}export{Y as Search};//# sourceMappingURL=search-6ASIDGYA.js.map
2
+ //# sourceMappingURL=search-6ASIDGYA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/search.tsx"],"names":["getBaseSearchRequest","schema","entity","attr","collection","Search","onSelect","searchPlaceholder","noResultsMsg","className","onSearchChange","projectId","isOpen","setIsOpen","useState","inputValue","setInputValue","searchRequest","useMemo","searchQuery","setSearchQuery","inputRef","useRef","results","isLoading","useSearch","navigate","useNavigate","handleOnSearchChange","q","handleClear","url","jsxs","Command","cn","jsx","LoaderCircle","SearchIcon","CommandPrimitive","XIcon","ScrollArea","CommandEmpty","CommandList","CommandGroup","CommandItem","item","entityId","Badge"],"mappings":"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","file":"search-MG2W4GGN.js","sourcesContent":["'use client';\n\nimport { useRef, useState, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { LoaderCircle, Search as SearchIcon, X as XIcon } from 'lucide-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useSearch } from '../../core/use-search';\nimport { cn } from '../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from '../primitives/command';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport type { Entity, SearchRequestProps } from '../../core/types';\n\nexport type ComboBoxItemType = {\n value: string;\n label: string;\n};\n\nexport interface SearchProps {\n onSelect: ({\n entityName,\n entityNamePlural,\n entityId,\n }: {\n entityName: string;\n entityNamePlural: string;\n entityId: string;\n }) => void;\n searchPlaceholder?: string;\n noResultsMsg?: string;\n className?: string;\n onSearchChange?: (e: string) => void;\n projectId: string;\n schema: Entity[];\n}\n\nconst getBaseSearchRequest = (schema: Entity[]): SearchRequestProps => {\n const collections = schema\n .filter((entity) => entity.attributes.some((attr) => attr.isSearchable))\n .map((entity) => entity.plural);\n\n return {\n searchRequests: {\n searches: collections.map((collection) => ({\n collection,\n })),\n },\n commonParams: {\n q: '',\n },\n };\n};\n\nexport function Search({\n onSelect,\n searchPlaceholder = 'Search...',\n noResultsMsg = 'Nothing found',\n className,\n onSearchChange,\n projectId,\n schema,\n}: SearchProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const searchRequest = useMemo(() => getBaseSearchRequest(schema), [schema]);\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const inputRef = useRef<HTMLInputElement>(null);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const navigate = useNavigate();\n\n function handleOnSearchChange(q: string): void {\n setInputValue(q);\n // TODO: Add debounce\n if (q.length > 0) {\n setIsOpen(true);\n setSearchQuery({ ...searchRequest, commonParams: { q } });\n }\n\n if (q.length === 0) setIsOpen(false);\n\n if (onSearchChange) {\n onSearchChange(q);\n }\n }\n\n function handleClear(): void {\n setInputValue('');\n setIsOpen(false);\n setSearchQuery(searchRequest);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n\n // Remove id from URL if present\n const url = new URL(window.location.href);\n\n if (url.searchParams.has('id')) {\n url.searchParams.delete('id');\n navigate(url.pathname + url.search);\n }\n }\n\n // TODO: handle error\n\n return (\n <Command\n className=\"fk:relative fk:overflow-visible fk:h-auto fk:justify-center\"\n onBlur={() => {\n // close after a delay to allow any click event from the results list to be handled\n setTimeout(() => {\n setIsOpen(false);\n }, 300);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n }}\n shouldFilter={false}\n >\n <div\n className={cn(\n 'fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background',\n 'fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2'\n )}\n >\n {isLoading ? (\n <LoaderCircle className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <CommandPrimitive.Input\n className={cn(\n 'fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50',\n className\n )}\n placeholder={searchPlaceholder}\n onMouseDown={() => {\n if ((inputRef.current?.value.length ?? 0) > 0) setIsOpen(true);\n }}\n onValueChange={handleOnSearchChange}\n ref={inputRef}\n value={inputValue}\n />\n {inputValue && (\n <button\n className=\"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground\"\n onClick={handleClear}\n type=\"button\"\n >\n <XIcon className=\"fk:h-4 fk:w-4\" />\n </button>\n )}\n </div>\n <div className=\"fk:relative fk:max-w-[600px]\">\n <div\n className={cn(\n 'fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border',\n isOpen ? 'fk:block' : 'fk:hidden'\n )}\n >\n <ScrollArea className=\"fk:max-h-[220px] fk:overflow-auto\">\n <CommandEmpty>{noResultsMsg}</CommandEmpty>\n <CommandList>\n <CommandGroup>\n {results.length > 0 && <CommandItem aria-hidden=\"true\" className=\"fk:hidden!\" value=\"-\" />}\n {results.map((item) => (\n <CommandItem\n className=\"fk:flex\"\n key={item._id}\n value={item._id}\n onSelect={(entityId) => {\n onSelect({ entityName: item._entityName, entityNamePlural: item._entityNamePlural, entityId });\n }}\n >\n <span className=\"fk:basis-full\">{item[Object.keys(item)[3]]}</span>\n <Badge className=\"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400\">\n {item._entityName}\n </Badge>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </ScrollArea>\n </div>\n </div>\n </Command>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/search.tsx"],"names":["getBaseSearchRequest","schema","entity","attr","collection","Search","onSelect","searchPlaceholder","noResultsMsg","className","onSearchChange","projectId","isOpen","setIsOpen","useState","inputValue","setInputValue","searchRequest","useMemo","searchQuery","setSearchQuery","inputRef","useRef","results","isLoading","useSearch","navigate","useNavigate","handleOnSearchChange","q","handleClear","url","jsxs","Command","cn","jsx","LoaderCircle","SearchIcon","CommandPrimitive","XIcon","ScrollArea","CommandEmpty","CommandList","CommandGroup","CommandItem","item","entityId","Badge"],"mappings":"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","file":"search-6ASIDGYA.js","sourcesContent":["'use client';\n\nimport { useRef, useState, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { LoaderCircle, Search as SearchIcon, X as XIcon } from 'lucide-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useSearch } from '../../core/use-search';\nimport { cn } from '../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from '../primitives/command';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport type { Entity, SearchRequestProps } from '../../core/types';\n\nexport type ComboBoxItemType = {\n value: string;\n label: string;\n};\n\nexport interface SearchProps {\n onSelect: ({\n entityName,\n entityNamePlural,\n entityId,\n }: {\n entityName: string;\n entityNamePlural: string;\n entityId: string;\n }) => void;\n searchPlaceholder?: string;\n noResultsMsg?: string;\n className?: string;\n onSearchChange?: (e: string) => void;\n projectId: string;\n schema: Entity[];\n}\n\nconst getBaseSearchRequest = (schema: Entity[]): SearchRequestProps => {\n const collections = schema\n .filter((entity) => entity.attributes.some((attr) => attr.isSearchable))\n .map((entity) => entity.plural);\n\n return {\n searchRequests: {\n searches: collections.map((collection) => ({\n collection,\n })),\n },\n commonParams: {\n q: '',\n },\n };\n};\n\nexport function Search({\n onSelect,\n searchPlaceholder = 'Search...',\n noResultsMsg = 'Nothing found',\n className,\n onSearchChange,\n projectId,\n schema,\n}: SearchProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const searchRequest = useMemo(() => getBaseSearchRequest(schema), [schema]);\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const inputRef = useRef<HTMLInputElement>(null);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const navigate = useNavigate();\n\n function handleOnSearchChange(q: string): void {\n setInputValue(q);\n // TODO: Add debounce\n if (q.length > 0) {\n setIsOpen(true);\n setSearchQuery({ ...searchRequest, commonParams: { q } });\n }\n\n if (q.length === 0) setIsOpen(false);\n\n if (onSearchChange) {\n onSearchChange(q);\n }\n }\n\n function handleClear(): void {\n setInputValue('');\n setIsOpen(false);\n setSearchQuery(searchRequest);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n\n // Remove id from URL if present\n const url = new URL(window.location.href);\n\n if (url.searchParams.has('id')) {\n url.searchParams.delete('id');\n navigate(url.pathname + url.search);\n }\n }\n\n // TODO: handle error\n\n return (\n <Command\n className=\"fk:relative fk:overflow-visible fk:h-auto fk:justify-center\"\n onBlur={() => {\n // close after a delay to allow any click event from the results list to be handled\n setTimeout(() => {\n setIsOpen(false);\n }, 300);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n }}\n shouldFilter={false}\n >\n <div\n className={cn(\n 'fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background',\n 'fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2'\n )}\n >\n {isLoading ? (\n <LoaderCircle className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <CommandPrimitive.Input\n className={cn(\n 'fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50',\n className\n )}\n placeholder={searchPlaceholder}\n onMouseDown={() => {\n if ((inputRef.current?.value.length ?? 0) > 0) setIsOpen(true);\n }}\n onValueChange={handleOnSearchChange}\n ref={inputRef}\n value={inputValue}\n />\n {inputValue && (\n <button\n className=\"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground\"\n onClick={handleClear}\n type=\"button\"\n >\n <XIcon className=\"fk:h-4 fk:w-4\" />\n </button>\n )}\n </div>\n <div className=\"fk:relative fk:max-w-[600px]\">\n <div\n className={cn(\n 'fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border',\n isOpen ? 'fk:block' : 'fk:hidden'\n )}\n >\n <ScrollArea className=\"fk:max-h-[220px] fk:overflow-auto\">\n <CommandEmpty>{noResultsMsg}</CommandEmpty>\n <CommandList>\n <CommandGroup>\n {results.length > 0 && <CommandItem aria-hidden=\"true\" className=\"fk:hidden!\" value=\"-\" />}\n {results.map((item) => (\n <CommandItem\n className=\"fk:flex\"\n key={item._id}\n value={item._id}\n onSelect={(entityId) => {\n onSelect({ entityName: item._entityName, entityNamePlural: item._entityNamePlural, entityId });\n }}\n >\n <span className=\"fk:basis-full\">{item[Object.keys(item)[3]]}</span>\n <Badge className=\"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400\">\n {item._entityName}\n </Badge>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </ScrollArea>\n </div>\n </div>\n </Command>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Switch}from'./chunk-X3S7TRCM.js';import'./chunk-QXCD5JR4.js';import'./chunk-KGYH74NA.js';import'./chunk-AALMEPYG.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=switch-KVO3JRNX.js.map
2
+ //# sourceMappingURL=switch-KVO3JRNX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"switch-FBS75HI4.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"switch-KVO3JRNX.js"}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-PCZI6VXG.js";
3
+ } from "./chunk-UKLE7J3K.js";
4
4
 
5
5
  // src/auth/tanstack-start-api.ts
6
6
  function getCookieValue(cookieHeader, name) {
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Text}from'./chunk-27Y2SQ67.js';import'./chunk-7GBAYC7G.js';import'./chunk-QXCD5JR4.js';import'./chunk-AALMEPYG.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=text-ODG7ABSW.js.map
2
+ //# sourceMappingURL=text-ODG7ABSW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"text-RZOXKHWE.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"text-ODG7ABSW.js"}
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Textarea}from'./chunk-KR7CLPY2.js';import'./chunk-OEWYLKO7.js';import'./chunk-QXCD5JR4.js';import'./chunk-AALMEPYG.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=textarea-M4YPSJEC.js.map
2
+ //# sourceMappingURL=textarea-M4YPSJEC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"textarea-OUJM7E6O.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"textarea-M4YPSJEC.js"}
@@ -5,7 +5,7 @@ import { Control, UseFormSetValue, FieldValues } from 'react-hook-form';
5
5
 
6
6
  type AttributeValue = {
7
7
  _id: string;
8
- [key: string]: string | AttributeValue | null;
8
+ [key: string]: string | AttributeValue | AttributeValue[] | null;
9
9
  __typename: string;
10
10
  };
11
11
  type EntityItem = {
@@ -34,12 +34,18 @@ type OrderedAssetValue = ImageValue & {
34
34
  type FormEntityItem = {
35
35
  [attributeName: string]: FormFieldValue;
36
36
  };
37
+ type EntityQuerySelection = 'list' | 'full';
37
38
  type UseEntityQueryParams = {
38
39
  entityNamePlural: string;
39
40
  schema: Schema;
40
41
  scope: string;
41
42
  variables?: OperationVariables;
42
43
  isForm?: boolean;
44
+ /**
45
+ * `list` only selects each related entity's primary attribute (desk/list grids).
46
+ * `full` keeps nested relationship fields (forms, relationship pickers). Default: `full`.
47
+ */
48
+ selection?: EntityQuerySelection;
43
49
  };
44
50
  type FormFieldValue = {
45
51
  _id?: string;
@@ -50,7 +56,7 @@ type FormFieldValue = {
50
56
  disconnect?: string[];
51
57
  };
52
58
  scope: string;
53
- value: string | MappedEntityItem | MappedEntityItem[] | EntityItem | EntityItem[] | AttributeValue | AttributeValue[] | ImageValue | OrderedAssetValue[] | undefined | null;
59
+ value: boolean | number | string | MappedEntityItem | MappedEntityItem[] | EntityItem | EntityItem[] | AttributeValue | AttributeValue[] | ImageValue | OrderedAssetValue[] | undefined | null;
54
60
  };
55
61
 
56
62
  type SingleRelationshipConnection = {
@@ -92,6 +98,22 @@ type ActionSetRelationship = {
92
98
  };
93
99
  type ScopeType = 'local' | 'global' | 'relationship';
94
100
  type DataType = 'cartesianpoint' | 'bigint' | 'boolean' | 'date' | 'datetime' | 'duration' | 'float' | 'id' | 'int' | 'point' | 'string' | 'time' | 'asset';
101
+ type DefaultValueByDataType = {
102
+ asset: '';
103
+ bigint: string;
104
+ boolean: boolean | '';
105
+ cartesianpoint: string;
106
+ date: string;
107
+ datetime: string;
108
+ duration: string;
109
+ float: number | '';
110
+ id: string;
111
+ int: number | '';
112
+ point: string;
113
+ string: string;
114
+ time: string;
115
+ };
116
+ type DefaultValue<T extends DataType = DataType> = DefaultValueByDataType[T];
95
117
  type InputType = 'datetime' | 'editor' | 'asset' | 'number' | 'relationship' | 'select' | 'switch' | 'text' | 'textarea' | (string & NonNullable<unknown>);
96
118
  type PreviewType = 'boolean' | 'text' | 'number' | 'date' | 'datetime' | 'editor' | 'select' | 'relationship' | 'swtich' | 'textarea' | (string & NonNullable<unknown>);
97
119
  type SelectList = {
@@ -135,9 +157,7 @@ type AttributeOptions = {
135
157
  switch: CommonOptions;
136
158
  [key: string]: CommonOptions;
137
159
  };
138
- type Attribute = {
139
- dataType: DataType;
140
- defaultValue?: string;
160
+ type AttributeBase = {
141
161
  inputType: InputType;
142
162
  previewType?: PreviewType;
143
163
  isEditable?: boolean;
@@ -153,9 +173,19 @@ type Attribute = {
153
173
  mode: 'single' | 'multiple';
154
174
  field: string;
155
175
  };
156
- scope: ScopeType;
157
176
  validation?: (z: ZodType) => ZodTypeAny;
158
177
  };
178
+ type AttributeByDataType<T extends DataType> = AttributeBase & {
179
+ dataType: T;
180
+ defaultValue?: DefaultValueByDataType[T];
181
+ } & (T extends 'asset' ? {
182
+ scope?: 'global';
183
+ } : {
184
+ scope: ScopeType;
185
+ });
186
+ type Attribute = {
187
+ [T in DataType]: AttributeByDataType<T>;
188
+ }[DataType];
159
189
  type Entity = {
160
190
  name: string;
161
191
  plural: string;
@@ -299,4 +329,4 @@ type SingleProject = Omit<ProjectOptions, 'basePath'> & {
299
329
 
300
330
  type Config = SingleProject | ProjectOptions[];
301
331
 
302
- export type { AppContextType as A, Config as C, DataType as D, Entity as E, FormEntityItem as F, ImageValue as I, LogoProps as L, MappedEntityItem as M, OrderedAssetValue as O, PluginOptions as P, SingleProject as S, UseEntityQueryParams as U, ActionSetRelationship as a, ActionSetScope as b, AppOptions as c, ProjectOptions as d, SearchRequestProps as e, SearchResultItem as f, Schema as g, EntityData as h, AttributeValue as i, Attribute as j, MultipleRelationshipConnection as k, SingleRelationshipConnection as l, FormFieldParams as m, FormFieldProps as n, FormFieldValue as o, ScopeType as p };
332
+ export type { AppContextType as A, Config as C, DataType as D, Entity as E, FormEntityItem as F, ImageValue as I, LogoProps as L, MappedEntityItem as M, OrderedAssetValue as O, PluginOptions as P, SingleProject as S, UseEntityQueryParams as U, ActionSetRelationship as a, ActionSetScope as b, AppOptions as c, ProjectOptions as d, SearchRequestProps as e, SearchResultItem as f, Schema as g, EntityData as h, AttributeValue as i, Attribute as j, MultipleRelationshipConnection as k, SingleRelationshipConnection as l, DefaultValue as m, DefaultValueByDataType as n, FormFieldParams as o, FormFieldProps as p, FormFieldValue as q, ScopeType as r };
package/dist/ui.d.ts CHANGED
@@ -9,7 +9,7 @@ import { FieldValues, FieldPath, ControllerProps } from 'react-hook-form';
9
9
  import { Command as Command$1 } from 'cmdk';
10
10
  import * as ResizablePrimitive from 'react-resizable-panels';
11
11
  export { PanelImperativeHandle } from 'react-resizable-panels';
12
- import { S as SingleProject } from './types.d-B-SE1ihC.js';
12
+ import { S as SingleProject } from './types.d-DiA0h3ut.js';
13
13
  import { ToasterProps } from 'sonner';
14
14
  export { toast } from 'sonner';
15
15
  import 'zod';
@@ -213,9 +213,10 @@ declare function Switch({ className, size, ...props }: React$1.ComponentProps<ty
213
213
  }): react_jsx_runtime.JSX.Element;
214
214
 
215
215
  type TableProps = Omit<React$1.ComponentProps<'table'>, 'ref'> & {
216
+ containerClassName?: string;
216
217
  ref?: React$1.Ref<HTMLDivElement>;
217
218
  };
218
- declare function Table({ className, onScroll, ref, ...props }: TableProps): react_jsx_runtime.JSX.Element;
219
+ declare function Table({ className, containerClassName, onScroll, ref, ...props }: TableProps): react_jsx_runtime.JSX.Element;
219
220
  declare function TableHeader({ className, ...props }: React$1.ComponentProps<'thead'>): react_jsx_runtime.JSX.Element;
220
221
  declare function TableBody({ className, ...props }: React$1.ComponentProps<'tbody'>): react_jsx_runtime.JSX.Element;
221
222
  declare function TableFooter({ className, ...props }: React$1.ComponentProps<'tfoot'>): react_jsx_runtime.JSX.Element;
package/dist/ui.js CHANGED
@@ -1,2 +1,2 @@
1
- import'./index.css';export{g as Separator,h as Table,j as TableBody,o as TableCaption,n as TableCell,k as TableFooter,m as TableHead,i as TableHeader,l as TableRow,f as Toaster,b as Toggle,c as ToggleGroup,d as ToggleGroupItem,e as toast,a as toggleVariants}from'./chunk-RVGMKQPC.js';export{a as Input}from'./chunk-FPK7J4BP.js';export{a as Textarea}from'./chunk-PEYW7XOU.js';import {a as a$1,b as b$1,c,e}from'./chunk-5CKMFBWH.js';export{b as Tooltip,e as TooltipContent,d as TooltipPortal,a as TooltipProvider,c as TooltipTrigger}from'./chunk-5CKMFBWH.js';export{a as Select,e as SelectContent,b as SelectGroup,g as SelectItem,f as SelectLabel,j as SelectScrollDownButton,i as SelectScrollUpButton,h as SelectSeparator,d as SelectTrigger,c as SelectValue}from'./chunk-7WR64NTK.js';export{b as Badge,m as Command,n as CommandDialog,q as CommandEmpty,r as CommandGroup,o as CommandInput,t as CommandItem,p as CommandList,s as CommandSeparator,u as CommandShortcut,c as Dialog,f as DialogClose,h as DialogContent,l as DialogDescription,j as DialogFooter,i as DialogHeader,g as DialogOverlay,e as DialogPortal,k as DialogTitle,d as DialogTrigger,v as ScrollArea,w as ScrollBar,a as badgeVariants}from'./chunk-ND3OZVR5.js';export{a as Avatar,c as AvatarFallback,b as AvatarImage}from'./chunk-SW6NNU5D.js';export{c as DropdownMenu,i as DropdownMenuCheckboxItem,f as DropdownMenuContent,g as DropdownMenuGroup,h as DropdownMenuItem,l as DropdownMenuLabel,d as DropdownMenuPortal,j as DropdownMenuRadioGroup,k as DropdownMenuRadioItem,m as DropdownMenuSeparator,n as DropdownMenuShortcut,o as DropdownMenuSub,q as DropdownMenuSubContent,p as DropdownMenuSubTrigger,e as DropdownMenuTrigger,r as Skeleton}from'./chunk-YXRNHQPG.js';import {b}from'./chunk-EYGOJ2ZN.js';export{b as Button,a as buttonVariants}from'./chunk-EYGOJ2ZN.js';export{a as Switch}from'./chunk-6MOUYNN4.js';export{b as Form,g as FormControl,h as FormDescription,c as FormField,e as FormItem,f as FormLabel,i as FormMessage,a as Label,d as useFormField}from'./chunk-53TUQIKJ.js';import {a}from'./chunk-O2QMYUPS.js';import*as E from'lucide-react';import {SquareArrowOutUpRight,GripVerticalIcon,XIcon,PanelLeftIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';import*as h from'react-resizable-panels';import {Dialog,Slot,Tabs}from'radix-ui';import*as d from'react';import {createElement}from'react';import na from'fuse.js';import {NavLink}from'react-router-dom';import {cva}from'class-variance-authority';import {groupBy}from'ramda';function Ot({href:e,children:t}){return jsx(b,{asChild:true,className:"fk:h-6 fk:px-1! fk:py-0 fk:text-sm fk:font-light fk:text-link",size:"sm",variant:"link",children:jsxs("a",{href:e,target:"_blank",children:[t," ",jsx(SquareArrowOutUpRight,{className:"fk:size-3",strokeWidth:3})]})})}function Ht({className:e,...t}){return jsx(h.Group,{"data-slot":"resizable-panel-group",className:a("fk:flex fk:h-full fk:w-full fk:aria-[orientation=vertical]:flex-col",e),...t})}function Ft({...e}){return jsx(h.Panel,{"data-slot":"resizable-panel",...e})}function $t({withHandle:e,className:t,...a$1}){return jsx(h.Separator,{"data-slot":"resizable-handle",className:a("fk:relative fk:flex fk:w-px fk:items-center fk:justify-center fk:bg-border fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-1 fk:after:-translate-x-1/2 fk:focus-visible:ring-1 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-1 fk:focus-visible:outline-hidden fk:aria-[orientation=horizontal]:h-px fk:aria-[orientation=horizontal]:w-full fk:aria-[orientation=horizontal]:after:left-0 fk:aria-[orientation=horizontal]:after:h-1 fk:aria-[orientation=horizontal]:after:w-full fk:aria-[orientation=horizontal]:after:translate-x-0 fk:aria-[orientation=horizontal]:after:-translate-y-1/2 fk:[&[aria-orientation=horizontal]>div]:rotate-90",t),...a$1,children:e&&jsx("div",{className:"fk:z-10 fk:flex fk:h-8 fk:w-3 fk:items-center fk:justify-center fk:rounded-xs fk:border fk:bg-border",children:jsx(GripVerticalIcon,{className:"fk:size-2.5"})})})}function F({...e}){return jsx(Dialog.Root,{"data-slot":"sheet",...e})}function Kt({...e}){return jsx(Dialog.Trigger,{"data-slot":"sheet-trigger",...e})}function Wt({...e}){return jsx(Dialog.Close,{"data-slot":"sheet-close",...e})}function Q({...e}){return jsx(Dialog.Portal,{"data-slot":"sheet-portal",...e})}function ee({className:e,...t}){return jsx(Dialog.Overlay,{"data-slot":"sheet-overlay",className:a("fk:fixed fk:inset-0 fk:z-50 fk:bg-black/50 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0",e),...t})}function $({className:e,children:t,side:a$1="right",showCloseButton:f=true,...s}){return jsxs(Q,{children:[jsx(ee,{}),jsxs(Dialog.Content,{"data-slot":"sheet-content",className:a("fk:fixed fk:z-50 fk:flex fk:flex-col fk:gap-4 fk:bg-background fk:shadow-lg fk:transition fk:ease-in-out fk:data-[state=closed]:animate-out fk:data-[state=closed]:duration-300 fk:data-[state=open]:animate-in fk:data-[state=open]:duration-500",a$1==="right"&&"fk:inset-y-0 fk:right-0 fk:h-full fk:w-3/4 fk:border-l fk:data-[state=closed]:slide-out-to-right fk:data-[state=open]:slide-in-from-right fk:sm:max-w-sm",a$1==="left"&&"fk:inset-y-0 fk:left-0 fk:h-full fk:w-3/4 fk:border-r fk:data-[state=closed]:slide-out-to-left fk:data-[state=open]:slide-in-from-left fk:sm:max-w-sm",a$1==="top"&&"fk:inset-x-0 fk:top-0 fk:h-auto fk:border-b fk:data-[state=closed]:slide-out-to-top fk:data-[state=open]:slide-in-from-top",a$1==="bottom"&&"fk:inset-x-0 fk:bottom-0 fk:h-auto fk:border-t fk:data-[state=closed]:slide-out-to-bottom fk:data-[state=open]:slide-in-from-bottom",e),...s,children:[t,f&&jsxs(Dialog.Close,{className:"fk:absolute fk:top-4 fk:right-4 fk:rounded-xs fk:opacity-70 fk:ring-offset-background fk:transition-opacity fk:hover:opacity-100 fk:focus:ring-2 fk:focus:ring-ring fk:focus:ring-offset-2 fk:focus:outline-hidden fk:disabled:pointer-events-none fk:data-[state=open]:bg-secondary",children:[jsx(XIcon,{className:"fk:size-4"}),jsx("span",{className:"fk:sr-only",children:"Close"})]})]})]})}function j({className:e,...t}){return jsx("div",{"data-slot":"sheet-header",className:a("fk:flex fk:flex-col fk:gap-1.5 fk:p-4",e),...t})}function Xt({className:e,...t}){return jsx("div",{"data-slot":"sheet-footer",className:a("fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4",e),...t})}function K({className:e,...t}){return jsx(Dialog.Title,{"data-slot":"sheet-title",className:a("fk:font-semibold fk:text-foreground",e),...t})}function W({className:e,...t}){return jsx(Dialog.Description,{"data-slot":"sheet-description",className:a("fk:text-sm fk:text-muted-foreground",e),...t})}var X=768;function te(){let[e,t]=d.useState(void 0);return d.useEffect(()=>{let a=window.matchMedia(`(max-width: ${X-1}px)`),f=()=>{t(window.innerWidth<X);};return a.addEventListener("change",f),t(window.innerWidth<X),()=>a.removeEventListener("change",f)},[]),!!e}var Ut="flexkit:sidebar:state",Yt=3600*24*7,Zt="16rem",Qt="18rem",ea="2rem",ta="b",oe=d.createContext(null);function w(){let e=d.useContext(oe);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function aa({defaultOpen:e=true,open:t,onOpenChange:a$2,className:f,style:s,children:u,...r}){let n=te(),[g,b]=d.useState(false),[R,fe]=d.useState(e),v=t??R,y=d.useCallback(c=>{let m=typeof c=="function"?c(v):c;a$2?a$2(m):fe(m),document.cookie=`${Ut}=${m}; path=/; max-age=${Yt}`;},[a$2,v]),T=d.useCallback(()=>n?b(c=>!c):y(c=>!c),[n,y,b]);d.useEffect(()=>{let c=m=>{m.key===ta&&(m.metaKey||m.ctrlKey)&&(m.preventDefault(),T());};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[T]);let Y=v?"expanded":"collapsed",de=d.useMemo(()=>({state:Y,open:v,setOpen:y,isMobile:n,openMobile:g,setOpenMobile:b,toggleSidebar:T}),[Y,v,y,n,g,b,T]);return jsx(oe.Provider,{value:de,children:jsx(a$1,{delayDuration:0,children:jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Zt,"--sidebar-width-icon":ea,...s},className:a("fk:group/sidebar-wrapper fk:flex fk:w-full fk:has-data-[variant=inset]:bg-sidebar fk:overflow-hidden",f),...r,children:u})})})}function q({side:e="left",variant:t="sidebar",collapsible:a$1="offcanvas",className:f,children:s,...u}){let{isMobile:r,state:n,openMobile:g,setOpenMobile:b}=w();return a$1==="none"?jsx("div",{"data-slot":"sidebar",className:a("fk:flex fk:h-full fk:w-(--sidebar-width) fk:flex-col fk:bg-sidebar fk:text-sidebar-foreground",f),...u,children:s}):r?jsx(F,{open:g,onOpenChange:b,...u,children:jsxs($,{"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"fk:w-(--sidebar-width) fk:bg-sidebar fk:p-0 fk:text-sidebar-foreground fk:[&>button]:hidden",style:{"--sidebar-width":Qt},side:e,children:[jsxs(j,{className:"fk:sr-only",children:[jsx(K,{children:"Sidebar"}),jsx(W,{children:"Displays the mobile sidebar."})]}),jsx("div",{className:"fk:flex fk:h-full fk:w-full fk:flex-col",children:s})]})}):jsxs("div",{className:"fk:group fk:peer fk:hidden fk:text-sidebar-foreground fk:md:block","data-state":n,"data-collapsible":n==="collapsed"?a$1:"","data-variant":t,"data-side":e,"data-slot":"sidebar",children:[jsx("div",{"data-slot":"sidebar-gap",className:a("fk:relative fk:w-(--sidebar-width) fk:bg-transparent fk:transition-[width] fk:duration-200 fk:ease-linear","fk:group-data-[collapsible=offcanvas]:w-0","fk:group-data-[side=right]:rotate-180",t==="floating"||t==="inset"?"fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),jsx("div",{"data-slot":"sidebar-container",className:a("fk:relative fk:inset-y-0 fk:z-10 fk:hidden fk:h-[calc(100svh-3.5rem)] fk:w-(--sidebar-width) fk:transition-[left,right,width] fk:duration-200 fk:ease-linear fk:md:flex",e==="left"?"fk:left-0 fk:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)":"fk:right-0 k:group-data-[collapsible=offcanvas]:-right-(--sidebar-width)",t==="floating"||t==="inset"?"fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] fk:group-data-[side=left]:border-r":"fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon) fk:group-data-[side=left]:border-r fk:group-data-[side=right]:border-l",f),...u,children:jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"fk:flex fk:h-full fk:w-full fk:flex-col fk:bg-sidebar fk:group-data-[variant=floating]:rounded-lg fk:group-data-[variant=floating]:border fk:group-data-[variant=floating]:border-sidebar-border fk:group-data-[variant=floating]:shadow-sm",children:s})})]})}function oa({className:e,onClick:t,...a$1}){let{toggleSidebar:f}=w();return jsxs(b,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon",className:a("fk:size-7",e),onClick:s=>{t?.(s),f();},...a$1,children:[jsx(PanelLeftIcon,{}),jsx("span",{className:"fk:sr-only",children:"Toggle Sidebar"})]})}function J({className:e,...t}){let{toggleSidebar:a$1}=w();return jsx("button",{"data-sidebar":"rail","data-slot":"sidebar-rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:a$1,title:"Toggle Sidebar",className:a("fk:absolute fk:inset-y-0 fk:z-20 fk:hidden fk:w-4 fk:-translate-x-1/2 fk:transition-all fk:ease-linear fk:group-data-[side=left]:-right-4 fk:group-data-[side=right]:left-0 fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-[2px] fk:hover:after:bg-sidebar-border fk:sm:flex","fk:in-data-[side=left]:cursor-w-resize fk:in-data-[side=right]:cursor-e-resize","fk:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize fk:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize","fk:group-data-[collapsible=offcanvas]:translate-x-0 fk:group-data-[collapsible=offcanvas]:after:left-full fk:hover:group-data-[collapsible=offcanvas]:bg-sidebar","fk:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","fk:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",e),...t})}function ra({className:e,...t}){return jsx("main",{"data-slot":"sidebar-inset",className:a("fk:relative fk:flex fk:flex-1 fk:flex-col fk:bg-background fk:overflow-hidden fk:peer-data-[variant=inset]:h-[calc(100svh-3.625rem)]",e),...t})}function U({className:e,...t}){return jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:a("fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:overflow-auto fk:group-data-[collapsible=icon]:overflow-hidden",e),...t})}function z({className:e,...t}){return jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:a("fk:relative fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:p-2",e),...t})}function re({className:e,asChild:t=false,...a$1}){let f=t?Slot.Root:"div";return jsx(f,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:a("fk:flex fk:h-8 fk:shrink-0 fk:items-center fk:rounded-md fk:px-2 fk:text-xs fk:font-medium fk:text-sidebar-foreground/70 fk:ring-sidebar-ring fk:outline-hidden fk:transition-[margin,opacity] fk:duration-200 fk:ease-linear fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0","fk:group-data-[collapsible=icon]:-mt-8 fk:group-data-[collapsible=icon]:opacity-0",e),...a$1})}function N({className:e,...t}){return jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:a("fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:gap-1",e),...t})}function I({className:e,...t}){return jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:a("fk:group/menu-item fk:relative",e),...t})}var ia=cva("fk:peer/menu-button fk:flex fk:w-full fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:p-2 fk:text-left fk:text-sm fk:ring-sidebar-ring fk:outline-hidden fk:transition-[width,height,padding] fk:group-has-data-[sidebar=menu-action]/menu-item:pr-8 fk:group-data-[collapsible=icon]:size-8! fk:group-data-[collapsible=icon]:p-2! fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:font-medium fk:data-[active=true]:text-sidebar-accent-foreground fk:data-[state=open]:hover:bg-sidebar-accent fk:data-[state=open]:hover:text-sidebar-accent-foreground fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0",{variants:{variant:{default:"fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground",outline:"fk:bg-background fk:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"fk:h-8 fk:text-sm",sm:"fk:h-7 fk:text-xs",lg:"fk:h-12 fk:text-sm fk:group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function D({asChild:e$1=false,isActive:t=false,variant:a$1="default",size:f="default",tooltip:s,className:u,...r}){let n=e$1?Slot.Root:"button",{isMobile:g,state:b}=w(),R=jsx(n,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":f,"data-active":t,className:a(ia({variant:a$1,size:f}),u),...r});return s?(typeof s=="string"&&(s={children:s}),jsxs(b$1,{children:[jsx(c,{asChild:true,children:R}),jsx(e,{side:"right",align:"center",hidden:b!=="collapsed"||g,...s})]})):R}var ne=NavLink,da=Object.keys(E).map(e=>({name:e,icon:E[e]})),la=new na(da,{keys:["name"],threshold:.5});function ka({className:e,menuGroups:t,schema:a}){let f=a.filter(r=>!(r.menu&&"hidden"in r.menu)),s=groupBy(r=>r.menu?.group&&t?.find(n=>n.name===r.menu?.group)?.name||"ungrouped",f),u=t?.filter(r=>s[r.name]?.length);return jsxs(q,{className:e,collapsible:"icon",variant:"inset",children:[jsxs(U,{children:[u?.map(r=>jsxs(z,{children:[jsx(re,{children:r.title}),jsx(N,{children:s[r.name]?.map(n=>jsx(I,{children:jsx(D,{asChild:true,isActive:location.pathname.includes(`/list/${n.plural}`),tooltip:B(n.menu?.label??n.plural),children:jsxs(ne,{to:`list/${n.plural}`,children:[n.menu?.icon??createElement(E[se(n.name)],{className:"fk:h-4 fk:w-4 fk:mr-2",strokeWidth:2}),jsx("span",{children:B(n.menu?.label??n.plural)})]})})},n.plural))})]},r.name)),jsx(z,{children:jsx(N,{children:s.ungrouped?.map(r=>jsx(I,{children:jsx(D,{asChild:true,isActive:location.pathname.includes(`/list/${r.plural}`),tooltip:B(r.menu?.label??r.plural),children:jsxs(ne,{to:`list/${r.plural}`,children:[createElement(E[se(r.name)],{className:"fk:h-4 fk:w-4 fk:mr-2",strokeWidth:2}),jsx("span",{children:B(r.menu?.label??r.plural)})]})})},r.plural))})})]}),jsx(J,{})]})}function B(e){let t=e.replace(/([A-Z])/g," $1");return t.charAt(0).toUpperCase()+t.slice(1).trim()}function se(e){let t=la.search(e);return t.length>0?t[0].item.name:"Dock"}function ua({className:e,orientation:t="horizontal",...a$1}){return jsx(Tabs.Root,{"data-slot":"tabs","data-orientation":t,orientation:t,className:a("fk:group/tabs fk:flex fk:data-[orientation=horizontal]:flex-col",e),...a$1})}var pa=cva("fk:group/tabs-list fk:inline-flex fk:w-fit fk:items-center fk:justify-center fk:rounded-lg fk:p-[3px] fk:text-muted-foreground fk:group-data-[orientation=horizontal]/tabs:h-9 fk:group-data-[orientation=vertical]/tabs:h-fit fk:group-data-[orientation=vertical]/tabs:flex-col fk:data-[variant=line]:rounded-none",{variants:{variant:{default:"fk:bg-muted",line:"fk:gap-1 fk:bg-transparent"}},defaultVariants:{variant:"default"}});function ba({className:e,variant:t="default",...a$1}){return jsx(Tabs.List,{"data-slot":"tabs-list","data-variant":t,className:a(pa({variant:t}),e),...a$1})}function ma({className:e,...t}){return jsx(Tabs.Trigger,{"data-slot":"tabs-trigger",className:a("fk:relative fk:inline-flex fk:h-[calc(100%-1px)] fk:flex-1 fk:items-center fk:justify-center fk:gap-1.5 fk:rounded-md fk:border fk:border-transparent! fk:px-4 fk:py-1 fk:text-sm fk:font-medium fk:whitespace-nowrap fk:text-foreground/60 fk:transition-all fk:group-data-[orientation=vertical]/tabs:w-full fk:group-data-[orientation=vertical]/tabs:justify-start fk:hover:text-foreground fk:focus-visible:border-ring! fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:focus-visible:outline-1 fk:focus-visible:outline-ring fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm fk:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none fk:dark:text-muted-foreground fk:dark:hover:text-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4","fk:group-data-[variant=line]/tabs-list:bg-transparent fk:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent! fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent","fk:data-[state=active]:bg-background fk:data-[state=active]:text-foreground fk:dark:data-[state=active]:border-muted-foreground/75! fk:dark:data-[state=active]:bg-input/30 fk:dark:data-[state=active]:text-foreground","fk:after:absolute fk:after:bg-foreground fk:after:opacity-0 fk:after:transition-opacity fk:group-data-[orientation=horizontal]/tabs:after:inset-x-0 fk:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] fk:group-data-[orientation=horizontal]/tabs:after:h-0.5 fk:group-data-[orientation=vertical]/tabs:after:inset-y-0 fk:group-data-[orientation=vertical]/tabs:after:-right-1 fk:group-data-[orientation=vertical]/tabs:after:w-0.5 fk:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",e),...t})}function ga({className:e,...t}){return jsx(Tabs.Content,{"data-slot":"tabs-content",className:a("fk:flex-1 fk:outline-none",e),...t})}export{Ot as ExternalLink,$t as ResizableHandle,Ft as ResizablePanel,Ht as ResizablePanelGroup,F as Sheet,Wt as SheetClose,$ as SheetContent,W as SheetDescription,Xt as SheetFooter,j as SheetHeader,ee as SheetOverlay,Q as SheetPortal,K as SheetTitle,Kt as SheetTrigger,ka as Sidebar,U as SidebarContent,z as SidebarGroup,ra as SidebarInset,N as SidebarMenu,D as SidebarMenuButton,I as SidebarMenuItem,q as SidebarPanel,aa as SidebarProvider,J as SidebarRail,oa as SidebarTrigger,ua as Tabs,ga as TabsContent,ba as TabsList,ma as TabsTrigger,w as useSidebar};//# sourceMappingURL=ui.js.map
1
+ import'./index.css';export{g as Separator,h as Table,j as TableBody,o as TableCaption,n as TableCell,k as TableFooter,m as TableHead,i as TableHeader,l as TableRow,f as Toaster,b as Toggle,c as ToggleGroup,d as ToggleGroupItem,e as toast,a as toggleVariants}from'./chunk-ZSJAPCIZ.js';export{a as Input}from'./chunk-7GBAYC7G.js';export{a as Textarea}from'./chunk-OEWYLKO7.js';import {a as a$1,b as b$1,c,e}from'./chunk-YW2EEXMV.js';export{b as Tooltip,e as TooltipContent,d as TooltipPortal,a as TooltipProvider,c as TooltipTrigger}from'./chunk-YW2EEXMV.js';export{a as Select,e as SelectContent,b as SelectGroup,g as SelectItem,f as SelectLabel,j as SelectScrollDownButton,i as SelectScrollUpButton,h as SelectSeparator,d as SelectTrigger,c as SelectValue}from'./chunk-XU2JGXYC.js';export{b as Badge,m as Command,n as CommandDialog,q as CommandEmpty,r as CommandGroup,o as CommandInput,t as CommandItem,p as CommandList,s as CommandSeparator,u as CommandShortcut,c as Dialog,f as DialogClose,h as DialogContent,l as DialogDescription,j as DialogFooter,i as DialogHeader,g as DialogOverlay,e as DialogPortal,k as DialogTitle,d as DialogTrigger,v as ScrollArea,w as ScrollBar,a as badgeVariants}from'./chunk-NNRD7YZU.js';export{a as Avatar,c as AvatarFallback,b as AvatarImage}from'./chunk-2FFSI7IK.js';export{c as DropdownMenu,i as DropdownMenuCheckboxItem,f as DropdownMenuContent,g as DropdownMenuGroup,h as DropdownMenuItem,l as DropdownMenuLabel,d as DropdownMenuPortal,j as DropdownMenuRadioGroup,k as DropdownMenuRadioItem,m as DropdownMenuSeparator,n as DropdownMenuShortcut,o as DropdownMenuSub,q as DropdownMenuSubContent,p as DropdownMenuSubTrigger,e as DropdownMenuTrigger,r as Skeleton}from'./chunk-TBCSVE5L.js';import {b}from'./chunk-EYGOJ2ZN.js';export{b as Button,a as buttonVariants}from'./chunk-EYGOJ2ZN.js';export{a as Switch}from'./chunk-KGYH74NA.js';export{b as Form,g as FormControl,h as FormDescription,c as FormField,e as FormItem,f as FormLabel,i as FormMessage,a as Label,d as useFormField}from'./chunk-AALMEPYG.js';import {a}from'./chunk-O2QMYUPS.js';import*as E from'lucide-react';import {SquareArrowOutUpRight,GripVerticalIcon,XIcon,PanelLeftIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';import*as h from'react-resizable-panels';import {Dialog,Slot,Tabs}from'radix-ui';import*as d from'react';import {createElement}from'react';import na from'fuse.js';import {NavLink}from'react-router-dom';import {cva}from'class-variance-authority';import {groupBy}from'ramda';function Ot({href:e,children:t}){return jsx(b,{asChild:true,className:"fk:h-6 fk:px-1! fk:py-0 fk:text-sm fk:font-light fk:text-link",size:"sm",variant:"link",children:jsxs("a",{href:e,target:"_blank",children:[t," ",jsx(SquareArrowOutUpRight,{className:"fk:size-3",strokeWidth:3})]})})}function Ht({className:e,...t}){return jsx(h.Group,{"data-slot":"resizable-panel-group",className:a("fk:flex fk:h-full fk:w-full fk:aria-[orientation=vertical]:flex-col",e),...t})}function Ft({...e}){return jsx(h.Panel,{"data-slot":"resizable-panel",...e})}function $t({withHandle:e,className:t,...a$1}){return jsx(h.Separator,{"data-slot":"resizable-handle",className:a("fk:relative fk:flex fk:w-px fk:items-center fk:justify-center fk:bg-border fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-1 fk:after:-translate-x-1/2 fk:focus-visible:ring-1 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-1 fk:focus-visible:outline-hidden fk:aria-[orientation=horizontal]:h-px fk:aria-[orientation=horizontal]:w-full fk:aria-[orientation=horizontal]:after:left-0 fk:aria-[orientation=horizontal]:after:h-1 fk:aria-[orientation=horizontal]:after:w-full fk:aria-[orientation=horizontal]:after:translate-x-0 fk:aria-[orientation=horizontal]:after:-translate-y-1/2 fk:[&[aria-orientation=horizontal]>div]:rotate-90",t),...a$1,children:e&&jsx("div",{className:"fk:z-10 fk:flex fk:h-8 fk:w-3 fk:items-center fk:justify-center fk:rounded-xs fk:border fk:bg-border",children:jsx(GripVerticalIcon,{className:"fk:size-2.5"})})})}function F({...e}){return jsx(Dialog.Root,{"data-slot":"sheet",...e})}function Kt({...e}){return jsx(Dialog.Trigger,{"data-slot":"sheet-trigger",...e})}function Wt({...e}){return jsx(Dialog.Close,{"data-slot":"sheet-close",...e})}function Q({...e}){return jsx(Dialog.Portal,{"data-slot":"sheet-portal",...e})}function ee({className:e,...t}){return jsx(Dialog.Overlay,{"data-slot":"sheet-overlay",className:a("fk:fixed fk:inset-0 fk:z-50 fk:bg-black/50 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0",e),...t})}function $({className:e,children:t,side:a$1="right",showCloseButton:f=true,...s}){return jsxs(Q,{children:[jsx(ee,{}),jsxs(Dialog.Content,{"data-slot":"sheet-content",className:a("fk:fixed fk:z-50 fk:flex fk:flex-col fk:gap-4 fk:bg-background fk:shadow-lg fk:transition fk:ease-in-out fk:data-[state=closed]:animate-out fk:data-[state=closed]:duration-300 fk:data-[state=open]:animate-in fk:data-[state=open]:duration-500",a$1==="right"&&"fk:inset-y-0 fk:right-0 fk:h-full fk:w-3/4 fk:border-l fk:data-[state=closed]:slide-out-to-right fk:data-[state=open]:slide-in-from-right fk:sm:max-w-sm",a$1==="left"&&"fk:inset-y-0 fk:left-0 fk:h-full fk:w-3/4 fk:border-r fk:data-[state=closed]:slide-out-to-left fk:data-[state=open]:slide-in-from-left fk:sm:max-w-sm",a$1==="top"&&"fk:inset-x-0 fk:top-0 fk:h-auto fk:border-b fk:data-[state=closed]:slide-out-to-top fk:data-[state=open]:slide-in-from-top",a$1==="bottom"&&"fk:inset-x-0 fk:bottom-0 fk:h-auto fk:border-t fk:data-[state=closed]:slide-out-to-bottom fk:data-[state=open]:slide-in-from-bottom",e),...s,children:[t,f&&jsxs(Dialog.Close,{className:"fk:absolute fk:top-4 fk:right-4 fk:rounded-xs fk:opacity-70 fk:ring-offset-background fk:transition-opacity fk:hover:opacity-100 fk:focus:ring-2 fk:focus:ring-ring fk:focus:ring-offset-2 fk:focus:outline-hidden fk:disabled:pointer-events-none fk:data-[state=open]:bg-secondary",children:[jsx(XIcon,{className:"fk:size-4"}),jsx("span",{className:"fk:sr-only",children:"Close"})]})]})]})}function j({className:e,...t}){return jsx("div",{"data-slot":"sheet-header",className:a("fk:flex fk:flex-col fk:gap-1.5 fk:p-4",e),...t})}function Xt({className:e,...t}){return jsx("div",{"data-slot":"sheet-footer",className:a("fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4",e),...t})}function K({className:e,...t}){return jsx(Dialog.Title,{"data-slot":"sheet-title",className:a("fk:font-semibold fk:text-foreground",e),...t})}function W({className:e,...t}){return jsx(Dialog.Description,{"data-slot":"sheet-description",className:a("fk:text-sm fk:text-muted-foreground",e),...t})}var X=768;function te(){let[e,t]=d.useState(void 0);return d.useEffect(()=>{let a=window.matchMedia(`(max-width: ${X-1}px)`),f=()=>{t(window.innerWidth<X);};return a.addEventListener("change",f),t(window.innerWidth<X),()=>a.removeEventListener("change",f)},[]),!!e}var Ut="flexkit:sidebar:state",Yt=3600*24*7,Zt="16rem",Qt="18rem",ea="2rem",ta="b",oe=d.createContext(null);function w(){let e=d.useContext(oe);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function aa({defaultOpen:e=true,open:t,onOpenChange:a$2,className:f,style:s,children:u,...r}){let n=te(),[g,b]=d.useState(false),[R,fe]=d.useState(e),v=t??R,y=d.useCallback(c=>{let m=typeof c=="function"?c(v):c;a$2?a$2(m):fe(m),document.cookie=`${Ut}=${m}; path=/; max-age=${Yt}`;},[a$2,v]),T=d.useCallback(()=>n?b(c=>!c):y(c=>!c),[n,y,b]);d.useEffect(()=>{let c=m=>{m.key===ta&&(m.metaKey||m.ctrlKey)&&(m.preventDefault(),T());};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[T]);let Y=v?"expanded":"collapsed",de=d.useMemo(()=>({state:Y,open:v,setOpen:y,isMobile:n,openMobile:g,setOpenMobile:b,toggleSidebar:T}),[Y,v,y,n,g,b,T]);return jsx(oe.Provider,{value:de,children:jsx(a$1,{delayDuration:0,children:jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Zt,"--sidebar-width-icon":ea,...s},className:a("fk:group/sidebar-wrapper fk:flex fk:w-full fk:has-data-[variant=inset]:bg-sidebar fk:overflow-hidden",f),...r,children:u})})})}function q({side:e="left",variant:t="sidebar",collapsible:a$1="offcanvas",className:f,children:s,...u}){let{isMobile:r,state:n,openMobile:g,setOpenMobile:b}=w();return a$1==="none"?jsx("div",{"data-slot":"sidebar",className:a("fk:flex fk:h-full fk:w-(--sidebar-width) fk:flex-col fk:bg-sidebar fk:text-sidebar-foreground",f),...u,children:s}):r?jsx(F,{open:g,onOpenChange:b,...u,children:jsxs($,{"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"fk:w-(--sidebar-width) fk:bg-sidebar fk:p-0 fk:text-sidebar-foreground fk:[&>button]:hidden",style:{"--sidebar-width":Qt},side:e,children:[jsxs(j,{className:"fk:sr-only",children:[jsx(K,{children:"Sidebar"}),jsx(W,{children:"Displays the mobile sidebar."})]}),jsx("div",{className:"fk:flex fk:h-full fk:w-full fk:flex-col",children:s})]})}):jsxs("div",{className:"fk:group fk:peer fk:hidden fk:text-sidebar-foreground fk:md:block","data-state":n,"data-collapsible":n==="collapsed"?a$1:"","data-variant":t,"data-side":e,"data-slot":"sidebar",children:[jsx("div",{"data-slot":"sidebar-gap",className:a("fk:relative fk:w-(--sidebar-width) fk:bg-transparent fk:transition-[width] fk:duration-200 fk:ease-linear","fk:group-data-[collapsible=offcanvas]:w-0","fk:group-data-[side=right]:rotate-180",t==="floating"||t==="inset"?"fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),jsx("div",{"data-slot":"sidebar-container",className:a("fk:relative fk:inset-y-0 fk:z-10 fk:hidden fk:h-[calc(100svh-3.5rem)] fk:w-(--sidebar-width) fk:transition-[left,right,width] fk:duration-200 fk:ease-linear fk:md:flex",e==="left"?"fk:left-0 fk:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)":"fk:right-0 k:group-data-[collapsible=offcanvas]:-right-(--sidebar-width)",t==="floating"||t==="inset"?"fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] fk:group-data-[side=left]:border-r":"fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon) fk:group-data-[side=left]:border-r fk:group-data-[side=right]:border-l",f),...u,children:jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"fk:flex fk:h-full fk:w-full fk:flex-col fk:bg-sidebar fk:group-data-[variant=floating]:rounded-lg fk:group-data-[variant=floating]:border fk:group-data-[variant=floating]:border-sidebar-border fk:group-data-[variant=floating]:shadow-sm",children:s})})]})}function oa({className:e,onClick:t,...a$1}){let{toggleSidebar:f}=w();return jsxs(b,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon",className:a("fk:size-7",e),onClick:s=>{t?.(s),f();},...a$1,children:[jsx(PanelLeftIcon,{}),jsx("span",{className:"fk:sr-only",children:"Toggle Sidebar"})]})}function J({className:e,...t}){let{toggleSidebar:a$1}=w();return jsx("button",{"data-sidebar":"rail","data-slot":"sidebar-rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:a$1,title:"Toggle Sidebar",className:a("fk:absolute fk:inset-y-0 fk:z-20 fk:hidden fk:w-4 fk:-translate-x-1/2 fk:transition-all fk:ease-linear fk:group-data-[side=left]:-right-4 fk:group-data-[side=right]:left-0 fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-[2px] fk:hover:after:bg-sidebar-border fk:sm:flex","fk:in-data-[side=left]:cursor-w-resize fk:in-data-[side=right]:cursor-e-resize","fk:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize fk:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize","fk:group-data-[collapsible=offcanvas]:translate-x-0 fk:group-data-[collapsible=offcanvas]:after:left-full fk:hover:group-data-[collapsible=offcanvas]:bg-sidebar","fk:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","fk:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",e),...t})}function ra({className:e,...t}){return jsx("main",{"data-slot":"sidebar-inset",className:a("fk:relative fk:flex fk:flex-1 fk:flex-col fk:bg-background fk:overflow-hidden fk:peer-data-[variant=inset]:h-[calc(100svh-3.625rem)]",e),...t})}function U({className:e,...t}){return jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:a("fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:overflow-auto fk:group-data-[collapsible=icon]:overflow-hidden",e),...t})}function z({className:e,...t}){return jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:a("fk:relative fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:p-2",e),...t})}function re({className:e,asChild:t=false,...a$1}){let f=t?Slot.Root:"div";return jsx(f,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:a("fk:flex fk:h-8 fk:shrink-0 fk:items-center fk:rounded-md fk:px-2 fk:text-xs fk:font-medium fk:text-sidebar-foreground/70 fk:ring-sidebar-ring fk:outline-hidden fk:transition-[margin,opacity] fk:duration-200 fk:ease-linear fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0","fk:group-data-[collapsible=icon]:-mt-8 fk:group-data-[collapsible=icon]:opacity-0",e),...a$1})}function N({className:e,...t}){return jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:a("fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:gap-1",e),...t})}function I({className:e,...t}){return jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:a("fk:group/menu-item fk:relative",e),...t})}var ia=cva("fk:peer/menu-button fk:flex fk:w-full fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:p-2 fk:text-left fk:text-sm fk:ring-sidebar-ring fk:outline-hidden fk:transition-[width,height,padding] fk:group-has-data-[sidebar=menu-action]/menu-item:pr-8 fk:group-data-[collapsible=icon]:size-8! fk:group-data-[collapsible=icon]:p-2! fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:font-medium fk:data-[active=true]:text-sidebar-accent-foreground fk:data-[state=open]:hover:bg-sidebar-accent fk:data-[state=open]:hover:text-sidebar-accent-foreground fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0",{variants:{variant:{default:"fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground",outline:"fk:bg-background fk:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"fk:h-8 fk:text-sm",sm:"fk:h-7 fk:text-xs",lg:"fk:h-12 fk:text-sm fk:group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function D({asChild:e$1=false,isActive:t=false,variant:a$1="default",size:f="default",tooltip:s,className:u,...r}){let n=e$1?Slot.Root:"button",{isMobile:g,state:b}=w(),R=jsx(n,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":f,"data-active":t,className:a(ia({variant:a$1,size:f}),u),...r});return s?(typeof s=="string"&&(s={children:s}),jsxs(b$1,{children:[jsx(c,{asChild:true,children:R}),jsx(e,{side:"right",align:"center",hidden:b!=="collapsed"||g,...s})]})):R}var ne=NavLink,da=Object.keys(E).map(e=>({name:e,icon:E[e]})),la=new na(da,{keys:["name"],threshold:.5});function ka({className:e,menuGroups:t,schema:a}){let f=a.filter(r=>!(r.menu&&"hidden"in r.menu)),s=groupBy(r=>r.menu?.group&&t?.find(n=>n.name===r.menu?.group)?.name||"ungrouped",f),u=t?.filter(r=>s[r.name]?.length);return jsxs(q,{className:e,collapsible:"icon",variant:"inset",children:[jsxs(U,{children:[u?.map(r=>jsxs(z,{children:[jsx(re,{children:r.title}),jsx(N,{children:s[r.name]?.map(n=>jsx(I,{children:jsx(D,{asChild:true,isActive:location.pathname.includes(`/list/${n.plural}`),tooltip:B(n.menu?.label??n.plural),children:jsxs(ne,{to:`list/${n.plural}`,children:[n.menu?.icon??createElement(E[se(n.name)],{className:"fk:h-4 fk:w-4 fk:mr-2",strokeWidth:2}),jsx("span",{children:B(n.menu?.label??n.plural)})]})})},n.plural))})]},r.name)),jsx(z,{children:jsx(N,{children:s.ungrouped?.map(r=>jsx(I,{children:jsx(D,{asChild:true,isActive:location.pathname.includes(`/list/${r.plural}`),tooltip:B(r.menu?.label??r.plural),children:jsxs(ne,{to:`list/${r.plural}`,children:[createElement(E[se(r.name)],{className:"fk:h-4 fk:w-4 fk:mr-2",strokeWidth:2}),jsx("span",{children:B(r.menu?.label??r.plural)})]})})},r.plural))})})]}),jsx(J,{})]})}function B(e){let t=e.replace(/([A-Z])/g," $1");return t.charAt(0).toUpperCase()+t.slice(1).trim()}function se(e){let t=la.search(e);return t.length>0?t[0].item.name:"Dock"}function ua({className:e,orientation:t="horizontal",...a$1}){return jsx(Tabs.Root,{"data-slot":"tabs","data-orientation":t,orientation:t,className:a("fk:group/tabs fk:flex fk:data-[orientation=horizontal]:flex-col",e),...a$1})}var pa=cva("fk:group/tabs-list fk:inline-flex fk:w-fit fk:items-center fk:justify-center fk:rounded-lg fk:p-[3px] fk:text-muted-foreground fk:group-data-[orientation=horizontal]/tabs:h-9 fk:group-data-[orientation=vertical]/tabs:h-fit fk:group-data-[orientation=vertical]/tabs:flex-col fk:data-[variant=line]:rounded-none",{variants:{variant:{default:"fk:bg-muted",line:"fk:gap-1 fk:bg-transparent"}},defaultVariants:{variant:"default"}});function ba({className:e,variant:t="default",...a$1}){return jsx(Tabs.List,{"data-slot":"tabs-list","data-variant":t,className:a(pa({variant:t}),e),...a$1})}function ma({className:e,...t}){return jsx(Tabs.Trigger,{"data-slot":"tabs-trigger",className:a("fk:relative fk:inline-flex fk:h-[calc(100%-1px)] fk:flex-1 fk:items-center fk:justify-center fk:gap-1.5 fk:rounded-md fk:border fk:border-transparent! fk:px-4 fk:py-1 fk:text-sm fk:font-medium fk:whitespace-nowrap fk:text-foreground/60 fk:transition-all fk:group-data-[orientation=vertical]/tabs:w-full fk:group-data-[orientation=vertical]/tabs:justify-start fk:hover:text-foreground fk:focus-visible:border-ring! fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:focus-visible:outline-1 fk:focus-visible:outline-ring fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm fk:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none fk:dark:text-muted-foreground fk:dark:hover:text-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4","fk:group-data-[variant=line]/tabs-list:bg-transparent fk:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent! fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent","fk:data-[state=active]:bg-background fk:data-[state=active]:text-foreground fk:dark:data-[state=active]:border-muted-foreground/75! fk:dark:data-[state=active]:bg-input/30 fk:dark:data-[state=active]:text-foreground","fk:after:absolute fk:after:bg-foreground fk:after:opacity-0 fk:after:transition-opacity fk:group-data-[orientation=horizontal]/tabs:after:inset-x-0 fk:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] fk:group-data-[orientation=horizontal]/tabs:after:h-0.5 fk:group-data-[orientation=vertical]/tabs:after:inset-y-0 fk:group-data-[orientation=vertical]/tabs:after:-right-1 fk:group-data-[orientation=vertical]/tabs:after:w-0.5 fk:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",e),...t})}function ga({className:e,...t}){return jsx(Tabs.Content,{"data-slot":"tabs-content",className:a("fk:flex-1 fk:outline-none",e),...t})}export{Ot as ExternalLink,$t as ResizableHandle,Ft as ResizablePanel,Ht as ResizablePanelGroup,F as Sheet,Wt as SheetClose,$ as SheetContent,W as SheetDescription,Xt as SheetFooter,j as SheetHeader,ee as SheetOverlay,Q as SheetPortal,K as SheetTitle,Kt as SheetTrigger,ka as Sidebar,U as SidebarContent,z as SidebarGroup,ra as SidebarInset,N as SidebarMenu,D as SidebarMenuButton,I as SidebarMenuItem,q as SidebarPanel,aa as SidebarProvider,J as SidebarRail,oa as SidebarTrigger,ua as Tabs,ga as TabsContent,ba as TabsList,ma as TabsTrigger,w as useSidebar};//# sourceMappingURL=ui.js.map
2
2
  //# sourceMappingURL=ui.js.map