@orangecheck/app-design 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/chrome.d.mts +11 -6
- package/dist/chrome.d.ts +11 -6
- package/dist/chrome.js +156 -130
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +155 -131
- package/dist/chrome.mjs.map +1 -1
- package/dist/components.d.mts +40 -5
- package/dist/components.d.ts +40 -5
- package/dist/components.js +135 -13
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +132 -14
- package/dist/components.mjs.map +1 -1
- package/dist/{docs-CFE5mU_6.d.mts → docs-B9G1BNXI.d.mts} +2 -2
- package/dist/{docs-ByUx4t-D.d.ts → docs-BWWnm5Jv.d.ts} +2 -2
- package/dist/family.d.mts +1 -1
- package/dist/family.d.ts +1 -1
- package/dist/family.js +7 -1
- package/dist/family.js.map +1 -1
- package/dist/family.mjs +5 -2
- package/dist/family.mjs.map +1 -1
- package/dist/{index-DmfyPYe5.d.mts → index-Bkl49Vgy.d.mts} +4 -1
- package/dist/{index-DmfyPYe5.d.ts → index-Bkl49Vgy.d.ts} +4 -1
- package/dist/index.d.mts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +197 -48
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +189 -49
- package/dist/index.mjs.map +1 -1
- package/dist/mdx.d.mts +3 -3
- package/dist/mdx.d.ts +3 -3
- package/dist/mdx.js +5 -3
- package/dist/mdx.js.map +1 -1
- package/dist/mdx.mjs +5 -3
- package/dist/mdx.mjs.map +1 -1
- package/dist/primitives.d.mts +2 -2
- package/dist/primitives.d.ts +2 -2
- package/dist/primitives.js +2 -1
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +2 -1
- package/dist/primitives.mjs.map +1 -1
- package/dist/session.d.mts +4 -4
- package/dist/session.d.ts +4 -4
- package/dist/session.js +122 -1
- package/dist/session.js.map +1 -1
- package/dist/session.mjs +122 -1
- package/dist/session.mjs.map +1 -1
- package/dist/{status-badge-BJ9Sdsx8.d.mts → status-badge-BBbCO6ZA.d.mts} +1 -1
- package/dist/{status-badge-Bt8x3RhO.d.ts → status-badge-CHHxtFkP.d.ts} +1 -1
- package/dist/styles/swagger.css +24 -1
- package/dist/styles/tokens.css +5 -0
- package/dist/{tool-shell-CQZNRUgH.d.mts → tool-shell-CnZ3NUSi.d.ts} +10 -4
- package/dist/{tool-shell-CRmceGrV.d.ts → tool-shell-DQFEMLLe.d.mts} +10 -4
- package/dist/{tools-Bg1gi2HO.d.mts → tools-CKO8IseL.d.mts} +2 -2
- package/dist/{tools-Bw7RhO92.d.ts → tools-CzjFPng4.d.ts} +2 -2
- package/package.json +5 -2
package/dist/primitives.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/cn.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/status-badge.tsx","../src/primitives/card.tsx","../src/lib/shared-context.ts","../src/lib/density.ts","../src/primitives/form.tsx","../src/primitives/overlay.tsx","../src/primitives/scroll-fade.tsx","../src/primitives/tabs.tsx","../src/primitives/accordion.tsx","../src/primitives/dialogs.tsx","../src/primitives/pagination.tsx","../src/primitives/qr-code.tsx"],"names":["Separator","SonnerToaster","forwardRef","Button","jsx","jsxs","cva","Card","Input","Textarea","Label","Fragment","SelectTrigger","useContext","SelectContent","SelectItem","Checkbox","Switch","RadioGroup","RadioGroupItem","DialogContent","DialogTitle","DialogDescription","SheetContent","PopoverContent","TooltipContent","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","useState","useEffect","createContext","Tabs","TabsList","TabsTrigger","TabsContent","useId","ChevronDown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAM,QAAQ,mBAAA,CAAgC;AAAA,EAC1C,MAAA,EAAQ;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,UAAA,EAAY;AAAA,QACR,eAAA;AAAA,QACA,eAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AACJ;AACJ;AAER,CAAC,CAAA;AAEM,SAAS,MAAM,MAAA,EAA8B;AAChD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACVO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,KAAA,EAAM,EAA2C;AAClF,EAAA,uBACI,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAM,QAAQ,QAAA,GAAW,MAAA;AAAA,MACzB,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAa,QAAQ,MAAA,GAAY,IAAA;AAAA,MACjC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAE9C,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,MAAA,EAAO,cAAA,EAAe,aAAA,EAAc,KAAA,EAAM,WAAA,EAAY,KAAA,EAAM,CAAA;AAAA,wBAC1F,GAAA,CAAC,UAAK,CAAA,EAAE,sBAAA,EAAuB,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ;AAAA;AAAA;AAAA,GACjG;AAER;AAGO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC9E,EAAA,uBACI,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAQ,UAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,mDAAA,EAAqD,SAAS,CAAA;AAAA,MAC3E,GAAG;AAAA;AAAA,GACR;AAER;AAMO,SAAS,WAAA,CAAY,MAAA,EAAiB,EAAA,GAAK,IAAA,EAAiB;AAC/D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAI,UAAA,CAAW,MAAM,WAAA,CAAY,IAAI,GAAG,EAAE,CAAA;AAChD,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,MAAA,EAAQ,EAAE,CAAC,CAAA;AACf,EAAA,OAAO,QAAA;AACX;AAEO,IAAM,SAAA,GAAY,UAAA,CAGvB,SAASA,UAAAA,CAAU,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,EAAK;AAC9F,EAAA,uBACI,GAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACG,GAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,oBAAA;AAAA,QACA,WAAA,KAAgB,eAAe,aAAA,GAAgB,aAAA;AAAA,QAC/C;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAEM,SAAS,GAAA,CAAI,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACI,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,gJAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAGO,SAAS,SAAA,CAAU;AAAA,EACtB,IAAA,GAAO,SAAA;AAAA,EACP,KAAA,GAAQ,KAAA;AAAA,EACR;AACJ,CAAA,EAIG;AACC,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,OAAA,EAAS,eAAA;AAAA,IACT,OAAA,EAAS,YAAA;AAAA,IACT,OAAA,EAAS,YAAA;AAAA,IACT,MAAA,EAAQ,gBAAA;AAAA,IACR,KAAA,EAAO;AAAA,IACT,IAAI,CAAA;AACN,EAAA,uBACI,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,aAAA,EAAW,IAAA;AAAA,MACX,WAAW,EAAA,CAAG,2CAAA,EAA6C,KAAA,EAAO,KAAA,IAAS,yBAAyB,SAAS;AAAA;AAAA,GACjH;AAER;AAOA,IAAM,aAAA,GAAgB;AAAA,EAClB,aAAA,EAAe,gBAAA;AAAA,EACf,eAAA,EAAiB,2BAAA;AAAA,EACjB,iBAAA,EAAmB;AACvB,CAAA;AAGO,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAO,GAAG,OAAM,EAAiB;AACvD,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,QAAA,EAAS;AACnC,EAAA,uBACI,GAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACG,OAAO,aAAA,KAAkB,MAAA,GAAS,MAAA,GAAS,aAAA,KAAkB,UAAU,OAAA,GAAU,QAAA;AAAA,MACjF,KAAA,EAAO,EAAE,GAAG,aAAA,EAAe,GAAG,KAAA,EAAM;AAAA,MACpC,QAAA,EAAS,cAAA;AAAA,MACT,YAAA,EAAc;AAAA,QACV,UAAA,EAAY;AAAA,UACR,KAAA,EAAO,mGAAA;AAAA,UACP,KAAA,EAAO,8BAAA;AAAA,UACP,WAAA,EAAa,+BAAA;AAAA,UACb,YAAA,EAAc,iDAAA;AAAA,UACd,YAAA,EAAc;AAAA;AAClB,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACtIO,IAAM,cAAA,GAAiB,GAAA;AAAA,EAC1B;AAAA,IACI,+GAAA;AAAA,IACA,oFAAA;AAAA,IACA,4HAAA;AAAA,IACA,oDAAA;AAAA;AAAA;AAAA,IAGA,wGAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,wDAAA;AAAA,QACT,SAAA,EACI,8GAAA;AAAA,QACJ,KAAA,EAAO,yDAAA;AAAA,QACP,KAAA,EAAO,iCAAA;AAAA,QACP,MAAA,EAAQ,oEAAA;AAAA,QACR,IAAA,EAAM,4HAAA;AAAA,QACN,KAAA,EAAO,yCAAA;AAAA,QACP,YAAA,EAAc;AAAA,OAClB;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,4BAAA;AAAA,QACJ,EAAA,EAAI,4BAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,IACA,kBAAkB,CAAC,EAAE,SAAS,MAAA,EAAQ,SAAA,EAAW,eAAe,CAAA;AAAA,IAChE,eAAA,EAAiB,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,IAAA;AAAK;AAE1D;AAWO,IAAM,SAASC,UAAAA,CAA2C,SAASC,QACtE,EAAE,SAAA,EAAW,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,OAAA,GAAU,OAAO,QAAA,EAAU,QAAA,EAAU,MAAM,GAAG,KAAA,IAC3F,GAAA,EACF;AACE,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,QAAA;AAC9B,EAAA,uBACIC,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC1D,QAAA,EAAU,OAAA,GAAU,MAAA,GAAY,QAAA,IAAY,OAAA;AAAA,MAC5C,aAAW,OAAA,IAAW,MAAA;AAAA,MACtB,IAAA,EAAM,OAAA,GAAU,MAAA,GAAa,IAAA,IAAQ,QAAA;AAAA,MACpC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,OAAA,GACG,QAAA,mBAEAC,IAAAA,CAAA,QAAA,EAAA,EACK,QAAA,EAAA;AAAA,QAAA,OAAA,mBAAUD,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,gBAAe,CAAA,GAAK,IAAA;AAAA,QACjD;AAAA,OAAA,EACL;AAAA;AAAA,GAER;AAER,CAAC;ACzED,IAAM,QAAA,GACF,iIAAA;AAEG,IAAM,aAAA,GAAgBE,GAAAA;AAAA,EACzB,sIAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,IAAA,EAAM;AAAA,QACF,OAAA,EAAS,uCAAA;AAAA,QACT,KAAA,EAAO,mDAAA;AAAA,QACP,KAAA,EAAO,kGAAA;AAAA,QACP,MAAA,EAAQ,iGAAA;AAAA;AAAA,QAER,OAAA,EAAS,QAAA;AAAA;AAAA;AAAA,QAGT,OAAA,EAAS,kGAAA;AAAA,QACT,IAAA,EAAM,uCAAA;AAAA;AAAA,QAEN,GAAA,EAAK,+FAAA;AAAA,QACL,KAAA,EAAO;AAAA;AACX,KACJ;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,SAAA;AAAU;AAE3C;AAIO,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAe;AAC7D,EAAA,uBAAOF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAQ,SAAQ,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,MAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC/F;AAGO,SAAS,UAAA,CAAW;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,IAAA;AAAA,EACR,GAAG;AACP,CAAA,EAA0D;AACtD,EAAA,uBACIC,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAQ,aAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACP,wJAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,WAAU,+BAAA,EACvB,QAAA,EAAA;AAAA,UAAA,KAAA,mBACGD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mFAAkF,CAAA,GAClG,IAAA;AAAA,0BACJA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EAA6C;AAAA,SAAA,EACjE,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACL;AAER;ACrDA,IAAM,IAAA,GAA+B;AAAA,EACjC,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,YAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS;AACb,CAAA;AAEA,IAAM,IAAA,GAAO;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,SAAA,EAAW,OAAA;AAAA,EACX,MAAA,EAAQ,OAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AACb,CAAA;AAGO,SAAS,WAAW,MAAA,EAAwB;AAC/C,EAAA,OAAO,KAAK,MAAM,CAAA;AACtB;AAMO,SAAS,YAAY,EAAE,MAAA,EAAQ,SAAA,EAAW,GAAG,OAAM,EAAqB;AAC3E,EAAA,uBACIA,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA,EAAG,aAAA,EAAa,MAAA,EAAQ,SAAA,EAAW,GAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACzE,QAAA,EAAA,IAAA,CAAK,MAAM,CAAA,EAChB,CAAA;AAER;ACzCO,IAAM,YAAA,GAAeE,IAAI,mCAAA,EAAqC;AAAA,EACjE,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,OAAA,EAAS,4CAAA;AAAA,MACT,MAAA,EAAQ,6CAAA;AAAA,MACR,GAAA,EAAK,6DAAA;AAAA,MACL,OAAA,EAAS;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACL,IAAA,EAAM,EAAA;AAAA,MACN,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI,YAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACR;AAAA,IACA,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,4FAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,iBAAiB,EAAE,IAAA,EAAM,WAAW,OAAA,EAAS,IAAA,EAAM,aAAa,KAAA;AACpE,CAAC;AAIM,IAAM,IAAA,GAAOJ,UAAAA,CAAsC,SAASK,KAAAA,CAC/D,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,GAAG,KAAA,EAAM,EAClD,GAAA,EACF;AACE,EAAA,uBACIH,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAQ,MAAA,EAAO,WAAW,EAAA,CAAG,YAAA,CAAa,EAAE,IAAA,EAAM,SAAS,WAAA,EAAa,GAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEzH,CAAC;AAEM,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAChF,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC5E;AAGO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoC;AAClF,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,mBAAA,EAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC3E;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAuC;AACnF,EAAA,uBAAOA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,+CAAA,EAAiD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACrG;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyC;AAC3F,EAAA,uBAAOA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC/D;AAEO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AACjF,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,MAAA,EAAQ,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC7D;AAEO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAChF,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,wCAAA,EAA0C,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC/F;ACxDO,SAAS,aAAA,CAAiB,MAAc,OAAA,EAAwB;AACnE,EAAA,MAAM,GAAA,mBAAM,MAAA,CAAO,GAAA,CAAI,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAE,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,OAAQ,KAAA,CAAA,GAAA,CAAA,KAAA,KAAA,CAAA,GAAA,CAAA,GAAe,cAAiB,OAAO,CAAA,CAAA;AACnD;;;ACAA,IAAM,cAAA,GAAiB,aAAA,CAAuB,SAAA,EAAW,aAAa,CAAA;AAE/D,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAS,QAAA,EAAS,EAA8C;AAC9F,EAAA,OAAO,cAAc,cAAA,CAAe,QAAA,EAAU,EAAE,KAAA,EAAO,OAAA,IAAW,QAAQ,CAAA;AAC9E;AAEO,SAAS,UAAA,GAAsB;AAClC,EAAA,OAAO,WAAW,cAAc,CAAA;AACpC;ACKA,IAAM,SAAA,GAAY;AAAA,EACd,2FAAA;AAAA,EACA,iFAAA;AAAA,EACA,4GAAA;AAAA,EACA,iDAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,UAAA,GAAa;AAAA,EACf,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAOO,IAAM,KAAA,GAAQF,UAAAA,CAAyC,SAASM,MAAAA,CACnE,EAAE,SAAA,EAAW,IAAA,GAAO,MAAA,EAAQ,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3C,GAAA,EACF;AACE,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,CAAA,GAAI,IAAA,KAAS,OAAA,KAAY,SAAA,GAAY,IAAA,GAAO,IAAA,CAAA;AAClD,EAAA,uBACIJ,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAQ,OAAA;AAAA,MACR,WAAA,EAAW,CAAA;AAAA,MACX,WAAW,EAAA,CAAG,SAAA,EAAW,UAAA,CAAW,CAAC,GAAG,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAEM,IAAM,QAAA,GAAWF,UAAAA;AAAA,EACpB,SAASO,SAAAA,CAAS,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,EAAK;AAC5C,IAAA,uBACIL,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACG,GAAA;AAAA,QACA,SAAA,EAAQ,UAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,sCAAA,EAAwC,SAAS,CAAA;AAAA,QACzE,GAAG;AAAA;AAAA,KACR;AAAA,EAER;AACJ;AAEO,IAAM,KAAA,GAAQF,WAGnB,SAASQ,MAAAA,CAAM,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC3C,EAAA,uBACIN,GAAAA;AAAA,IAAgB,cAAA,CAAA,IAAA;AAAA,IAAf;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA;AAAA,MAC1E,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAiCM,SAAS,KAAA,CAAM,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,SAAA,EAAW,MAAA,EAAO,EAAe;AACrH,EAAA,MAAM,YAAY,KAAA,EAAM;AACxB,EAAA,MAAM,KAAK,OAAA,IAAW,SAAA;AACtB,EAAA,MAAM,MAAA,GAAS,IAAA,GAAO,CAAA,EAAG,EAAE,CAAA,KAAA,CAAA,GAAU,MAAA;AACrC,EAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,GAAW,MAAA;AACxC,EAAA,MAAM,MAAA,GAA4B;AAAA,IAC9B,EAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,MAAA,EAAQ,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,IACnE,cAAA,EAAgB,QAAQ,IAAA,GAAO;AAAA,GACnC;AACA,EAAA,MAAM,UACF,OAAO,QAAA,KAAa,UAAA,GACd,QAAA,CAAS,MAAM,CAAA,GACf,cAAA,CAAe,QAAQ,CAAA,GACrB,aAAa,QAAA,EAAmD,EAAE,GAAG,MAAA,EAAQ,CAAA,GAC7E,QAAA;AACZ,EAAA,MAAM,QAAA,GAAW,IAAA,mBACbA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAI,MAAA,EAAQ,SAAA,EAAU,qDAAA,EACpB,QAAA,EAAA,IAAA,EACL,CAAA,GACA,IAAA;AACJ,EAAA,uBACIC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAC/C,QAAA,EAAA;AAAA,oBAAAA,KAAC,KAAA,EAAA,EAAM,OAAA,EAAS,IAAI,SAAA,EAAW,SAAA,GAAY,YAAY,2BAAA,EAClD,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MACA,2BAAWD,GAAAA,CAAC,UAAK,SAAA,EAAU,oDAAA,EAAqD,sBAAQ,CAAA,GAAU;AAAA,KAAA,EACvG,CAAA;AAAA,IACC,MAAA;AAAA;AAAA,sBAEGC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACX,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACV,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACA;AAAA,SAAA,EACL,CAAA;AAAA,wBACAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAA,MAAA,EAAO;AAAA,OAAA,EACtC;AAAA,wBAEAC,IAAAA,CAAAM,QAAAA,EAAA,EACK,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MACA;AAAA,KAAA,EACL,CAAA;AAAA,IAEH,KAAA,mBACGP,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,gDAAA,EAClC,QAAA,EAAA,KAAA,EACL,CAAA,GACA;AAAA,GAAA,EACR,CAAA;AAER;AAcA,IAAM,kBAAA,GAAqB,aAAA,CAAmC,cAAA,EAAgB,IAAI,CAAA;AAE3E,SAAS,MAAA,CAAO;AAAA,EACnB,EAAA;AAAA,EACA,kBAAA,EAAoB,WAAA;AAAA,EACpB,cAAA,EAAgB,OAAA;AAAA,EAChB,GAAG;AACP,CAAA,EAAyE;AACrE,EAAA,uBACIA,GAAAA,CAAC,kBAAA,CAAmB,UAAnB,EAA4B,KAAA,EAAO,EAAE,EAAA,EAAI,kBAAA,EAAoB,aAAa,cAAA,EAAgB,OAAA,IACvF,QAAA,kBAAAA,GAAAA,CAAiB,sBAAhB,EAAsB,GAAG,OAAO,CAAA,EACrC,CAAA;AAER;AACO,IAAM,WAAA,GAA8B,eAAA,CAAA;AACpC,IAAM,WAAA,GAA8B,eAAA,CAAA;AAEpC,IAAM,aAAA,GAAgBF,UAAAA,CAG3B,SAASU,cAAAA,CAAc,EAAE,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACnE,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,KAAA,GAAQC,WAAW,kBAAkB,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,IAAA,KAAS,OAAA,KAAY,SAAA,GAAY,IAAA,GAAO,IAAA,CAAA;AAClD,EAAA,uBACIR,IAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACG,GAAA;AAAA,MACA,IAAI,KAAA,EAAO,EAAA;AAAA,MACX,kBAAA,EAAkB,QAAQ,kBAAkB,CAAA;AAAA,MAC5C,cAAA,EAAc,QAAQ,cAAc,CAAA;AAAA,MACpC,WAAW,EAAA,CAAG,SAAA,EAAW,WAAW,CAAC,CAAA,EAAG,qDAAqD,SAAS,CAAA;AAAA,MACrG,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAS,CAAA;AAAA,wBACrCA,GAAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EACzB,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,uCAAA,EAAwC,CAAA,EACnE;AAAA;AAAA;AAAA,GACJ;AAER,CAAC;AAEM,IAAM,aAAA,GAAgBF,UAAAA,CAG3B,SAASY,cAAAA,CAAc,EAAE,SAAA,EAAW,QAAA,EAAU,QAAA,GAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAClF,EAAA,uBACIV,GAAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACG,QAAA,kBAAAA,GAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACG,GAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA,EAAY,CAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,kOAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAiB,eAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA,GACxC,EACJ,CAAA;AAER,CAAC;AAEM,IAAM,UAAA,GAAaF,UAAAA,CAGxB,SAASa,WAAAA,CAAW,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC1D,EAAA,uBACIV,IAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,+GAAA;AAAA,QACA,yDAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAiB,eAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS,CAAA;AAAA,wBACpCA,GAAAA,CAAiB,eAAA,CAAA,aAAA,EAAhB,EAA8B,SAAA,EAAU,kBAAA,EACrC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,CAAA,EAC9B;AAAA;AAAA;AAAA,GACJ;AAER,CAAC;AAIM,IAAM,QAAA,GAAWF,WAGtB,SAASc,SAAAA,CAAS,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC9C,EAAA,uBACIZ,GAAAA;AAAA,IAAmB,iBAAA,CAAA,IAAA;AAAA,IAAlB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,wGAAA;AAAA,QACA,yGAAA;AAAA,QACA,kHAAA;AAAA,QACA,iDAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAmB,iBAAA,CAAA,SAAA,EAAlB,EACG,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,WAAA,EAAa,CAAA,EAAG,CAAA,EAChD;AAAA;AAAA,GACJ;AAER,CAAC;AAEM,IAAM,MAAA,GAASF,WAGpB,SAASe,OAAAA,CAAO,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC5C,EAAA,uBACIb,GAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,uGAAA;AAAA,QACA,yGAAA;AAAA;AAAA,QAEA,yFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAiB,eAAA,CAAA,KAAA,EAAhB,EAAsB,WAAU,0HAAA,EAA2H;AAAA;AAAA,GAChK;AAER,CAAC;AAEM,IAAM,UAAA,GAAaF,WAGxB,SAASgB,WAAAA,CAAW,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAChD,EAAA,uBAAOd,GAAAA,CAAqB,mBAAA,CAAA,IAAA,EAApB,EAAyB,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAClG,CAAC;AAEM,IAAM,cAAA,GAAiBF,WAG5B,SAASiB,eAAAA,CAAe,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACpD,EAAA,uBACIf,GAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,kGAAA;AAAA,QACA,uFAAA;AAAA,QACA,qFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAqB,mBAAA,CAAA,SAAA,EAApB,EAA8B,WAAU,wCAAA,EAAyC;AAAA;AAAA,GACtF;AAER,CAAC;ACxUM,IAAM,MAAA,GAAyB,eAAA,CAAA;AAC/B,IAAM,aAAA,GAAgC,eAAA,CAAA;AACtC,IAAM,WAAA,GAA8B,eAAA,CAAA;AAE3C,IAAM,YAAA,GACF,+GAAA;AAEG,IAAM,aAAA,GAAgBF,UAAAA,CAG3B,SAASkB,cAAAA,CAAc,EAAE,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACxE,EAAA,uBACIf,IAAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACG,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAiB,eAAA,CAAA,OAAA,EAAhB,EAAwB,SAAA,EAAW,YAAA,EAAc,CAAA;AAAA,oBAClDC,IAAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACG,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,oGAAA;AAAA,UACA,4HAAA;AAAA,UACA,cAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,SAAA,GAAY,uBACTD,GAAAA;AAAA,YAAiB,eAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACG,SAAA,EAAU,kKAAA;AAAA,cACV,YAAA,EAAW,OAAA;AAAA,cAEX,QAAA,kBAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA;AAC1B;AAAA;AAAA;AAER,GAAA,EACJ,CAAA;AAER,CAAC;AAEM,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAClF,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,+BAAA,EAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACtF;AAEO,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAClF,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,6DAAA,EAA+D,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACpH;AAEO,IAAM,WAAA,GAAcF,WAGzB,SAASmB,YAAAA,CAAY,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACjD,EAAA,uBACIjB,GAAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,4DAAA,EAA8D,SAAS,CAAA;AAAA,MACpF,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAEM,IAAM,iBAAA,GAAoBF,WAG/B,SAASoB,kBAAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACvD,EAAA,uBAAOlB,GAAAA,CAAiB,eAAA,CAAA,WAAA,EAAhB,EAA4B,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACnG,CAAC;AAIM,IAAM,KAAA,GAAwB,eAAA,CAAA;AAC9B,IAAM,YAAA,GAA+B,eAAA,CAAA;AACrC,IAAM,UAAA,GAA6B,eAAA,CAAA;AACnC,IAAM,UAAA,GAAa;AACnB,IAAM,gBAAA,GAAmB;AAEhC,IAAM,SAAA,GAAY;AAAA,EACd,KAAA,EAAO,uDAAA;AAAA,EACP,IAAA,EAAM,sDAAA;AAAA,EACN,MAAA,EAAQ;AACZ,CAAA;AAEO,IAAM,YAAA,GAAeF,UAAAA,CAG1B,SAASqB,aAAAA,CAAa,EAAE,SAAA,EAAW,QAAA,EAAU,IAAA,GAAO,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC5E,EAAA,uBACIlB,IAAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACG,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAiB,eAAA,CAAA,OAAA,EAAhB,EAAwB,SAAA,EAAW,YAAA,EAAc,CAAA;AAAA,oBAClDC,IAAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACG,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,6IAAA;AAAA,UACA,UAAU,IAAI,CAAA;AAAA,UACd;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACDD,GAAAA;AAAA,YAAiB,eAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACG,SAAA,EAAU,gJAAA;AAAA,cACV,YAAA,EAAW,OAAA;AAAA,cAEX,QAAA,kBAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA;AAC1B;AAAA;AAAA;AACJ,GAAA,EACJ,CAAA;AAER,CAAC;AAIM,IAAM,OAAA,GAA2B,gBAAA,CAAA;AACjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AACxC,IAAM,aAAA,GAAiC,gBAAA,CAAA;AAEvC,IAAM,cAAA,GAAiBF,UAAAA,CAG5B,SAASsB,eAAAA,CAAe,EAAE,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,EAAK;AACtF,EAAA,uBACIpB,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACG,QAAA,kBAAAA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACG,GAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,2HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER,CAAC;AAIM,IAAM,eAAA,GAAmC,gBAAA,CAAA;AACzC,IAAM,OAAA,GAA2B,gBAAA,CAAA;AACjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AAExC,IAAM,cAAA,GAAiBF,UAAAA,CAG5B,SAASuB,eAAAA,CAAe,EAAE,SAAA,EAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACpE,EAAA,uBACIrB,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACG,QAAA,kBAAAA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACG,GAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,0HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER,CAAC;AAIM,IAAM,YAAA,GAAqC,qBAAA,CAAA;AAC3C,IAAM,mBAAA,GAA4C,qBAAA,CAAA;AAClD,IAAM,iBAAA,GAA0C,qBAAA,CAAA;AAEhD,IAAM,mBAAA,GAAsBF,UAAAA,CAGjC,SAASwB,oBAAAA,CAAoB,EAAE,SAAA,EAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACzE,EAAA,uBACItB,GAAAA,CAAuB,qBAAA,CAAA,MAAA,EAAtB,EACG,QAAA,kBAAAA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,OAAA;AAAA,IAAtB;AAAA,MACG,GAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,oIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER,CAAC;AAEM,IAAM,gBAAA,GAAmBF,UAAAA,CAG9B,SAASyB,iBAAAA,CAAiB,EAAE,WAAW,WAAA,EAAa,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACnE,EAAA,uBACIvB,GAAAA;AAAA,IAAuB,qBAAA,CAAA,IAAA;AAAA,IAAtB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,yGAAA;AAAA,QACA,sGAAA;AAAA,QACA,WAAA,IAAe,2CAAA;AAAA,QACf;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAEM,IAAM,iBAAA,GAAoBF,WAG/B,SAAS0B,kBAAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACvD,EAAA,uBACIxB,GAAAA;AAAA,IAAuB,qBAAA,CAAA,KAAA;AAAA,IAAtB;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,yDAAA,EAA2D,SAAS,CAAA;AAAA,MACjF,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAEM,IAAM,qBAAA,GAAwBF,WAGnC,SAAS2B,sBAAAA,CAAsB,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC3D,EAAA,uBAAOzB,GAAAA,CAAuB,qBAAA,CAAA,SAAA,EAAtB,EAAgC,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACpH,CAAC;ACvNM,SAAS,UAAA,CAAW,EAAE,IAAA,GAAO,aAAA,EAAe,WAAW,cAAA,EAAgB,QAAA,EAAU,GAAG,KAAA,EAAM,EAAoB;AACjH,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI0B,QAAAA,CAAS,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAC9B,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,IAAA,GAAO,GAAG,UAAA,GAAa,CAAA;AAC7B,IAAA,MAAM,QAAQ,EAAA,CAAG,UAAA,GAAa,EAAA,CAAG,WAAA,GAAc,GAAG,WAAA,GAAc,CAAA;AAChE,IAAA,QAAA,CAAS,CAAC,CAAA,KAAO,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,KAAA,KAAU,KAAA,GAAQ,CAAA,GAAI,EAAE,IAAA,EAAM,KAAA,EAAQ,CAAA;AAAA,EAChF,CAAA,EAAG,EAAE,CAAA;AACL,EAAAC,UAAU,MAAM;AACZ,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,OAAA,EAAQ;AAER,IAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AAC3C,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,OAAO,CAAA;AACrC,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,IAAI,EAAA,CAAG,iBAAA,EAAmB,EAAA,CAAG,OAAA,CAAQ,GAAG,iBAAiB,CAAA;AACzD,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC/B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,EAAA,uBACI1B,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,kBAAA,EAAoB,SAAS,CAAA,EAAI,GAAG,KAAA,EACnD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA;AAAA,QACA,QAAA,EAAU,OAAA;AAAA,QAEV,QAAA,EAAU,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,QAAQ,CAAA,GAAI,MAAA;AAAA,QAC1C,SAAA,EAAW,EAAA;AAAA,UACP,kHAAA;AAAA,UACA;AAAA,SACJ;AAAA,QAEC;AAAA;AAAA,KACL;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACP,mFAAA;AAAA,UACA,KAAA,CAAM,OAAO,aAAA,GAAgB;AAAA,SACjC;AAAA,QACA,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,0BAAA,EAA6B,IAAI,CAAA,cAAA,CAAA;AAAiB;AAAA,KAC3E;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACP,qFAAA;AAAA,UACA,KAAA,CAAM,QAAQ,aAAA,GAAgB;AAAA,SAClC;AAAA,QACA,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,yBAAA,EAA4B,IAAI,CAAA,cAAA,CAAA;AAAiB;AAAA;AAC1E,GAAA,EACJ,CAAA;AAER;AC1DA,IAAM,WAAA,GAAc4B,cAAwB,MAAM,CAAA;AAE3C,IAAM,IAAA,GAAO9B,UAAAA,CAGlB,SAAS+B,KAAAA,CAAK,EAAE,OAAO,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC9C,EAAA,uBACI7B,GAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,IAAA,EACzB,QAAA,kBAAAA,GAAAA,CAAe,aAAA,CAAA,IAAA,EAAd,EAAmB,GAAA,EAAW,GAAG,OAAO,CAAA,EAC7C,CAAA;AAER,CAAC;AAEM,IAAM,QAAA,GAAWF,WAGtB,SAASgC,SAAAA,CAAS,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC9C,EAAA,MAAM,IAAA,GAAOrB,WAAW,WAAW,CAAA;AAEnC,EAAA,uBACIT,GAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,mBAAA,EAAoB,WAAW,IAAA,KAAS,MAAA,GAAS,kBAAA,GAAqB,QAAA,EACnF,QAAA,kBAAAA,GAAAA;AAAA,IAAe,aAAA,CAAA,IAAA;AAAA,IAAd;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,IAAA,KAAS,SACH,gEAAA,GACA,iEAAA;AAAA,QACN;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER,CAAC;AAEM,IAAM,WAAA,GAAcF,WAGzB,SAASiC,YAAAA,CAAY,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACjD,EAAA,MAAM,IAAA,GAAOtB,WAAW,WAAW,CAAA;AACnC,EAAA,uBACIT,GAAAA;AAAA,IAAe,aAAA,CAAA,OAAA;AAAA,IAAd;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,0HAAA;AAAA,QACA,+FAAA;AAAA,QACA,IAAA,KAAS,SACH,iKAAA,GACA,iKAAA;AAAA,QACN;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AAEM,IAAM,WAAA,GAAcF,WAGzB,SAASkC,YAAAA,CAAY,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AACjD,EAAA,uBAAOhC,GAAAA,CAAe,aAAA,CAAA,OAAA,EAAd,EAAsB,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACtG,CAAC;AC7DD,IAAM,SAAA,GAAY4B,cAAkC,MAAS,CAAA;AAEtD,SAAS,SAAA,CAAU;AAAA,EACtB,MAAA,GAAS,KAAA;AAAA,EACT,QAAA;AAAA,EACA;AACJ,CAAA,EAKG;AACC,EAAA,MAAM,OAAOK,KAAAA,EAAM;AACnB,EAAA,uBACIjC,GAAAA,CAAC,SAAA,CAAU,UAAV,EAAmB,KAAA,EAAO,SAAS,IAAA,GAAO,MAAA,EACvC,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,yFAAyF,SAAS,CAAA,EAChH,UACL,CAAA,EACJ,CAAA;AAER;AAEO,SAAS,aAAA,CAAc;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,EAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,MAAM,IAAA,GAAOS,WAAW,SAAS,CAAA;AACjC,EAAA,uBACIR,IAAAA,CAAC,SAAA,EAAA,EAAQ,EAAA,EAAQ,IAAA,EAAY,IAAA,EAAM,WAAA,IAAe,MAAA,EAAW,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EACtG,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA;AAAA,UACP,kIAAA;AAAA;AAAA,UAEA;AAAA,SACJ;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,0BACDD,GAAAA;AAAA,YAACkC,WAAAA;AAAA,YAAA;AAAA,cACG,aAAA,EAAW,IAAA;AAAA,cACX,SAAA,EAAU;AAAA;AAAA;AACd;AAAA;AAAA,KACJ;AAAA,oBACAlC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAuD,QAAA,EAAS;AAAA,GAAA,EACnF,CAAA;AAER;ACxBA,IAAI,QAAe,EAAC;AACpB,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAM,SAAA,uBAAgB,GAAA,EAAgB;AACtC,IAAM,OAAO,MAAM,SAAA,CAAU,QAAQ,CAAC,CAAA,KAAM,GAAG,CAAA;AAE/C,SAAS,IAAI,IAAA,EAAW;AACpB,EAAA,KAAA,GAAQ,CAAC,GAAG,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,EAAA,EAAI,EAAE,KAAA,EAAO,CAAA;AAC3C,EAAA,IAAA,EAAK;AACT;AAEA,SAAS,IAAA,GAAO;AACZ,EAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AACrB,EAAA,IAAA,EAAK;AACT;AAGO,SAAS,QAAQ,OAAA,EAA2C;AAC/D,EAAA,IAAI,UAAU,CAAA,EAAG;AACb,IAAA,OAAA,CAAQ,MAAM,mFAAmF,CAAA;AACjG,IAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY,IAAI,EAAE,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,CAAC,CAAA;AAC7F;AAGO,SAAS,OAAO,OAAA,EAAgD;AACnE,EAAA,IAAI,UAAU,CAAA,EAAG;AACb,IAAA,OAAA,CAAQ,MAAM,yFAAyF,CAAA;AACvG,IAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY,IAAI,EAAE,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,CAAC,CAAA;AAC5F;AAEA,SAAS,UAAU,QAAA,EAAsB;AACrC,EAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,EAAA,KAAA,EAAA;AACA,EAAA,OAAO,MAAM;AACT,IAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AACzB,IAAA,KAAA,EAAA;AAAA,EACJ,CAAA;AACJ;AAEA,IAAM,OAAA,GAAU,MAAM,KAAA,CAAM,CAAC,CAAA,IAAK,IAAA;AAClC,IAAM,OAAO,MAAM,IAAA;AAEnB,SAAS,UAAA,CAAW,EAAE,GAAA,EAAK,CAAA,EAAE,EAA8C;AACvE,EAAA,MAAM,IAAI,CAAA,CAAE,OAAA;AACZ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI0B,QAAAA,CAAS,CAAA,CAAE,gBAAgB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAoB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAkC;AAC9C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAA,CAAE,SAAA,IAAa,KAAA,CAAM,MAAA,GAAS,EAAE,SAAA,EAAW;AAC3C,MAAA,QAAA,CAAS,CAAA,SAAA,EAAY,CAAA,CAAE,SAAS,CAAA,YAAA,CAAc,CAAA;AAC9C,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,QAAA,GAAW,KAAK,CAAA;AAClC,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,QAAA,CAAS,OAAO,CAAA;AAChB,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,CAAA,CAAE,YAAA,IAAgB,KAAA,KAAU,KAAA,EAAO;AACnC,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA;AAAA,IACJ;AACA,IAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AACd,IAAA,IAAA,EAAK;AAAA,EACT,CAAA;AACA,EAAA,uBACIzB,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,YAAU,IAAA,EAC9B,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAA,IAAS,eAAe,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,KAAA,EAClD,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,CAAA,CAAE,MAAA,GAAS,UAAA,GAAa,MAAA;AAAA,QAC9B,YAAA,EAAc,CAAA,CAAE,MAAA,GAAS,cAAA,GAAiB,KAAA;AAAA,QAC1C,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,KAAA;AAAA,QACA,QAAA,EAAU,CAAC,CAAA,KAAM;AACb,UAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AACvB,UAAA,QAAA,CAAS,IAAI,CAAA;AACb,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACrB;AAAA;AAAA,KACJ,EACJ,CAAA;AAAA,IACC,CAAA,CAAE,+BACCA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO,CAAA,CAAE,YAAA,KAAiB,IAAA,GAAO,kBAAkB,CAAA,CAAE,YAAA;AAAA,QACrD,KAAA,EAAO,WAAW,uBAAA,GAA0B,IAAA;AAAA,QAC5C,SAAA,EAAU,MAAA;AAAA,QAEV,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAM,CAAA,CAAE,MAAA,GAAS,UAAA,GAAa,MAAA;AAAA,YAC9B,YAAA,EAAc,CAAA,CAAE,MAAA,GAAS,cAAA,GAAiB,KAAA;AAAA,YAC1C,KAAA,EAAO,KAAA;AAAA,YACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACb,cAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AACvB,cAAA,WAAA,CAAY,KAAK,CAAA;AAAA,YACrB;AAAA;AAAA;AACJ;AAAA,KACJ,GACA,IAAA;AAAA,oBACJC,KAAC,YAAA,EAAA,EACG,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,OAAA,EAAQ,WAAA;AAAA,UACR,SAAS,MAAM;AACX,YAAA,CAAA,CAAE,OAAO,IAAI,CAAA;AACb,YAAA,IAAA,EAAK;AAAA,UACT,CAAA;AAAA,UAEC,YAAE,WAAA,IAAe;AAAA;AAAA,OACtB;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,CAAA,CAAE,WAAA,GAAc,QAAA,GAAW,SAAA,EACrD,QAAA,EAAA,CAAA,CAAE,YAAA,IAAgB,UAAA,EACvB;AAAA,KAAA,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;AAGO,SAAS,UAAA,GAAa;AACzB,EAAA,MAAM,CAAA,GAAI,oBAAA,CAAqB,SAAA,EAAW,OAAA,EAAS,IAAI,CAAA;AACvD,EAAA,MAAM,SAAS,MAAM;AACjB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,SAAA,EAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,SACnC,CAAA,CAAE,OAAO,IAAI,CAAA;AAClB,IAAA,IAAA,EAAK;AAAA,EACT,CAAA;AACA,EAAA,uBACIA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAM,YAAA,EAAc,CAAC,IAAA,KAAU,IAAA,GAAO,MAAA,GAAY,MAAA,EAAO,EACxE,8BACGC,IAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MAEG,IAAA,EAAK,aAAA;AAAA,MAEJ,GAAI,EAAE,OAAA,CAAQ,OAAA,GAAU,EAAC,GAAI,EAAE,oBAAoB,MAAA,EAAU;AAAA,MAC9D,SAAA,EAAU,qBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAA,KAAC,YAAA,EAAA,EACG,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAM,CAAA;AAAA,UAC7B,CAAA,CAAE,QAAQ,OAAA,mBAAUA,IAAC,iBAAA,EAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAQ,CAAA,GAAuB;AAAA,SAAA,EACtF,CAAA;AAAA,QACC,EAAE,IAAA,KAAS,QAAA;AAAA;AAAA,0BAERA,GAAAA,CAAC,UAAA,EAAA,EAAsB,GAAA,EAAK,CAAA,EAAA,EAAX,EAAE,EAAY;AAAA,4BAE/BC,KAAC,YAAA,EAAA,EACG,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,UAAO,OAAA,EAAQ,WAAA,EAAY,SAAS,MAAA,EAChC,QAAA,EAAA,CAAA,CAAE,OAAA,CAAQ,WAAA,IAAe,QAAA,EAC9B,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,WAAA,GAAc,QAAA,GAAW,SAAA;AAAA,cAC5C,SAAS,MAAM;AACX,gBAAA,CAAA,CAAE,OAAO,IAAI,CAAA;AACb,gBAAA,IAAA,EAAK;AAAA,cACT,CAAA;AAAA,cAEC,QAAA,EAAA,CAAA,CAAE,QAAQ,YAAA,IAAgB;AAAA;AAAA;AAC/B,SAAA,EACJ;AAAA;AAAA;AAAA,MAGR,IAAA,EACR,CAAA;AAER;ACzMA,IAAM,CAAA,GAAI,IAAI,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAOhC,SAAS,UAAA,CAAW;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR;AACJ,CAAA,EASG;AACC,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAC,CAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,SAAS,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA;AACxD,EAAA,IAAI,KAAA,KAAU,aAAa,OAAO,OAAA,KAAY,eAAe,OAAA,CAAQ,GAAA,CAAI,aAAa,YAAA,EAAc;AAChG,IAAA,OAAA,CAAQ,KAAK,CAAA,sBAAA,EAAyB,SAAS,CAAA,mBAAA,EAAiB,KAAA,GAAQ,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAClG;AACA,EAAA,IAAI,KAAA,IAAS,UAAU,OAAO,IAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAQ,QAAA,GAAW,CAAA;AAChC,EAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,KAAA,EAAA,CAAQ,KAAA,GAAQ,KAAK,QAAQ,CAAA;AACjD,EAAA,uBACIC,KAAC,KAAA,EAAA,EAAI,YAAA,EAAY,OAAO,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA,EACtF,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAA,EAAU,QAAA,EAAS,WAAU,mDAAA,EAC3B,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAAE,QAAA;AAAA,MAAE,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,MAAE,MAAA;AAAA,MAAK,CAAA,CAAE,OAAO,KAAK;AAAA,KAAA,EACtD,CAAA;AAAA,oBACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACX,QAAA,EAAA;AAAA,sBAAAA,KAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAK,QAAA,EAAU,KAAA,KAAU,CAAA,EAAG,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAG,WAAU,MAAA,EACrG,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,WAAA,EAAA,EAAY,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,QAAE;AAAA,OAAA,EAE/B,CAAA;AAAA,sBACAC,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAK,QAAA,EAAU,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,SAAS,MAAM,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG,WAAU,MAAA,EAAO,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,wBAEnHD,GAAAA,CAAC,YAAA,EAAA,EAAa,aAAA,EAAW,IAAA,EAAC;AAAA,OAAA,EAC9B;AAAA,KAAA,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;AC9CO,SAAS,MAAA,CAAO;AAAA,EACnB,KAAA;AAAA,EACA,IAAA,GAAO,GAAA;AAAA,EACP,KAAA;AAAA,EACA;AACJ,CAAA,EAQG;AACC,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM;AACzB,IAAA,IAAI;AACA,MAAA,OAAO,OAAO,MAAA,CAAO,KAAA,EAAO,EAAE,oBAAA,EAAsB,GAAA,EAAK,CAAA,CAAE,OAAA;AAAA,IAC/D,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACV,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM;AACvB,IAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,IAAA,IAAI,CAAA,GAAI,EAAA;AACR,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK;AAClC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK;AAClC,QAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG,CAAC,GAAG,CAAA,IAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,QAAA,CAAA;AAAA,MACzC;AAAA,IACJ;AACA,IAAA,OAAO,CAAA;AAAA,EACX,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAA,GAAM,KAAA;AAC7D,EAAA,uBACIA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,MAAA,GAAU,KAAA,IAAS,CAAA,YAAA,EAAe,KAAK,CAAA,CAAA,GAAM,wBAAA;AAAA,MACzD,SAAA,EAAW,EAAA,CAAG,mEAAA,EAAqE,SAAS,CAAA;AAAA,MAC5F,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,MAElC,QAAA,EAAA,MAAA,mBACGA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAS,CAAA,IAAA,EAAO,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,CAAA,EAAI,cAAA,EAAe,YAAA,EAAa,eAAW,IAAA,EAAC,SAAA,EAAU,iBAAA,EACjG,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,IAAA,EAAM,MAAK,SAAA,EAAU,CAAA,EAClC,CAAA,mBAEAA,IAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,0FAAyF,QAAA,EAAA,wBAAA,EAEpH;AAAA;AAAA,GAER;AAER","file":"primitives.mjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge would treat `oca-display-1` and `text-foreground` as the same\n// group and drop one; teach it the package's own type utilities.\nconst merge = extendTailwindMerge<'oca-type'>({\n extend: {\n classGroups: {\n 'oca-type': [\n 'oca-display-1',\n 'oca-display-2',\n 'oca-display-3',\n 'oca-title',\n 'oca-title-sm',\n 'oca-eyebrow',\n 'oca-lead',\n 'oca-body',\n 'oca-numeral',\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return merge(clsx(inputs));\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { useTheme } from 'next-themes';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\n/*\n * sonner paints a toast from its own variables (white, or black in dark), and\n * they outrank a class. Set to the tokens, a toast is the popover in both modes.\n */\nconst TOAST_COLOURS = {\n '--normal-bg': 'var(--popover)',\n '--normal-text': 'var(--popover-foreground)',\n '--normal-border': 'var(--border)',\n} as CSSProperties;\n\n/** Toasts in the page's mode: it reads next-themes, so a site passes nothing for dark. */\nexport function Toaster({ style, ...props }: ToasterProps) {\n const { resolvedTheme } = useTheme();\n return (\n <SonnerToaster\n theme={resolvedTheme === 'dark' ? 'dark' : resolvedTheme === 'light' ? 'light' : 'system'}\n style={{ ...TOAST_COLOURS, ...style }}\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport type { SiteStatus } from '../family';\nimport { cn } from '../lib/cn';\nimport { Badge } from './badge';\n\n/*\n * Where something stands, in the family's fixed words. A site or feature is\n * live, in testing, not yet, or paused; a check on an artifact is good,\n * caution or refused. There is no free text: the words are the component, so\n * no page can invent \"LIVE · MAINNET\", \"BETA\" or \"PRO\" again.\n */\nexport type Statement = 'good' | 'caution' | 'refused';\nexport type Status = SiteStatus | Statement;\n\nconst WORD: Record<Status, string> = {\n live: 'Live',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n paused: 'Paused',\n good: 'Good',\n caution: 'Caution',\n refused: 'Refused',\n};\n\nconst TONE = {\n live: 'success',\n testing: 'brand',\n 'not-yet': 'muted',\n paused: 'muted',\n good: 'success',\n caution: 'brand',\n refused: 'danger',\n} as const;\n\n/** The word for a status, for places that need it as text. */\nexport function statusWord(status: Status): string {\n return WORD[status];\n}\n\nexport interface StatusBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n status: Status;\n}\n\nexport function StatusBadge({ status, className, ...props }: StatusBadgeProps) {\n return (\n <Badge tone={TONE[status]} data-status={status} className={cn(className)} {...props}>\n {WORD[status]}\n </Badge>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * White on the canvas with one hairline and a generous radius; no shadow. The\n * `ink` card is the deck's #1E1E1E panel, dark in both modes.\n */\nexport const cardVariants = cva('relative rounded-[1.25rem] border', {\n variants: {\n tone: {\n default: 'border-border bg-card text-card-foreground',\n sunken: 'border-transparent bg-muted text-foreground',\n ink: 'border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground',\n outline: 'border-border bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-5',\n md: 'p-6 md:p-8',\n lg: 'p-8 md:p-10',\n },\n interactive: {\n true: 'transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong',\n false: '',\n },\n },\n defaultVariants: { tone: 'default', padding: 'md', interactive: false },\n});\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, tone, padding, interactive, ...props },\n ref\n) {\n return (\n <div ref={ref} data-ui=\"card\" className={cn(cardVariants({ tone, padding, interactive }), className)} {...props} />\n );\n});\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n/** The small \"01\" above a card title. */\nexport function CardNumeral({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('oca-numeral block', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('oca-title flex flex-wrap items-center gap-2.5', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-body', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-5', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-6 flex flex-wrap items-center gap-3', className)} {...props} />;\n}\n","import { createContext, type Context } from 'react';\n\n/**\n * A context that is the same object in every entry. Each entry (./chrome,\n * ./components, ./primitives) is bundled on its own, so a plain\n * createContext in a shared module makes one context per entry, and a\n * provider from one entry is invisible to a reader from another. Keyed on\n * globalThis by name, there is one.\n */\nexport function sharedContext<T>(name: string, initial: T): Context<T> {\n const key = Symbol.for(`@orangecheck/app-design/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T> | undefined>;\n return (store[key] ??= createContext<T>(initial));\n}\n","import { createElement, useContext, type ReactNode } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/*\n * How tightly data and fields are set. A public page is `comfortable`; a\n * tool is `compact` (36px fields, 14px table text, smaller stat cards).\n * ToolShell sets it for everything inside, dialogs included (a React\n * context crosses a portal where a CSS scope would not); a prop on one\n * component still wins.\n */\nexport type Density = 'comfortable' | 'compact';\n\nconst DensityContext = sharedContext<Density>('density', 'comfortable');\n\nexport function DensityProvider({ density, children }: { density: Density; children: ReactNode }) {\n return createElement(DensityContext.Provider, { value: density }, children);\n}\n\nexport function useDensity(): Density {\n return useContext(DensityContext);\n}\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { Check, ChevronDown } from 'lucide-react';\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n useContext,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { useDensity } from '../lib/density';\nimport { sharedContext } from '../lib/shared-context';\n\n/* Fields: 44px tall, a hairline that darkens on focus with a soft orange halo,\n 16px text on phones so iOS never zooms. */\nconst fieldBase = [\n 'w-full rounded-xl border border-input bg-card text-foreground placeholder:text-oca-subtle',\n 'text-base md:text-[0.9375rem] outline-none transition-[border-color,box-shadow]',\n 'focus:border-foreground/35 focus:ring-4 focus:ring-[color-mix(in_oklab,var(--oca-orange)_16%,transparent)]',\n 'disabled:cursor-not-allowed disabled:opacity-55',\n 'aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-[color-mix(in_oklab,var(--destructive)_14%,transparent)]',\n];\n\n/* `sm` is 36px for a tool's dense forms; the text stays 16px on phones. */\nconst FIELD_SIZE = {\n md: 'h-11 px-3.5',\n sm: 'h-9 rounded-[0.625rem] px-3 md:text-[0.875rem]',\n} as const;\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** `sm` (36px) for a tool's dense forms. Defaults to the density around it. */\n size?: 'md' | 'sm';\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className, type = 'text', size, ...props },\n ref\n) {\n const density = useDensity();\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <input\n ref={ref}\n type={type}\n data-ui=\"input\"\n data-size={s}\n className={cn(fieldBase, FIELD_SIZE[s], className)}\n {...props}\n />\n );\n});\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaHTMLAttributes<HTMLTextAreaElement>>(\n function Textarea({ className, ...props }, ref) {\n return (\n <textarea\n ref={ref}\n data-ui=\"textarea\"\n className={cn(fieldBase, 'min-h-28 px-3.5 py-3 leading-relaxed', className)}\n {...props}\n />\n );\n }\n);\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function Label({ className, ...props }, ref) {\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn('text-sm font-medium leading-none text-foreground', className)}\n {...props}\n />\n );\n});\n\n/** What Field hands its control: the id its label names, its hint and error, whether it is invalid. */\nexport interface FieldControlProps {\n id: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: true;\n}\n\nexport interface FieldProps {\n label: ReactNode;\n /** Help under the control. It sits below, so paired fields stay level. */\n hint?: ReactNode;\n /** Mark the field optional beside its label, rather than in a hint. */\n optional?: boolean;\n /** Shown in place of nothing; marks the control invalid. */\n error?: ReactNode;\n /**\n * The control, which receives id, aria-describedby and aria-invalid. Or a\n * function given them, for a control inside a box of its own: an input\n * with a popover anchored under it, `(c) => <div className=\"relative\"><Input {...c} />{popover}</div>`.\n */\n children: ReactElement | ((control: FieldControlProps) => ReactNode);\n /** The control's id, when something else must know it. Default: a generated one. */\n id?: string;\n className?: string;\n /** Render the label visually hidden (it is still the accessible name). */\n hideLabel?: boolean;\n /** A button that acts on the control, set beside it (below it on a phone). */\n action?: ReactNode;\n}\n\n/** Label, hint, control and error, wired together by id. */\nexport function Field({ label, hint, optional, error, children, id: fixedId, className, hideLabel, action }: FieldProps) {\n const generated = useId();\n const id = fixedId ?? generated;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const wiring: FieldControlProps = {\n id,\n 'aria-describedby': [hintId, errorId].filter(Boolean).join(' ') || undefined,\n 'aria-invalid': error ? true : undefined,\n };\n const control =\n typeof children === 'function'\n ? children(wiring)\n : isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, { ...wiring })\n : children;\n const hintNode = hint ? (\n <p id={hintId} className=\"text-[0.8125rem] leading-snug text-muted-foreground\">\n {hint}\n </p>\n ) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <Label htmlFor={id} className={hideLabel ? 'sr-only' : 'flex items-baseline gap-2'}>\n {label}\n {optional ? <span className=\"text-[0.8125rem] font-normal text-muted-foreground\">Optional</span> : null}\n </Label>\n {action ? (\n // The hint belongs to the input, so it sits under the input, not under the button.\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 [&>input]:w-full\">\n {control}\n {hintNode}\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ) : (\n <>\n {control}\n {hintNode}\n </>\n )}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] leading-snug text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Select ───────────────────────────────────────────────────────────── */\n\n/*\n * Field wires its label to its child by id, and Select's root renders no\n * element of its own. So Select takes the field's id, description and\n * invalid state and hands them to its trigger, the element a label names.\n */\ninterface SelectWiring {\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n}\nconst SelectFieldContext = sharedContext<SelectWiring | null>('select-field', null);\n\nexport function Select({\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & SelectWiring) {\n return (\n <SelectFieldContext.Provider value={{ id, 'aria-describedby': describedBy, 'aria-invalid': invalid }}>\n <SelectPrimitive.Root {...props} />\n </SelectFieldContext.Provider>\n );\n}\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & { size?: 'md' | 'sm' }\n>(function SelectTrigger({ className, children, size, ...props }, ref) {\n const density = useDensity();\n const field = useContext(SelectFieldContext);\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n id={field?.id}\n aria-describedby={field?.['aria-describedby']}\n aria-invalid={field?.['aria-invalid']}\n className={cn(fieldBase, FIELD_SIZE[s], 'flex items-center justify-between gap-2 text-left', className)}\n {...props}\n >\n <span className=\"truncate\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent({ className, children, position = 'popper', ...props }, ref) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={6}\n className={cn(\n 'oca-animate-fade z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n >\n <SelectPrimitive.Viewport>{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(function SelectItem({ className, children, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex h-10 cursor-default select-none items-center rounded-lg pl-3 pr-9 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"absolute right-3\">\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n});\n\n/* ── Checkbox, Switch, Radio ──────────────────────────────────────────── */\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(function Checkbox({ className, ...props }, ref) {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex size-5 shrink-0 items-center justify-center rounded-[6px] border border-input bg-card',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator>\n <Check className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\n\nexport const Switch = forwardRef<\n ElementRef<typeof SwitchPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(function Switch({ className, ...props }, ref) {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border border-transparent bg-input p-0.5',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n // The deep orange: the track is the state, so it must clear 3:1 on a card.\n 'data-[state=checked]:bg-oca-orange-deep disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block size-5 rounded-full bg-white shadow-sm transition-transform data-[state=checked]:translate-x-5\" />\n </SwitchPrimitive.Root>\n );\n});\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(function RadioGroup({ className, ...props }, ref) {\n return <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-3', className)} {...props} />;\n});\n\nexport const RadioGroupItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(function RadioGroupItem({ className, ...props }, ref) {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n 'inline-flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-card',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"block size-2.5 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Item>\n );\n});\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { X } from 'lucide-react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* ── Dialog ───────────────────────────────────────────────────────────── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst overlayClass =\n 'oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0';\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(function DialogContent({ className, children, hideClose, ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2',\n 'max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8',\n 'outline-none',\n className\n )}\n {...props}\n >\n {children}\n {hideClose ? null : (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mb-5 flex flex-col gap-2 pr-8', className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-[1.5rem] font-normal leading-tight tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <DialogPrimitive.Description ref={ref} className={cn('oca-body', className)} {...props} />;\n});\n\n/* ── Sheet: a dialog from an edge ────────────────────────────────────── */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetTitle = DialogTitle;\nexport const SheetDescription = DialogDescription;\n\nconst sheetSide = {\n right: 'inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l',\n left: 'inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r',\n bottom: 'inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t',\n} as const;\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { side?: keyof typeof sheetSide }\n>(function SheetContent({ className, children, side = 'right', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none',\n sheetSide[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\n/* ── Popover ──────────────────────────────────────────────────────────── */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 8, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\n\n/* ── Tooltip: ink, small, quick ───────────────────────────────────────── */\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\n\n/* ── Menu ─────────────────────────────────────────────────────────────── */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 8, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { destructive?: boolean }\n>(function DropdownMenuItem({ className, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground',\n destructive && 'text-destructive [&_svg]:text-destructive',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function DropdownMenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return <DropdownMenuPrimitive.Separator ref={ref} className={cn('my-1.5 h-px bg-border', className)} {...props} />;\n});\n","import { useCallback, useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A horizontal scroller that says when there is more. Content that is wider\n * than its box scrolls instead of being clipped, and a soft edge appears on\n * whichever side hides something. Tables, code and tab bars all use it.\n */\nexport interface ScrollFadeProps extends HTMLAttributes<HTMLDivElement> {\n /** The colour under the scroller, as a CSS value; the edge fades to it. */\n fade?: string;\n /** Classes for the scrolling element itself. */\n innerClassName?: string;\n}\n\nexport function ScrollFade({ fade = 'var(--card)', className, innerClassName, children, ...props }: ScrollFadeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [edges, setEdges] = useState({ left: false, right: false });\n const measure = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n const left = el.scrollLeft > 1;\n const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((e) => (e.left === left && e.right === right ? e : { left, right }));\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n measure();\n // Without ResizeObserver (old engines, jsdom) the edges still follow scrolling.\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [measure]);\n return (\n <div className={cn('relative min-w-0', className)} {...props}>\n <div\n ref={ref}\n onScroll={measure}\n // While it hides something, a keyboard can reach it to scroll.\n tabIndex={edges.left || edges.right ? 0 : undefined}\n className={cn(\n 'overflow-x-auto overscroll-x-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring',\n innerClassName\n )}\n >\n {children}\n </div>\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 left-0 w-8 transition-opacity duration-150',\n edges.left ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to right, ${fade}, transparent)` }}\n />\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-10 transition-opacity duration-150',\n edges.right ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to left, ${fade}, transparent)` }}\n />\n </div>\n );\n}\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { createContext, forwardRef, useContext, type ComponentPropsWithoutRef, type ElementRef } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from './scroll-fade';\n\n/*\n * Two looks for one behaviour: `pill` is a segmented control for switching a\n * view in place; `line` is page-level navigation between sections.\n */\ntype TabsLook = 'pill' | 'line';\nconst LookContext = createContext<TabsLook>('pill');\n\nexport const Tabs = forwardRef<\n ElementRef<typeof TabsPrimitive.Root>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root> & { look?: TabsLook }\n>(function Tabs({ look = 'pill', ...props }, ref) {\n return (\n <LookContext.Provider value={look}>\n <TabsPrimitive.Root ref={ref} {...props} />\n </LookContext.Provider>\n );\n});\n\nexport const TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(function TabsList({ className, ...props }, ref) {\n const look = useContext(LookContext);\n // More tabs than fit a phone scroll sideways, with an edge that says so.\n return (\n <ScrollFade fade=\"var(--background)\" className={look === 'pill' ? 'w-fit max-w-full' : 'w-full'}>\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n look === 'pill'\n ? 'inline-flex w-max items-center gap-1 rounded-full bg-muted p-1'\n : 'flex w-max min-w-full items-center gap-6 border-b border-border',\n className\n )}\n {...props}\n />\n </ScrollFade>\n );\n});\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n const look = useContext(LookContext);\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap text-[0.9375rem] outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n look === 'pill'\n ? 'h-9 rounded-full px-4 text-muted-foreground hover:text-foreground data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm'\n : '-mb-px h-11 border-b-2 border-transparent text-muted-foreground hover:text-foreground data-[state=active]:border-foreground data-[state=active]:text-foreground',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return <TabsPrimitive.Content ref={ref} className={cn('mt-6 outline-none', className)} {...props} />;\n});\n","import { ChevronDown } from 'lucide-react';\nimport { createContext, useContext, useId, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Questions and sections that open in place. Built on <details>, so it works\n * before script loads, a browser's find-in-page opens the item that holds the\n * match, and a screen reader hears each title as a button that is expanded\n * or collapsed. `single` lets one item be open at a time.\n */\nconst GroupName = createContext<string | undefined>(undefined);\n\nexport function Accordion({\n single = false,\n children,\n className,\n}: {\n /** One item open at a time: opening one closes the others. */\n single?: boolean;\n children: ReactNode;\n className?: string;\n}) {\n const name = useId();\n return (\n <GroupName.Provider value={single ? name : undefined}>\n <div className={cn('divide-y divide-border overflow-hidden rounded-[1.25rem] border border-border bg-card', className)}>\n {children}\n </div>\n </GroupName.Provider>\n );\n}\n\nexport function AccordionItem({\n title,\n children,\n defaultOpen = false,\n id,\n className,\n}: {\n title: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n /** For a link straight to this item. */\n id?: string;\n className?: string;\n}) {\n const name = useContext(GroupName);\n return (\n <details id={id} name={name} open={defaultOpen || undefined} className={cn('group scroll-mt-24', className)}>\n <summary\n className={cn(\n 'flex min-h-14 cursor-pointer list-none items-center justify-between gap-4 px-5 py-4 text-[1rem] font-medium leading-snug md:px-6',\n // Inside the card's clip, so the ring is drawn within the row.\n 'transition-colors hover:bg-accent/60 focus-visible:outline-offset-[-2px] [&::-webkit-details-marker]:hidden'\n )}\n >\n {title}\n <ChevronDown\n aria-hidden\n className=\"size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-180\"\n />\n </summary>\n <div className=\"oca-body px-5 pb-5 text-[0.9375rem] md:px-6 md:pb-6\">{children}</div>\n </details>\n );\n}\n","import { useState, useSyncExternalStore, type FormEvent, type ReactNode } from 'react';\n\nimport { Button } from './button';\nimport { Field, Input } from './form';\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from './overlay';\n\n/*\n * Ask and wait: `await confirm({...})` is true or false, `await prompt({...})`\n * is the text or null. Mount <DialogHost /> once, near the root; every call\n * queues there and they open one at a time. Without a host nothing is asked\n * and the answer is no (false, null), never a silent yes.\n */\n\nexport interface ConfirmOptions {\n title: ReactNode;\n /** One or two sentences: what happens, and whether it can be undone. */\n message?: ReactNode;\n /** The verb on the button: \"Revoke\", \"Delete stamp\". Defaults to \"Continue\". */\n confirmLabel?: string;\n cancelLabel?: string;\n /** The red button, for what cannot be undone. */\n destructive?: boolean;\n}\n\nexport interface PromptOptions extends ConfirmOptions {\n label?: ReactNode;\n placeholder?: string;\n defaultValue?: string;\n hint?: ReactNode;\n /** A password field: hidden as typed, never filled in by the browser. */\n secret?: boolean;\n minLength?: number;\n /** Return a sentence to refuse the value, or nothing to take it. */\n validate?: (value: string) => string | null | undefined;\n /** Ask for it twice (a passphrase): `true`, or the second field's label. Refuses until the two match. */\n confirmField?: boolean | ReactNode;\n}\n\ntype Ask =\n | { id: number; kind: 'confirm'; options: ConfirmOptions; settle: (answer: boolean) => void }\n | { id: number; kind: 'prompt'; options: PromptOptions; settle: (answer: string | null) => void };\n\nlet queue: Ask[] = [];\nlet asked = 0;\nlet hosts = 0;\nconst listeners = new Set<() => void>();\nconst emit = () => listeners.forEach((l) => l());\n\nfunction ask(item: Ask) {\n queue = [...queue, { ...item, id: ++asked }];\n emit();\n}\n\nfunction done() {\n queue = queue.slice(1);\n emit();\n}\n\n/** Ask a yes-or-no question. True only when the person presses the confirm button. */\nexport function confirm(options: ConfirmOptions): Promise<boolean> {\n if (hosts === 0) {\n console.error('confirm(): no <DialogHost /> is mounted, so nothing was asked; treating it as no.');\n return Promise.resolve(false);\n }\n return new Promise((resolve) => ask({ id: 0, kind: 'confirm', options, settle: resolve }));\n}\n\n/** Ask for a line of text. The text, or null when the person cancels. */\nexport function prompt(options: PromptOptions): Promise<string | null> {\n if (hosts === 0) {\n console.error('prompt(): no <DialogHost /> is mounted, so nothing was asked; treating it as cancelled.');\n return Promise.resolve(null);\n }\n return new Promise((resolve) => ask({ id: 0, kind: 'prompt', options, settle: resolve }));\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n hosts++;\n return () => {\n listeners.delete(listener);\n hosts--;\n };\n}\n\nconst current = () => queue[0] ?? null;\nconst none = () => null;\n\nfunction PromptBody({ ask: a }: { ask: Extract<Ask, { kind: 'prompt' }> }) {\n const o = a.options;\n const [value, setValue] = useState(o.defaultValue ?? '');\n const [again, setAgain] = useState('');\n const [error, setError] = useState<ReactNode>(null);\n const [mismatch, setMismatch] = useState(false);\n const submit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (o.minLength && value.length < o.minLength) {\n setError(`At least ${o.minLength} characters.`);\n return;\n }\n const refused = o.validate?.(value);\n if (refused) {\n setError(refused);\n return;\n }\n if (o.confirmField && again !== value) {\n setMismatch(true);\n return;\n }\n a.settle(value);\n done();\n };\n return (\n <form onSubmit={submit} noValidate>\n <Field label={o.label ?? 'Your answer'} hint={o.hint} error={error}>\n <Input\n autoFocus\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n placeholder={o.placeholder}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n setMismatch(false);\n }}\n />\n </Field>\n {o.confirmField ? (\n <Field\n label={o.confirmField === true ? 'Type it again' : o.confirmField}\n error={mismatch ? 'The two do not match.' : null}\n className=\"mt-4\"\n >\n <Input\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n value={again}\n onChange={(e) => {\n setAgain(e.target.value);\n setMismatch(false);\n }}\n />\n </Field>\n ) : null}\n <DialogFooter>\n <Button\n variant=\"secondary\"\n onClick={() => {\n a.settle(null);\n done();\n }}\n >\n {o.cancelLabel ?? 'Cancel'}\n </Button>\n <Button type=\"submit\" variant={o.destructive ? 'danger' : 'primary'}>\n {o.confirmLabel ?? 'Continue'}\n </Button>\n </DialogFooter>\n </form>\n );\n}\n\n/** Where confirm() and prompt() open. Mount it once. */\nexport function DialogHost() {\n const a = useSyncExternalStore(subscribe, current, none);\n const cancel = () => {\n if (!a) return;\n if (a.kind === 'confirm') a.settle(false);\n else a.settle(null);\n done();\n };\n return (\n <Dialog open={a !== null} onOpenChange={(open) => (open ? undefined : cancel())}>\n {a ? (\n <DialogContent\n // A question that needs an answer before anything else happens.\n role=\"alertdialog\"\n // With no message there is nothing to describe it; say so, or Radix warns.\n {...(a.options.message ? {} : { 'aria-describedby': undefined })}\n className=\"w-[min(92vw,28rem)]\"\n >\n <DialogHeader>\n <DialogTitle>{a.options.title}</DialogTitle>\n {a.options.message ? <DialogDescription>{a.options.message}</DialogDescription> : null}\n </DialogHeader>\n {a.kind === 'prompt' ? (\n // Keyed by the ask, so a second prompt starts empty.\n <PromptBody key={a.id} ask={a} />\n ) : (\n <DialogFooter>\n <Button variant=\"secondary\" onClick={cancel}>\n {a.options.cancelLabel ?? 'Cancel'}\n </Button>\n <Button\n variant={a.options.destructive ? 'danger' : 'primary'}\n onClick={() => {\n a.settle(true);\n done();\n }}\n >\n {a.options.confirmLabel ?? 'Continue'}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n ) : null}\n </Dialog>\n );\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { cn } from '../lib/cn';\nimport { Button } from './button';\n\n// Bundlers replace process.env.NODE_ENV; the typeof guard covers one that doesn't.\ndeclare const process: { env: { NODE_ENV?: string } } | undefined;\n\nconst N = new Intl.NumberFormat('en-US');\n\n/**\n * Which rows are showing, and the way to the next page and back. `pageIndex`\n * counts from 0: page one is 0, its rows are `pageIndex * pageSize` up to the\n * next page's first. One page or fewer shows nothing.\n */\nexport function Pagination({\n pageIndex,\n pageSize,\n total,\n onPage,\n label = 'Pages',\n className,\n}: {\n /** From 0. */\n pageIndex: number;\n pageSize: number;\n total: number;\n onPage: (pageIndex: number) => void;\n /** The navigation's name for a screen reader: \"Stamps, pages\". */\n label?: string;\n className?: string;\n}) {\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const index = Math.min(Math.max(0, pageIndex), pages - 1);\n if (index !== pageIndex && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n console.warn(`Pagination: pageIndex ${pageIndex} is outside 0–${pages - 1}; it counts from 0.`);\n }\n if (total <= pageSize) return null;\n const from = index * pageSize + 1;\n const to = Math.min(total, (index + 1) * pageSize);\n return (\n <nav aria-label={label} className={cn('flex items-center justify-between gap-4', className)}>\n <p aria-live=\"polite\" className=\"oca-tabular text-[0.875rem] text-muted-foreground\">\n {N.format(from)}–{N.format(to)} of {N.format(total)}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"secondary\" size=\"sm\" disabled={index === 0} onClick={() => onPage(index - 1)} className=\"pl-3\">\n <ChevronLeft aria-hidden />\n Previous\n </Button>\n <Button variant=\"secondary\" size=\"sm\" disabled={index >= pages - 1} onClick={() => onPage(index + 1)} className=\"pr-3\">\n Next\n <ChevronRight aria-hidden />\n </Button>\n </div>\n </nav>\n );\n}\n","import QRCode from 'qrcode';\nimport { useMemo } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/**\n * A QR code for an address, an invoice or a link: ink modules on a white\n * tile in both modes, since a scanner needs dark on light. Drawn as one SVG\n * path at render, so it is there in the server's HTML with no flash, and it\n * is an image with a name for a screen reader.\n */\nexport function QrCode({\n value,\n size = 200,\n label,\n className,\n}: {\n /** What it encodes: a BIP-21 URI, a Lightning invoice, an address, a link. */\n value: string;\n /** Rendered width and height in px, the white margin included. */\n size?: number;\n /** What a screen reader hears. Defaults to \"QR code for\" and the value's start. */\n label?: string;\n className?: string;\n}) {\n const matrix = useMemo(() => {\n try {\n return QRCode.create(value, { errorCorrectionLevel: 'M' }).modules;\n } catch {\n return null;\n }\n }, [value]);\n const path = useMemo(() => {\n if (!matrix) return '';\n let d = '';\n for (let y = 0; y < matrix.size; y++) {\n for (let x = 0; x < matrix.size; x++) {\n if (matrix.get(y, x)) d += `M${x} ${y}h1v1h-1z`;\n }\n }\n return d;\n }, [matrix]);\n const short = value.length > 28 ? `${value.slice(0, 28)}…` : value;\n return (\n <div\n role=\"img\"\n aria-label={matrix ? (label ?? `QR code for ${short}`) : 'Too long for a QR code'}\n className={cn('inline-block shrink-0 rounded-2xl bg-white p-3 ring-1 ring-border', className)}\n style={{ width: size, height: size }}\n >\n {matrix ? (\n <svg viewBox={`0 0 ${matrix.size} ${matrix.size}`} shapeRendering=\"crispEdges\" aria-hidden className=\"block size-full\">\n <path d={path} fill=\"#0a0a0a\" />\n </svg>\n ) : (\n <div aria-hidden className=\"flex size-full items-center justify-center text-center text-[0.8125rem] text-[#54585e]\">\n Too long for a QR code\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/cn.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/status-badge.tsx","../src/primitives/card.tsx","../src/lib/shared-context.ts","../src/lib/density.ts","../src/primitives/form.tsx","../src/primitives/overlay.tsx","../src/primitives/scroll-fade.tsx","../src/primitives/tabs.tsx","../src/primitives/accordion.tsx","../src/primitives/dialogs.tsx","../src/primitives/pagination.tsx","../src/primitives/qr-code.tsx"],"names":["Separator","SonnerToaster","forwardRef","Button","jsx","jsxs","cva","Card","Input","Textarea","Label","Fragment","SelectTrigger","useContext","SelectContent","SelectItem","Checkbox","Switch","RadioGroup","RadioGroupItem","DialogContent","DialogTitle","DialogDescription","SheetContent","PopoverContent","TooltipContent","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","useState","useEffect","createContext","Tabs","TabsList","TabsTrigger","TabsContent","useId","ChevronDown"],"mappings":"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","file":"primitives.mjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge would treat `oca-display-1` and `text-foreground` as the same\n// group and drop one; teach it the package's own type utilities.\nconst merge = extendTailwindMerge<'oca-type'>({\n extend: {\n classGroups: {\n 'oca-type': [\n 'oca-display-1',\n 'oca-display-2',\n 'oca-display-3',\n 'oca-title',\n 'oca-title-sm',\n 'oca-eyebrow',\n 'oca-lead',\n 'oca-body',\n 'oca-numeral',\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return merge(clsx(inputs));\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { useTheme } from 'next-themes';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\n/*\n * sonner paints a toast from its own variables (white, or black in dark), and\n * they outrank a class. Set to the tokens, a toast is the popover in both modes.\n */\nconst TOAST_COLOURS = {\n '--normal-bg': 'var(--popover)',\n '--normal-text': 'var(--popover-foreground)',\n '--normal-border': 'var(--border)',\n} as CSSProperties;\n\n/** Toasts in the page's mode: it reads next-themes, so a site passes nothing for dark. */\nexport function Toaster({ style, ...props }: ToasterProps) {\n const { resolvedTheme } = useTheme();\n return (\n <SonnerToaster\n theme={resolvedTheme === 'dark' ? 'dark' : resolvedTheme === 'light' ? 'light' : 'system'}\n style={{ ...TOAST_COLOURS, ...style }}\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport type { SiteStatus } from '../family';\nimport { cn } from '../lib/cn';\nimport { Badge } from './badge';\n\n/*\n * Where something stands, in the family's fixed words. A site or feature is\n * live, in testing, not yet, or paused; a check on an artifact is good,\n * caution or refused. There is no free text: the words are the component, so\n * no page can invent \"LIVE · MAINNET\", \"BETA\" or \"PRO\" again.\n */\nexport type Statement = 'good' | 'caution' | 'refused';\nexport type Status = SiteStatus | Statement;\n\nconst WORD: Record<Status, string> = {\n live: 'Live',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n paused: 'Paused',\n good: 'Good',\n caution: 'Caution',\n refused: 'Refused',\n};\n\nconst TONE = {\n live: 'success',\n testing: 'brand',\n 'not-yet': 'muted',\n paused: 'muted',\n good: 'success',\n caution: 'brand',\n refused: 'danger',\n} as const;\n\n/** The word for a status, for places that need it as text. */\nexport function statusWord(status: Status): string {\n return WORD[status];\n}\n\nexport interface StatusBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n status: Status;\n}\n\nexport function StatusBadge({ status, className, ...props }: StatusBadgeProps) {\n return (\n <Badge tone={TONE[status]} data-status={status} className={cn(className)} {...props}>\n {WORD[status]}\n </Badge>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * White on the canvas with one hairline and a generous radius; no shadow. The\n * `ink` card is the deck's #1E1E1E panel, dark in both modes.\n */\nexport const cardVariants = cva('relative rounded-[1.25rem] border', {\n variants: {\n tone: {\n default: 'border-border bg-card text-card-foreground',\n sunken: 'border-transparent bg-muted text-foreground',\n ink: 'border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground',\n outline: 'border-border bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-5',\n md: 'p-6 md:p-8',\n lg: 'p-8 md:p-10',\n },\n interactive: {\n true: 'transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong',\n false: '',\n },\n },\n defaultVariants: { tone: 'default', padding: 'md', interactive: false },\n});\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, tone, padding, interactive, ...props },\n ref\n) {\n return (\n <div ref={ref} data-ui=\"card\" className={cn(cardVariants({ tone, padding, interactive }), className)} {...props} />\n );\n});\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n/** The small \"01\" above a card title. */\nexport function CardNumeral({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('oca-numeral block', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('oca-title flex flex-wrap items-center gap-2.5', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-body', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-5', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-6 flex flex-wrap items-center gap-3', className)} {...props} />;\n}\n","import { createContext, type Context } from 'react';\n\n/**\n * A context that is the same object in every entry. Each entry (./chrome,\n * ./components, ./primitives) is bundled on its own, so a plain\n * createContext in a shared module makes one context per entry, and a\n * provider from one entry is invisible to a reader from another. Keyed on\n * globalThis by name, there is one.\n */\nexport function sharedContext<T>(name: string, initial: T): Context<T> {\n const key = Symbol.for(`@orangecheck/app-design/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T> | undefined>;\n return (store[key] ??= createContext<T>(initial));\n}\n","import { createElement, useContext, type ReactNode } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/*\n * How tightly data and fields are set. A public page is `comfortable`; a\n * tool is `compact` (36px fields, 14px table text, smaller stat cards).\n * ToolShell sets it for everything inside, dialogs included (a React\n * context crosses a portal where a CSS scope would not); a prop on one\n * component still wins.\n */\nexport type Density = 'comfortable' | 'compact';\n\nconst DensityContext = sharedContext<Density>('density', 'comfortable');\n\nexport function DensityProvider({ density, children }: { density: Density; children: ReactNode }) {\n return createElement(DensityContext.Provider, { value: density }, children);\n}\n\nexport function useDensity(): Density {\n return useContext(DensityContext);\n}\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { Check, ChevronDown } from 'lucide-react';\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n useContext,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { useDensity } from '../lib/density';\nimport { sharedContext } from '../lib/shared-context';\n\n/* Fields: 44px tall, a hairline that darkens on focus with a soft orange halo,\n 16px text on phones so iOS never zooms. */\nconst fieldBase = [\n 'w-full rounded-xl border border-input bg-card text-foreground placeholder:text-oca-subtle',\n 'text-base md:text-[0.9375rem] outline-none transition-[border-color,box-shadow]',\n 'focus:border-foreground/35 focus:ring-4 focus:ring-[color-mix(in_oklab,var(--oca-orange)_16%,transparent)]',\n 'disabled:cursor-not-allowed disabled:opacity-55',\n 'aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-[color-mix(in_oklab,var(--destructive)_14%,transparent)]',\n];\n\n/* `sm` is 36px for a tool's dense forms; the text stays 16px on phones. */\nconst FIELD_SIZE = {\n md: 'h-11 px-3.5',\n sm: 'h-9 rounded-[0.625rem] px-3 md:text-[0.875rem]',\n} as const;\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** `sm` (36px) for a tool's dense forms. Defaults to the density around it. */\n size?: 'md' | 'sm';\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className, type = 'text', size, ...props },\n ref\n) {\n const density = useDensity();\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <input\n ref={ref}\n type={type}\n data-ui=\"input\"\n data-size={s}\n className={cn(fieldBase, FIELD_SIZE[s], className)}\n {...props}\n />\n );\n});\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaHTMLAttributes<HTMLTextAreaElement>>(\n function Textarea({ className, ...props }, ref) {\n return (\n <textarea\n ref={ref}\n data-ui=\"textarea\"\n className={cn(fieldBase, 'min-h-28 px-3.5 py-3 leading-relaxed', className)}\n {...props}\n />\n );\n }\n);\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function Label({ className, ...props }, ref) {\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn('text-sm font-medium leading-none text-foreground', className)}\n {...props}\n />\n );\n});\n\n/** What Field hands its control: the id its label names, its hint and error, whether it is invalid. */\nexport interface FieldControlProps {\n id: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: true;\n}\n\nexport interface FieldProps {\n label: ReactNode;\n /** Help under the control. It sits below, so paired fields stay level. */\n hint?: ReactNode;\n /** Mark the field optional beside its label, rather than in a hint. */\n optional?: boolean;\n /** Shown in place of nothing; marks the control invalid. */\n error?: ReactNode;\n /**\n * The control, which receives id, aria-describedby and aria-invalid. Or a\n * function given them, for a control inside a box of its own: an input\n * with a popover anchored under it, `(c) => <div className=\"relative\"><Input {...c} />{popover}</div>`.\n */\n children: ReactElement | ((control: FieldControlProps) => ReactNode);\n /** The control's id, when something else must know it. Default: a generated one. */\n id?: string;\n className?: string;\n /** Render the label visually hidden (it is still the accessible name). */\n hideLabel?: boolean;\n /** A button that acts on the control, set beside it (below it on a phone). */\n action?: ReactNode;\n}\n\n/** Label, hint, control and error, wired together by id. */\nexport function Field({ label, hint, optional, error, children, id: fixedId, className, hideLabel, action }: FieldProps) {\n const generated = useId();\n const id = fixedId ?? generated;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const wiring: FieldControlProps = {\n id,\n 'aria-describedby': [hintId, errorId].filter(Boolean).join(' ') || undefined,\n 'aria-invalid': error ? true : undefined,\n };\n const control =\n typeof children === 'function'\n ? children(wiring)\n : isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, { ...wiring })\n : children;\n const hintNode = hint ? (\n <p id={hintId} className=\"text-[0.8125rem] leading-snug text-muted-foreground\">\n {hint}\n </p>\n ) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <Label htmlFor={id} className={hideLabel ? 'sr-only' : 'flex items-baseline gap-2'}>\n {label}\n {optional ? <span className=\"text-[0.8125rem] font-normal text-muted-foreground\">Optional</span> : null}\n </Label>\n {action ? (\n // The hint belongs to the input, so it sits under the input, not under the button.\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 [&>input]:w-full\">\n {control}\n {hintNode}\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ) : (\n <>\n {control}\n {hintNode}\n </>\n )}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] leading-snug text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Select ───────────────────────────────────────────────────────────── */\n\n/*\n * Field wires its label to its child by id, and Select's root renders no\n * element of its own. So Select takes the field's id, description and\n * invalid state and hands them to its trigger, the element a label names.\n */\ninterface SelectWiring {\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n}\nconst SelectFieldContext = sharedContext<SelectWiring | null>('select-field', null);\n\nexport function Select({\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & SelectWiring) {\n return (\n <SelectFieldContext.Provider value={{ id, 'aria-describedby': describedBy, 'aria-invalid': invalid }}>\n <SelectPrimitive.Root {...props} />\n </SelectFieldContext.Provider>\n );\n}\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & { size?: 'md' | 'sm' }\n>(function SelectTrigger({ className, children, size, ...props }, ref) {\n const density = useDensity();\n const field = useContext(SelectFieldContext);\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n id={field?.id}\n aria-describedby={field?.['aria-describedby']}\n aria-invalid={field?.['aria-invalid']}\n className={cn(fieldBase, FIELD_SIZE[s], 'flex items-center justify-between gap-2 text-left', className)}\n {...props}\n >\n <span className=\"truncate\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent({ className, children, position = 'popper', ...props }, ref) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={6}\n className={cn(\n 'oca-animate-fade z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n >\n <SelectPrimitive.Viewport>{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(function SelectItem({ className, children, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex h-10 cursor-default select-none items-center rounded-lg pl-3 pr-9 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"absolute right-3\">\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n});\n\n/* ── Checkbox, Switch, Radio ──────────────────────────────────────────── */\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(function Checkbox({ className, ...props }, ref) {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex size-5 shrink-0 items-center justify-center rounded-[6px] border border-input bg-card',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator>\n <Check className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\n\nexport const Switch = forwardRef<\n ElementRef<typeof SwitchPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(function Switch({ className, ...props }, ref) {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border border-transparent bg-input p-0.5',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n // The deep orange: the track is the state, so it must clear 3:1 on a card.\n 'data-[state=checked]:bg-oca-orange-deep disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block size-5 rounded-full bg-white shadow-sm transition-transform data-[state=checked]:translate-x-5\" />\n </SwitchPrimitive.Root>\n );\n});\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(function RadioGroup({ className, ...props }, ref) {\n return <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-3', className)} {...props} />;\n});\n\nexport const RadioGroupItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(function RadioGroupItem({ className, ...props }, ref) {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n 'inline-flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-card',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"block size-2.5 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Item>\n );\n});\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { X } from 'lucide-react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* ── Dialog ───────────────────────────────────────────────────────────── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst overlayClass =\n 'oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0';\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(function DialogContent({ className, children, hideClose, ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2',\n 'max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8',\n 'outline-none',\n className\n )}\n {...props}\n >\n {children}\n {hideClose ? null : (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mb-5 flex flex-col gap-2 pr-8', className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-[1.5rem] font-normal leading-tight tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <DialogPrimitive.Description ref={ref} className={cn('oca-body', className)} {...props} />;\n});\n\n/* ── Sheet: a dialog from an edge ────────────────────────────────────── */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetTitle = DialogTitle;\nexport const SheetDescription = DialogDescription;\n\nconst sheetSide = {\n right: 'inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l',\n left: 'inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r',\n bottom: 'inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t',\n} as const;\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { side?: keyof typeof sheetSide }\n>(function SheetContent({ className, children, side = 'right', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none',\n sheetSide[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\n/* ── Popover ──────────────────────────────────────────────────────────── */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 8, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\n\n/* ── Tooltip: ink, small, quick ───────────────────────────────────────── */\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\n\n/* ── Menu ─────────────────────────────────────────────────────────────── */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 8, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { destructive?: boolean }\n>(function DropdownMenuItem({ className, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground',\n destructive && 'text-destructive [&_svg]:text-destructive',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function DropdownMenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return <DropdownMenuPrimitive.Separator ref={ref} className={cn('my-1.5 h-px bg-border', className)} {...props} />;\n});\n","import { useCallback, useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A horizontal scroller that says when there is more. Content that is wider\n * than its box scrolls instead of being clipped, and a soft edge appears on\n * whichever side hides something. Tables, code and tab bars all use it.\n */\nexport interface ScrollFadeProps extends HTMLAttributes<HTMLDivElement> {\n /** The colour under the scroller, as a CSS value; the edge fades to it. */\n fade?: string;\n /** Classes for the scrolling element itself. */\n innerClassName?: string;\n}\n\nexport function ScrollFade({ fade = 'var(--card)', className, innerClassName, children, ...props }: ScrollFadeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [edges, setEdges] = useState({ left: false, right: false });\n const measure = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n const left = el.scrollLeft > 1;\n const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((e) => (e.left === left && e.right === right ? e : { left, right }));\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n measure();\n // Without ResizeObserver (old engines, jsdom) the edges still follow scrolling.\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [measure]);\n return (\n <div className={cn('relative min-w-0', className)} {...props}>\n <div\n ref={ref}\n onScroll={measure}\n // While it hides something, a keyboard can reach it to scroll.\n tabIndex={edges.left || edges.right ? 0 : undefined}\n className={cn(\n // Positioned, so sr-only text deep in a wide row scrolls and clips with the row.\n 'relative overflow-x-auto overscroll-x-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring',\n innerClassName\n )}\n >\n {children}\n </div>\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 left-0 w-8 transition-opacity duration-150',\n edges.left ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to right, ${fade}, transparent)` }}\n />\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-10 transition-opacity duration-150',\n edges.right ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to left, ${fade}, transparent)` }}\n />\n </div>\n );\n}\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { createContext, forwardRef, useContext, type ComponentPropsWithoutRef, type ElementRef } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from './scroll-fade';\n\n/*\n * Two looks for one behaviour: `pill` is a segmented control for switching a\n * view in place; `line` is page-level navigation between sections.\n */\ntype TabsLook = 'pill' | 'line';\nconst LookContext = createContext<TabsLook>('pill');\n\nexport const Tabs = forwardRef<\n ElementRef<typeof TabsPrimitive.Root>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root> & { look?: TabsLook }\n>(function Tabs({ look = 'pill', ...props }, ref) {\n return (\n <LookContext.Provider value={look}>\n <TabsPrimitive.Root ref={ref} {...props} />\n </LookContext.Provider>\n );\n});\n\nexport const TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(function TabsList({ className, ...props }, ref) {\n const look = useContext(LookContext);\n // More tabs than fit a phone scroll sideways, with an edge that says so.\n return (\n <ScrollFade fade=\"var(--background)\" className={look === 'pill' ? 'w-fit max-w-full' : 'w-full'}>\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n look === 'pill'\n ? 'inline-flex w-max items-center gap-1 rounded-full bg-muted p-1'\n : 'flex w-max min-w-full items-center gap-6 border-b border-border',\n className\n )}\n {...props}\n />\n </ScrollFade>\n );\n});\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n const look = useContext(LookContext);\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap text-[0.9375rem] outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n look === 'pill'\n ? 'h-9 rounded-full px-4 text-muted-foreground hover:text-foreground data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm'\n : '-mb-px h-11 border-b-2 border-transparent text-muted-foreground hover:text-foreground data-[state=active]:border-foreground data-[state=active]:text-foreground',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return <TabsPrimitive.Content ref={ref} className={cn('mt-6 outline-none', className)} {...props} />;\n});\n","import { ChevronDown } from 'lucide-react';\nimport { createContext, useContext, useId, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Questions and sections that open in place. Built on <details>, so it works\n * before script loads, a browser's find-in-page opens the item that holds the\n * match, and a screen reader hears each title as a button that is expanded\n * or collapsed. `single` lets one item be open at a time.\n */\nconst GroupName = createContext<string | undefined>(undefined);\n\nexport function Accordion({\n single = false,\n children,\n className,\n}: {\n /** One item open at a time: opening one closes the others. */\n single?: boolean;\n children: ReactNode;\n className?: string;\n}) {\n const name = useId();\n return (\n <GroupName.Provider value={single ? name : undefined}>\n <div className={cn('divide-y divide-border overflow-hidden rounded-[1.25rem] border border-border bg-card', className)}>\n {children}\n </div>\n </GroupName.Provider>\n );\n}\n\nexport function AccordionItem({\n title,\n children,\n defaultOpen = false,\n id,\n className,\n}: {\n title: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n /** For a link straight to this item. */\n id?: string;\n className?: string;\n}) {\n const name = useContext(GroupName);\n return (\n <details id={id} name={name} open={defaultOpen || undefined} className={cn('group scroll-mt-24', className)}>\n <summary\n className={cn(\n 'flex min-h-14 cursor-pointer list-none items-center justify-between gap-4 px-5 py-4 text-[1rem] font-medium leading-snug md:px-6',\n // Inside the card's clip, so the ring is drawn within the row.\n 'transition-colors hover:bg-accent/60 focus-visible:outline-offset-[-2px] [&::-webkit-details-marker]:hidden'\n )}\n >\n {title}\n <ChevronDown\n aria-hidden\n className=\"size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-180\"\n />\n </summary>\n <div className=\"oca-body px-5 pb-5 text-[0.9375rem] md:px-6 md:pb-6\">{children}</div>\n </details>\n );\n}\n","import { useState, useSyncExternalStore, type FormEvent, type ReactNode } from 'react';\n\nimport { Button } from './button';\nimport { Field, Input } from './form';\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from './overlay';\n\n/*\n * Ask and wait: `await confirm({...})` is true or false, `await prompt({...})`\n * is the text or null. Mount <DialogHost /> once, near the root; every call\n * queues there and they open one at a time. Without a host nothing is asked\n * and the answer is no (false, null), never a silent yes.\n */\n\nexport interface ConfirmOptions {\n title: ReactNode;\n /** One or two sentences: what happens, and whether it can be undone. */\n message?: ReactNode;\n /** The verb on the button: \"Revoke\", \"Delete stamp\". Defaults to \"Continue\". */\n confirmLabel?: string;\n cancelLabel?: string;\n /** The red button, for what cannot be undone. */\n destructive?: boolean;\n}\n\nexport interface PromptOptions extends ConfirmOptions {\n label?: ReactNode;\n placeholder?: string;\n defaultValue?: string;\n hint?: ReactNode;\n /** A password field: hidden as typed, never filled in by the browser. */\n secret?: boolean;\n minLength?: number;\n /** Return a sentence to refuse the value, or nothing to take it. */\n validate?: (value: string) => string | null | undefined;\n /** Ask for it twice (a passphrase): `true`, or the second field's label. Refuses until the two match. */\n confirmField?: boolean | ReactNode;\n}\n\ntype Ask =\n | { id: number; kind: 'confirm'; options: ConfirmOptions; settle: (answer: boolean) => void }\n | { id: number; kind: 'prompt'; options: PromptOptions; settle: (answer: string | null) => void };\n\nlet queue: Ask[] = [];\nlet asked = 0;\nlet hosts = 0;\nconst listeners = new Set<() => void>();\nconst emit = () => listeners.forEach((l) => l());\n\nfunction ask(item: Ask) {\n queue = [...queue, { ...item, id: ++asked }];\n emit();\n}\n\nfunction done() {\n queue = queue.slice(1);\n emit();\n}\n\n/** Ask a yes-or-no question. True only when the person presses the confirm button. */\nexport function confirm(options: ConfirmOptions): Promise<boolean> {\n if (hosts === 0) {\n console.error('confirm(): no <DialogHost /> is mounted, so nothing was asked; treating it as no.');\n return Promise.resolve(false);\n }\n return new Promise((resolve) => ask({ id: 0, kind: 'confirm', options, settle: resolve }));\n}\n\n/** Ask for a line of text. The text, or null when the person cancels. */\nexport function prompt(options: PromptOptions): Promise<string | null> {\n if (hosts === 0) {\n console.error('prompt(): no <DialogHost /> is mounted, so nothing was asked; treating it as cancelled.');\n return Promise.resolve(null);\n }\n return new Promise((resolve) => ask({ id: 0, kind: 'prompt', options, settle: resolve }));\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n hosts++;\n return () => {\n listeners.delete(listener);\n hosts--;\n };\n}\n\nconst current = () => queue[0] ?? null;\nconst none = () => null;\n\nfunction PromptBody({ ask: a }: { ask: Extract<Ask, { kind: 'prompt' }> }) {\n const o = a.options;\n const [value, setValue] = useState(o.defaultValue ?? '');\n const [again, setAgain] = useState('');\n const [error, setError] = useState<ReactNode>(null);\n const [mismatch, setMismatch] = useState(false);\n const submit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (o.minLength && value.length < o.minLength) {\n setError(`At least ${o.minLength} characters.`);\n return;\n }\n const refused = o.validate?.(value);\n if (refused) {\n setError(refused);\n return;\n }\n if (o.confirmField && again !== value) {\n setMismatch(true);\n return;\n }\n a.settle(value);\n done();\n };\n return (\n <form onSubmit={submit} noValidate>\n <Field label={o.label ?? 'Your answer'} hint={o.hint} error={error}>\n <Input\n autoFocus\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n placeholder={o.placeholder}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n setMismatch(false);\n }}\n />\n </Field>\n {o.confirmField ? (\n <Field\n label={o.confirmField === true ? 'Type it again' : o.confirmField}\n error={mismatch ? 'The two do not match.' : null}\n className=\"mt-4\"\n >\n <Input\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n value={again}\n onChange={(e) => {\n setAgain(e.target.value);\n setMismatch(false);\n }}\n />\n </Field>\n ) : null}\n <DialogFooter>\n <Button\n variant=\"secondary\"\n onClick={() => {\n a.settle(null);\n done();\n }}\n >\n {o.cancelLabel ?? 'Cancel'}\n </Button>\n <Button type=\"submit\" variant={o.destructive ? 'danger' : 'primary'}>\n {o.confirmLabel ?? 'Continue'}\n </Button>\n </DialogFooter>\n </form>\n );\n}\n\n/** Where confirm() and prompt() open. Mount it once. */\nexport function DialogHost() {\n const a = useSyncExternalStore(subscribe, current, none);\n const cancel = () => {\n if (!a) return;\n if (a.kind === 'confirm') a.settle(false);\n else a.settle(null);\n done();\n };\n return (\n <Dialog open={a !== null} onOpenChange={(open) => (open ? undefined : cancel())}>\n {a ? (\n <DialogContent\n // A question that needs an answer before anything else happens.\n role=\"alertdialog\"\n // With no message there is nothing to describe it; say so, or Radix warns.\n {...(a.options.message ? {} : { 'aria-describedby': undefined })}\n className=\"w-[min(92vw,28rem)]\"\n >\n <DialogHeader>\n <DialogTitle>{a.options.title}</DialogTitle>\n {a.options.message ? <DialogDescription>{a.options.message}</DialogDescription> : null}\n </DialogHeader>\n {a.kind === 'prompt' ? (\n // Keyed by the ask, so a second prompt starts empty.\n <PromptBody key={a.id} ask={a} />\n ) : (\n <DialogFooter>\n <Button variant=\"secondary\" onClick={cancel}>\n {a.options.cancelLabel ?? 'Cancel'}\n </Button>\n <Button\n variant={a.options.destructive ? 'danger' : 'primary'}\n onClick={() => {\n a.settle(true);\n done();\n }}\n >\n {a.options.confirmLabel ?? 'Continue'}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n ) : null}\n </Dialog>\n );\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { cn } from '../lib/cn';\nimport { Button } from './button';\n\n// Bundlers replace process.env.NODE_ENV; the typeof guard covers one that doesn't.\ndeclare const process: { env: { NODE_ENV?: string } } | undefined;\n\nconst N = new Intl.NumberFormat('en-US');\n\n/**\n * Which rows are showing, and the way to the next page and back. `pageIndex`\n * counts from 0: page one is 0, its rows are `pageIndex * pageSize` up to the\n * next page's first. One page or fewer shows nothing.\n */\nexport function Pagination({\n pageIndex,\n pageSize,\n total,\n onPage,\n label = 'Pages',\n className,\n}: {\n /** From 0. */\n pageIndex: number;\n pageSize: number;\n total: number;\n onPage: (pageIndex: number) => void;\n /** The navigation's name for a screen reader: \"Stamps, pages\". */\n label?: string;\n className?: string;\n}) {\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const index = Math.min(Math.max(0, pageIndex), pages - 1);\n if (index !== pageIndex && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n console.warn(`Pagination: pageIndex ${pageIndex} is outside 0–${pages - 1}; it counts from 0.`);\n }\n if (total <= pageSize) return null;\n const from = index * pageSize + 1;\n const to = Math.min(total, (index + 1) * pageSize);\n return (\n <nav aria-label={label} className={cn('flex items-center justify-between gap-4', className)}>\n <p aria-live=\"polite\" className=\"oca-tabular text-[0.875rem] text-muted-foreground\">\n {N.format(from)}–{N.format(to)} of {N.format(total)}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"secondary\" size=\"sm\" disabled={index === 0} onClick={() => onPage(index - 1)} className=\"pl-3\">\n <ChevronLeft aria-hidden />\n Previous\n </Button>\n <Button variant=\"secondary\" size=\"sm\" disabled={index >= pages - 1} onClick={() => onPage(index + 1)} className=\"pr-3\">\n Next\n <ChevronRight aria-hidden />\n </Button>\n </div>\n </nav>\n );\n}\n","import QRCode from 'qrcode';\nimport { useMemo } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/**\n * A QR code for an address, an invoice or a link: ink modules on a white\n * tile in both modes, since a scanner needs dark on light. Drawn as one SVG\n * path at render, so it is there in the server's HTML with no flash, and it\n * is an image with a name for a screen reader.\n */\nexport function QrCode({\n value,\n size = 200,\n label,\n className,\n}: {\n /** What it encodes: a BIP-21 URI, a Lightning invoice, an address, a link. */\n value: string;\n /** Rendered width and height in px, the white margin included. */\n size?: number;\n /** What a screen reader hears. Defaults to \"QR code for\" and the value's start. */\n label?: string;\n className?: string;\n}) {\n const matrix = useMemo(() => {\n try {\n return QRCode.create(value, { errorCorrectionLevel: 'M' }).modules;\n } catch {\n return null;\n }\n }, [value]);\n const path = useMemo(() => {\n if (!matrix) return '';\n let d = '';\n for (let y = 0; y < matrix.size; y++) {\n for (let x = 0; x < matrix.size; x++) {\n if (matrix.get(y, x)) d += `M${x} ${y}h1v1h-1z`;\n }\n }\n return d;\n }, [matrix]);\n const short = value.length > 28 ? `${value.slice(0, 28)}…` : value;\n return (\n <div\n role=\"img\"\n aria-label={matrix ? (label ?? `QR code for ${short}`) : 'Too long for a QR code'}\n className={cn('inline-block shrink-0 rounded-2xl bg-white p-3 ring-1 ring-border', className)}\n style={{ width: size, height: size }}\n >\n {matrix ? (\n <svg viewBox={`0 0 ${matrix.size} ${matrix.size}`} shapeRendering=\"crispEdges\" aria-hidden className=\"block size-full\">\n <path d={path} fill=\"#0a0a0a\" />\n </svg>\n ) : (\n <div aria-hidden className=\"flex size-full items-center justify-center text-center text-[0.8125rem] text-[#54585e]\">\n Too long for a QR code\n </div>\n )}\n </div>\n );\n}\n"]}
|
package/dist/session.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { OcAccount } from '@orangecheck/auth-client';
|
|
3
|
-
import { a as AccountMenuItem } from './tool-shell-
|
|
4
|
-
export { S as SessionAccountView, d as SessionState } from './tool-shell-
|
|
5
|
-
import './tools-
|
|
3
|
+
import { a as AccountMenuItem } from './tool-shell-DQFEMLLe.mjs';
|
|
4
|
+
export { S as SessionAccountView, d as SessionState } from './tool-shell-DQFEMLLe.mjs';
|
|
5
|
+
import './tools-CKO8IseL.mjs';
|
|
6
6
|
import './format.mjs';
|
|
7
|
-
import './index-
|
|
7
|
+
import './index-Bkl49Vgy.mjs';
|
|
8
8
|
|
|
9
9
|
declare function accountName(account: Pick<OcAccount, 'displayName' | 'displayIdentity'>): string;
|
|
10
10
|
declare function SessionAccount({ signInHref, signInPath, signInLabel, accountHref, items, nameFrom, }: {
|
package/dist/session.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { OcAccount } from '@orangecheck/auth-client';
|
|
3
|
-
import { a as AccountMenuItem } from './tool-shell-
|
|
4
|
-
export { S as SessionAccountView, d as SessionState } from './tool-shell-
|
|
5
|
-
import './tools-
|
|
3
|
+
import { a as AccountMenuItem } from './tool-shell-CnZ3NUSi.js';
|
|
4
|
+
export { S as SessionAccountView, d as SessionState } from './tool-shell-CnZ3NUSi.js';
|
|
5
|
+
import './tools-CzjFPng4.js';
|
|
6
6
|
import './format.js';
|
|
7
|
-
import './index-
|
|
7
|
+
import './index-Bkl49Vgy.js';
|
|
8
8
|
|
|
9
9
|
declare function accountName(account: Pick<OcAccount, 'displayName' | 'displayIdentity'>): string;
|
|
10
10
|
declare function SessionAccount({ signInHref, signInPath, signInLabel, accountHref, items, nameFrom, }: {
|