@godxjp/ui 2.2.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/BRAND.md +39 -29
  2. package/CHANGELOG.md +566 -10
  3. package/README.md +143 -168
  4. package/config/eslint.js +54 -0
  5. package/config/prettier.cjs +20 -0
  6. package/config/tsconfig.base.json +22 -0
  7. package/config/vitest.base.ts +26 -0
  8. package/dist/MiniMonth-YAmPGEpC.d.ts +143 -0
  9. package/dist/Table.types-BbsxoIYE.d.ts +352 -0
  10. package/dist/color-DO0qqUAb.d.ts +38 -0
  11. package/dist/components/composites.d.ts +963 -0
  12. package/dist/components/composites.js +7340 -0
  13. package/dist/components/composites.js.map +1 -0
  14. package/dist/components/primitives.d.ts +2633 -163
  15. package/dist/components/primitives.js +7266 -165
  16. package/dist/components/primitives.js.map +1 -1
  17. package/dist/components/shell.d.ts +82 -12
  18. package/dist/components/shell.js +168 -162
  19. package/dist/components/shell.js.map +1 -1
  20. package/dist/hooks.d.ts +83 -8
  21. package/dist/hooks.js +497 -83
  22. package/dist/hooks.js.map +1 -1
  23. package/dist/i18n.d.ts +55 -3
  24. package/dist/i18n.js +456 -5
  25. package/dist/i18n.js.map +1 -1
  26. package/dist/index.d.ts +24 -5
  27. package/dist/index.js +12524 -267
  28. package/dist/index.js.map +1 -1
  29. package/dist/padding-DY0JV5Ja.d.ts +16 -0
  30. package/dist/preferences.d.ts +132 -0
  31. package/dist/preferences.js +262 -0
  32. package/dist/preferences.js.map +1 -0
  33. package/dist/props.d.ts +86 -0
  34. package/dist/props.js +16 -0
  35. package/dist/props.js.map +1 -0
  36. package/dist/size-CQwNvOWd.d.ts +19 -0
  37. package/dist/{data.d.ts → types-LTj-2bl-.d.ts} +7 -12
  38. package/dist/useTableViews-D5NIAJ7h.d.ts +154 -0
  39. package/package.json +92 -35
  40. package/src/tokens/tailwind.css +158 -0
  41. package/dist/components/screens.d.ts +0 -51
  42. package/dist/components/screens.js +0 -806
  43. package/dist/components/screens.js.map +0 -1
  44. package/dist/data.js +0 -93
  45. package/dist/data.js.map +0 -1
  46. package/src/tokens/tokens-ext.css +0 -401
  47. package/src/tokens/tokens.css +0 -765
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/primitives/cn.ts","../src/components/primitives/Badge.tsx","../src/components/primitives/Button.tsx","../src/components/primitives/Card.tsx","../src/components/primitives/Input.tsx","../src/components/primitives/Label.tsx","../src/components/primitives/Tabs.tsx","../src/components/primitives/Avatar.tsx","../src/components/primitives/Separator.tsx","../src/components/primitives/Popover.tsx","../src/components/primitives/DropdownMenu.tsx","../src/components/primitives/Calendar.tsx","../src/components/primitives/TimeInput.tsx","../src/i18n/locales/ja.ts","../src/i18n/locales/en.ts","../src/i18n/locales/vi.ts","../src/i18n/index.ts","../src/data/products.ts","../src/hooks/useTweaks.ts"],"names":["jsx","Input","Textarea","forwardRef","Label","TabsList","TabsTrigger","Separator","PopoverContent","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuLabel","TimeInput","useState","useEffect"],"mappings":";;;;;;;;;;;;;;;;AAQO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AC4BO,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,SAAA;AAAA,EACV,GAAA,GAAM,KAAA;AAAA,EACN,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,EAAI,GAAG,IAAA,EAC9D,QAAA,EAAA;AAAA,IAAA,GAAA,oBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,KAAA,EAAM,eAAW,IAAA,EAAC,CAAA;AAAA,IACzC;AAAA,GAAA,EACH,CAAA;AAEJ;ACfO,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,SAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,MAAM,SAAA,GAAY,UAAU,IAAA,GAAO,QAAA;AACnC,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,UAAU,MAAA,GAAY,IAAA;AAAA,MAC5B,SAAA,EAAW,EAAA;AAAA,QACT,KAAA;AAAA,QACA,OAAO,OAAO,CAAA,CAAA;AAAA,QACd,SAAS,IAAA,IAAQ,QAAA;AAAA,QACjB,SAAS,IAAA,IAAQ,QAAA;AAAA,QACjB;AAAA,OACF;AAAA,MACC,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AC5CO,SAAS,IAAA,CAAK,EAAE,SAAA,EAAW,GAAG,MAAK,EAA0B;AAClE,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,MAAA,EAAQ,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAC1D;AAEO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,MAAK,EAA0B;AACxE,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,aAAA,EAAe,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AACjE;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,MAAK,EAAyB;AACtE,EAAA,uBAAOA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAC/D;AAMO,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,MAAK,EAAsB;AACtE,EAAA,uBAAOA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,eAAA,EAAiB,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AACjE;AAEO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,MAAK,EAA0B;AACzE,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAuB,GAAG,IAAA,EAAM,CAAA;AAC9C;AC5BO,IAAM,KAAA,GAAQ,UAAA,CAAyC,SAASC,MAAAA,CACrE,EAAE,SAAA,EAAW,IAAA,GAAO,MAAA,EAAQ,GAAG,IAAA,EAAK,EACpC,GAAA,EACA;AACA,EAAA,uBAAOD,GAAAA,CAAC,OAAA,EAAA,EAAM,GAAA,EAAU,IAAA,EAAY,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AACnF,CAAC;AAKM,IAAM,QAAA,GAAW,WAA+C,SAASE,SAAAA,CAC9E,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EACrB,GAAA,EACA;AACA,EAAA,uBAAOF,GAAAA,CAAC,UAAA,EAAA,EAAS,GAAA,EAAU,SAAA,EAAW,GAAG,OAAA,EAAS,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAC1E,CAAC;ACZM,IAAM,KAAA,GAAQG,WAGnB,SAASC,MAAAA,CAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAC5C,EAAA,uBAAOJ,GAAAA,CAAgB,cAAA,CAAA,IAAA,EAAf,EAAoB,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AACrF,CAAC;ACAM,IAAM,IAAA,GAAqB,aAAA,CAAA;AAE3B,IAAM,QAAA,GAAWG,WAGtB,SAASE,SAAAA,CAAS,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAC/C,EAAA,uBAAOL,GAAAA,CAAe,aAAA,CAAA,IAAA,EAAd,EAAmB,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AACnF,CAAC;AAEM,IAAM,WAAA,GAAcG,WAGzB,SAASG,YAAAA,CAAY,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAGlD,EAAA,uBACEN,GAAAA;AAAA,IAAe,aAAA,CAAA,OAAA;AAAA,IAAd;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,SAAS,CAAA;AAAA,MAC7B,GAAG,IAAA;AAAA,MACJ,aAAA,EAAa;AAAA;AAAA,GACf;AAEJ,CAAC;AAEM,IAAM,WAAA,GAA4B,aAAA,CAAA;AC1BlC,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,SAAA;AAAA,EACV,GAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,uBACEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,QAAA,EAAU,OAAA,KAAY,OAAA,IAAW,OAAA,EAAS,SAAS,CAAA,EAAI,GAAG,IAAA,EAC3E,gCAAMA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,GAAA,EAAK,GAAA,IAAO,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,cAAc,SAAA,EAAW,SAAA,EAAW,OAAA,EAAQ,EAAG,IAAK,QAAA,EACpI,CAAA;AAEJ;ACtBO,IAAM,SAAA,GAAYG,UAAAA,CAGvB,SAASI,UAAAA,CAAU,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC/F,EAAA,uBACEP,GAAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,GAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,WAAA,KAAgB,eAAe,SAAA,GAAY,EAAA;AAAA,QAC3C;AAAA,OACF;AAAA,MACA,KAAA,EACE,WAAA,KAAgB,UAAA,GACZ,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,eAAA,EAAiB,MAAA,EAAQ,CAAA,EAAE,GACnE,MAAA;AAAA,MAEL,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;ACbM,IAAM,OAAA,GAA2B,gBAAA,CAAA;AACjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AACxC,IAAM,aAAA,GAAiC,gBAAA,CAAA;AAEvC,IAAM,cAAA,GAAiBG,UAAAA,CAG5B,SAASK,eAAAA,CACT,EAAE,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,IAAA,IAClD,GAAA,EACA;AACA,EAAA,uBACER,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACC,GAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,MACzC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ,CAAC;ACbM,IAAM,YAAA,GAAqC,qBAAA,CAAA;AAC3C,IAAM,mBAAA,GAA4C,qBAAA,CAAA;AAClD,IAAM,iBAAA,GAA0C,qBAAA,CAAA;AAChD,IAAM,kBAAA,GAA2C,qBAAA,CAAA;AACjD,IAAM,eAAA,GAAwC,qBAAA,CAAA;AAC9C,IAAM,sBAAA,GAA+C,qBAAA,CAAA;AAErD,IAAM,mBAAA,GAAsBG,UAAAA,CAGjC,SAASM,oBAAAA,CAAoB,EAAE,SAAA,EAAW,UAAA,GAAa,CAAA,EAAG,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAC1E,EAAA,uBACET,GAAAA,CAAuB,qBAAA,CAAA,MAAA,EAAtB,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,OAAA;AAAA,IAAtB;AAAA,MACC,GAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAC/C,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ,CAAC;AAOM,IAAM,gBAAA,GAAmBG,UAAAA,CAG9B,SAASO,iBAAAA,CAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,GAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACnF,EAAA,uBACEV,GAAAA;AAAA,IAAuB,qBAAA,CAAA,IAAA;AAAA,IAAtB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,MAC7C,cAAA,EAAc,OAAA,KAAY,aAAA,GAAgB,aAAA,GAAgB,MAAA;AAAA,MAC1D,YAAA,EAAY,QAAQ,MAAA,GAAS,MAAA;AAAA,MAC5B,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAEM,IAAM,qBAAA,GAAwBG,WAGnC,SAASQ,sBAAAA,CAAsB,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAC5D,EAAA,uBACEX,GAAAA;AAAA,IAAuB,qBAAA,CAAA,SAAA;AAAA,IAAtB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAEM,IAAM,iBAAA,GAAoBG,UAAAA,CAG/B,SAASS,kBAAAA,CAAkB,EAAE,WAAW,KAAA,EAAO,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAC/D,EAAA,uBACEZ,GAAAA;AAAA,IAAuB,qBAAA,CAAA,KAAA;AAAA,IAAtB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC9C,YAAA,EAAY,QAAQ,MAAA,GAAS,MAAA;AAAA,MAC5B,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAEM,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoC;AAClC,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,wBAAA,EAA0B,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAC7E;ACpFO,SAAS,SAAS,EAAE,SAAA,EAAW,kBAAkB,IAAA,EAAM,GAAG,MAAK,EAAmB;AACvF,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA,GACN;AAEJ;ACLA,IAAM,YAAA,GAAe,2BAAA;AAErB,SAAS,UAAU,GAAA,EAAqB;AAKtC,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AACrB,EAAA,IAAI,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,OAAA;AACvC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAC5C,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC7D,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAC7B,IAAA,IAAI,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA,EAAG,OAAO,SAAA;AAAA,EAC3C;AACA,EAAA,OAAO,GAAA;AACT;AAYO,IAAM,SAAA,GAAYG,UAAAA;AAAA,EACvB,SAASU,UAAAA,CACP,EAAE,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,WAAA,GAAc,OAAA,EAAS,EAAA,EAAI,IAAA,EAAK,EACxE,GAAA,EACA;AACA,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAS,SAAS,EAAE,CAAA;AAE9C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,IACtB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,UAAU,KAAA,KAAU,EAAA,IAAM,CAAC,YAAA,CAAa,KAAK,KAAK,CAAA;AAExD,IAAA,uBACEb,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAU,SAAA;AAAA,QACV,YAAA,EAAa,KAAA;AAAA,QACb,UAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,CAAA;AAAA,QACX,EAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA,EAAO,KAAA;AAAA,QACP,gBAAc,OAAA,IAAW,MAAA;AAAA,QACzB,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,QACrC,UAAU,CAAC,CAAA,KAAqC,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACvE,MAAA,EAAQ,CAAC,CAAA,KAAoC;AAC3C,UAAA,MAAM,IAAA,GAAO,SAAA,CAAU,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACrC,UAAA,QAAA,CAAS,IAAI,CAAA;AACb,UAAA,IAAI,aAAa,IAAA,CAAK,IAAI,KAAK,IAAA,KAAS,KAAA,aAAkB,IAAI,CAAA;AAAA,QAChE;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;;;ACpFA,IAAM,EAAA,GAAK;AAAA,EACT,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,sCAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAK;AAAA,IACH,QAAA,EAAU,gCAAA;AAAA,IACV,QAAA,EAAU,sCAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,SAAA,EAAW,4CAAA;AAAA,IACX,QAAA,EAAU,cAAA;AAAA,IACV,WAAA,EAAa,kDAAA;AAAA,IACb,WAAA,EAAa,wDAAA;AAAA,IACb,SAAA,EAAW,4CAAA;AAAA,IACX,QAAA,EAAU,sCAAA;AAAA,IACV,MAAA,EAAQ,wCAAA;AAAA,IACR,WAAA,EAAa,oBAAA;AAAA,IACb,OAAA,EAAS,0BAAA;AAAA,IACT,YAAA,EAAc,kDAAA;AAAA,IACd,OAAA,EAAS,4CAAA;AAAA,IACT,OAAA,EAAS,0BAAA;AAAA,IACT,QAAA,EAAU,0BAAA;AAAA,IACV,GAAA,EAAK,4CAAA;AAAA,IACL,OAAA,EAAS,0BAAA;AAAA,IACT,OAAA,EAAS,sCAAA;AAAA,IACT,QAAA,EAAU,4CAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,cAAA;AAAA,IACR,KAAA,EAAO,kBAAA;AAAA,IACP,KAAA,EAAO,qCAAA;AAAA,IACP,KAAA,EAAO,oBAAA;AAAA,IACP,QAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAQ,gCAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,WAAA,EAAa,kDAAA;AAAA,IACb,WAAA,EAAa,wDAAA;AAAA,IACb,cAAA,EAAgB,wDAAA;AAAA,IAChB,cAAA,EAAgB,oEAAA;AAAA,IAChB,MAAA,EAAQ,cAAA;AAAA,IACR,aAAA,EAAe,8DAAA;AAAA,IACf,UAAA,EAAY,wDAAA;AAAA,IACZ,iBAAA,EAAmB,wDAAA;AAAA,IACnB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,cAAA;AAAA,IACT,cAAA,EAAgB,QAAA;AAAA,IAChB,cAAA,EAAgB,cAAA;AAAA,IAChB,kBAAA,EAAoB,QAAA;AAAA,IACpB,KAAA,EAAO,oBAAA;AAAA,IACP,UAAA,EAAY,OAAA;AAAA,IACZ,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,gCAAA;AAAA,IACT,MAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,GAAA,EAAK;AAAA,IACH,UAAA,EAAY,wDAAA;AAAA,IACZ,UAAA,EAAY,sCAAA;AAAA,IACZ,WAAA,EAAa,0BAAA;AAAA,IACb,MAAA,EAAQ,oBAAA;AAAA,IACR,cAAA,EAAgB,8DAAA;AAAA,IAChB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,cAAA;AAAA,IACR,GAAA,EAAK,cAAA;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,gCAAA;AAAA,IACR,MAAA,EAAQ,cAAA;AAAA,IACR,MAAA,EAAQ,cAAA;AAAA,IACR,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,sCAAA;AAAA,IACT,KAAA,EAAO,gCAAA;AAAA,IACP,IAAA,EAAM,cAAA;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,0BAAA;AAAA,IACP,OAAA,EAAS,0BAAA;AAAA,IACT,KAAA,EAAO,oBAAA;AAAA,IACP,MAAA,EAAQ,0BAAA;AAAA,IACR,UAAA,EAAY,4CAAA;AAAA,IACZ,UAAA,EAAY,4CAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,UAAA,EAAY,cAAA;AAAA,IACZ,OAAA,EAAS,0BAAA;AAAA,IACT,KAAA,EAAO,oBAAA;AAAA,IACP,WAAA,EAAa,gCAAA;AAAA,IACb,WAAA,EAAa,sCAAA;AAAA,IACb,MAAA,EAAQ,0BAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,SAAA,EAAW,4CAAA;AAAA,IACX,WAAA,EAAa,gCAAA;AAAA,IACb,OAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAU,oBAAA;AAAA,IACV,SAAA,EAAW,sCAAA;AAAA,IACX,MAAA,EAAQ,oBAAA;AAAA,IACR,SAAA,EAAW,4CAAA;AAAA,IACX,MAAA,EAAQ,gCAAA;AAAA,IACR,MAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAU,sCAAA;AAAA,IACV,WAAA,EAAa,mBAAA;AAAA,IACb,UAAA,EAAY,kDAAA;AAAA,IACZ,MAAA,EAAQ,gCAAA;AAAA,IACR,QAAA,EAAU,oBAAA;AAAA,IACV,iBAAA,EAAmB;AAAA;AAEvB,CAAA;AAEA,IAAO,UAAA,GAAQ,EAAA;;;AC7Hf,IAAM,EAAA,GAAwB;AAAA,EAC5B,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAK;AAAA,IACH,QAAA,EAAU,UAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,SAAA,EAAW,WAAA;AAAA,IACX,QAAA,EAAU,UAAA;AAAA,IACV,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,cAAA;AAAA,IACb,SAAA,EAAW,WAAA;AAAA,IACX,QAAA,EAAU,WAAA;AAAA,IACV,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa,MAAA;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,eAAA;AAAA,IACd,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,QAAA,EAAU,UAAA;AAAA,IACV,GAAA,EAAK,eAAA;AAAA,IACL,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EAAO,kBAAA;AAAA,IACP,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,WAAA,EAAa,gBAAA;AAAA,IACb,WAAA,EAAa,gBAAA;AAAA,IACb,cAAA,EAAgB,uBAAA;AAAA,IAChB,cAAA,EAAgB,8BAAA;AAAA,IAChB,MAAA,EAAQ,QAAA;AAAA,IACR,aAAA,EAAe,gBAAA;AAAA,IACf,UAAA,EAAY,sBAAA;AAAA,IACZ,iBAAA,EAAmB,qBAAA;AAAA,IACnB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,cAAA,EAAgB,SAAA;AAAA,IAChB,cAAA,EAAgB,SAAA;AAAA,IAChB,kBAAA,EAAoB,aAAA;AAAA,IACpB,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY,OAAA;AAAA,IACZ,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,SAAA;AAAA,IACT,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,GAAA,EAAK;AAAA,IACH,UAAA,EAAY,mBAAA;AAAA,IACZ,UAAA,EAAY,aAAA;AAAA,IACZ,WAAA,EAAa,eAAA;AAAA,IACb,MAAA,EAAQ,QAAA;AAAA,IACR,cAAA,EAAgB,iBAAA;AAAA,IAChB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,eAAA;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,QAAA;AAAA,IACR,UAAA,EAAY,YAAA;AAAA,IACZ,UAAA,EAAY,YAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,UAAA,EAAY,YAAA;AAAA,IACZ,OAAA,EAAS,iBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,cAAA;AAAA,IACb,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,SAAA,EAAW,WAAA;AAAA,IACX,WAAA,EAAa,cAAA;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW,WAAA;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW,WAAA;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,WAAA,EAAa,aAAA;AAAA,IACb,UAAA,EAAY,qBAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,iBAAA,EAAmB;AAAA;AAEvB,CAAA;AAEA,IAAO,UAAA,GAAQ,EAAA;;;AC5Hf,IAAM,EAAA,GAAwB;AAAA,EAC5B,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAK;AAAA,IACH,QAAA,EAAU,oBAAA;AAAA,IACV,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,2BAAA;AAAA,IACN,SAAA,EAAW,qCAAA;AAAA,IACX,QAAA,EAAU,gBAAA;AAAA,IACV,WAAA,EAAa,mCAAA;AAAA,IACb,WAAA,EAAa,8BAAA;AAAA,IACb,SAAA,EAAW,WAAA;AAAA,IACX,QAAA,EAAU,eAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,WAAA,EAAa,MAAA;AAAA,IACb,OAAA,EAAS,kBAAA;AAAA,IACT,YAAA,EAAc,eAAA;AAAA,IACd,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,QAAA;AAAA,IACT,QAAA,EAAU,QAAA;AAAA,IACV,GAAA,EAAK,cAAA;AAAA,IACL,OAAA,EAAS,kBAAA;AAAA,IACT,OAAA,EAAS,kBAAA;AAAA,IACT,QAAA,EAAU,0BAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,KAAA,EAAO,yBAAA;AAAA,IACP,KAAA,EAAO,iCAAA;AAAA,IACP,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,sBAAA;AAAA,IACV,MAAA,EAAQ,0BAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,WAAA,EAAa,8BAAA;AAAA,IACb,WAAA,EAAa,yBAAA;AAAA,IACb,cAAA,EAAgB,iCAAA;AAAA,IAChB,cAAA,EAAgB,wDAAA;AAAA,IAChB,MAAA,EAAQ,sBAAA;AAAA,IACR,aAAA,EAAe,uCAAA;AAAA,IACf,UAAA,EAAY,oDAAA;AAAA,IACZ,iBAAA,EAAmB,yCAAA;AAAA,IACnB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,oBAAA;AAAA,IACT,OAAA,EAAS,uBAAA;AAAA,IACT,cAAA,EAAgB,QAAA;AAAA,IAChB,cAAA,EAAgB,yBAAA;AAAA,IAChB,kBAAA,EAAoB,WAAA;AAAA,IACpB,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,SAAA,EAAW,UAAA;AAAA,IACX,OAAA,EAAS,oBAAA;AAAA,IACT,MAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,GAAA,EAAK;AAAA,IACH,UAAA,EAAY,wCAAA;AAAA,IACZ,UAAA,EAAY,eAAA;AAAA,IACZ,WAAA,EAAa,mBAAA;AAAA,IACb,MAAA,EAAQ,QAAA;AAAA,IACR,cAAA,EAAgB,+CAAA;AAAA,IAChB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,kBAAA;AAAA,IACR,GAAA,EAAK,UAAA;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,UAAA;AAAA,IACR,MAAA,EAAQ,UAAA;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,0BAAA;AAAA,IACT,KAAA,EAAO,kCAAA;AAAA,IACP,IAAA,EAAM,eAAA;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,QAAA;AAAA,IACT,KAAA,EAAO,cAAA;AAAA,IACP,MAAA,EAAQ,OAAA;AAAA,IACR,UAAA,EAAY,WAAA;AAAA,IACZ,UAAA,EAAY,oBAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,UAAA,EAAY,sBAAA;AAAA,IACZ,OAAA,EAAS,mCAAA;AAAA,IACT,KAAA,EAAO,aAAA;AAAA,IACP,WAAA,EAAa,uBAAA;AAAA,IACb,WAAA,EAAa,2CAAA;AAAA,IACb,MAAA,EAAQ,oBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,YAAA,EAAc,qBAAA;AAAA,IACd,SAAA,EAAW,WAAA;AAAA,IACX,WAAA,EAAa,yBAAA;AAAA,IACb,OAAA,EAAS,mBAAA;AAAA,IACT,QAAA,EAAU,mCAAA;AAAA,IACV,SAAA,EAAW,UAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW,WAAA;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAU,qBAAA;AAAA,IACV,WAAA,EAAa,mBAAA;AAAA,IACb,UAAA,EAAY,uBAAA;AAAA,IACZ,MAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAU,iBAAA;AAAA,IACV,iBAAA,EAAmB;AAAA;AAEvB,CAAA;AAEA,IAAO,UAAA,GAAQ,EAAA;;;AC9GR,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI;AAG3C,IAAM,wBAAA,GAA2B;AAEjC,SAAS,QAAA,GAA2B;AACzC,EAAA,KAAK,QACF,GAAA,CAAI,gBAAgB,EACpB,GAAA,CAAI,gBAAgB,EACpB,IAAA,CAAK;AAAA,IACJ,SAAA,EAAW;AAAA,MACT,EAAA,EAAI,EAAE,WAAA,EAAa,UAAA,EAAG;AAAA,MACtB,EAAA,EAAI,EAAE,WAAA,EAAa,UAAA,EAAG;AAAA,MACtB,EAAA,EAAI,EAAE,WAAA,EAAa,UAAA;AAAG,KACxB;AAAA,IACA,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,iBAAA;AAAA,IACf,IAAA,EAAM,cAAA;AAAA,IACN,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA,EAAM;AAAA,IACpC,SAAA,EAAW;AAAA,MACT,KAAA,EAAO,CAAC,cAAA,EAAgB,WAAW,CAAA;AAAA,MACnC,kBAAA,EAAoB,wBAAA;AAAA,MACpB,MAAA,EAAQ,CAAC,cAAc;AAAA;AACzB,GACD,CAAA;AACH,EAAA,OAAO,OAAA;AACT;AAEA,IAAO,YAAA,GAAQ,OAAA;;;ACUR,IAAM,QAAA,GAA2B;AAAA,EACtC;AAAA,IACE,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,YAAA;AAAA,IACR,IAAA,EAAM,4CAAA;AAAA,IACN,IAAA,EAAM,kGAAA;AAAA,IACN,KAAA,EAAO,oBAAA;AAAA,IACP,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,KAAA,EAAU,IAAA,EAAM,kBAAqB,KAAA,EAAO,wBAAA,EAAuB,IAAA,EAAM,SAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAY,MAAA,EAAQ,QAAiB,UAAA,EAAY,gBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAC7M,EAAE,IAAI,OAAA,EAAU,IAAA,EAAM,oBAAqB,KAAA,EAAO,uBAAA,EAAuB,IAAA,EAAM,KAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAY,MAAA,EAAQ,QAAiB,UAAA,EAAY,qBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAC7M,EAAE,IAAI,KAAA,EAAU,IAAA,EAAM,kBAAqB,KAAA,EAAO,kBAAA,EAAuB,IAAA,EAAM,SAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAY,MAAA,EAAQ,iBAAiB,UAAA,EAAY,gBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAC7M,EAAE,IAAI,KAAA,EAAU,IAAA,EAAM,kBAAqB,KAAA,EAAO,qBAAA,EAAuB,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAY,MAAA,EAAQ,QAAiB,UAAA,EAAY,cAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAC7M,EAAE,IAAI,QAAA,EAAU,IAAA,EAAM,qBAAqB,KAAA,EAAO,oBAAA,EAAuB,IAAA,EAAM,SAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAY,MAAA,EAAQ,QAAiB,UAAA,EAAY,eAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAC7M,EAAE,IAAI,QAAA,EAAU,IAAA,EAAM,qBAAqB,KAAA,EAAO,cAAA,EAAuB,IAAA,EAAM,QAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAQ,UAAA,EAAY,MAAA,EAAQ,WAAiB,UAAA,EAAY,eAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,KAAA;AAAM;AAChN,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM,gCAAA;AAAA,IACN,KAAA,EAAO,sBAAA;AAAA,IACP,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,UAAA,EAAY,IAAA,EAAM,uBAAuB,KAAA,EAAO,iBAAA,EAAsB,IAAA,EAAM,KAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAU,MAAA,EAAQ,UAAU,UAAA,EAAY,qBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MACnM,EAAE,IAAI,KAAA,EAAY,IAAA,EAAM,kBAAuB,KAAA,EAAO,aAAA,EAAsB,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAU,MAAA,EAAQ,UAAU,UAAA,EAAY,qBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MACnM,EAAE,IAAI,IAAA,EAAY,IAAA,EAAM,cAAuB,KAAA,EAAO,uBAAA,EAAsB,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAU,MAAA,EAAQ,UAAU,UAAA,EAAY,qBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,KAAA;AAAM;AACtM,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,iBAAA;AAAA,IACN,IAAA,EAAM,0EAAA;AAAA,IACN,KAAA,EAAO,qBAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,UAAA,EAAY,IAAA,EAAM,cAAc,KAAA,EAAO,iBAAA,EAAgB,IAAA,EAAM,KAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAU,MAAA,EAAQ,QAAQ,UAAA,EAAY,gBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAClL,EAAE,IAAI,SAAA,EAAY,IAAA,EAAM,cAAc,KAAA,EAAO,YAAA,EAAgB,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAU,MAAA,EAAQ,QAAQ,UAAA,EAAY,eAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA;AAAK;AACpL,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,kBAAA;AAAA,IACN,IAAA,EAAM,oEAAA;AAAA,IACN,KAAA,EAAO,qBAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,aAAa,KAAA,EAAO,cAAA,EAAiB,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAY,MAAA,EAAQ,QAAQ,UAAA,EAAY,qBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MAC/K,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,aAAa,KAAA,EAAO,WAAA,EAAiB,IAAA,EAAM,OAAA,EAAW,IAAA,EAAM,CAAA,EAAG,QAAQ,UAAA,EAAY,MAAA,EAAQ,QAAQ,UAAA,EAAY,qBAAA,EAAQ,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,KAAA;AAAM;AAClL,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAM,2BAAA;AAAA,IACN,KAAA,EAAO,sBAAA;AAAA,IACP,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,MAAA,EAAQ,IAAA,EAAM,eAAe,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,QAAQ,QAAA,EAAU,MAAA,EAAQ,QAAQ,UAAA,EAAY,cAAA,EAAM,YAAY,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,KAAA;AAAM;AACrK;AAEJ;AAEO,IAAM,YAAA,GAAsE;AAAA,EACjF,OAAA,EAAa,EAAE,KAAA,EAAO,sBAAA,EAAwB,OAAO,KAAA,EAAM;AAAA,EAC3D,GAAA,EAAa,EAAE,KAAA,EAAO,qBAAA,EAAwB,OAAO,KAAA,EAAM;AAAA,EAC3D,OAAA,EAAa,EAAE,KAAA,EAAO,qBAAA,EAAwB,OAAO,SAAA,EAAU;AAAA,EAC/D,WAAA,EAAa,EAAE,KAAA,EAAO,oBAAA,EAAwB,OAAO,aAAA,EAAc;AAAA,EACnE,MAAA,EAAa,EAAE,KAAA,EAAO,oBAAA,EAAwB,OAAO,QAAA,EAAS;AAAA,EAC9D,OAAA,EAAa,EAAE,KAAA,EAAO,qBAAA,EAAwB,OAAO,SAAA,EAAU;AAAA,EAC/D,KAAA,EAAa,EAAE,KAAA,EAAO,qBAAA,EAAwB,OAAO,OAAA;AACvD;AAEO,SAAS,oBAAoB,MAAA,EAA0C;AAC5E,EAAA,OAAO,SAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACjD;;;ACzHA,IAAM,WAAA,GAAc,cAAA;AAEpB,IAAM,QAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,gBAAA,EAAkB;AACpB,CAAA;AAEA,SAAS,WAAA,GAAsB;AAC7B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,QAAA;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AACnD,IAAA,MAAM,SAAS,GAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,IAAwB,EAAC;AAC7D,IAAA,MAAM,WAAY,YAAA,CAAK,QAAA,EAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,IAAK,IAAA;AAChD,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,GAAG,MAAA;AAAA,MACH,MAAA,EAAS,OAAO,MAAA,IAAU;AAAA,KAC5B;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAEO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIc,SAAiB,WAAW,CAAA;AAGxD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,IACjE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAKX,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,MAAA,CAAO,KAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,CAAQ,UAAU,MAAA,CAAO,OAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,MAAA,CAAO,MAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,MAAA;AAAA,EACrB,CAAA,EAAG,CAAC,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AAG/D,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,aAAK,QAAA,EAAU,KAAA,CAAM,GAAG,CAAC,CAAA,KAAM,OAAO,MAAA,EAAQ;AAChD,MAAA,KAAK,YAAA,CAAK,cAAA,CAAe,MAAA,CAAO,MAAM,CAAA;AACtC,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,wBAAA,EAA0B,MAAA,CAAO,MAAM,CAAA;AAAA,MACrE,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,CAAO,MAAM,CAAC,CAAA;AAElB,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,CAAyB,GAAA,EAAQ,KAAA,KAAqB;AACjF,IAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,EACjD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAU;AACvC;AAEO,IAAM,eAAA,GAAkB,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,IAAA,EAAK,CAAE","file":"index.js","sourcesContent":["// cn — class-name merger. Standard shadcn utility: clsx merges values\n// and tailwind-merge resolves Tailwind class conflicts (e.g. last\n// `bg-*` wins). Every primitive in this package and every consumer\n// service imports cn from this single location to keep the dedupe\n// rules consistent.\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import type { ComponentProps, ReactNode } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Badge — status pill with a colored dot + label.\n *\n * Renders the canonical `.badge` class from `@godxjp/ui/tokens` so the\n * visual layer is mastered in CSS (not Tailwind utilities). All six\n * variants map onto a semantic role from the brand bible:\n *\n * - `success` — 若竹 task completed, healthy\n * - `warning` — 山吹 needs attention, not yet broken\n * - `info` — 群青 neutral state callout\n * - `error` — 茜 failed / blocked\n * - `attention`— 朱 pending, awaiting input\n * - `neutral` — grey default chrome\n * - `outline` — empty hairline only (rare)\n *\n * @example\n * <Badge variant=\"success\" dot>Healthy</Badge>\n * <Badge variant=\"error\">Failed</Badge>\n */\nexport type BadgeVariant =\n | \"success\"\n | \"warning\"\n | \"info\"\n | \"error\"\n | \"attention\"\n | \"neutral\"\n | \"outline\"\n\nexport interface BadgeProps extends ComponentProps<\"span\"> {\n variant?: BadgeVariant\n /** When true renders a colored dot before the label. */\n dot?: boolean\n children?: ReactNode\n}\n\nexport function Badge({\n variant = \"neutral\",\n dot = false,\n className,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span className={cn(\"badge\", `badge-${variant}`, className)} {...rest}>\n {dot && <span className=\"dot\" aria-hidden />}\n {children}\n </span>\n )\n}\n","import { Slot } from \"@radix-ui/react-slot\"\nimport type { ComponentProps, ReactNode } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Button — canonical action atom.\n *\n * Maps onto the `.btn` family in tokens.css:\n *\n * primary — filled, brand color, default action\n * secondary — bordered, foreground text, neutral surface\n * ghost — transparent, foreground text, hover surface\n * danger — destructive, --destructive bg\n *\n * Sizes mirror density tokens:\n * sm — 28 px height (compact action bar)\n * md — 32 px height (default)\n * lg — 36 px height (page hero CTA)\n *\n * Supports `asChild` (Radix Slot pattern) so the button styles can wrap\n * a Link or any other element without nesting:\n *\n * @example\n * <Button variant=\"primary\">Save</Button>\n * <Button asChild variant=\"ghost\"><a href=\"/docs\">Docs</a></Button>\n */\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\"\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\"\n\nexport interface ButtonProps extends ComponentProps<\"button\"> {\n variant?: ButtonVariant\n size?: ButtonSize\n asChild?: boolean\n children?: ReactNode\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n asChild = false,\n className,\n type = \"button\",\n children,\n ...rest\n}: ButtonProps) {\n const Component = asChild ? Slot : \"button\"\n return (\n <Component\n type={asChild ? undefined : type}\n className={cn(\n \"btn\",\n `btn-${variant}`,\n size === \"sm\" && \"btn-sm\",\n size === \"lg\" && \"btn-lg\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type { ComponentProps, ReactNode } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Card — surface container for grouped content.\n *\n * The atom hierarchy mirrors the `.card`/`.card-header`/`.card-title`\n * classes in tokens.css. Compose as:\n *\n * <Card>\n * <CardHeader>\n * <CardTitle>Pull requests</CardTitle>\n * <CardSubtitle>Open / merged this week</CardSubtitle>\n * </CardHeader>\n * <CardContent>...</CardContent>\n * </Card>\n */\nexport function Card({ className, ...rest }: ComponentProps<\"div\">) {\n return <div className={cn(\"card\", className)} {...rest} />\n}\n\nexport function CardHeader({ className, ...rest }: ComponentProps<\"div\">) {\n return <div className={cn(\"card-header\", className)} {...rest} />\n}\n\nexport function CardTitle({ className, ...rest }: ComponentProps<\"h3\">) {\n return <h3 className={cn(\"card-title\", className)} {...rest} />\n}\n\nexport interface CardSubtitleProps extends ComponentProps<\"p\"> {\n children?: ReactNode\n}\n\nexport function CardSubtitle({ className, ...rest }: CardSubtitleProps) {\n return <p className={cn(\"card-subtitle\", className)} {...rest} />\n}\n\nexport function CardContent({ className, ...rest }: ComponentProps<\"div\">) {\n return <div className={className} {...rest} />\n}\n","import { forwardRef, type ComponentProps, type TextareaHTMLAttributes } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Input — text input atom. Maps to `.input` in tokens.css.\n *\n * Forward-ref so consumers can wire `react-hook-form` / focus\n * management without escaping the design tokens.\n */\nexport interface InputProps extends ComponentProps<\"input\"> {}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className, type = \"text\", ...rest },\n ref,\n) {\n return <input ref={ref} type={type} className={cn(\"input\", className)} {...rest} />\n})\n\n/** Textarea — uses `.input` for shape, leaves height auto. */\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { className, ...rest },\n ref,\n) {\n return <textarea ref={ref} className={cn(\"input\", className)} {...rest} />\n})\n","import * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Label — form-field label. Wraps Radix Label so `htmlFor` /\n * click-to-focus works out of the box. Maps to `.label` in tokens.css.\n *\n * Pair with <Input /> + an optional `.help` paragraph:\n *\n * <Label htmlFor=\"name\">Display name</Label>\n * <Input id=\"name\" />\n * <p className=\"help\">Visible to teammates.</p>\n */\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function Label({ className, ...rest }, ref) {\n return <LabelPrimitive.Root ref={ref} className={cn(\"label\", className)} {...rest} />\n})\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Tabs — Radix-backed tab strip styled with the canonical `.tabs` /\n * `.tab` CSS from tokens.css. Keyboard navigation + ARIA come from\n * Radix; the visual contract stays in the design tokens.\n *\n * @example\n * <Tabs defaultValue=\"open\">\n * <TabsList>\n * <TabsTrigger value=\"open\">Open</TabsTrigger>\n * <TabsTrigger value=\"closed\">Closed</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"open\">...</TabsContent>\n * <TabsContent value=\"closed\">...</TabsContent>\n * </Tabs>\n */\nexport const Tabs = TabsPrimitive.Root\n\nexport const TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(function TabsList({ className, ...rest }, ref) {\n return <TabsPrimitive.List ref={ref} className={cn(\"tabs\", className)} {...rest} />\n})\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...rest }, ref) {\n // Radix sets `data-state=\"active\"` on the active trigger — map it to\n // the `data-active` attribute the .tab CSS expects.\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\"tab\", className)}\n {...rest}\n data-active={undefined}\n />\n )\n})\n\nexport const TabsContent = TabsPrimitive.Content\n","import type { ComponentProps } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Avatar — round chip with initials or an image. Maps to `.avatar`\n * + `.avatar.brand` in tokens.css.\n *\n * @example\n * <Avatar>PT</Avatar>\n * <Avatar variant=\"brand\">G</Avatar>\n */\nexport interface AvatarProps extends ComponentProps<\"span\"> {\n variant?: \"default\" | \"brand\"\n /** Optional image url; falls back to children (initials) when missing. */\n src?: string\n alt?: string\n}\n\nexport function Avatar({\n variant = \"default\",\n src,\n alt,\n className,\n children,\n ...rest\n}: AvatarProps) {\n return (\n <span className={cn(\"avatar\", variant === \"brand\" && \"brand\", className)} {...rest}>\n {src ? <img src={src} alt={alt ?? \"\"} style={{ width: \"100%\", height: \"100%\", borderRadius: \"inherit\", objectFit: \"cover\" }} /> : children}\n </span>\n )\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Separator — horizontal / vertical divider. Wraps Radix Separator for\n * ARIA + decorative semantics. Maps to `.divider` styling in tokens.css\n * (1px border, theme-aware color).\n */\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = \"horizontal\", decorative = true, ...rest }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n orientation={orientation}\n decorative={decorative}\n className={cn(\n orientation === \"horizontal\" ? \"divider\" : \"\",\n className,\n )}\n style={\n orientation === \"vertical\"\n ? { width: 1, height: \"100%\", background: \"var(--border)\", border: 0 }\n : undefined\n }\n {...rest}\n />\n )\n})\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * Popover — Radix-backed floating panel anchored to a trigger element.\n * Styled with the canonical `.popover-content` class from tokens.css\n * so the visual contract stays in the design tokens.\n *\n * @example\n * <Popover>\n * <PopoverTrigger asChild>\n * <Button variant=\"ghost\">Open</Button>\n * </PopoverTrigger>\n * <PopoverContent>…body…</PopoverContent>\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(\n { className, align = \"center\", sideOffset = 6, ...rest },\n ref,\n) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\"popover-content\", className)}\n {...rest}\n />\n </PopoverPrimitive.Portal>\n )\n})\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from \"react\"\nimport { cn } from \"./cn\"\n\n/**\n * DropdownMenu — Radix-backed action menu opened from a trigger\n * (kebab, caret, button…). Styled via canonical `.dropdown-menu-*`\n * classes from tokens.css.\n *\n * Items support `variant=\"destructive\"` for dangerous actions and\n * `inset` for left-padding alignment when icons aren't on every row.\n *\n * @example\n * <DropdownMenu>\n * <DropdownMenuTrigger asChild>\n * <Button variant=\"ghost\"><MoreVertical /></Button>\n * </DropdownMenuTrigger>\n * <DropdownMenuContent align=\"end\">\n * <DropdownMenuItem onSelect={onEdit}>Edit</DropdownMenuItem>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem variant=\"destructive\" onSelect={onDelete}>\n * Delete\n * </DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n */\nexport const DropdownMenu = DropdownMenuPrimitive.Root\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 6, ...rest }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\"dropdown-menu-content\", className)}\n {...rest}\n />\n </DropdownMenuPrimitive.Portal>\n )\n})\n\ntype DropdownItemProps = ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownItemProps\n>(function DropdownMenuItem({ className, inset, variant = \"default\", ...rest }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\"dropdown-menu-item\", className)}\n data-variant={variant === \"destructive\" ? \"destructive\" : undefined}\n data-inset={inset ? \"true\" : undefined}\n {...rest}\n />\n )\n})\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...rest }, ref) {\n return (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"dropdown-menu-separator\", className)}\n {...rest}\n />\n )\n})\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }\n>(function DropdownMenuLabel({ className, inset, ...rest }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"dropdown-menu-label\", className)}\n data-inset={inset ? \"true\" : undefined}\n {...rest}\n />\n )\n})\n\nexport function DropdownMenuShortcut({\n className,\n ...rest\n}: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"dropdown-menu-shortcut\", className)} {...rest} />\n}\n","import { DayPicker, type DayPickerProps } from \"react-day-picker\"\nimport \"react-day-picker/dist/style.css\"\nimport { cn } from \"./cn\"\n\n/**\n * Calendar — react-day-picker grid themed with brand tokens via the\n * canonical `.calendar` class from tokens.css. Caller controls\n * mode/selected/onSelect through DayPicker's standard props.\n *\n * Locale + week-start are inherited from i18next / browser by default;\n * pass DayPickerProps explicitly to override (e.g. `weekStartsOn={1}`\n * for Monday-first).\n *\n * @example\n * const [date, setDate] = useState<Date>()\n * <Calendar mode=\"single\" selected={date} onSelect={setDate} />\n */\nexport function Calendar({ className, showOutsideDays = true, ...rest }: DayPickerProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"calendar\", className)}\n {...rest}\n />\n )\n}\n","import { forwardRef, useEffect, useState, type ChangeEvent, type FocusEvent } from \"react\"\nimport { cn } from \"./cn\"\n\nexport interface TimeInputProps {\n /** Current time value in `\"HH:mm\"` (24-hour) format. */\n value?: string\n /** Fired on blur with the validated `\"HH:mm\"` string. */\n onChange?: (time: string) => void\n /** Additional class name applied to the input element. */\n className?: string\n /** Disable input + propagate aria-disabled. */\n disabled?: boolean\n /** Optional placeholder (defaults to \"HH:mm\"). */\n placeholder?: string\n /** Optional id used for label association. */\n id?: string\n /** Optional name used in form submissions. */\n name?: string\n}\n\nconst TIME_PATTERN = /^([01]\\d|2[0-3]):[0-5]\\d$/\n\nfunction normalize(raw: string): string {\n // Strip whitespace + non-digits-or-colon. Accept either \"HH:mm\" or\n // \"HHmm\" / \"H:mm\" / \"Hmm\" and coerce into canonical \"HH:mm\". Returns\n // the original string when it can't be parsed — the caller decides\n // whether to surface aria-invalid.\n const cleaned = raw.trim()\n if (!cleaned) return \"\"\n if (TIME_PATTERN.test(cleaned)) return cleaned\n const digits = cleaned.replace(/[^0-9]/g, \"\")\n if (digits.length === 3 || digits.length === 4) {\n const hh = digits.slice(0, digits.length - 2).padStart(2, \"0\")\n const mm = digits.slice(-2)\n const candidate = `${hh}:${mm}`\n if (TIME_PATTERN.test(candidate)) return candidate\n }\n return raw\n}\n\n/**\n * TimeInput — narrow text input for HH:mm (24-hour) values.\n * Mirrors the public `@godxjp/ui@0.2.0` API so call sites don't change\n * when upgrading to v2. Visual contract lives in the `.time-input`\n * class in tokens.css.\n *\n * Validation: emits `onChange` with the normalized string on blur if\n * it parses, otherwise leaves the value untouched and surfaces\n * `aria-invalid` so the consumer can style the error state.\n */\nexport const TimeInput = forwardRef<HTMLInputElement, TimeInputProps>(\n function TimeInput(\n { value, onChange, className, disabled, placeholder = \"HH:mm\", id, name },\n ref,\n ) {\n const [draft, setDraft] = useState(value ?? \"\")\n\n useEffect(() => {\n setDraft(value ?? \"\")\n }, [value])\n\n const invalid = draft !== \"\" && !TIME_PATTERN.test(draft)\n\n return (\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={5}\n id={id}\n name={name}\n disabled={disabled}\n placeholder={placeholder}\n value={draft}\n aria-invalid={invalid || undefined}\n className={cn(\"time-input\", className)}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setDraft(e.target.value)}\n onBlur={(e: FocusEvent<HTMLInputElement>) => {\n const next = normalize(e.target.value)\n setDraft(next)\n if (TIME_PATTERN.test(next) && next !== value) onChange?.(next)\n }}\n />\n )\n },\n)\n","// Japanese translation dictionary — primary locale of the GoDX Forge\n// design system. Mirrors the `T.ja` dictionary in the design prototype\n// (chats/chat1.md → ui-kit.jsx).\nconst ja = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"オペレーター\",\n developer: \"開発者\",\n },\n nav: {\n products: \"プロダクト\",\n projects: \"プロジェクト\",\n devs: \"開発者\",\n dashboard: \"ダッシュボード\",\n overview: \"概要\",\n productHome: \"プロダクトホーム\",\n projectHome: \"プロジェクトホーム\",\n workspace: \"ワークスペース\",\n devPanel: \"開発者パネル\",\n agents: \"AIエージェント\",\n codeBrowser: \"コード\",\n domains: \"ドメイン\",\n designSystem: \"デザインシステム\",\n sandbox: \"サンドボックス\",\n deploys: \"デプロイ\",\n branches: \"ブランチ\",\n prs: \"プルリクエスト\",\n members: \"メンバー\",\n roadmap: \"ロードマップ\",\n activity: \"アクティビティ\",\n wiki: \"Wiki\",\n issues: \"課題\",\n plans: \"PDCA計画\",\n ideas: \"アイデア (Shape Up)\",\n gantt: \"ガント\",\n settings: \"設定\",\n logout: \"ログアウト\",\n login: \"ログイン\",\n },\n shell: {\n pickProduct: \"プロダクトを選択\",\n pickProject: \"プロジェクトを選択\",\n searchProducts: \"プロダクトを検索…\",\n searchProjects: \"全プロダクトから検索…\",\n recent: \"最近\",\n activeProduct: \"アクティブプロダクト\",\n noProjects: \"プロジェクト未割当\",\n browseAllProducts: \"全プロダクトを表示\",\n sidebarCollapse: \"サイドバー折畳み\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"表示\",\n density: \"密度\",\n densityCompact: \"密\",\n densityDefault: \"標準\",\n densityComfortable: \"広\",\n theme: \"テーマ\",\n themeLight: \"Light\",\n themeDark: \"Dark\",\n product: \"プロダクト\",\n locale: \"ロケール\",\n language: \"言語\",\n },\n kpi: {\n activeDevs: \"アクティブな開発者\",\n openIssues: \"未解決の課題\",\n deployments: \"デプロイ\",\n uptime: \"稼働率\",\n recentActivity: \"最近のアクティビティ\",\n quickActions: \"クイック操作\",\n },\n common: {\n search: \"検索\",\n new: \"新規\",\n save: \"保存\",\n cancel: \"キャンセル\",\n submit: \"送信\",\n delete: \"削除\",\n edit: \"編集\",\n loading: \"読み込み中…\",\n empty: \"データなし\",\n back: \"戻る\",\n backToProduct: \"プロダクトに戻る\",\n },\n workspace: {\n files: \"ファイル\",\n commits: \"コミット\",\n rules: \"ルール\",\n tokens: \"トークン\",\n components: \"コンポーネント\",\n typography: \"タイポグラフィ\",\n color: \"カラー\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"仮説\",\n metrics: \"成功指標\",\n risks: \"リスク\",\n linkedTasks: \"関連タスク\",\n decisionLog: \"意思決定ログ\",\n review: \"振り返り\",\n nextCycle: \"次サイクル\",\n },\n issue: {\n conversation: \"会話\",\n checklist: \"チェックリスト\",\n codeChanges: \"コード変更\",\n history: \"履歴\",\n assignee: \"担当者\",\n reviewers: \"レビュー担当\",\n labels: \"ラベル\",\n milestone: \"マイルストーン\",\n sprint: \"スプリント\",\n points: \"ポイント\",\n blockers: \"ブロック関係\",\n relatedPlan: \"所属 PDCA\",\n addComment: \"コメントを追加…\",\n status: \"ステータス\",\n priority: \"優先度\",\n submitWithChanges: \"送信時に変更を反映\",\n },\n};\n\nexport default ja;\nexport type ForgeTranslations = typeof ja;\n","import type { ForgeTranslations } from \"./ja\";\n\nconst en: ForgeTranslations = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"Operator\",\n developer: \"Developer\",\n },\n nav: {\n products: \"Products\",\n projects: \"Projects\",\n devs: \"Developers\",\n dashboard: \"Dashboard\",\n overview: \"Overview\",\n productHome: \"Product home\",\n projectHome: \"Project home\",\n workspace: \"Workspace\",\n devPanel: \"Dev panel\",\n agents: \"AI agents\",\n codeBrowser: \"Code\",\n domains: \"Domains\",\n designSystem: \"Design system\",\n sandbox: \"Sandbox\",\n deploys: \"Deploys\",\n branches: \"Branches\",\n prs: \"Pull requests\",\n members: \"Members\",\n roadmap: \"Roadmap\",\n activity: \"Activity\",\n wiki: \"Wiki\",\n issues: \"Issues\",\n plans: \"PDCA plans\",\n ideas: \"Ideas (Shape Up)\",\n gantt: \"Gantt\",\n settings: \"Settings\",\n logout: \"Sign out\",\n login: \"Sign in\",\n },\n shell: {\n pickProduct: \"Pick a product\",\n pickProject: \"Pick a project\",\n searchProducts: \"Search products…\",\n searchProjects: \"Search across products…\",\n recent: \"Recent\",\n activeProduct: \"Active product\",\n noProjects: \"No projects assigned\",\n browseAllProducts: \"Browse all products\",\n sidebarCollapse: \"Collapse sidebar\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"Display\",\n density: \"Density\",\n densityCompact: \"Compact\",\n densityDefault: \"Default\",\n densityComfortable: \"Comfortable\",\n theme: \"Theme\",\n themeLight: \"Light\",\n themeDark: \"Dark\",\n product: \"Product\",\n locale: \"Locale\",\n language: \"Language\",\n },\n kpi: {\n activeDevs: \"Active developers\",\n openIssues: \"Open issues\",\n deployments: \"Deploys today\",\n uptime: \"Uptime\",\n recentActivity: \"Recent activity\",\n quickActions: \"Quick actions\",\n },\n common: {\n search: \"Search\",\n new: \"New\",\n save: \"Save\",\n cancel: \"Cancel\",\n submit: \"Submit\",\n delete: \"Delete\",\n edit: \"Edit\",\n loading: \"Loading…\",\n empty: \"No data\",\n back: \"Back\",\n backToProduct: \"Back to product\",\n },\n workspace: {\n files: \"Files\",\n commits: \"Commits\",\n rules: \"Rules\",\n tokens: \"Tokens\",\n components: \"Components\",\n typography: \"Typography\",\n color: \"Color\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"Hypothesis\",\n metrics: \"Success metrics\",\n risks: \"Risks\",\n linkedTasks: \"Linked tasks\",\n decisionLog: \"Decision log\",\n review: \"Review\",\n nextCycle: \"Next cycle\",\n },\n issue: {\n conversation: \"Conversation\",\n checklist: \"Checklist\",\n codeChanges: \"Code changes\",\n history: \"History\",\n assignee: \"Assignee\",\n reviewers: \"Reviewers\",\n labels: \"Labels\",\n milestone: \"Milestone\",\n sprint: \"Sprint\",\n points: \"Points\",\n blockers: \"Blockers\",\n relatedPlan: \"Linked PDCA\",\n addComment: \"Add a comment…\",\n status: \"Status\",\n priority: \"Priority\",\n submitWithChanges: \"Apply changes on submit\",\n },\n};\n\nexport default en;\n","import type { ForgeTranslations } from \"./ja\";\n\nconst vi: ForgeTranslations = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"Operator\",\n developer: \"Lập trình viên\",\n },\n nav: {\n products: \"Sản phẩm\",\n projects: \"Dự án\",\n devs: \"Lập trình viên\",\n dashboard: \"Bảng điều khiển\",\n overview: \"Tổng quan\",\n productHome: \"Trang chủ sản phẩm\",\n projectHome: \"Trang chủ dự án\",\n workspace: \"Workspace\",\n devPanel: \"Bảng dev\",\n agents: \"AI agent\",\n codeBrowser: \"Code\",\n domains: \"Tên miền\",\n designSystem: \"Design system\",\n sandbox: \"Sandbox\",\n deploys: \"Deploy\",\n branches: \"Branch\",\n prs: \"Pull request\",\n members: \"Thành viên\",\n roadmap: \"Lộ trình\",\n activity: \"Hoạt động\",\n wiki: \"Wiki\",\n issues: \"Issue\",\n plans: \"Kế hoạch PDCA\",\n ideas: \"Ý tưởng (Shape Up)\",\n gantt: \"Gantt\",\n settings: \"Cài đặt\",\n logout: \"Đăng xuất\",\n login: \"Đăng nhập\",\n },\n shell: {\n pickProduct: \"Chọn sản phẩm\",\n pickProject: \"Chọn dự án\",\n searchProducts: \"Tìm sản phẩm…\",\n searchProjects: \"Tìm trong tất cả sản phẩm…\",\n recent: \"Gần đây\",\n activeProduct: \"Sản phẩm hiện tại\",\n noProjects: \"Chưa được gán dự án\",\n browseAllProducts: \"Xem tất cả sản phẩm\",\n sidebarCollapse: \"Thu gọn sidebar\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"Hiển thị\",\n density: \"Mật độ\",\n densityCompact: \"Dày\",\n densityDefault: \"Mặc định\",\n densityComfortable: \"Rộng\",\n theme: \"Theme\",\n themeLight: \"Sáng\",\n themeDark: \"Tối\",\n product: \"Sản phẩm\",\n locale: \"Ngôn ngữ\",\n language: \"Ngôn ngữ\",\n },\n kpi: {\n activeDevs: \"Dev đang hoạt động\",\n openIssues: \"Issue mở\",\n deployments: \"Deploy hôm nay\",\n uptime: \"Uptime\",\n recentActivity: \"Hoạt động gần đây\",\n quickActions: \"Thao tác nhanh\",\n },\n common: {\n search: \"Tìm kiếm\",\n new: \"Mới\",\n save: \"Lưu\",\n cancel: \"Hủy\",\n submit: \"Gửi\",\n delete: \"Xóa\",\n edit: \"Sửa\",\n loading: \"Đang tải…\",\n empty: \"Không có dữ liệu\",\n back: \"Quay lại\",\n backToProduct: \"Quay về sản phẩm\",\n },\n workspace: {\n files: \"File\",\n commits: \"Commit\",\n rules: \"Quy tắc\",\n tokens: \"Token\",\n components: \"Component\",\n typography: \"Kiểu chữ\",\n color: \"Màu sắc\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"Giả thuyết\",\n metrics: \"Chỉ số thành công\",\n risks: \"Rủi ro\",\n linkedTasks: \"Task liên kết\",\n decisionLog: \"Nhật ký quyết định\",\n review: \"Tổng kết\",\n nextCycle: \"Chu kỳ tiếp\",\n },\n issue: {\n conversation: \"Hội thoại\",\n checklist: \"Checklist\",\n codeChanges: \"Thay đổi code\",\n history: \"Lịch sử\",\n assignee: \"Người phụ trách\",\n reviewers: \"Reviewer\",\n labels: \"Nhãn\",\n milestone: \"Milestone\",\n sprint: \"Sprint\",\n points: \"Điểm\",\n blockers: \"Phụ thuộc\",\n relatedPlan: \"PDCA liên quan\",\n addComment: \"Thêm comment…\",\n status: \"Trạng thái\",\n priority: \"Ưu tiên\",\n submitWithChanges: \"Áp dụng thay đổi khi gửi\",\n },\n};\n\nexport default vi;\n","// GoDX Forge i18n bootstrap.\n//\n// Locale resolution order:\n// 1. localStorage[\"forge.locale\"] (user override via Tweaks panel)\n// 2. navigator.language prefix (ja-JP → ja, en-US → en, vi-VN → vi)\n// 3. JA fallback (design's primary locale)\n//\n// Supported locales follow the design prototype (chats + ui-kit.jsx): ja / en / vi.\nimport i18next from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport ja from \"./locales/ja\";\nimport en from \"./locales/en\";\nimport vi from \"./locales/vi\";\n\nexport const SUPPORTED_LOCALES = [\"ja\", \"en\", \"vi\"] as const;\nexport type ForgeLocale = (typeof SUPPORTED_LOCALES)[number];\n\nexport const FORGE_LOCALE_STORAGE_KEY = \"forge.locale\";\n\nexport function initI18n(): typeof i18next {\n void i18next\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources: {\n ja: { translation: ja },\n en: { translation: en },\n vi: { translation: vi },\n },\n fallbackLng: \"ja\",\n supportedLngs: SUPPORTED_LOCALES,\n load: \"languageOnly\",\n interpolation: { escapeValue: false },\n detection: {\n order: [\"localStorage\", \"navigator\"],\n lookupLocalStorage: FORGE_LOCALE_STORAGE_KEY,\n caches: [\"localStorage\"],\n },\n });\n return i18next;\n}\n\nexport default i18next;\n","// Product / project registry — mock data layer.\n//\n// Mirrors the design prototype's `PRODUCTS` array (shell.jsx). Today\n// this is a static fixture so the UI shell renders end-to-end; a\n// follow-up phase will swap it for `/api/v1/orgs/...` calls against\n// forge-service + identity-service.\n//\n// Vocabulary:\n// Product = Org (GitHub-shaped tenant). Owns projects, members,\n// domains, design tokens (per the OKLCH tenant override\n// in tokens-ext.css).\n// Project = Repo. Has a stack (e.g. \"Vue 3 · Vite\"), kind\n// (service / web / desktop / mobile / library / infra /\n// workstation), branch, lastCommit, openIssues, prs.\n//\n// Tenants must match a `[data-tenant=\"<id>\"]` block in tokens-ext.css.\nexport type ProjectKind =\n | \"service\"\n | \"web\"\n | \"desktop\"\n | \"workstation\"\n | \"mobile\"\n | \"library\"\n | \"infra\";\n\nexport type ProjectStatus = \"active\" | \"review\" | \"planning\" | \"archived\";\n\nexport type ForgeProject = {\n id: string;\n name: string;\n stack: string;\n kind: ProjectKind;\n devs: number;\n status: ProjectStatus;\n branch: string;\n lastCommit: string;\n openIssues: number;\n prs: number;\n sandbox: boolean;\n};\n\nexport type ForgeProduct = {\n id: string;\n name: string;\n tenant: \"godx\" | \"kintai\" | \"tempo\" | \"betoya\" | \"restaurant\";\n role: string;\n desc: string;\n /** Brand color in OKLCH — used as the sidebar logo mark + accent. */\n color: string;\n owner: string;\n devs: number;\n projects: ForgeProject[];\n};\n\nexport const PRODUCTS: ForgeProduct[] = [\n {\n id: \"restaurant\",\n name: \"godx-restaurant\",\n tenant: \"restaurant\",\n role: \"レストラン管理\",\n desc: \"店舗向け統合管理プラットフォーム\",\n color: \"oklch(58% 0.18 25)\",\n owner: \"Satoshi F\",\n devs: 6,\n projects: [\n { id: \"api\", name: \"restaurant-api\", stack: \"NestJS · PostgreSQL\", kind: \"service\", devs: 3, status: \"active\", branch: \"main\", lastCommit: \"12分前\", openIssues: 8, prs: 2, sandbox: true },\n { id: \"admin\", name: \"restaurant-admin\", stack: \"Next.js 14 · React\", kind: \"web\", devs: 2, status: \"active\", branch: \"main\", lastCommit: \"1時間前\", openIssues: 5, prs: 1, sandbox: true },\n { id: \"pos\", name: \"restaurant-pos\", stack: \"Tauri · Vue 3\", kind: \"desktop\", devs: 1, status: \"active\", branch: \"feature/print\", lastCommit: \"30分前\", openIssues: 3, prs: 1, sandbox: true },\n { id: \"kds\", name: \"restaurant-kds\", stack: \"React · Electron\", kind: \"workstation\", devs: 1, status: \"review\", branch: \"main\", lastCommit: \"昨日\", openIssues: 2, prs: 1, sandbox: true },\n { id: \"kintai\", name: \"restaurant-kintai\", stack: \"Vue 3 · Laravel\", kind: \"service\", devs: 2, status: \"active\", branch: \"main\", lastCommit: \"5分前\", openIssues: 4, prs: 0, sandbox: true },\n { id: \"mobile\", name: \"restaurant-mobile\", stack: \"React Native\", kind: \"mobile\", devs: 1, status: \"planning\", branch: \"develop\", lastCommit: \"3日前\", openIssues: 1, prs: 0, sandbox: false },\n ],\n },\n {\n id: \"godx\",\n name: \"godx-admin\",\n tenant: \"godx\",\n role: \"Platform admin\",\n desc: \"GoDX Forge developer workspace\",\n color: \"oklch(60% 0.137 163)\",\n owner: \"Satoshi F\",\n devs: 4,\n projects: [\n { id: \"frontend\", name: \"godx-admin-frontend\", stack: \"React · Vite\", kind: \"web\", devs: 2, status: \"active\", branch: \"master\", lastCommit: \"2時間前\", openIssues: 6, prs: 2, sandbox: true },\n { id: \"api\", name: \"godx-admin-api\", stack: \"Go · Gin\", kind: \"service\", devs: 1, status: \"active\", branch: \"master\", lastCommit: \"4時間前\", openIssues: 3, prs: 1, sandbox: true },\n { id: \"ui\", name: \"@godxjp/ui\", stack: \"TypeScript · React\", kind: \"library\", devs: 2, status: \"active\", branch: \"master\", lastCommit: \"1時間前\", openIssues: 2, prs: 0, sandbox: false },\n ],\n },\n {\n id: \"kintai\",\n name: \"dxs-kintai\",\n tenant: \"kintai\",\n role: \"HR / Attendance\",\n desc: \"勤怠管理プラットフォーム\",\n color: \"oklch(56% 0.15 240)\",\n owner: \"Naoki N\",\n devs: 3,\n projects: [\n { id: \"frontend\", name: \"kintai-web\", stack: \"Vue 3 · Vite\", kind: \"web\", devs: 2, status: \"active\", branch: \"main\", lastCommit: \"20分前\", openIssues: 7, prs: 1, sandbox: true },\n { id: \"backend\", name: \"kintai-api\", stack: \"Laravel 11\", kind: \"service\", devs: 1, status: \"active\", branch: \"main\", lastCommit: \"1日前\", openIssues: 4, prs: 0, sandbox: true },\n ],\n },\n {\n id: \"tempo\",\n name: \"dxs-tempo\",\n tenant: \"tempo\",\n role: \"Shop / Inventory\",\n desc: \"店舗・在庫バックエンド\",\n color: \"oklch(48% 0.16 285)\",\n owner: \"Naoki N\",\n devs: 2,\n projects: [\n { id: \"api\", name: \"tempo-api\", stack: \"Go · Echo\", kind: \"service\", devs: 2, status: \"active\", branch: \"main\", lastCommit: \"5時間前\", openIssues: 9, prs: 1, sandbox: true },\n { id: \"ops\", name: \"tempo-ops\", stack: \"Terraform\", kind: \"infra\", devs: 1, status: \"planning\", branch: \"main\", lastCommit: \"1週間前\", openIssues: 1, prs: 0, sandbox: false },\n ],\n },\n {\n id: \"betoya\",\n name: \"betoya\",\n tenant: \"betoya\",\n role: \"Vietnamese restaurant\",\n desc: \"ベト屋 Tenant\",\n color: \"oklch(58% 0.159 150)\",\n owner: \"Anh K\",\n devs: 1,\n projects: [\n { id: \"site\", name: \"betoya-site\", stack: \"Astro\", kind: \"web\", devs: 1, status: \"active\", branch: \"main\", lastCommit: \"昨日\", openIssues: 2, prs: 0, sandbox: false },\n ],\n },\n];\n\nexport const PROJECT_KIND: Record<ProjectKind, { color: string; label: string }> = {\n service: { color: \"oklch(60% 0.137 163)\", label: \"API\" },\n web: { color: \"oklch(56% 0.15 240)\", label: \"Web\" },\n desktop: { color: \"oklch(48% 0.16 285)\", label: \"Desktop\" },\n workstation: { color: \"oklch(50% 0.16 30)\", label: \"Workstation\" },\n mobile: { color: \"oklch(58% 0.18 25)\", label: \"Mobile\" },\n library: { color: \"oklch(50% 0.05 250)\", label: \"Library\" },\n infra: { color: \"oklch(45% 0.05 260)\", label: \"Infra\" },\n};\n\nexport function findProductByTenant(tenant: string): ForgeProduct | undefined {\n return PRODUCTS.find((p) => p.tenant === tenant);\n}\n","// useTweaks — shared client state for the design system's Tweaks panel.\n//\n// Mirrors the design prototype `useTweaks` hook (tweaks-panel.jsx). Each\n// tweak is persisted to localStorage so reloads keep the user's chosen\n// density / theme / tenant / sidebar-collapsed setting. Locale is owned\n// by i18next (see src/i18n/index.ts) but exposed through this hook so\n// the Tweaks UI has a single dispatcher.\nimport { useCallback, useEffect, useState } from \"react\";\nimport i18n, { FORGE_LOCALE_STORAGE_KEY, type ForgeLocale } from \"../i18n\";\nimport { PRODUCTS, type ForgeProduct } from \"../data/products\";\n\nexport type Density = \"compact\" | \"default\" | \"comfortable\";\nexport type Theme = \"light\" | \"dark\";\n\nexport type Tweaks = {\n density: Density;\n theme: Theme;\n tenant: ForgeProduct[\"tenant\"];\n locale: ForgeLocale;\n sidebarCollapsed: boolean;\n};\n\nconst STORAGE_KEY = \"forge.tweaks\";\n\nconst DEFAULTS: Tweaks = {\n density: \"default\",\n theme: \"light\",\n tenant: \"godx\",\n locale: \"ja\",\n sidebarCollapsed: false,\n};\n\nfunction loadInitial(): Tweaks {\n if (typeof window === \"undefined\") return DEFAULTS;\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n const stored = raw ? (JSON.parse(raw) as Partial<Tweaks>) : {};\n const detected = (i18n.language?.slice(0, 2) || \"ja\") as ForgeLocale;\n return {\n ...DEFAULTS,\n ...stored,\n locale: (stored.locale ?? detected) as ForgeLocale,\n };\n } catch {\n return DEFAULTS;\n }\n}\n\nexport function useTweaks() {\n const [tweaks, setTweaks] = useState<Tweaks>(loadInitial);\n\n // Persist every change to localStorage.\n useEffect(() => {\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(tweaks));\n } catch {\n /* Storage may be disabled (private mode). Silently degrade. */\n }\n }, [tweaks]);\n\n // Reflect tweaks onto <html> so the design tokens (CSS custom\n // properties scoped to [data-tenant=…], [data-theme=…], [data-density=…])\n // pick up the change without rerunning React.\n useEffect(() => {\n const html = document.documentElement;\n html.dataset.theme = tweaks.theme;\n html.dataset.density = tweaks.density;\n html.dataset.tenant = tweaks.tenant;\n html.lang = tweaks.locale;\n }, [tweaks.theme, tweaks.density, tweaks.tenant, tweaks.locale]);\n\n // Forward locale changes to i18next so the UI re-renders strings.\n useEffect(() => {\n if (i18n.language?.slice(0, 2) !== tweaks.locale) {\n void i18n.changeLanguage(tweaks.locale);\n try {\n window.localStorage.setItem(FORGE_LOCALE_STORAGE_KEY, tweaks.locale);\n } catch {\n /* ignore */\n }\n }\n }, [tweaks.locale]);\n\n const setTweak = useCallback(<K extends keyof Tweaks>(key: K, value: Tweaks[K]) => {\n setTweaks((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n return { tweaks, setTweak, setTweaks } as const;\n}\n\nexport const PRODUCT_OPTIONS = PRODUCTS.map((p) => ({ value: p.tenant, label: p.name }));\n"]}
1
+ {"version":3,"sources":["../src/components/cn.ts","../src/components/layout/Row.tsx","../src/components/layout/Col.tsx","../src/components/layout/Flex.tsx","../src/components/layout/Space.tsx","../src/components/data-display/Badge.tsx","../src/components/general/Button.tsx","../src/components/data-display/Card.tsx","../src/components/data-entry/Input.tsx","../src/components/data-entry/InputPassword.tsx","../src/components/data-entry/InputSearch.tsx","../src/components/data-entry/InputNumber.tsx","../src/components/data-entry/Form.tsx","../src/components/feedback/Skeleton.tsx","../src/components/feedback/Spinner.tsx","../src/components/data-display/Popover.tsx","../src/components/data-entry/AutoComplete.tsx","../src/components/data-entry/Cascader.tsx","../src/components/data-entry/Checkbox.tsx","../src/components/data-entry/CheckboxGroup.tsx","../src/components/data-entry/ColorPicker.tsx","../src/components/data-entry/Field.tsx","../src/props/loading.ts","../src/components/data-entry/Radio.tsx","../src/components/data-entry/Rate.tsx","../src/components/data-entry/Select.tsx","../src/components/data-entry/Slider.tsx","../src/components/data-entry/Switch.tsx","../src/components/data-display/IconButton.tsx","../src/components/data-entry/Transfer.tsx","../src/components/data-entry/TreeSelect.tsx","../src/components/data-entry/FormField.tsx","../src/components/data-entry/LocaleTabs.tsx","../src/components/data-entry/Checklist.tsx","../src/components/data-display/PageHeader.tsx","../src/components/data-display/SegmentedControl.tsx","../src/components/data-entry/Label.tsx","../src/components/navigation/Tabs.tsx","../src/components/data-display/Avatar.tsx","../src/components/data-display/Statistic.tsx","../src/components/data-display/Empty.tsx","../src/components/data-display/Tag.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/Result.tsx","../src/components/general/Typography.tsx","../src/components/data-display/Descriptions.tsx","../src/components/data-display/Separator.tsx","../src/components/navigation/DropdownMenu.tsx","../src/components/data-display/Calendar.tsx","../src/components/feedback/Dialog.tsx","../src/components/feedback/Sheet.tsx","../src/components/feedback/AlertDialog.tsx","../src/hooks/useBreakpoint.ts","../src/components/data-display/Table.tsx","../src/components/data-entry/TimeInput.tsx","../src/components/feedback/toaster.tsx","../src/components/feedback/Watermark.tsx","../src/components/feedback/Popconfirm.tsx","../src/components/navigation/Breadcrumb.tsx","../src/components/navigation/Anchor.tsx","../src/components/navigation/Menu.tsx","../src/components/navigation/Pagination.tsx","../src/components/navigation/Steps.tsx","../src/components/feedback/Progress.tsx","../src/components/data-display/calendar/IconRow.tsx","../src/components/data-display/calendar/AvatarStack.tsx","../src/components/data-display/calendar/ColorSwatchCheckbox.tsx","../src/components/data-display/calendar/CalendarOption.tsx","../src/components/data-display/calendar/AttendeeChip.tsx","../src/components/data-display/calendar/AttendeeListItem.tsx","../src/components/data-display/calendar/AllDayChip.tsx","../src/components/data-display/calendar/DayHeaderPill.tsx","../src/components/data-display/calendar/time.ts","../src/components/data-display/calendar/TimeGrid.tsx","../src/components/data-display/calendar/EventBlock.tsx","../src/components/data-display/calendar/MonthCell.tsx","../src/components/data-display/calendar/EventPill.tsx","../src/components/data-display/calendar/MiniMonth.tsx","../src/components/data-display/calendar/AvailabilityRow.tsx","../src/components/data-display/calendar/SuggestedSlotCard.tsx","../src/components/data-entry/DateTimePicker.tsx","../src/components/data-display/Carousel.tsx","../src/components/data-display/Collapse.tsx","../src/components/data-display/List.tsx","../src/components/data-display/Image.tsx","../src/components/data-display/QRCode.tsx","../src/components/data-display/Tooltip.tsx","../src/preferences/holder.ts","../src/i18n/format.ts","../src/i18n/relative.ts","../src/hooks/useFormatters.ts","../src/components/data-display/Timeline.tsx","../src/components/data-display/Tree.tsx","../src/components/data-display/Tour.tsx","../src/components/composites/upload/shared/types.ts","../src/components/composites/upload/shared/validate.ts","../src/components/composites/upload/shared/useUpload.ts","../src/components/composites/upload/Upload.tsx","../src/components/composites/upload/ImageUpload.tsx","../src/components/composites/upload/AvatarUploader.tsx","../src/components/composites/upload/media-client.ts","../src/components/composites/upload/MediaUpload.tsx","../src/components/composites/locale-input/LocaleInput.tsx","../src/components/composites/calendar/CalendarSidebar.tsx","../src/components/composites/calendar/CalendarTopbar.tsx","../src/components/composites/calendar/WeekView.tsx","../src/components/composites/calendar/MonthView.tsx","../src/components/composites/calendar/DayHeaderHero.tsx","../src/components/composites/calendar/DayView.tsx","../src/components/composites/calendar/AgendaView.tsx","../src/components/composites/calendar/EventDetailPanel.tsx","../src/components/composites/calendar/CreateEventDialog.tsx","../src/components/composites/calendar/FindATimePanel.tsx","../src/components/composites/table-import-export/index.tsx","../src/components/composites/data-table/DataTableChrome.tsx","../src/components/composites/data-table/ColumnManagerSheet.tsx","../src/components/composites/data-table/DataTablePaginationBand.tsx","../src/components/composites/data-table/SaveViewDialog.tsx","../src/components/composites/data-table/DataTable.tsx","../src/components/composites/data-table/persistence.ts","../src/components/composites/data-table/useDataTable.ts","../src/i18n/locales/ja.ts","../src/i18n/locales/en.ts","../src/i18n/locales/vi.ts","../src/i18n/locales/fil.ts","../src/i18n/index.ts","../src/hooks/useTweaks.ts","../src/hooks/useTablePagination.ts","../src/hooks/useTableSelection.ts","../src/hooks/useTableState.ts","../src/hooks/useTableViews.ts"],"names":["order","jsx","JUSTIFY_CLASS","ALIGN_CLASS","VARIANT_CLASS","Button","jsxs","forwardRef","Card","Fragment","SIZE_CLASS","Input","Textarea","InputPassword","InputSearch","useState","STATUS_CLASS","InputNumber","useCallback","createContext","useContext","TONE_CLASS","Spinner","Root","Trigger","Popover","AutoComplete","useMemo","useEffect","Cascader","ChevronDown","Checkbox","CheckboxGroup","ColorPicker","Field","LabelControl","HelpText","CountText","RadioGroup","Radio","Rate","Content","Label","Item","Separator","Command","ChevronUp","ScrollUp","ScrollDown","Slider","Switch","IconButton","useRef","Slot","Transfer","ChevronRight","TreeSelect","normalizeIn","LocaleTabs","Checklist","iconSize","Check","X","PADDING_CLASS","PageHeader","Tabs","Alert","DEFAULT_ICON","Info","CheckCircle2","AlertTriangle","Result","Title","Tag","Paragraph","Text","Link","RACCalendar","RACCalendarGrid","RACCalendarGridHeader","RACCalendarHeaderCell","RACCalendarGridBody","RACCalendarCell","RACRangeCalendar","RACButton","ChevronLeft","RACHeading","Sheet","DialogPrimitive2","AlertDialog","footer","TimeInput","Toaster","SonnerToaster","Watermark","Anchor","Menu","Pagination","useTranslation","Steps","COLOR_CLASS","Progress","strokeWidth","RACDateField","RACLabel","RACDateInput","RACDateSegment","RACText","RACFieldError","RACTimeField","RACDatePicker","RACGroup","RACPopover","RACDialog","RACDateRangePicker","next","normalize","List","Image","AriaTreeItem","AriaButton","AriaCheckbox","Tree","AriaTree","useId","FileIcon","ImageIcon","UploadIcon","DEFAULT_LABELS","Cropper","RotateCw","LocaleInput","LocaleRowInput","Search","DOW_DEFAULTS","defaultResolveVariant","ALL_DAY_DEFAULTS","Trash2","Plus","Bell","RefreshCw","Globe","Users","FileText","isValidElement","getColumnKey","value","resolveUpdater","resolveStickySide","deriveColumnPinning","resolveRowKey","useReactTable","getCoreRowModel"],"mappings":"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","file":"index.js","sourcesContent":["// cn — class-name merger. Standard shadcn utility: clsx merges values\n// and tailwind-merge resolves Tailwind class conflicts (e.g. last\n// `bg-*` wins). Every primitive in this package and every consumer\n// service imports cn from this single location to keep the dedupe\n// rules consistent.\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","// <Row> — 24-column responsive grid (Ant Design model).\n//\n// Pairs with <Col span={…} xs={…} sm={…} md={…} lg={…} xl={…} />.\n// Children Cols sum to ≤24 per breakpoint; extra Cols wrap.\n//\n// <Row gutter={16}>\n// <Col xs={24} md={8}>left</Col>\n// <Col xs={24} md={16}>right</Col>\n// </Row>\n//\n// `gutter` can be a single number (horizontal only), [h, v] tuple,\n// or per-breakpoint object `{ xs: 8, md: 16 }`. The Row sets the\n// negative margin so the rightmost Col aligns with the container\n// edge; Cols add the matching positive padding.\n//\n// Why not raw `grid-cols-*`: per rule 12 Clause 1 the framework owns\n// layout primitives. Service code never writes `grid-cols-[280px_1fr]`.\n\nimport { createContext, useContext, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\nexport type GutterValue = number | [number, number] | Partial<Record<Breakpoint, number>>;\n\nexport type Breakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n\nexport type Justify = \"start\" | \"end\" | \"center\" | \"space-around\" | \"space-between\" | \"space-evenly\";\nexport type Align = \"top\" | \"middle\" | \"bottom\" | \"stretch\";\n\nexport interface RowProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n /** Horizontal gap (px), or [horizontal, vertical], or per-breakpoint object. */\n gutter?: GutterValue;\n /** Flex justify on the cross axis. */\n justify?: Justify;\n /** Flex align on the main axis. */\n align?: Align;\n /** Wrap children when sum > 24 cols (default true). */\n wrap?: boolean;\n children?: ReactNode;\n}\n\ninterface RowCtx {\n gutter: [number, number];\n}\n\nconst Ctx = createContext<RowCtx>({ gutter: [0, 0] });\n\nexport function useRowGutter(): [number, number] {\n return useContext(Ctx).gutter;\n}\n\nconst JUSTIFY_CLASS: Record<Justify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n \"space-around\": \"justify-around\",\n \"space-between\": \"justify-between\",\n \"space-evenly\": \"justify-evenly\",\n};\n\nconst ALIGN_CLASS: Record<Align, string> = {\n top: \"items-start\",\n middle: \"items-center\",\n bottom: \"items-end\",\n stretch: \"items-stretch\",\n};\n\n/**\n * Read a breakpoint min-width from the CSS token system (cardinal\n * rule 22 — no hardcoded breakpoint literals in components). Falls\n * back to Tailwind defaults if the token isn't set (e.g. when the\n * Storybook preview hasn't loaded theme.css yet).\n */\nfunction getBreakpointWidth(bp: Breakpoint): string {\n const FALLBACK: Record<Breakpoint, string> = {\n xs: \"0px\",\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n xxl: \"1536px\",\n };\n if (typeof window === \"undefined\") return FALLBACK[bp];\n const v = getComputedStyle(document.documentElement)\n .getPropertyValue(`--breakpoint-${bp}`)\n .trim();\n return v || FALLBACK[bp];\n}\n\nfunction normalizeGutter(g: GutterValue | undefined): [number, number] {\n if (g === undefined) return [0, 0];\n if (typeof g === \"number\") return [g, 0];\n if (Array.isArray(g)) return [g[0] ?? 0, g[1] ?? 0];\n // Per-breakpoint object — pick the widest matching at runtime via\n // window.matchMedia. Server / first-paint falls back to xs.\n if (typeof window === \"undefined\") return [g.xs ?? 0, 0];\n const order: Breakpoint[] = [\"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"];\n for (const bp of order) {\n if (g[bp] !== undefined && window.matchMedia(`(min-width: ${getBreakpointWidth(bp)})`).matches) {\n return [g[bp] as number, 0];\n }\n }\n return [g.xs ?? 0, 0];\n}\n\nexport function Row({\n gutter,\n justify,\n align,\n wrap = true,\n className,\n style,\n children,\n ...rest\n}: RowProps) {\n const [h, v] = normalizeGutter(gutter);\n return (\n <Ctx.Provider value={{ gutter: [h, v] }}>\n <div\n className={cn(\n \"flex\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n justify && JUSTIFY_CLASS[justify],\n align && ALIGN_CLASS[align],\n className,\n )}\n style={{\n rowGap: v ? `${v}px` : undefined,\n marginLeft: h ? `-${h / 2}px` : undefined,\n marginRight: h ? `-${h / 2}px` : undefined,\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n </Ctx.Provider>\n );\n}\n","// <Col span={n} xs={n} sm={n} md={n} lg={n} xl={n} xxl={n}>\n//\n// 24-column grid cell — sibling of Row. The breakpoint-keyed props\n// emit a `flex-basis: ${(n/24)*100}%` at each min-width media query\n// using Tailwind v4 arbitrary properties. Defaults to filling the\n// available row (span 24, i.e. 100%).\n//\n// <Col xs={24} md={8}>side</Col>\n// <Col xs={24} md={16}>main</Col>\n\nimport type { ComponentProps, CSSProperties, ReactNode } from \"react\";\nimport { useRowGutter, type Breakpoint } from \"./Row\";\nimport { cn } from \"../cn\";\n\nconst SPAN_TO_PCT = (n: number) => (n / 24) * 100;\n\nexport interface ColProps extends ComponentProps<\"div\"> {\n /** Default span (1..24). 24 = full width. */\n span?: number;\n /** Offset by n columns (1..23). */\n offset?: number;\n /** Push by n columns (flex-order shift). */\n push?: number;\n /** Per-breakpoint span overrides. */\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n xxl?: number;\n /** Flex order on the main axis. */\n order?: number;\n /** When set, the Col grows/shrinks like `flex: <n>` (free width). */\n flex?: string | number;\n children?: ReactNode;\n}\n\nconst BP_WIDTHS: Record<Breakpoint, string> = {\n xs: \"0px\",\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n xxl: \"1536px\",\n};\n\nexport function Col({\n span = 24,\n offset = 0,\n push,\n xs,\n sm,\n md,\n lg,\n xl,\n xxl,\n order,\n flex,\n className,\n style,\n children,\n ...rest\n}: ColProps) {\n const [h] = useRowGutter();\n\n // Build inline media-query-aware styles. We use CSS custom properties\n // + Tailwind's arbitrary-property syntax — but to support all six\n // breakpoints cleanly, generate a per-instance <style> tag would be\n // overkill. Use only the largest set value at runtime via the same\n // matchMedia approach as Row's gutter resolution.\n const breakpoints: Partial<Record<Breakpoint, number>> = {\n xs,\n sm,\n md,\n lg,\n xl,\n xxl,\n };\n\n // SSR-safe initial: prefer xs over base `span`. Client useEffect not\n // needed because we re-evaluate on each render and the browser\n // matchMedia API works synchronously.\n let resolved = span;\n if (typeof window !== \"undefined\") {\n const order: Breakpoint[] = [\"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"];\n for (const bp of order) {\n const v = breakpoints[bp];\n if (v !== undefined && window.matchMedia(`(min-width: ${BP_WIDTHS[bp]})`).matches) {\n resolved = v;\n break;\n }\n }\n } else if (xs !== undefined) {\n resolved = xs;\n }\n\n // Note: when `flex` is undefined we deliberately omit the key from the\n // style object. React 19 serialises `flex: undefined` as `element.style\n // .flex = \"\"`, and because `flex` is a CSS shorthand that clears\n // `flex-grow` / `flex-shrink` / `flex-basis`, the empty assignment wipes\n // the `flexBasis: 50%` we just set. The spread-only-when-present pattern\n // keeps the longhand intact.\n const merged: CSSProperties = {\n flexBasis: flex !== undefined ? undefined : `${SPAN_TO_PCT(resolved)}%`,\n maxWidth: flex !== undefined ? undefined : `${SPAN_TO_PCT(resolved)}%`,\n paddingLeft: h ? `${h / 2}px` : undefined,\n paddingRight: h ? `${h / 2}px` : undefined,\n marginLeft: offset ? `${SPAN_TO_PCT(offset)}%` : undefined,\n order: order,\n ...(flex !== undefined && {\n flex: typeof flex === \"number\" ? `${flex} ${flex} auto` : flex,\n }),\n ...style,\n };\n void push; // reserved — Ant supports push/pull; rarely used, add if needed\n\n return (\n <div className={cn(\"min-w-0\", className)} style={merged} {...rest}>\n {children}\n </div>\n );\n}\n","// <Flex> — flex container with prop-driven config (Ant Design model).\n//\n// <Flex gap=\"default\" vertical justify=\"space-between\" align=\"center\" wrap>\n//\n// Replaces `<div className=\"flex items-center gap-2 …\">` patterns.\n// Prop names mirror Ant Design exactly so the API is familiar to\n// anyone who knows AntD; values map onto CSS flex.\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { SizeProp } from \"../../props\";\n\n/** Flex gap scale. Accepts the shared `SizeProp` vocabulary plus a raw\n * pixel number for one-off gaps. Renamed from Ant's `\"middle\"` →\n * `\"default\"` to match the framework-wide size axis. */\nexport type FlexGap = number | SizeProp;\nexport type FlexJustify =\n | \"start\"\n | \"end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\nexport type FlexAlign = \"start\" | \"end\" | \"center\" | \"stretch\" | \"baseline\";\n\nconst GAP_TOKEN: Record<Exclude<FlexGap, number>, string> = {\n small: \"var(--spacing-2)\",\n default: \"var(--spacing-3)\",\n large: \"var(--spacing-4)\",\n};\n\nconst JUSTIFY_CLASS: Record<FlexJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n \"space-between\": \"justify-between\",\n \"space-around\": \"justify-around\",\n \"space-evenly\": \"justify-evenly\",\n};\n\nconst ALIGN_CLASS: Record<FlexAlign, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nexport interface FlexProps extends ComponentProps<\"div\"> {\n /** Direction — false / undefined = horizontal, true = vertical. */\n vertical?: boolean;\n /** Wrap mode. */\n wrap?: boolean | \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n /** Gap between children. Token name or pixel number. */\n gap?: FlexGap;\n justify?: FlexJustify;\n align?: FlexAlign;\n /** flex value for the container itself (rare — usually parent sets it). */\n flex?: string | number;\n children?: ReactNode;\n}\n\nexport function Flex({\n vertical = false,\n wrap,\n gap,\n justify,\n align,\n flex,\n className,\n style,\n children,\n ...rest\n}: FlexProps) {\n const wrapClass =\n wrap === undefined || wrap === false || wrap === \"nowrap\"\n ? \"flex-nowrap\"\n : wrap === \"wrap-reverse\"\n ? \"flex-wrap-reverse\"\n : \"flex-wrap\";\n\n const gapPx =\n typeof gap === \"number\"\n ? `${gap}px`\n : gap !== undefined\n ? GAP_TOKEN[gap]\n : undefined;\n\n return (\n <div\n className={cn(\n \"flex\",\n vertical ? \"flex-col\" : \"flex-row\",\n wrapClass,\n justify && JUSTIFY_CLASS[justify],\n align && ALIGN_CLASS[align],\n className,\n )}\n style={{\n gap: gapPx,\n flex: typeof flex === \"number\" ? `${flex} ${flex} auto` : flex,\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n}\n","// <Space> — inline spacing between children (Ant Design model).\n//\n// <Space size=\"default\">\n// <Button>One</Button>\n// <Button>Two</Button>\n// </Space>\n//\n// Distinct from Flex in intent: Space implies a tight inline group\n// (action bar, breadcrumb, tag row). Flex implies a layout container.\n// Both use the same underlying flex CSS — Space adds a `<Compact>`\n// variant later for borderless adjacency.\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { SizeProp } from \"../../props\";\n\n/** Inline-spacing scale. Accepts the shared `SizeProp` vocabulary plus\n * a raw pixel number for one-off gaps. Renamed from Ant's `\"middle\"`\n * → `\"default\"` to match the framework-wide size axis. */\nexport type SpaceSize = number | SizeProp;\n\nconst SIZE_TOKEN: Record<Exclude<SpaceSize, number>, string> = {\n small: \"var(--spacing-1)\",\n default: \"var(--spacing-2)\",\n large: \"var(--spacing-3)\",\n};\n\nexport interface SpaceProps extends ComponentProps<\"div\"> {\n /** Gap between adjacent children. */\n size?: SpaceSize | [SpaceSize, SpaceSize];\n /** Vertical stack instead of horizontal row. */\n direction?: \"horizontal\" | \"vertical\";\n /** Allow wrapping when row overflows. */\n wrap?: boolean;\n /** Cross-axis alignment. */\n align?: \"start\" | \"end\" | \"center\" | \"baseline\";\n /** Separator rendered between siblings (e.g. a divider). */\n split?: ReactNode;\n children?: ReactNode;\n}\n\nfunction resolveSize(s: SpaceSize): string {\n return typeof s === \"number\" ? `${s}px` : SIZE_TOKEN[s];\n}\n\nconst ALIGN_CLASS: Record<NonNullable<SpaceProps[\"align\"]>, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n baseline: \"items-baseline\",\n};\n\nexport function Space({\n size = \"small\",\n direction = \"horizontal\",\n wrap = false,\n align,\n split,\n className,\n style,\n children,\n ...rest\n}: SpaceProps) {\n const [colGap, rowGap] = Array.isArray(size) ? size : [size, size];\n\n // Render children with optional separators.\n const items: ReactNode[] = [];\n let i = 0;\n // We don't introspect children to filter out null; mirror Ant's behavior\n // of letting falsy children naturally render nothing.\n const arr = Array.isArray(children) ? children : [children];\n for (const child of arr) {\n if (i > 0 && split) {\n items.push(\n <span key={`sep-${i}`} aria-hidden=\"true\" className=\"text-muted-foreground\">\n {split}\n </span>,\n );\n }\n items.push(<span key={`item-${i}`}>{child}</span>);\n i++;\n }\n\n return (\n <div\n className={cn(\n \"inline-flex\",\n direction === \"vertical\" ? \"flex-col\" : \"flex-row\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n align && ALIGN_CLASS[align],\n className,\n )}\n style={{\n columnGap: resolveSize(colGap),\n rowGap: resolveSize(rowGap),\n ...style,\n }}\n {...rest}\n >\n {items}\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Badge — status pill / chip.\n *\n * Renders the canonical `.chip` class family from the dxs-kintai\n * design system (comp-badges.html). Two appearance modes per\n * SKILL.md:\n *\n * • `appearance=\"soft\"` (default) — translucent role tint. Use for\n * transient state — 申請中 (in review), draft, pending.\n * • `appearance=\"solid\"` — full role color. Use for terminal\n * state — 承認済 (approved), 却下 (rejected).\n * • `appearance=\"outline\"` — hairline border only.\n *\n * Variants map to semantic roles:\n *\n * - `success` — 若竹 task completed, healthy\n * - `warning` — 山吹 needs attention, not yet broken\n * - `info` — 群青 neutral state callout\n * - `error` — 茜 failed / blocked (emits `chip-destructive`)\n * - `attention`— 朱 pending, awaiting input (prefer over `error`\n * for non-destructive alerts per SKILL.md)\n * - `primary` — brand action\n * - `neutral` — grey default chrome (omitted variant suffix; base\n * `.chip` styling)\n * - `outline` — empty hairline only (rare; same as\n * `appearance=\"outline\"` with no role)\n *\n * @example\n * <Badge variant=\"success\" dot>Healthy</Badge> // soft (default)\n * <Badge variant=\"success\" appearance=\"solid\">承認済</Badge>\n * <Badge variant=\"destructive\" appearance=\"solid\">却下</Badge>\n * <Badge variant=\"attention\" dot>遅刻</Badge>\n */\nexport type BadgeVariant =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"info\"\n | \"destructive\"\n | \"attention\"\n | \"neutral\"\n | \"outline\"\n\nexport type BadgeAppearance = \"soft\" | \"solid\" | \"outline\"\n\nexport interface BadgeProps extends ComponentProps<\"span\"> {\n variant?: BadgeVariant\n appearance?: BadgeAppearance\n /** When true renders a colored dot before the label. */\n dot?: boolean\n children?: ReactNode\n}\n\n// `<Badge variant>` → canonical chip-role class.\nconst VARIANT_CLASS: Record<BadgeVariant, string | null> = {\n primary: \"chip-primary\",\n success: \"chip-success\",\n warning: \"chip-warning\",\n info: \"chip-info\",\n destructive: \"chip-destructive\",\n attention: \"chip-attention\",\n // Neutral = base `.chip` (no role suffix).\n neutral: null,\n outline: \"chip-outline\",\n}\n\nexport function Badge({\n variant = \"neutral\",\n appearance = \"soft\",\n dot = true,\n className,\n children,\n ...rest\n}: BadgeProps) {\n const variantClass = VARIANT_CLASS[variant]\n const isOutline = variant === \"outline\" || appearance === \"outline\"\n\n return (\n <span\n className={cn(\n \"chip\",\n variantClass,\n appearance === \"soft\" && !isOutline && \"chip-soft\",\n className,\n )}\n {...rest}\n >\n {dot && <span className=\"dot\" aria-hidden />}\n {children}\n </span>\n )\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Button — canonical action primitive.\n *\n * 100% mapped to the dxs-kintai design canon\n * (`design-handoff/ui-system/dxs-kintai-design-system/project/preview/\n * comp-buttons.html`):\n *\n * Variants: primary · secondary · outline · ghost · destructive · link\n * Sizes: x-small · small · default · large\n *\n * Cardinal rules honoured:\n * §14 — shadcn / Radix recipe (Slot for asChild)\n * §21 — every axis (theme/accent/density/font-size)\n * §22 — every literal token-pinned (height = --density-element-*)\n * §23 — vocabulary (`size` + `variant` per docs/specs/04 §B)\n * §24 — mobile touch target handled without changing visual size\n *\n * Slot props (§N):\n * startContent — ReactNode rendered before children (left icon)\n * endContent — ReactNode rendered after children (right icon)\n *\n * When `asChild` is true, Radix Slot merges Button's classes onto\n * the caller's single child element. The slot props\n * (`startContent` / `endContent` / `loading` spinner) are then\n * INERT — the caller's element owns its content. Compose icons\n * inline inside the slotted element:\n *\n * <Button asChild>\n * <a href=\"/x\"><Icon /> Label</a> ← icon wired inline\n * </Button>\n *\n * <Button asChild startContent={<Icon />}>← `startContent` IGNORED\n * <a href=\"/x\">Label</a>\n * </Button>\n */\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n\nexport type ButtonSize = \"x-small\" | \"small\" | \"default\" | \"large\";\n\nexport interface ButtonProps extends Omit<ComponentProps<\"button\">, \"size\"> {\n /** Visual treatment per design canon `.btn-<variant>`. */\n variant?: ButtonVariant;\n /** Dimensional scale per `--density-element-<size>` chain. */\n size?: ButtonSize;\n /** Stretch to fill parent's width (mobile form submit pattern). */\n block?: boolean;\n /** Show a spinner + disable interaction. */\n loading?: boolean;\n /** Icon slot rendered before the label. */\n startContent?: ReactNode;\n /** Icon slot rendered after the label. */\n endContent?: ReactNode;\n /** Radix Slot pattern — wrap a link / RouterLink without nesting. */\n asChild?: boolean;\n children?: ReactNode;\n}\n\nconst VARIANT_CLASS: Record<ButtonVariant, string> = {\n primary: \"btn-primary\",\n secondary: \"btn-secondary\",\n outline: \"btn-outline\",\n ghost: \"btn-ghost\",\n destructive: \"btn-destructive\",\n link: \"btn-link\",\n};\n\nconst SIZE_CLASS: Record<ButtonSize, string> = {\n \"x-small\": \"btn-xs\",\n small: \"btn-sm\",\n default: \"\",\n large: \"btn-lg\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"default\",\n block,\n loading,\n startContent,\n endContent,\n disabled,\n asChild = false,\n className,\n type = \"button\",\n children,\n ...rest\n },\n ref,\n) {\n const Component = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n // Radix Slot requires exactly ONE React element child (it merges\n // props into that child). When `asChild` is true the caller's\n // slotted element OWNS the content — slots like `startContent` /\n // `endContent` / `loading spinner` are inert and must be wired\n // inline inside the caller's element. When `asChild` is false we\n // wrap the slot content + children with the standard composition.\n const content = asChild ? (\n children\n ) : (\n <>\n {loading ? <span className=\"btn-spinner\" aria-hidden /> : startContent}\n {children}\n {endContent}\n </>\n );\n\n return (\n <Component\n ref={ref as never}\n type={asChild ? undefined : type}\n data-loading={loading || undefined}\n disabled={asChild ? undefined : isDisabled}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || undefined}\n className={cn(\n \"btn\",\n VARIANT_CLASS[variant],\n SIZE_CLASS[size],\n block && \"btn-block\",\n loading && \"btn-loading\",\n className,\n )}\n {...rest}\n >\n {content}\n </Component>\n );\n});\n","import { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Card — surface container. 100% mapped to the dxs-kintai design canon\n * (`design-handoff/ui-system/dxs-kintai-design-system/project/preview/\n * comp-card.html`).\n *\n * One atom (`.card`, 1px border, 6px radius, `var(--card)` bg,\n * no shadow at rest) + four orthogonal prop axes:\n *\n * - `padding` — tight / default / cozy / none (12 / 16 / 20 / 0)\n * - `tone` — default / muted / outline-only\n * - `accent` — primary / success / warning / attention / info /\n * destructive / featured (3px left edge or full ring)\n * - `hoverable`\n *\n * Plus a `band` prop for the H11 color-strip variant (4px strip\n * above the header).\n *\n * Header shape auto-detects from the slot props:\n *\n * - `kicker` set → `.ch-kicker` (3-tier\n * column: kicker / title /\n * subtitle)\n * - `subtitle` set, no `kicker` → `.ch-stack` (2-tier\n * column: title /\n * subtitle)\n * - `meta` set, no `subtitle`/`kicker` → `.ch` row with meta\n * right-aligned\n * (margin-left: auto)\n * - just `title` → `.ch` row, title only\n *\n * `extra` always renders right-aligned at the end of the header row\n * (works with all three shapes). Used for action buttons + tags\n * (H4/H5/H7 patterns).\n *\n * For flush cards with internal sections (H1-H17 variants), use\n * `padding=\"none\"` plus `footer` / `actions` and normal body content.\n */\n\n// ─── Prop axes ─────────────────────────────────────────────────────\n\nexport type CardPadding = \"tight\" | \"default\" | \"cozy\" | \"none\";\nexport type CardTone = \"default\" | \"muted\" | \"outline-only\";\nexport type CardAccent =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"attention\"\n | \"info\"\n | \"destructive\"\n | \"featured\";\nexport type CardBand =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"attention\"\n | \"info\"\n | \"destructive\"\n | \"gradient\"\n | \"dotted\";\n\nexport interface CardProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n /** Card title — H1/H2/H3/H12 `<span class=\"t\">…</span>`. */\n title?: ReactNode;\n /** Sub-text stacked BELOW the title (H2 `.ch-stack .sub`). */\n subtitle?: ReactNode;\n /** Small uppercase label ABOVE the title (H12 `.ch-kicker .k`). */\n kicker?: ReactNode;\n /** Right-aligned secondary text (H3 `.ch .sub` with margin-left:auto). */\n meta?: ReactNode;\n /** Right-aligned action slot — buttons, tags, status indicators. */\n extra?: ReactNode;\n /** Color strip above the header (4px, semantic). */\n band?: CardBand;\n /** Footer slot rendered with top divider + muted secondary tint. */\n footer?: ReactNode;\n /** Right-aligned action bar footer — no divider tint, transparent bg. */\n actions?: ReactNode;\n /** Padding density. */\n padding?: CardPadding;\n /** Surface tone. */\n tone?: CardTone;\n /** Edge accent (3px left edge, or full --primary ring for `featured`). */\n accent?: CardAccent;\n /** Hover affordance — border + shadow lift. */\n hoverable?: boolean;\n}\n\nconst PADDING_CLASS: Record<CardPadding, string> = {\n tight: \"card-padding-tight\",\n default: \"\",\n cozy: \"card-padding-cozy\",\n none: \"card-padding-none\",\n};\n\nconst TONE_CLASS: Record<CardTone, string> = {\n default: \"\",\n muted: \"card-tone-muted\",\n \"outline-only\": \"card-tone-outline\",\n};\n\nconst ACCENT_CLASS: Record<CardAccent, string> = {\n primary: \"card-accent-primary\",\n success: \"card-accent-success\",\n warning: \"card-accent-warning\",\n attention: \"card-accent-attention\",\n info: \"card-accent-info\",\n destructive: \"card-accent-destructive\",\n featured: \"card-accent-featured\",\n};\n\nconst BAND_CLASS: Record<CardBand, string> = {\n primary: \"card-band-primary\",\n success: \"card-band-success\",\n warning: \"card-band-warning\",\n attention: \"card-band-attention\",\n info: \"card-band-info\",\n destructive: \"card-band-destructive\",\n gradient: \"card-band-gradient\",\n dotted: \"card-band-dotted\",\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n title,\n subtitle,\n kicker,\n meta,\n extra,\n band,\n footer,\n actions,\n padding = \"default\",\n tone = \"default\",\n accent,\n hoverable,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const hasHeader =\n title !== undefined ||\n subtitle !== undefined ||\n kicker !== undefined ||\n meta !== undefined ||\n extra !== undefined;\n const flush = padding === \"none\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"card\",\n PADDING_CLASS[padding],\n TONE_CLASS[tone],\n accent && ACCENT_CLASS[accent],\n hoverable && \"card-hoverable\",\n className,\n )}\n {...rest}\n >\n {band && (\n <div className={cn(\"card-band\", BAND_CLASS[band])} aria-hidden />\n )}\n {hasHeader && (\n <HeaderSection\n title={title}\n subtitle={subtitle}\n kicker={kicker}\n meta={meta}\n extra={extra}\n block={flush}\n />\n )}\n {flush ? children : <div className=\"card-body\">{children}</div>}\n {footer !== undefined && (\n <FooterSection block={flush}>{footer}</FooterSection>\n )}\n {actions !== undefined && (\n <FooterSection block={flush} actions>\n {actions}\n </FooterSection>\n )}\n </div>\n );\n});\n\n// ─── Internal sections (for flush / padding=\"none\" cards) ──────────\n\ninterface HeaderSectionProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n title?: ReactNode;\n subtitle?: ReactNode;\n kicker?: ReactNode;\n meta?: ReactNode;\n extra?: ReactNode;\n /** When `true`, the header pads itself + draws a bottom divider —\n * the `.ch` / `.ch-stack` / `.ch-kicker` block used inside flush\n * cards. When `false` (default), the header is the same shape but\n * sits inside the parent card's padding (no extra divider). */\n block?: boolean;\n}\n\nfunction HeaderSection({\n title,\n subtitle,\n kicker,\n meta,\n extra,\n block = false,\n className,\n children,\n ...rest\n}: HeaderSectionProps) {\n // Header shape selector per design canon:\n // kicker present → `.ch-kicker` (3-tier column)\n // subtitle present, no kicker → `.ch-stack` (2-tier column)\n // else → `.ch` (row with optional meta-right)\n const shape: \"kicker\" | \"stack\" | \"row\" =\n kicker !== undefined ? \"kicker\" : subtitle !== undefined ? \"stack\" : \"row\";\n const shapeClass =\n shape === \"kicker\"\n ? \"card-header-kicker\"\n : shape === \"stack\"\n ? \"card-header-stack\"\n : \"card-header-row\";\n\n return (\n <div\n className={cn(shapeClass, block && \"card-header-block\", className)}\n {...rest}\n >\n {shape === \"kicker\" && (\n <>\n {kicker !== undefined && (\n <span className=\"card-kicker\">{kicker}</span>\n )}\n {title !== undefined && <h3 className=\"card-title\">{title}</h3>}\n {subtitle !== undefined && (\n <span className=\"card-subtitle\">{subtitle}</span>\n )}\n </>\n )}\n {shape === \"stack\" && (\n <>\n {title !== undefined && <h3 className=\"card-title\">{title}</h3>}\n {subtitle !== undefined && (\n <span className=\"card-subtitle\">{subtitle}</span>\n )}\n </>\n )}\n {shape === \"row\" && (\n <>\n {title !== undefined && <h3 className=\"card-title\">{title}</h3>}\n {meta !== undefined && <span className=\"card-meta\">{meta}</span>}\n </>\n )}\n {children}\n {extra !== undefined && (\n <span className=\"card-header-extra\">{extra}</span>\n )}\n </div>\n );\n}\n\ninterface FooterSectionProps extends ComponentProps<\"div\"> {\n /** Right-aligned action bar, transparent bg, no muted tint. */\n actions?: boolean;\n /** When `true`, the footer pads itself + draws a top divider — the\n * `.cf` block in flush cards. */\n block?: boolean;\n}\n\nfunction FooterSection({\n actions,\n block = false,\n className,\n ...rest\n}: FooterSectionProps) {\n return (\n <div\n className={cn(\n block ? \"card-footer-block\" : \"card-footer-inline\",\n actions && \"card-footer-actions\",\n className,\n )}\n {...rest}\n />\n );\n}\n","import {\n forwardRef,\n type ComponentProps,\n type CSSProperties,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Input — text input with affix slots that match the canonical\n * dxs-kintai `.input-wrap` shell.\n *\n * <Input prefix={<SearchIcon />} suffix={<EyeIcon />} />\n * <Input addonBefore=\"https://\" addonAfter=\".com\" />\n * <Input size=\"large\" status=\"error\" />\n *\n * When `prefix` / `suffix` is provided the input is wrapped in a\n * `.input-wrap` shell that owns the focus ring while the icon sits\n * inside the field. When `addonBefore` / `addonAfter` is provided the\n * input + addons form a connected group; the addons render inside the\n * same `.input-wrap` as canonical `.affix.pre` / `.affix.suf`.\n */\n\nexport type InputSize = \"small\" | \"default\" | \"large\";\n/**\n * Form-field validation state per cardinal rule 23 §B vocabulary\n * (`\"default\" | \"success\" | \"warning\" | \"error\"`). Drives the border\n * + ring + helper-text color via the semantic chain.\n */\nexport type InputStatus = \"default\" | \"success\" | \"warning\" | \"error\";\n\nexport interface InputProps\n extends Omit<ComponentProps<\"input\">, \"prefix\" | \"size\"> {\n prefix?: ReactNode;\n suffix?: ReactNode;\n addonBefore?: ReactNode;\n addonAfter?: ReactNode;\n size?: InputSize;\n status?: InputStatus;\n /** Padding for the inner input — usually auto-derived from prefix/suffix. */\n inputStyle?: CSSProperties;\n}\n\nconst SIZE_CLASS: Record<InputSize, string> = {\n small: \"input-size-small\",\n default: \"\",\n large: \"input-size-large\",\n};\n\nconst STATUS_CLASS: Record<InputStatus, string> = {\n default: \"\",\n success: \"input-status-success\",\n warning: \"input-status-warning\",\n error: \"input-status-error\",\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n prefix,\n suffix,\n addonBefore,\n addonAfter,\n size = \"default\",\n status = \"default\",\n className,\n inputStyle,\n type = \"text\",\n readOnly,\n ...rest\n },\n ref,\n) {\n const sizeClass = SIZE_CLASS[size];\n const statusClass = STATUS_CLASS[status];\n\n // Bare input — no decoration.\n if (!prefix && !suffix && !addonBefore && !addonAfter) {\n return (\n <input\n ref={ref}\n type={type}\n readOnly={readOnly}\n className={cn(\n \"input\",\n sizeClass,\n statusClass,\n readOnly && \"input-readonly\",\n className,\n )}\n style={inputStyle}\n {...rest}\n />\n );\n }\n\n // Affix + addon shell — single canonical `.input-wrap` with\n // `.affix.pre` / `.affix.suf` per dxs-kintai design system.\n return (\n <div\n className={cn(\n \"input-wrap\",\n sizeClass,\n statusClass,\n prefix !== undefined && \"input-has-prefix\",\n suffix !== undefined && \"input-has-suffix\",\n readOnly && \"input-readonly\",\n className,\n )}\n >\n {addonBefore !== undefined && (\n <span className=\"affix addon pre\">{addonBefore}</span>\n )}\n {prefix !== undefined && <span className=\"affix prefix pre\">{prefix}</span>}\n <input\n ref={ref}\n type={type}\n readOnly={readOnly}\n style={inputStyle}\n {...rest}\n />\n {suffix !== undefined && <span className=\"affix suffix suf\">{suffix}</span>}\n {addonAfter !== undefined && (\n <span className=\"affix addon suf\">{addonAfter}</span>\n )}\n </div>\n );\n});\n\n/**\n * Textarea — `rows`, `autoSize`, `showCount`, `maxLength`, `resize`,\n * `status`, `size`. Visual contract maps to `.input` from the canonical\n * dxs-kintai design system.\n *\n * <Textarea rows={5} resize=\"vertical\" />\n * <Textarea autoSize={{ minRows: 3, maxRows: 8 }} showCount maxLength={500} />\n */\n\nexport type TextareaResize = \"none\" | \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> {\n size?: InputSize;\n status?: InputStatus;\n /** \"none\" by default — matches the canonical chrome. */\n resize?: TextareaResize;\n /** Auto-grow on content. `true` = grow indefinitely. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** Show character count in the bottom-right. */\n showCount?: boolean;\n}\n\nconst RESIZE_STYLE: Record<TextareaResize, CSSProperties[\"resize\"]> = {\n none: \"none\",\n vertical: \"vertical\",\n horizontal: \"horizontal\",\n both: \"both\",\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n size = \"default\",\n status = \"default\",\n resize = \"none\",\n autoSize,\n showCount,\n maxLength,\n className,\n style,\n value,\n defaultValue,\n readOnly,\n ...rest\n },\n ref,\n ) {\n const rows = typeof autoSize === \"object\" ? autoSize.minRows : rest.rows;\n const maxRows = typeof autoSize === \"object\" ? autoSize.maxRows : undefined;\n\n const mergedStyle: CSSProperties = {\n resize: RESIZE_STYLE[resize],\n ...style,\n };\n if (maxRows) {\n mergedStyle.maxHeight = `${maxRows * 1.5}em`;\n mergedStyle.overflowY = \"auto\";\n }\n\n // Pick controlled OR uncontrolled — passing both `value` and\n // `defaultValue` (even when one is undefined) trips React's\n // \"controlled ↔ uncontrolled transition\" warning.\n const valueProp =\n value !== undefined ? { value } : { defaultValue };\n\n const textareaEl = (\n <textarea\n ref={ref}\n rows={rows}\n maxLength={maxLength}\n {...valueProp}\n readOnly={readOnly}\n className={cn(\n \"input\",\n SIZE_CLASS[size],\n STATUS_CLASS[status],\n readOnly && \"input-readonly\",\n !showCount && className,\n )}\n style={mergedStyle}\n {...rest}\n />\n );\n\n if (!showCount) return textareaEl;\n\n const current =\n typeof value === \"string\"\n ? value.length\n : typeof defaultValue === \"string\"\n ? defaultValue.length\n : 0;\n const over = typeof maxLength === \"number\" && current > maxLength;\n const near =\n typeof maxLength === \"number\" && !over && current >= Math.floor(maxLength * 0.9);\n\n return (\n <div className={cn(\"textarea-with-count\", className)}>\n {textareaEl}\n <span className={cn(\"count\", near && \"warn\", over && \"over\")}>\n {maxLength ? `${current} / ${maxLength}` : current}\n </span>\n </div>\n );\n },\n);\n","import { Eye, EyeOff } from \"lucide-react\";\nimport { forwardRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport { Input, type InputProps } from \"./Input\";\n\n/**\n * InputPassword — Input subtype with show/hide toggle.\n *\n * Mirrors the canonical password reveal at `K:comp-inputs.html:184-201`:\n * a `<button class=\"pass-toggle\">` absolute-positioned at `right:6px`,\n * with an `Eye` / `EyeOff` icon flipping the underlying `<input>` type.\n *\n * Wraps `<Input>` so every base prop pass-through works (`size`,\n * `status`, `prefix`, `addonBefore`, etc.). Pair with `<Checklist>`\n * below to render password-strength rules.\n *\n * Controlled-or-uncontrolled reveal:\n * - omit `revealed` → internal state\n * - pass `revealed` + `onRevealChange` → fully controlled\n *\n * @example\n * <InputPassword placeholder=\"••••••••••\" />\n *\n * @example with strength meter slot\n * <Field>\n * <Field.Label required>パスワード</Field.Label>\n * <InputPassword strengthMeter={<Checklist items={…} />} />\n * </Field>\n */\n\nexport interface InputPasswordProps extends Omit<InputProps, \"type\"> {\n /** Controlled reveal state. */\n revealed?: boolean;\n /** Default reveal state when uncontrolled. */\n defaultRevealed?: boolean;\n onRevealChange?: (next: boolean) => void;\n /** Accessible label for the toggle button. Defaults to a translated string. */\n toggleLabels?: { show?: string; hide?: string };\n /** Slot rendered below the input — typically a `<Checklist>` of password rules. */\n strengthMeter?: ReactNode;\n}\n\nexport const InputPassword = forwardRef<HTMLInputElement, InputPasswordProps>(\n function InputPassword(\n {\n revealed: controlled,\n defaultRevealed = false,\n onRevealChange,\n toggleLabels,\n suffix,\n strengthMeter,\n className,\n ...rest\n },\n ref,\n ) {\n const [internal, setInternal] = useState(defaultRevealed);\n const revealed = controlled ?? internal;\n\n const toggle = () => {\n const next = !revealed;\n if (controlled === undefined) setInternal(next);\n onRevealChange?.(next);\n };\n\n const showLabel = toggleLabels?.show ?? \"Show password\";\n const hideLabel = toggleLabels?.hide ?? \"Hide password\";\n\n const toggleButton = (\n <button\n type=\"button\"\n className=\"input-pass-toggle\"\n onClick={toggle}\n aria-label={revealed ? hideLabel : showLabel}\n aria-pressed={revealed}\n tabIndex={-1}\n >\n {revealed ? <EyeOff size={14} /> : <Eye size={14} />}\n </button>\n );\n\n return (\n <>\n <Input\n ref={ref}\n type={revealed ? \"text\" : \"password\"}\n suffix={suffix ?? toggleButton}\n className={cn(className)}\n {...rest}\n />\n {strengthMeter}\n </>\n );\n },\n);\n","import { Search, X } from \"lucide-react\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport type { ChangeEvent, KeyboardEvent } from \"react\";\nimport { Input, type InputProps } from \"./Input\";\n\n/**\n * InputSearch — Input subtype with leading magnifier + optional clear-X.\n *\n * Mirrors the canonical search pattern used in `K:comp-pageheader.html`\n * and `K:comp-topbar.html`. Wraps `<Input>` so every base prop\n * pass-through works (`size`, `status`, etc.).\n *\n * Behaviour:\n * - Renders a leading `<Search>` icon as the `prefix` slot.\n * - Default `searchMode=\"submit\"` fires `onSearch` only from the\n * search button or Enter key. Use `searchMode=\"change\"` for local\n * in-memory filtering only.\n * - When `value` is non-empty and `allowClear` is true (default),\n * hides the custom suffix and renders a trailing `<X>` clear button that fires\n * `onChange({ target: { value: \"\" } })` and `onClear()`.\n *\n * Controlled-or-uncontrolled. Sets `type=\"search\"` for native semantics\n * (mobile keyboards, `<form>` reset behaviour).\n *\n * @example\n * <InputSearch placeholder=\"従業員を検索\" />\n *\n * @example controlled\n * <InputSearch\n * value={query}\n * onChange={(e) => setQuery(e.target.value)}\n * onClear={() => setQuery(\"\")}\n * />\n */\n\nexport interface InputSearchProps extends Omit<InputProps, \"type\" | \"prefix\"> {\n /** Show the trailing X clear button when value is non-empty. Default `true`. */\n allowClear?: boolean;\n /** Fired when the user clicks the clear button. */\n onClear?: () => void;\n /** Search execution mode. Default `submit` avoids request-per-keypress. */\n searchMode?: \"submit\" | \"change\";\n /** Fired when search should execute. */\n onSearch?: (value: string) => void;\n /** Custom leading icon — defaults to lucide `Search`. */\n searchIcon?: React.ReactNode;\n}\n\nexport const InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(\n function InputSearch(\n {\n allowClear = true,\n onClear,\n onChange,\n onKeyDown,\n onSearch,\n searchMode = \"submit\",\n value: controlledValue,\n defaultValue,\n searchIcon,\n suffix,\n ...rest\n },\n ref,\n ) {\n const [internal, setInternal] = useState<string>(\n typeof defaultValue === \"string\" ? defaultValue : \"\",\n );\n const value =\n controlledValue !== undefined ? String(controlledValue) : internal;\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (controlledValue === undefined) setInternal(e.target.value);\n onChange?.(e);\n if (searchMode === \"change\") onSearch?.(e.target.value);\n },\n [controlledValue, onChange, onSearch, searchMode],\n );\n\n const submitSearch = useCallback(() => {\n onSearch?.(value);\n }, [onSearch, value]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || e.key !== \"Enter\" || e.nativeEvent.isComposing) return;\n submitSearch();\n },\n [onKeyDown, submitSearch],\n );\n\n const handleClear = useCallback(() => {\n if (controlledValue === undefined) setInternal(\"\");\n onClear?.();\n onSearch?.(\"\");\n // Synthesize a change event so consumer state stays in sync even\n // when `onChange` was passed but `onClear` was not.\n if (!onClear && onChange) {\n const synthetic = {\n target: { value: \"\" } as unknown as HTMLInputElement,\n currentTarget: { value: \"\" } as unknown as HTMLInputElement,\n } as unknown as ChangeEvent<HTMLInputElement>;\n onChange(synthetic);\n }\n }, [controlledValue, onChange, onClear, onSearch]);\n\n const searchButton = (\n <button\n type=\"button\"\n className=\"input-search-button\"\n onClick={submitSearch}\n aria-label=\"Search\"\n tabIndex={-1}\n >\n {searchIcon ?? <Search size={14} />}\n </button>\n );\n\n const clearButton =\n allowClear && value.length > 0 ? (\n <button\n type=\"button\"\n className=\"input-pass-toggle\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <X size={14} />\n </button>\n ) : undefined;\n const hintSuffix = value.length > 0 ? undefined : suffix;\n const suffixContent =\n clearButton !== undefined || hintSuffix !== undefined ? (\n <>\n {clearButton}\n {hintSuffix}\n </>\n ) : undefined;\n\n // Pick controlled OR uncontrolled — passing both `value` and\n // `defaultValue` to the inner <input> (even when one is undefined)\n // trips React's \"controlled ↔ uncontrolled\" warning.\n const valueProp =\n controlledValue !== undefined\n ? { value: controlledValue }\n : { defaultValue }\n return (\n <Input\n ref={ref}\n type=\"search\"\n {...valueProp}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n prefix={searchButton}\n suffix={suffixContent}\n {...rest}\n />\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n} from \"react\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../cn\";\nimport type { InputSize, InputStatus } from \"./Input\";\n\n/**\n * InputNumber — numeric input with optional ± step buttons and an\n * optional display formatter / parser pair.\n *\n * Vocabulary per cardinal rule 23 §B:\n * • `value` / `defaultValue` / `onValueChange` (Radix-style)\n * • `size`: `\"small\" | \"default\" | \"large\"` (shared with Input)\n * • `status`: `\"default\" | \"success\" | \"warning\" | \"error\"`\n *\n * NOT Ant-shaped: no `controls` / `formatter` / `parser`. The\n * display side is a single `format` callback; the inverse parse is\n * an optional `parse` callback (only needed when `format` produces\n * text the browser's `Number()` can no longer round-trip).\n *\n * DOM mirrors `.input` from `30-input.css` with two stacked step\n * buttons absolutely positioned inside the wrapper.\n */\n\nexport interface InputNumberProps {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number | null) => void;\n min?: number;\n max?: number;\n /** Increment applied by the ± buttons + arrow keys. Default 1. */\n step?: number;\n /** Round to this many decimal places when emitting / blurring. */\n precision?: number;\n size?: InputSize;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n /** Show +/− step buttons (default true). */\n showStepper?: boolean;\n /** Optional display formatter (e.g., `n => \\`¥\\${n.toLocaleString()}\\``). */\n format?: (value: number) => string;\n /** Optional parser (inverse of format). Defaults to stripping non-numeric chars. */\n parse?: (text: string) => number | null;\n className?: string;\n status?: InputStatus;\n /** Forwarded `name` for native form submission. */\n name?: string;\n /** Forwarded `id` for label binding. */\n id?: string;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n}\n\nconst SIZE_CLASS: Record<InputSize, string> = {\n small: \"input-size-small\",\n default: \"\",\n large: \"input-size-large\",\n};\n\nconst STATUS_CLASS: Record<InputStatus, string> = {\n default: \"\",\n success: \"input-status-success\",\n warning: \"input-status-warning\",\n error: \"input-status-error\",\n};\n\nfunction roundTo(value: number, precision?: number): number {\n if (precision === undefined || precision < 0) return value;\n const factor = 10 ** precision;\n return Math.round(value * factor) / factor;\n}\n\nfunction clamp(value: number, min?: number, max?: number): number {\n let out = value;\n if (typeof min === \"number\") out = Math.max(out, min);\n if (typeof max === \"number\") out = Math.min(out, max);\n return out;\n}\n\nfunction defaultParse(text: string): number | null {\n const cleaned = text.replace(/[^\\d.\\-eE+]/g, \"\");\n if (cleaned === \"\" || cleaned === \"-\" || cleaned === \".\") return null;\n const n = Number(cleaned);\n return Number.isNaN(n) ? null : n;\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n function InputNumber(\n {\n value,\n defaultValue,\n onValueChange,\n min,\n max,\n step = 1,\n precision,\n size = \"default\",\n disabled,\n readOnly,\n placeholder,\n showStepper = true,\n format,\n parse,\n className,\n status = \"default\",\n name,\n id,\n onBlur,\n onFocus,\n },\n ref,\n ) {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<number | null>(\n defaultValue ?? null,\n );\n const currentValue = isControlled ? value ?? null : internalValue;\n\n // Text shown in the input. When focused or the user is mid-typing,\n // we show the raw text; when blurred we display the `format` output.\n const [displayText, setDisplayText] = useState<string>(() =>\n currentValue === null || currentValue === undefined\n ? \"\"\n : format\n ? format(currentValue)\n : String(currentValue),\n );\n const [isFocused, setIsFocused] = useState(false);\n const lastEmittedRef = useRef<number | null>(currentValue);\n\n // Sync display when the controlled `value` changes from the outside\n // (and we are not the source of the change).\n useEffect(() => {\n if (isFocused) return;\n const next = currentValue;\n if (next === null || next === undefined) {\n setDisplayText(\"\");\n return;\n }\n setDisplayText(format ? format(next) : String(next));\n }, [currentValue, format, isFocused]);\n\n const emit = useCallback(\n (next: number | null) => {\n if (!isControlled) setInternalValue(next);\n if (lastEmittedRef.current !== next) {\n lastEmittedRef.current = next;\n onValueChange?.(next);\n }\n },\n [isControlled, onValueChange],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value;\n setDisplayText(raw);\n if (raw === \"\") {\n emit(null);\n return;\n }\n const parsed = (parse ?? defaultParse)(raw);\n if (parsed === null) return;\n emit(parsed);\n };\n\n const commit = useCallback(() => {\n if (currentValue === null || currentValue === undefined) {\n setDisplayText(\"\");\n return;\n }\n const clamped = clamp(roundTo(currentValue, precision), min, max);\n emit(clamped);\n setDisplayText(format ? format(clamped) : String(clamped));\n }, [currentValue, emit, format, max, min, precision]);\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n commit();\n onBlur?.(event);\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // Show raw numeric text on focus so users can edit cleanly.\n if (currentValue !== null && currentValue !== undefined) {\n setDisplayText(String(currentValue));\n }\n onFocus?.(event);\n };\n\n const stepBy = useCallback(\n (direction: 1 | -1) => {\n if (disabled || readOnly) return;\n const base =\n currentValue ?? (typeof min === \"number\" ? min : 0);\n const next = clamp(roundTo(base + direction * step, precision), min, max);\n emit(next);\n if (!isFocused) {\n setDisplayText(format ? format(next) : String(next));\n } else {\n setDisplayText(String(next));\n }\n },\n [currentValue, disabled, emit, format, isFocused, max, min, precision, readOnly, step],\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n stepBy(1);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n stepBy(-1);\n }\n };\n\n const sizeClass = SIZE_CLASS[size];\n const statusClass = STATUS_CLASS[status];\n\n const ariaProps = useMemo(\n () => ({\n role: \"spinbutton\" as const,\n \"aria-valuenow\": currentValue ?? undefined,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n }),\n [currentValue, min, max],\n );\n\n return (\n <span\n className={cn(\n \"input-number-wrap\",\n sizeClass,\n statusClass,\n className,\n )}\n >\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n name={name}\n id={id}\n className={cn(\n \"input\",\n \"input-number\",\n sizeClass,\n statusClass,\n readOnly && \"input-readonly\",\n !showStepper && \"input-number-no-stepper\",\n )}\n value={displayText}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n {...ariaProps}\n />\n {showStepper && (\n <span className=\"input-number-stepper\" aria-hidden>\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"input-number-step\"\n disabled={disabled || readOnly}\n onMouseDown={(e) => {\n e.preventDefault();\n stepBy(1);\n }}\n >\n <ChevronUp size={12} aria-hidden />\n </button>\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"input-number-step\"\n disabled={disabled || readOnly}\n onMouseDown={(e) => {\n e.preventDefault();\n stepBy(-1);\n }}\n >\n <ChevronDown size={12} aria-hidden />\n </button>\n </span>\n )}\n </span>\n );\n },\n);\n","import { createContext, useContext, type ComponentProps } from \"react\";\nimport {\n FormProvider,\n useForm,\n useFormContext,\n type DefaultValues,\n type FieldValues,\n type Resolver,\n type UseFormProps,\n type UseFormReturn,\n} from \"react-hook-form\";\nimport { cn } from \"../cn\";\nimport type { LoadingProp } from \"../../props\";\n\nexport type FormLayout = \"vertical\" | \"horizontal\" | \"inline\";\n\nexport interface FormProps<T extends FieldValues = FieldValues>\n extends Omit<ComponentProps<\"form\">, \"onSubmit\" | \"defaultValue\"> {\n form?: UseFormReturn<T>;\n defaultValues?: DefaultValues<T>;\n resolver?: Resolver<T>;\n mode?: UseFormProps<T>[\"mode\"];\n onSubmit?: (values: T) => void | Promise<void>;\n /** Visual layout. Mobile-first: every layout collapses to vertical at `xs`;\n * `horizontal` becomes label-left at `md`, `inline` becomes single-row at `sm`. */\n layout?: FormLayout;\n /** When set, every `<FormField>` inside this form renders its loading\n * state (spinner by default, skeleton via `{ kind: \"skeleton\" }`).\n * Each `<FormField>` can override with its own `loading` prop. */\n loading?: LoadingProp;\n}\n\ninterface FormLoadingContext {\n loading: LoadingProp | undefined;\n}\nconst FormLoadingCtx = createContext<FormLoadingContext>({ loading: undefined });\n\n/** Read the surrounding Form's loading state (used by `<FormField>`). */\nexport function useFormLoading(): LoadingProp | undefined {\n return useContext(FormLoadingCtx).loading;\n}\n\nexport function Form<T extends FieldValues>({\n form,\n defaultValues,\n resolver,\n mode = \"onTouched\",\n onSubmit,\n layout = \"vertical\",\n loading,\n className,\n children,\n ...rest\n}: FormProps<T>) {\n const local = useForm<T>({\n defaultValues,\n resolver,\n mode,\n });\n const active = form ?? local;\n return (\n <FormProvider {...active}>\n <FormLoadingCtx.Provider value={{ loading }}>\n <form\n className={cn(\"form\", `form-${layout}`, className)}\n onSubmit={onSubmit ? active.handleSubmit(onSubmit) : undefined}\n noValidate\n {...rest}\n >\n {children}\n </form>\n </FormLoadingCtx.Provider>\n </FormProvider>\n );\n}\n\nexport { useFormContext };\n","import { forwardRef } from \"react\"\nimport type { HTMLAttributes } from \"react\"\nimport { cn } from \"../cn\"\n\n// Skeleton — loading placeholder atom.\n//\n// Renders the canonical `.skeleton` class from tokens.css\n// (animate-skeleton + muted background). Use in place of any\n// content that is loading from the network. Works at any size;\n// set w-* and h-* via className.\n//\n// @example\n// <Skeleton className=\"h-8 w-36 rounded-md\" />\n// <Skeleton className=\"h-4 w-full\" />\n\nexport type SkeletonProps = HTMLAttributes<HTMLDivElement>\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n aria-hidden\n className={cn(\"skeleton\", className)}\n {...props}\n />\n ),\n)\nSkeleton.displayName = \"Skeleton\"\n","import { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../cn\";\nimport type { ColorProp, IconSizeProp } from \"../../props\";\n\n/**\n * Spinner — small inline circular loading indicator.\n *\n * Renders the canonical `.spinner` family from shell.css. Uses\n * `border-top-color: var(--info)` rotation; respects\n * `prefers-reduced-motion` via the keyframe declaration in CSS.\n *\n * Size mapping:\n * - `sm` → 10px (inline with `.help` lines)\n * - `md` → 12px (default, inline with `.input` suffix slot)\n * - `lg` → 16px (inline with `.btn` content)\n *\n * The `tone` prop selects a semantic role: `info` (default), `muted`,\n * `primary`, `success`, `warning`, `destructive`. Each tone re-targets\n * `border-top-color` to the matching semantic variable via the\n * `.spinner-tone-*` class.\n *\n * @example\n * <Spinner />\n * <Spinner size=\"large\" tone=\"primary\" aria-label=\"Saving…\" />\n */\n\n/** Alias of the shared `IconSizeProp` — Spinner is icon-symbol shaped. */\nexport type SpinnerSize = IconSizeProp;\n/**\n * Full semantic palette + `\"muted\"`. `default` falls back to `info`'s\n * CSS class for backwards compatibility (existing CSS chain was rooted\n * on info). `secondary` is excluded — it's Typography text-dimming\n * which doesn't translate to a rotating arc.\n */\nexport type SpinnerTone = Exclude<ColorProp, \"secondary\"> | \"muted\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n /** 10 / 12 / 16 px — defaults to `md`. */\n size?: SpinnerSize;\n /** Color role for the rotating arc; defaults to `info`. */\n tone?: SpinnerTone;\n /** Accessible label. When omitted, falls back to `aria-hidden`. */\n \"aria-label\"?: string;\n}\n\nconst SIZE_CLASS: Record<SpinnerSize, string> = {\n sm: \"spinner-sm\",\n md: \"\",\n lg: \"spinner-lg\",\n};\n\nconst TONE_CLASS: Record<SpinnerTone, string> = {\n default: \"\",\n info: \"\",\n muted: \"spinner-tone-muted\",\n primary: \"spinner-tone-primary\",\n success: \"spinner-tone-success\",\n warning: \"spinner-tone-warning\",\n destructive: \"spinner-tone-destructive\",\n attention: \"spinner-tone-attention\",\n};\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(\n function Spinner(\n { size = \"md\", tone = \"info\", className, role, ...rest },\n ref,\n ) {\n const label = rest[\"aria-label\"];\n const ariaProps = label\n ? { role: role ?? \"status\", \"aria-label\": label }\n : { \"aria-hidden\": true as const };\n return (\n <span\n ref={ref}\n className={cn(\n \"spinner\",\n SIZE_CLASS[size],\n TONE_CLASS[tone],\n className,\n )}\n {...ariaProps}\n {...rest}\n />\n );\n },\n);\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\nconst Root = PopoverPrimitive.Root\nconst Trigger = PopoverPrimitive.Trigger\n\nexport interface PopoverProps\n extends Omit<ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>, \"children\"> {\n trigger?: ReactNode\n children?: ReactNode\n align?: ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>[\"align\"]\n side?: ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>[\"side\"]\n sideOffset?: number\n className?: string\n contentProps?: Omit<ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>, \"children\">\n}\n\nexport const Popover = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n PopoverProps\n>(function Popover(\n {\n trigger,\n children,\n align = \"center\",\n side,\n sideOffset = 6,\n className,\n contentProps,\n ...rootProps\n },\n ref,\n) {\n if (trigger === undefined) {\n return <Root {...rootProps}>{children}</Root>\n }\n\n return (\n <Root {...rootProps}>\n <Trigger asChild>{trigger}</Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n {...contentProps}\n className={cn(\"popover-content\", className, contentProps?.className)}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </Root>\n )\n})\n","import { Command } from \"cmdk\"\nimport { forwardRef, useCallback, useEffect, useMemo, useState, type ChangeEvent } from \"react\"\nimport { Popover } from \"../data-display/Popover\"\nimport { cn } from \"../cn\"\n\nexport interface AutoCompleteOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface AutoCompleteProps {\n options: AutoCompleteOption[]\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n size?: \"small\" | \"default\" | \"large\"\n disabled?: boolean\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n allowCustomValue?: boolean\n className?: string\n}\n\nexport const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(\n function AutoComplete(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n size = \"default\",\n disabled,\n open,\n defaultOpen,\n onOpenChange,\n allowCustomValue = false,\n className,\n },\n ref,\n ) {\n const isControlled = value !== undefined\n const initialText = useMemo(() => {\n const seed = isControlled ? value : defaultValue\n if (!seed) return \"\"\n return options.find((option) => option.value === seed)?.label ?? seed\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n const [inputText, setInputText] = useState(initialText)\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false)\n const currentOpen = open ?? internalOpen\n const setOpen = useCallback(\n (next: boolean) => {\n if (open === undefined) setInternalOpen(next)\n onOpenChange?.(next)\n },\n [open, onOpenChange],\n )\n\n useEffect(() => {\n if (!isControlled) return\n const option = options.find((item) => item.value === value)\n if (option) setInputText(option.label)\n }, [isControlled, options, value])\n\n const filtered = useMemo(() => {\n const query = inputText.trim().toLowerCase()\n if (!query) return options\n return options.filter((option) =>\n option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query),\n )\n }, [inputText, options])\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value\n setInputText(next)\n onValueChange?.(next)\n if (!currentOpen) setOpen(true)\n }\n\n const commit = (picked: string) => {\n const option = options.find((item) => item.value === picked) ?? options.find((item) => item.label === picked)\n if (option) {\n setInputText(option.label)\n onValueChange?.(option.value)\n } else if (allowCustomValue) {\n setInputText(picked)\n onValueChange?.(picked)\n }\n setOpen(false)\n }\n\n const input = (\n <input\n ref={ref}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={currentOpen}\n aria-autocomplete=\"list\"\n disabled={disabled}\n placeholder={placeholder}\n value={inputText}\n onChange={handleChange}\n onFocus={() => !disabled && setOpen(true)}\n className={cn(\n \"input\",\n size === \"small\" && \"input-size-small\",\n size === \"large\" && \"input-size-large\",\n className,\n )}\n />\n )\n\n return (\n <Popover\n open={currentOpen}\n onOpenChange={setOpen}\n trigger={input}\n align=\"start\"\n sideOffset={4}\n className=\"combobox-content\"\n contentProps={{\n onOpenAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: (event) => event.preventDefault(),\n }}\n >\n <Command shouldFilter={false} className=\"combobox-command\">\n <Command.List className=\"combobox-list\">\n {filtered.length === 0 ? (\n <Command.Empty className=\"combobox-empty\">No matches</Command.Empty>\n ) : (\n filtered.map((option) => (\n <Command.Item\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className=\"combobox-item\"\n onSelect={commit}\n >\n {option.label}\n </Command.Item>\n ))\n )}\n </Command.List>\n </Command>\n </Popover>\n )\n },\n)\n","import { forwardRef, useCallback, useMemo, useState } from \"react\"\nimport { ChevronDown, ChevronRight } from \"lucide-react\"\nimport { cn } from \"../cn\"\nimport { Popover } from \"../data-display/Popover\"\n\n/**\n * Cascader — nested column navigation. Renders a Popover whose body\n * is a horizontal row of vertical columns. Each column lists the\n * options at that depth; clicking a non-leaf option expands the next\n * column to the right; clicking a leaf commits the path of values.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-style selection\n * (path is `string[]`; callback also receives the leaf option)\n * - `size` — \"small\" | \"default\" | \"large\"\n * - `open` / `defaultOpen` / `onOpenChange` — overlay state\n * - `disabled`, `placeholder`, `className`\n */\n\nexport interface CascaderOption {\n value: string\n label: string\n disabled?: boolean\n children?: CascaderOption[]\n}\n\nexport interface CascaderProps {\n options: CascaderOption[]\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (path: string[], leafOption: CascaderOption) => void\n placeholder?: string\n size?: \"small\" | \"default\" | \"large\"\n disabled?: boolean\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Display the full path as breadcrumb text or just the leaf label. */\n showFullPath?: boolean\n className?: string\n}\n\nfunction findPathLabels(options: CascaderOption[], path: string[]): string[] {\n const labels: string[] = []\n let cursor: CascaderOption[] | undefined = options\n for (const seg of path) {\n const hit: CascaderOption | undefined = cursor?.find((o) => o.value === seg)\n if (!hit) break\n labels.push(hit.label)\n cursor = hit.children\n }\n return labels\n}\n\nfunction findOptionByPath(options: CascaderOption[], path: string[]): CascaderOption | undefined {\n let cursor: CascaderOption[] | undefined = options\n let leaf: CascaderOption | undefined\n for (const seg of path) {\n leaf = cursor?.find((o) => o.value === seg)\n if (!leaf) return undefined\n cursor = leaf.children\n }\n return leaf\n}\n\nexport const Cascader = forwardRef<HTMLButtonElement, CascaderProps>(\n function Cascader(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder = \"Select\",\n size = \"default\",\n disabled,\n open,\n defaultOpen,\n onOpenChange,\n showFullPath = true,\n className,\n },\n ref,\n ) {\n const isControlled = value !== undefined\n const [internal, setInternal] = useState<string[]>(defaultValue ?? [])\n const currentPath = isControlled ? (value ?? []) : internal\n\n const [isOpenInternal, setIsOpenInternal] = useState<boolean>(defaultOpen ?? false)\n const isOpenControlled = open !== undefined\n const isOpen = isOpenControlled ? !!open : isOpenInternal\n\n const setIsOpen = useCallback(\n (next: boolean) => {\n if (!isOpenControlled) setIsOpenInternal(next)\n onOpenChange?.(next)\n },\n [isOpenControlled, onOpenChange],\n )\n\n // Active (hovering / expanding) path while navigating columns.\n const [activePath, setActivePath] = useState<string[]>(currentPath)\n\n // When opening, reset activePath to the committed currentPath.\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (next) setActivePath(currentPath)\n setIsOpen(next)\n },\n [currentPath, setIsOpen],\n )\n\n // Build the visible columns by walking activePath.\n const columns = useMemo(() => {\n const cols: CascaderOption[][] = [options]\n let cursor: CascaderOption[] | undefined = options\n for (const seg of activePath) {\n const hit: CascaderOption | undefined = cursor?.find((o) => o.value === seg)\n if (!hit || !hit.children || hit.children.length === 0) break\n cols.push(hit.children)\n cursor = hit.children\n }\n return cols\n }, [options, activePath])\n\n const handleOptionClick = (depth: number, option: CascaderOption) => {\n if (option.disabled) return\n const nextActive = [...activePath.slice(0, depth), option.value]\n const hasChildren = !!option.children && option.children.length > 0\n if (hasChildren) {\n setActivePath(nextActive)\n return\n }\n // Leaf — commit\n if (!isControlled) setInternal(nextActive)\n onValueChange?.(nextActive, option)\n setActivePath(nextActive)\n setIsOpen(false)\n }\n\n const labels = findPathLabels(options, currentPath)\n const triggerText = labels.length === 0\n ? \"\"\n : showFullPath\n ? labels.join(\" / \")\n : labels[labels.length - 1]\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={handleOpenChange}\n align=\"start\"\n sideOffset={4}\n className=\"cascader-content\"\n trigger={\n <button\n ref={ref}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={isOpen}\n disabled={disabled}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={cn(\n \"input\",\n \"cascader-trigger\",\n size === \"small\" && \"input-size-small\",\n size === \"large\" && \"input-size-large\",\n className,\n )}\n data-placeholder={triggerText === \"\" ? \"true\" : undefined}\n >\n <span className=\"cascader-trigger-text\">\n {triggerText === \"\" ? placeholder : triggerText}\n </span>\n <ChevronDown\n aria-hidden\n style={{ width: \"var(--spacing-4)\", height: \"var(--spacing-4)\", flexShrink: 0 }}\n />\n </button>\n }\n >\n <div className=\"cascader-columns\" role=\"tree\">\n {columns.map((column, depth) => (\n <ul key={depth} className=\"cascader-column\" role=\"group\">\n {column.map((option) => {\n const isActive = activePath[depth] === option.value\n const isSelected = currentPath[depth] === option.value && currentPath.length === depth + 1\n const hasChildren = !!option.children && option.children.length > 0\n return (\n <li\n key={option.value}\n className=\"cascader-option\"\n role=\"treeitem\"\n data-active={isActive ? \"true\" : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={option.disabled ? \"true\" : undefined}\n aria-expanded={hasChildren ? isActive : undefined}\n aria-disabled={option.disabled || undefined}\n onClick={() => handleOptionClick(depth, option)}\n >\n <span className=\"cascader-option-label\">{option.label}</span>\n {hasChildren ? (\n <ChevronRight\n aria-hidden\n className=\"cascader-option-chevron\"\n style={{ width: \"var(--spacing-3)\", height: \"var(--spacing-3)\" }}\n />\n ) : null}\n </li>\n )\n })}\n </ul>\n ))}\n </div>\n </Popover>\n )\n },\n)\n\n// Re-export the leaf-lookup helper for consumers that need it.\nexport const __cascaderFindOptionByPath = findOptionByPath\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check, Minus } from \"lucide-react\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\n// Glyph at 0.75rem (12px @ base) — 3/4 of the box's 1rem footprint,\n// matches the shadcn / Ant canonical ratio. Rem-based so the icon\n// rescales with the font-size axis alongside the box (rule 21).\nconst iconSize = { width: \"0.75rem\", height: \"0.75rem\" } as const\n\n// strokeWidth=3 (vs lucide's default 2) + absoluteStrokeWidth keeps\n// the check / minus glyphs legible after the SVG is scaled from its\n// 24-unit native viewBox down to 12px — at default 2 the stroke\n// thins to roughly 1px visual and reads as a hairline.\nconst strokeWidth = 3\n\n/**\n * Checkbox — tri-state capable (checked / unchecked / indeterminate).\n *\n * Two consumption modes (per cardinal rule 23 + rule 31 — no parallel\n * convenience wrappers):\n *\n * 1. With label (preferred, Ant canonical) — pass children as the\n * label text:\n *\n * <Checkbox defaultChecked>利用規約に同意する</Checkbox>\n *\n * The primitive wraps the box + label in a single `<label>` so\n * clicking the text toggles the checkbox, ARIA labelling is\n * automatic, and the consumer never writes\n * `<label><Checkbox /><span>…</span></label>` ceremony.\n *\n * 2. Box-only (advanced) — no children. Use when the label lives\n * elsewhere (table cell header, custom layout) and you wire\n * `aria-labelledby` / `aria-label` yourself:\n *\n * <th><Checkbox aria-label=\"Select all\" /></th>\n *\n * Uses `.checkbox-*` classes from tokens.css. The box is 1rem (16px\n * @ base) per industry canon (shadcn / Ant / Tailwind).\n */\n\nexport interface CheckboxProps\n extends ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n /** Label text rendered to the right of the box. When provided, the\n * primitive wraps both in a single `<label>` so clicking the text\n * toggles the checkbox. */\n children?: ReactNode\n /** Class merged onto the OUTER `<label>` when `children` is set,\n * or onto the box `<button>` otherwise. */\n className?: string\n /** Class merged onto the inner box (when `children` is set). */\n boxClassName?: string\n}\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(function Checkbox({ className, boxClassName, children, ...rest }, ref) {\n const box = (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\"checkbox-root\", children === undefined ? className : boxClassName)}\n {...rest}\n >\n <CheckboxPrimitive.Indicator className=\"checkbox-indicator\">\n <Check\n className=\"checkbox-glyph-check\"\n aria-hidden\n strokeWidth={strokeWidth}\n absoluteStrokeWidth\n style={iconSize}\n />\n <Minus\n className=\"checkbox-glyph-indeterminate\"\n aria-hidden\n strokeWidth={strokeWidth}\n absoluteStrokeWidth\n style={iconSize}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n\n if (children === undefined) return box\n\n return (\n <label className={cn(\"checkbox-label\", className)}>\n {box}\n <span className=\"checkbox-label-text\">{children}</span>\n </label>\n )\n})\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\"\nimport { Checkbox } from \"./Checkbox\"\nimport { cn } from \"../cn\"\n\n/**\n * CheckboxGroup — wraps a set of `<Checkbox value=\"…\" />` items into a\n * single selection axis. Compositional (children) OR data-driven\n * (`options`) per cardinal rule 23 §A — one concept per prop.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-style\n * controlled / uncontrolled selection (array of selected values).\n * NEVER `checked` / `selectedKeys` aliases.\n * - `orientation` — \"horizontal\" (default) | \"vertical\".\n * - `size` — \"small\" | \"default\" | \"large\" (forwarded via context).\n * - `disabled` — applies to every item.\n *\n * Visual contract lives in `.checkbox-group` (shell.css) — flex\n * direction flips on `data-orientation`.\n */\n\nexport type CheckboxGroupSize = \"small\" | \"default\" | \"large\"\nexport type CheckboxGroupOrientation = \"horizontal\" | \"vertical\"\n\nexport interface CheckboxOption {\n value: string\n label: ReactNode\n disabled?: boolean\n}\n\nexport interface CheckboxGroupProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\" | \"onChange\"> {\n /** Data-driven items. Alternative to passing `<Checkbox value=\"…\" />` children. */\n options?: CheckboxOption[]\n /** Compositional children when `options` is omitted. */\n children?: ReactNode\n /** Controlled selection. */\n value?: string[]\n /** Uncontrolled initial selection. */\n defaultValue?: string[]\n /** Fires whenever the selection set changes. */\n onValueChange?: (value: string[]) => void\n orientation?: CheckboxGroupOrientation\n /** Disable every item in the group. */\n disabled?: boolean\n size?: CheckboxGroupSize\n /** Form name for native submission (mirrors RadioGroup). */\n name?: string\n}\n\ninterface CheckboxGroupCtx {\n value: string[]\n toggle: (v: string) => void\n disabled: boolean\n size: CheckboxGroupSize\n name?: string\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupCtx | null>(null)\n\n/** Internal hook — `<Checkbox value=\"…\" />` consumes it. */\nexport function useCheckboxGroup(): CheckboxGroupCtx | null {\n return useContext(CheckboxGroupContext)\n}\n\nexport const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n function CheckboxGroup(\n {\n options,\n children,\n value: controlled,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n disabled = false,\n size = \"default\",\n name,\n className,\n ...rest\n },\n ref,\n ) {\n const [uncontrolled, setUncontrolled] = useState<string[]>(\n defaultValue ?? [],\n )\n const isControlled = controlled !== undefined\n const value = isControlled ? controlled : uncontrolled\n\n const toggle = useCallback(\n (v: string) => {\n const next = value.includes(v)\n ? value.filter((x) => x !== v)\n : [...value, v]\n if (!isControlled) setUncontrolled(next)\n onValueChange?.(next)\n },\n [value, isControlled, onValueChange],\n )\n\n const ctx = useMemo<CheckboxGroupCtx>(\n () => ({ value, toggle, disabled, size, name }),\n [value, toggle, disabled, size, name],\n )\n\n return (\n <CheckboxGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"group\"\n data-orientation={orientation}\n data-size={size}\n className={cn(\"checkbox-group\", className)}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <CheckboxGroupItem\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n >\n {opt.label}\n </CheckboxGroupItem>\n ))\n : children}\n </div>\n </CheckboxGroupContext.Provider>\n )\n },\n)\n\n/**\n * Internal item — labelled checkbox bound to the group context.\n * When CheckboxGroup is `options`-driven we render this; consumers\n * using the compositional form import `Checkbox` directly and pass\n * `value`, which routes through the same context.\n */\ninterface CheckboxGroupItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction CheckboxGroupItem({\n value,\n disabled,\n children,\n}: CheckboxGroupItemProps) {\n const ctx = useContext(CheckboxGroupContext)\n if (!ctx) return null\n const checked = ctx.value.includes(value)\n const isDisabled = disabled ?? ctx.disabled\n return (\n <label className=\"checkbox-group-item\" data-disabled={isDisabled || undefined}>\n <Checkbox\n checked={checked}\n disabled={isDisabled}\n onCheckedChange={() => ctx.toggle(value)}\n name={ctx.name}\n value={value}\n />\n <span className=\"checkbox-group-item-label\">{children}</span>\n </label>\n )\n}\n","import {\n forwardRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from \"react\";\nimport { Popover } from \"../data-display/Popover\";\nimport { cn } from \"../cn\";\n\n/**\n * ColorPicker — decorative color-selection trigger + popover panel.\n *\n * <ColorPicker defaultValue=\"#3b82f6\" presets={[\"#ef4444\", \"#10b981\"]} />\n *\n * Modeled on Input/Popconfirm prop shape per cardinal rule 23 §D.4.\n * The trigger is a `.colorpicker-trigger` button (swatch + hex label);\n * the popover hosts a native `<input type=\"color\">` canvas plus a hex\n * text input + preset swatch grid.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-style state\n * - `size` — `\"small\" | \"default\" | \"large\"` (matches Input)\n * - `disabled` — boolean\n * - `open` / `defaultOpen` / `onOpenChange` — popover state\n * - `presets` — configurable hex list\n * - `showAlpha` — toggle alpha slider (0..1)\n *\n * Never uses Ant's `format` / `mode` aliases — `value` is always a hex\n * string (with optional `#rrggbbaa` when `showAlpha` is true).\n */\n\nexport type ColorPickerSize = \"small\" | \"default\" | \"large\";\n\nexport interface ColorPickerProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (hex: string) => void;\n presets?: string[];\n showAlpha?: boolean;\n size?: ColorPickerSize;\n disabled?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n}\n\nconst SIZE_CLASS: Record<ColorPickerSize, string> = {\n small: \"input-size-small\",\n default: \"\",\n large: \"input-size-large\",\n};\n\nconst HEX_RGB_RE = /^#?([0-9a-fA-F]{6})$/;\nconst HEX_RGBA_RE = /^#?([0-9a-fA-F]{8})$/;\n\nfunction normalizeHex(raw: string, showAlpha: boolean): string | null {\n const value = raw.trim();\n if (!value) return null;\n if (showAlpha && HEX_RGBA_RE.test(value)) {\n return `#${value.replace(/^#/, \"\").toLowerCase()}`;\n }\n if (HEX_RGB_RE.test(value)) {\n return `#${value.replace(/^#/, \"\").toLowerCase()}`;\n }\n return null;\n}\n\nfunction pickerHex(value: string): string {\n // <input type=\"color\"> only accepts #rrggbb — strip alpha.\n const m = value.match(/^#([0-9a-fA-F]{6})/);\n return m ? `#${m[1]}` : \"#000000\";\n}\n\nfunction alphaOf(value: string): number {\n const m = value.match(/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})$/);\n if (!m) return 1;\n return parseInt(m[1], 16) / 255;\n}\n\nfunction applyAlpha(hex: string, alpha: number): string {\n const base = pickerHex(hex);\n const a = Math.round(Math.max(0, Math.min(1, alpha)) * 255)\n .toString(16)\n .padStart(2, \"0\");\n return `${base}${a}`;\n}\n\nexport const ColorPicker = forwardRef<HTMLButtonElement, ColorPickerProps>(\n function ColorPicker(\n {\n value,\n defaultValue = \"#3b82f6\",\n onValueChange,\n presets,\n showAlpha = false,\n size = \"default\",\n disabled = false,\n open,\n defaultOpen,\n onOpenChange,\n className,\n },\n ref,\n ) {\n const [internalValue, setInternalValue] = useState<string>(defaultValue);\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const isOpenControlled = open !== undefined;\n const currentOpen = isOpenControlled ? open : internalOpen;\n\n const [hexDraft, setHexDraft] = useState<string>(currentValue);\n\n const commit = (next: string) => {\n if (!isControlled) setInternalValue(next);\n setHexDraft(next);\n onValueChange?.(next);\n };\n\n const setOpen = (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const handlePickerChange = (event: ChangeEvent<HTMLInputElement>) => {\n const base = event.target.value;\n const next = showAlpha\n ? applyAlpha(base, alphaOf(currentValue))\n : base.toLowerCase();\n commit(next);\n };\n\n const handleHexInput = (event: ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value;\n setHexDraft(raw);\n const normalized = normalizeHex(raw, showAlpha);\n if (normalized) commit(normalized);\n };\n\n const handleAlphaChange = (event: ChangeEvent<HTMLInputElement>) => {\n const alpha = Number(event.target.value);\n commit(applyAlpha(currentValue, alpha));\n };\n\n return (\n <Popover\n open={currentOpen}\n onOpenChange={disabled ? undefined : setOpen}\n align=\"start\"\n className=\"colorpicker-panel\"\n trigger={\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n data-disabled={disabled || undefined}\n className={cn(\n \"colorpicker-trigger\",\n SIZE_CLASS[size],\n className,\n )}\n aria-label=\"Choose color\"\n >\n <span\n className=\"colorpicker-swatch\"\n style={{ background: currentValue }}\n aria-hidden\n />\n <span className=\"colorpicker-trigger-label\">{currentValue}</span>\n </button>\n }\n >\n <div\n className=\"colorpicker-preview\"\n style={{ background: currentValue }}\n aria-hidden\n />\n <input\n type=\"color\"\n value={pickerHex(currentValue)}\n onChange={handlePickerChange}\n className=\"colorpicker-canvas\"\n aria-label=\"Color canvas\"\n />\n {showAlpha && (\n <input\n type=\"range\"\n min={0}\n max={1}\n step={0.01}\n value={alphaOf(currentValue)}\n onChange={handleAlphaChange}\n className=\"colorpicker-alpha\"\n aria-label=\"Alpha channel\"\n />\n )}\n <input\n type=\"text\"\n value={hexDraft}\n onChange={handleHexInput}\n className={cn(\"input\", \"colorpicker-hex\")}\n spellCheck={false}\n aria-label=\"Hex value\"\n />\n {presets && presets.length > 0 && (\n <div className=\"colorpicker-presets\" role=\"listbox\" aria-label=\"Preset colors\">\n {presets.map((preset) => {\n const selected =\n preset.toLowerCase() === currentValue.toLowerCase();\n return (\n <button\n key={preset}\n type=\"button\"\n className=\"colorpicker-preset\"\n role=\"option\"\n aria-selected={selected}\n data-selected={selected || undefined}\n style={{ background: preset }}\n onClick={() => commit(preset)}\n aria-label={preset}\n />\n );\n })}\n </div>\n )}\n </Popover>\n );\n },\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport type ColorPickerTriggerNode = ReactNode;\n","import { forwardRef } from \"react\";\nimport type {\n HTMLAttributes,\n LabelHTMLAttributes,\n ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\nexport interface FieldProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n help?: ReactNode;\n description?: ReactNode;\n count?: { current: number; max?: number; warnAt?: number };\n required?: boolean;\n optional?: boolean;\n optionalLabel?: ReactNode;\n tone?: FieldHelpTone;\n children: ReactNode;\n}\n\nexport const Field = forwardRef<HTMLDivElement, FieldProps>(function Field(\n {\n className,\n label,\n help,\n description,\n count,\n required,\n optional,\n optionalLabel,\n tone,\n children,\n ...rest\n },\n ref,\n) {\n const helpContent = help ?? description;\n return (\n <div ref={ref} className={cn(\"field\", className)} {...rest}>\n {label !== undefined && (\n <LabelControl\n required={required}\n optional={optional}\n optionalLabel={optionalLabel}\n >\n {label}\n </LabelControl>\n )}\n {children}\n {(helpContent !== undefined || count !== undefined) && (\n <div className={count !== undefined ? \"row-help\" : undefined}>\n {helpContent !== undefined && (\n <HelpText tone={tone}>{helpContent}</HelpText>\n )}\n {count !== undefined && <CountText {...count} />}\n </div>\n )}\n </div>\n );\n});\n\n// ─── Field.Label ──────────────────────────────────────────────────────\n\nexport interface FieldLabelProps\n extends LabelHTMLAttributes<HTMLLabelElement> {\n /** Append a red asterisk (`<span class=\"req\">*</span>`). */\n required?: boolean;\n /** Append a \"(optional)\" marker (`<span class=\"opt\">(任意)</span>`). */\n optional?: boolean;\n /** Optional label for the optional badge — defaults to \"(任意)\". */\n optionalLabel?: ReactNode;\n /** Inline help icon — typically a tooltip handle. Provide a `<span>` or `<button>`. */\n info?: ReactNode;\n /** Trailing slot at the right edge (e.g. an inline \"Forgot password?\" link). */\n extra?: ReactNode;\n}\n\nconst LabelControl = forwardRef<HTMLLabelElement, FieldLabelProps>(\n function LabelControl(\n {\n className,\n children,\n required,\n optional,\n optionalLabel = \"(任意)\",\n info,\n extra,\n ...rest\n },\n ref,\n ) {\n return (\n <label ref={ref} className={cn(className)} {...rest}>\n <span>{children}</span>\n {required && <span className=\"req\">*</span>}\n {optional && <span className=\"opt\">{optionalLabel}</span>}\n {info !== undefined && <span className=\"info\">{info}</span>}\n {extra !== undefined && (\n <>\n <span className=\"spacer\" />\n {extra}\n </>\n )}\n </label>\n );\n },\n);\n\n// ─── Field.Help ───────────────────────────────────────────────────────\n\nexport type FieldHelpTone = \"default\" | \"info\" | \"warn\" | \"error\" | \"success\";\n\nexport interface FieldHelpProps extends HTMLAttributes<HTMLDivElement> {\n tone?: FieldHelpTone;\n /** Sets tone to `error` — shortcut. */\n error?: boolean;\n /** Sets tone to `warn` — shortcut. */\n warning?: boolean;\n /** Sets tone to `info` — shortcut. */\n info?: boolean;\n /** Sets tone to `success` — shortcut. */\n success?: boolean;\n /** Leading icon slot. */\n icon?: ReactNode;\n}\n\nconst TONE_CLASS: Record<FieldHelpTone, string> = {\n default: \"\",\n info: \"info\",\n warn: \"warn\",\n error: \"err\",\n success: \"ok\",\n};\n\nconst HelpText = forwardRef<HTMLDivElement, FieldHelpProps>(function HelpText(\n {\n className,\n tone,\n error,\n warning,\n info,\n success,\n icon,\n children,\n ...rest\n },\n ref,\n) {\n const resolved: FieldHelpTone =\n tone ??\n (error ? \"error\" : warning ? \"warn\" : info ? \"info\" : success ? \"success\" : \"default\");\n return (\n <div\n ref={ref}\n className={cn(\"help\", TONE_CLASS[resolved], className)}\n {...rest}\n >\n {icon}\n {children}\n </div>\n );\n});\n\n// ─── Field.Count ──────────────────────────────────────────────────────\n\nexport interface FieldCountProps extends HTMLAttributes<HTMLDivElement> {\n current: number;\n max?: number;\n /** Threshold (0–1) above which the count flips to \"warn\" tone. Default `0.9`. */\n warnAt?: number;\n}\n\nconst CountText = forwardRef<HTMLDivElement, FieldCountProps>(\n function CountText(\n { className, current, max, warnAt = 0.9, ...rest },\n ref,\n ) {\n const over = typeof max === \"number\" && current > max;\n const near =\n typeof max === \"number\" &&\n !over &&\n current >= Math.floor(max * warnAt);\n return (\n <div\n ref={ref}\n className={cn(\n \"count\",\n near && \"warn\",\n over && \"over\",\n className,\n )}\n {...rest}\n >\n {typeof max === \"number\" ? `${current} / ${max}` : current}\n </div>\n );\n },\n);\n","/**\n * Shared `loading` prop-vocabulary for Form / FormField / data-entry\n * primitives.\n *\n * loading={true} → spinner (default kind)\n * loading={false} → off\n * loading={{ kind: \"skeleton\" }} → skeleton placeholder (use for\n * \"data is being fetched the\n * first time\" — UX nuance)\n * loading={{ kind: \"spinner\",\n * label: \"保存中...\" }} → spinner with aria-label\n *\n * Cascade rules:\n * - <Form loading={…}> sets a default for every <FormField> inside.\n * - <FormField loading={…}> overrides the Form default for that field.\n * - A primitive's own `loading` prop overrides both.\n */\n\nexport type LoadingKind = \"spinner\" | \"skeleton\";\n\nexport interface LoadingOptions {\n /** Default `\"spinner\"`. */\n kind?: LoadingKind;\n /** Accessible label announced to screen readers. */\n label?: string;\n}\n\nexport type LoadingProp = boolean | LoadingOptions;\n\nexport interface NormalizedLoading {\n active: boolean;\n kind: LoadingKind;\n label?: string;\n}\n\n/**\n * Coerce the union shape into `{active, kind, label}` so consumers can\n * branch on a single object instead of repeating `typeof prop === …`.\n */\nexport function normalizeLoading(\n prop: LoadingProp | undefined,\n defaultKind: LoadingKind = \"spinner\",\n): NormalizedLoading {\n if (prop === undefined || prop === false) {\n return { active: false, kind: defaultKind };\n }\n if (prop === true) return { active: true, kind: defaultKind };\n return {\n active: true,\n kind: prop.kind ?? defaultKind,\n label: prop.label,\n };\n}\n","import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport {\n createContext,\n forwardRef,\n useContext,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Radio + RadioGroup — Radix-backed single-select group. Compositional\n * (`<Radio value=\"…\" />` children) OR data-driven (`options`) per\n * cardinal rule 23 §A.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-canonical\n * selection (the GROUP exposes the value; individual items\n * internally use Radix's `checked` data-state).\n * - `orientation` — \"horizontal\" (default) | \"vertical\".\n * - `size` — \"small\" | \"default\" | \"large\".\n * - `disabled` — applies to the whole group OR per-item.\n * - `name` — native form name.\n *\n * Visual contract: `.radio-group` + `.radio-root` + `.radio-indicator`\n * in shell.css. State flows via Radix `data-state=\"checked\"`.\n */\n\nexport type RadioGroupSize = \"small\" | \"default\" | \"large\"\nexport type RadioGroupOrientation = \"horizontal\" | \"vertical\"\n\nexport interface RadioOption {\n value: string\n label: ReactNode\n disabled?: boolean\n}\n\nexport interface RadioGroupProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>,\n \"orientation\"\n > {\n /** Data-driven items. */\n options?: RadioOption[]\n /** Compositional children when `options` is omitted. */\n children?: ReactNode\n orientation?: RadioGroupOrientation\n size?: RadioGroupSize\n}\n\ninterface RadioGroupCtx {\n size: RadioGroupSize\n}\n\nconst RadioGroupContext = createContext<RadioGroupCtx>({ size: \"default\" })\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(function RadioGroup(\n {\n options,\n children,\n orientation = \"horizontal\",\n size = \"default\",\n className,\n ...rest\n },\n ref,\n) {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <RadioGroupPrimitive.Root\n ref={ref}\n orientation={orientation}\n data-orientation={orientation}\n data-size={size}\n className={cn(\"radio-group\", className)}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <Radio key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </Radio>\n ))\n : children}\n </RadioGroupPrimitive.Root>\n </RadioGroupContext.Provider>\n )\n})\n\nexport interface RadioProps {\n value: string\n disabled?: boolean\n children?: ReactNode\n className?: string\n id?: string\n}\n\nexport const Radio = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioProps\n>(function Radio({ value, disabled, children, className, id }, ref) {\n const { size } = useContext(RadioGroupContext)\n return (\n <label\n className=\"radio-group-item\"\n data-disabled={disabled || undefined}\n data-size={size}\n >\n <RadioGroupPrimitive.Item\n ref={ref}\n value={value}\n disabled={disabled}\n id={id}\n className={cn(\"radio-root\", className)}\n >\n <RadioGroupPrimitive.Indicator className=\"radio-indicator\" />\n </RadioGroupPrimitive.Item>\n {children !== undefined ? (\n <span className=\"radio-group-item-label\">{children}</span>\n ) : null}\n </label>\n )\n})\n","import {\n forwardRef,\n useState,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { Star, StarHalf } from \"lucide-react\";\nimport { cn } from \"../cn\";\n\n/**\n * Rate — star-rating primitive (decorative input).\n *\n * <Rate defaultValue={3.5} allowHalf />\n * <Rate value={4} count={5} onValueChange={setRating} />\n * <Rate value={4} icon={<Heart />} />\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-style state\n * - `size` — `\"small\" | \"default\" | \"large\"` (svg sized via CSS)\n * - `disabled` — boolean\n * - `readOnly` — display-only (matches Input)\n * - `count` — how many icons (default 5)\n * - `allowHalf` — left-half-click commits 0.5 step\n * - `icon` slot — custom icon node (per cardinal rule 23 §B `icon`\n * slot — NEVER Ant's `character`)\n *\n * The rendered row uses lucide `Star` filled vs hollow (and `StarHalf`\n * when `allowHalf` resolves to a 0.5 fraction). When `icon` is\n * provided, the custom node is reused for filled / hollow alike with\n * `data-filled` driving the color via CSS.\n */\n\nexport type RateSize = \"small\" | \"default\" | \"large\";\n\nexport interface RateProps {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n /** Max number of stars (default 5). */\n count?: number;\n allowHalf?: boolean;\n /** Render a custom icon instead of Star. */\n icon?: ReactNode;\n size?: RateSize;\n disabled?: boolean;\n /** Read-only display (no hover effect). */\n readOnly?: boolean;\n className?: string;\n}\n\nconst SIZE_CLASS: Record<RateSize, string> = {\n small: \"rate-size-small\",\n default: \"rate-size-default\",\n large: \"rate-size-large\",\n};\n\nexport const Rate = forwardRef<HTMLDivElement, RateProps>(function Rate(\n {\n value,\n defaultValue = 0,\n onValueChange,\n count = 5,\n allowHalf = false,\n icon,\n size = \"default\",\n disabled = false,\n readOnly = false,\n className,\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState<number>(defaultValue);\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n const displayValue = hoverValue ?? currentValue;\n\n const commit = (next: number) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n const interactive = !disabled && !readOnly;\n\n const handleClick = (index: number, event: MouseEvent<HTMLButtonElement>) => {\n if (!interactive) return;\n const next =\n allowHalf && isLeftHalf(event)\n ? index - 0.5\n : index;\n commit(next);\n };\n\n const handleHover = (index: number, event: MouseEvent<HTMLButtonElement>) => {\n if (!interactive) return;\n const next =\n allowHalf && isLeftHalf(event)\n ? index - 0.5\n : index;\n setHoverValue(next);\n };\n\n const handleLeave = () => {\n if (!interactive) return;\n setHoverValue(null);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"rate\", SIZE_CLASS[size], className)}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n role=\"radiogroup\"\n aria-label=\"Rating\"\n onMouseLeave={handleLeave}\n >\n {Array.from({ length: count }, (_, i) => {\n const index = i + 1;\n const filled = displayValue >= index;\n const half =\n allowHalf && !filled && displayValue >= index - 0.5;\n return (\n <button\n key={index}\n type=\"button\"\n className=\"rate-star\"\n data-filled={filled || undefined}\n data-half={half || undefined}\n disabled={disabled}\n aria-checked={Math.ceil(currentValue) === index}\n role=\"radio\"\n aria-label={`${index} of ${count}`}\n onClick={(event) => handleClick(index, event)}\n onMouseMove={(event) => handleHover(index, event)}\n >\n {renderIcon({ icon, filled, half })}\n </button>\n );\n })}\n </div>\n );\n});\n\nRate.displayName = \"Rate\";\n\nfunction isLeftHalf(event: MouseEvent<HTMLButtonElement>): boolean {\n const rect = event.currentTarget.getBoundingClientRect();\n return event.clientX - rect.left < rect.width / 2;\n}\n\nfunction renderIcon(args: {\n icon: ReactNode;\n filled: boolean;\n half: boolean;\n}): ReactNode {\n if (args.icon !== undefined) {\n return args.icon;\n }\n if (args.half) {\n return <StarHalf fill=\"currentColor\" strokeWidth={1.5} aria-hidden />;\n }\n if (args.filled) {\n return <Star fill=\"currentColor\" strokeWidth={1.5} aria-hidden />;\n }\n return <Star fill=\"none\" strokeWidth={1.5} aria-hidden />;\n}\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Command } from \"cmdk\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport {\n forwardRef,\n Fragment,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\";\nimport { Popover } from \"../data-display/Popover\";\nimport { cn } from \"../cn\";\n\n/**\n * Select — single-select picker.\n *\n * <Select options={[…]} value={…} onValueChange={…} placeholder=\"…\" />\n *\n * Pass `searchable` for a filterable variant backed by cmdk + Popover\n * (replaces the former standalone Combobox primitive):\n *\n * <Select options={…} value={…} onValueChange={…} searchable\n * searchPlaceholder=\"Find…\" emptyLabel=\"No matches\" />\n */\n\nexport interface SelectOption {\n value: string;\n /** Display content — usually a string, but ReactNode is fine for\n * icon + label compositions. When `searchable`, string labels are\n * used as filter keywords automatically. */\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n label: ReactNode;\n options: SelectOption[];\n}\n\nexport type SelectOptions = ReadonlyArray<SelectOption | SelectOptionGroup>;\n\nexport interface SelectProps\n extends Omit<\n ComponentPropsWithoutRef<typeof SelectPrimitive.Root>,\n \"children\"\n > {\n options: SelectOptions;\n placeholder?: ReactNode;\n triggerClassName?: string;\n contentClassName?: string;\n /** Render a searchable variant (cmdk + Popover) instead of Radix Select. */\n searchable?: boolean;\n /** Search input placeholder (searchable mode only). */\n searchPlaceholder?: string;\n /** Shown when the filter matches nothing (searchable mode only). */\n emptyLabel?: ReactNode;\n /** Render a disabled loading row instead of options (searchable mode only). */\n loading?: boolean;\n /** Loading row text (searchable mode only). */\n loadingLabel?: ReactNode;\n}\n\nfunction isOptionGroup(\n opt: SelectOption | SelectOptionGroup,\n): opt is SelectOptionGroup {\n return Array.isArray((opt as SelectOptionGroup).options);\n}\n\nfunction flattenOptions(options: SelectOptions): SelectOption[] {\n const out: SelectOption[] = [];\n for (const opt of options) {\n if (isOptionGroup(opt)) out.push(...opt.options);\n else out.push(opt);\n }\n return out;\n}\n\nexport function Select({\n options,\n placeholder,\n triggerClassName,\n contentClassName,\n searchable,\n searchPlaceholder,\n emptyLabel,\n loading,\n loadingLabel = \"Loading…\",\n ...rest\n}: SelectProps) {\n if (searchable) {\n return (\n <SearchableSelect\n options={options}\n placeholder={placeholder}\n triggerClassName={triggerClassName}\n contentClassName={contentClassName}\n searchPlaceholder={searchPlaceholder}\n emptyLabel={emptyLabel}\n loading={loading}\n loadingLabel={loadingLabel}\n {...rest}\n />\n );\n }\n return (\n <SelectPrimitive.Root {...rest}>\n <Trigger className={triggerClassName}>\n <SelectPrimitive.Value placeholder={placeholder} />\n </Trigger>\n <Content className={contentClassName}>\n {options.map((opt, i) =>\n isOptionGroup(opt) ? (\n <Fragment key={`group-${i}`}>\n <SelectPrimitive.Group>\n <Label>{opt.label}</Label>\n {opt.options.map((leaf) => (\n <Item\n key={leaf.value}\n value={leaf.value}\n disabled={leaf.disabled}\n >\n {leaf.label}\n </Item>\n ))}\n </SelectPrimitive.Group>\n {i < options.length - 1 && <Separator />}\n </Fragment>\n ) : (\n <Item key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </Item>\n ),\n )}\n </Content>\n </SelectPrimitive.Root>\n );\n}\n\ninterface SearchableSelectProps\n extends Omit<SelectProps, \"searchable\"> {}\n\nfunction SearchableSelect({\n options,\n placeholder,\n triggerClassName,\n contentClassName,\n searchPlaceholder,\n emptyLabel,\n loading,\n loadingLabel,\n value,\n defaultValue,\n onValueChange,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disabled,\n name: _name,\n required: _required,\n dir: _dir,\n autoComplete: _autoComplete,\n ...rest\n}: SearchableSelectProps) {\n const isValueControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string | undefined>(\n defaultValue,\n );\n const currentValue = isValueControlled ? value : internalValue;\n\n const isOpenControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const open = isOpenControlled ? openProp : internalOpen;\n const setOpen = (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const selected = flattenOptions(options).find(\n (option) => option.value === currentValue,\n );\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n align=\"start\"\n sideOffset={4}\n className={cn(\"select-content\", contentClassName)}\n trigger={\n <button\n type=\"button\"\n className={cn(\"input\", \"select-trigger\", triggerClassName)}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n title={\n selected && typeof selected.label === \"string\"\n ? selected.label\n : undefined\n }\n >\n <span className={cn(\"select-trigger-text\", !selected && \"muted\")}>\n {selected ? selected.label : placeholder}\n </span>\n <ChevronDown\n className=\"muted\"\n aria-hidden\n style={{\n width: \"var(--spacing-4)\",\n height: \"var(--spacing-4)\",\n flexShrink: 0,\n }}\n />\n </button>\n }\n {...rest}\n >\n <Command className=\"combobox-command\">\n <Command.Input\n className=\"combobox-input\"\n placeholder={searchPlaceholder}\n />\n <Command.List className=\"combobox-list\">\n {loading ? (\n <Command.Item value=\"__loading\" disabled className=\"combobox-item\">\n {loadingLabel}\n </Command.Item>\n ) : (\n <>\n {emptyLabel !== undefined && (\n <Command.Empty className=\"combobox-empty\">\n {emptyLabel}\n </Command.Empty>\n )}\n {options.map((opt, i) =>\n isOptionGroup(opt) ? (\n <Command.Group\n key={`group-${i}`}\n heading={\n typeof opt.label === \"string\" ? opt.label : undefined\n }\n >\n {opt.options.map((leaf) => (\n <SearchableItem\n key={leaf.value}\n option={leaf}\n onSelect={(picked) => {\n if (!isValueControlled) setInternalValue(picked);\n onValueChange?.(picked);\n setOpen(false);\n }}\n />\n ))}\n </Command.Group>\n ) : (\n <SearchableItem\n key={opt.value}\n option={opt}\n onSelect={(picked) => {\n if (!isValueControlled) setInternalValue(picked);\n onValueChange?.(picked);\n setOpen(false);\n }}\n />\n ),\n )}\n </>\n )}\n </Command.List>\n </Command>\n </Popover>\n );\n}\n\nfunction SearchableItem({\n option,\n onSelect,\n}: {\n option: SelectOption;\n onSelect: (value: string) => void;\n}) {\n const keywords =\n typeof option.label === \"string\" ? [option.label] : undefined;\n return (\n <Command.Item\n value={option.value}\n keywords={keywords}\n disabled={option.disabled}\n className=\"combobox-item\"\n onSelect={onSelect}\n >\n {option.label}\n </Command.Item>\n );\n}\n\nconst Trigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(function Trigger({ className, children, ...rest }, ref) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\"input\", \"select-trigger\", className)}\n {...rest}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown\n className=\"muted\"\n aria-hidden\n style={{\n width: \"var(--spacing-4)\",\n height: \"var(--spacing-4)\",\n flexShrink: 0,\n }}\n />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nconst Content = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function Content(\n { className, children, position = \"popper\", sideOffset = 4, ...rest },\n ref,\n) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\"select-content\", className)}\n position={position}\n sideOffset={sideOffset}\n {...rest}\n >\n <ScrollUp>\n <ChevronUp\n aria-hidden\n style={{ width: \"var(--spacing-4)\", height: \"var(--spacing-4)\" }}\n />\n </ScrollUp>\n <SelectPrimitive.Viewport className=\"select-viewport\">\n {children}\n </SelectPrimitive.Viewport>\n <ScrollDown>\n <ChevronDown\n aria-hidden\n style={{ width: \"var(--spacing-4)\", height: \"var(--spacing-4)\" }}\n />\n </ScrollDown>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nconst Label = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(function Label({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"select-label\", className)}\n {...rest}\n />\n );\n});\n\nconst Item = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(function Item({ className, children, ...rest }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\"select-item\", className)}\n {...rest}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n});\n\nconst Separator = forwardRef<\n ElementRef<typeof SelectPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(function Separator({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"select-separator\", className)}\n {...rest}\n />\n );\n});\n\nconst ScrollUp = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(function ScrollUp({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"select-scroll-btn\", className)}\n {...rest}\n />\n );\n});\n\nconst ScrollDown = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(function ScrollDown({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"select-scroll-btn\", className)}\n {...rest}\n />\n );\n});\n","import * as SliderPrimitive from \"@radix-ui/react-slider\"\nimport {\n forwardRef,\n useMemo,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Slider — Radix-backed range input. Single-handle by default;\n * `range` flips to dual-handle.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-canonical\n * selection; scalar for single-handle, `[number, number]` for\n * `range`.\n * - `min` / `max` / `step` — HTML standards (not vocabulary).\n * - `disabled`, `orientation` — shared axes.\n * - `marks` — optional tick labels along the track.\n *\n * Visual contract: `.slider`, `.slider-track`, `.slider-range`,\n * `.slider-thumb` in shell.css. Vertical variant flips dimensions\n * via `data-orientation=\"vertical\"`.\n */\n\nexport interface SliderMark {\n value: number\n label?: ReactNode\n}\n\ntype SliderValue = number | [number, number]\n\nexport interface SliderProps\n extends Omit<\n ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"value\" | \"defaultValue\" | \"onValueChange\" | \"orientation\"\n > {\n value?: SliderValue\n defaultValue?: SliderValue\n onValueChange?: (value: SliderValue) => void\n min?: number\n max?: number\n step?: number\n /** Dual-handle when true; pass `[number, number]` for value. */\n range?: boolean\n disabled?: boolean\n orientation?: \"horizontal\" | \"vertical\"\n /** Optional tick marks rendered alongside the track. */\n marks?: SliderMark[]\n}\n\nfunction toArray(v: SliderValue | undefined): number[] | undefined {\n if (v === undefined) return undefined\n return Array.isArray(v) ? v : [v]\n}\n\nexport const Slider = forwardRef<\n ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(function Slider(\n {\n value,\n defaultValue,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n range = false,\n disabled,\n orientation = \"horizontal\",\n marks,\n className,\n ...rest\n },\n ref,\n) {\n const radixValue = useMemo(() => toArray(value), [value])\n const radixDefault = useMemo(\n () => toArray(defaultValue) ?? (range ? [min, max] : [min]),\n [defaultValue, range, min, max],\n )\n\n const handleChange = (next: number[]) => {\n if (!onValueChange) return\n if (range) {\n onValueChange([next[0] ?? min, next[1] ?? max])\n } else {\n onValueChange(next[0] ?? min)\n }\n }\n\n const thumbCount = range ? 2 : 1\n const span = max - min || 1\n\n // Pass controlled OR uncontrolled, never both. Even passing\n // `value={undefined}` alongside `defaultValue={…}` trips React's\n // controlled/uncontrolled transition warning at the inner Primitive\n // input level.\n const valueProp =\n radixValue !== undefined ? { value: radixValue } : { defaultValue: radixDefault }\n\n return (\n <div className=\"slider-wrap\" data-orientation={orientation}>\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\"slider\", className)}\n {...valueProp}\n onValueChange={handleChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n orientation={orientation}\n data-orientation={orientation}\n {...rest}\n >\n <SliderPrimitive.Track className=\"slider-track\">\n <SliderPrimitive.Range className=\"slider-range\" />\n </SliderPrimitive.Track>\n {Array.from({ length: thumbCount }).map((_, i) => (\n <SliderPrimitive.Thumb key={i} className=\"slider-thumb\" />\n ))}\n </SliderPrimitive.Root>\n {marks && marks.length > 0 ? (\n <div className=\"slider-marks\" data-orientation={orientation}>\n {marks.map((m) => {\n const pct = ((m.value - min) / span) * 100\n const style =\n orientation === \"vertical\"\n ? { bottom: `${pct}%` }\n : { left: `${pct}%` }\n return (\n <span key={m.value} className=\"slider-mark\" style={style}>\n <span className=\"slider-mark-dot\" aria-hidden />\n {m.label !== undefined ? (\n <span className=\"slider-mark-label\">{m.label}</span>\n ) : null}\n </span>\n )\n })}\n </div>\n ) : null}\n </div>\n )\n})\n","import * as SwitchPrimitive from \"@radix-ui/react-switch\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Switch — boolean toggle (Radix). Styled with `.switch-root` / `.switch-thumb`\n * in tokens.css.\n */\nexport const Switch = forwardRef<\n ElementRef<typeof SwitchPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(function Switch({ className, ...rest }, ref) {\n return (\n <SwitchPrimitive.Root ref={ref} className={cn(\"switch-root\", className)} {...rest}>\n <SwitchPrimitive.Thumb className=\"switch-thumb\" />\n </SwitchPrimitive.Root>\n )\n})\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, useEffect, useRef } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * IconButton — square button with icon-only content.\n *\n * Maps onto the canonical `.icon-btn` family in shell.css (matches the\n * `K:comp-pageheader.html` reference at lines 14–17): 32 × 32 box,\n * `--radius-sm`, hairline border + `--background` fill by default\n * (`secondary` variant), with `ghost` (transparent / borderless) and\n * `primary` (filled brand) modifiers.\n *\n * Sizes:\n * - `sm` → 28 px (compact toolbars)\n * - `default` → 32 px (page-header default)\n * - `lg` → 36 px (touch / hero contexts)\n *\n * Accessible-name requirement: an icon-only control MUST carry a\n * discoverable name via one of `aria-label` / `aria-labelledby` /\n * `title`. React's HTML types make these always optional, so the\n * component instead emits a `console.warn` in development when none\n * is supplied. Production builds (`process.env.NODE_ENV === \"production\"`)\n * skip the check.\n *\n * @example\n * <IconButton aria-label=\"戻る\"><ArrowLeft size={14} /></IconButton>\n * <IconButton variant=\"ghost\" aria-label=\"More\"><MoreHorizontal size={16} /></IconButton>\n * <IconButton variant=\"primary\" size=\"lg\" aria-label=\"Save\"><Check size={18} /></IconButton>\n */\n\nimport type { IconSizeProp } from \"../../props\";\n\nexport type IconButtonVariant = \"secondary\" | \"ghost\" | \"primary\";\n/** Alias of the shared `IconSizeProp` (`sm | md | lg`) — IconButton is\n * icon-symbol shaped, same axis as Spinner. Renamed `\"default\"` → `\"md\"`\n * so the verb stays consistent across icon-only primitives. */\nexport type IconButtonSize = IconSizeProp;\n\nexport interface IconButtonProps extends Omit<\n ComponentProps<\"button\">,\n \"children\"\n> {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n asChild?: boolean;\n children?: ReactNode;\n}\n\nconst VARIANT_CLASS: Record<IconButtonVariant, string> = {\n secondary: \"icon-btn-secondary\",\n ghost: \"icon-btn-ghost\",\n primary: \"icon-btn-primary\",\n};\n\nconst SIZE_CLASS: Record<IconButtonSize, string> = {\n sm: \"icon-btn-sm\",\n md: \"\",\n lg: \"icon-btn-lg\",\n};\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButton(\n {\n variant = \"secondary\",\n size = \"md\",\n asChild = false,\n className,\n type = \"button\",\n children,\n ...rest\n },\n ref,\n ) {\n // Dev-only accessible-name check. Stripped from production bundles\n // because `process.env.NODE_ENV !== \"production\"` collapses to\n // `false` in production builds and the dead branch is tree-shaken.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const warnedRef = useRef(false);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (process.env.NODE_ENV === \"production\") return;\n if (warnedRef.current) return;\n const props = rest as Record<string, unknown>;\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n const title = props.title;\n const hasName =\n (typeof ariaLabel === \"string\" && ariaLabel.trim() !== \"\") ||\n (typeof ariaLabelledBy === \"string\" && ariaLabelledBy.trim() !== \"\") ||\n (typeof title === \"string\" && title.trim() !== \"\");\n if (!hasName) {\n warnedRef.current = true;\n // eslint-disable-next-line no-console\n console.warn(\n \"[@godxjp/ui] <IconButton> is missing an accessible name. \" +\n \"Pass `aria-label`, `aria-labelledby`, or `title` so \" +\n \"screen-reader users can identify the control. \" +\n \"See docs/reference/data-display/IconButton.md#accessibility.\",\n );\n }\n }, [rest]);\n\n const Component = asChild ? Slot : \"button\";\n return (\n <Component\n ref={ref}\n type={asChild ? undefined : type}\n className={cn(\n \"icon-btn\",\n VARIANT_CLASS[variant],\n SIZE_CLASS[size],\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../cn\";\nimport { Checkbox } from \"./Checkbox\";\nimport { IconButton } from \"../data-display/IconButton\";\nimport { Input } from \"./Input\";\n\n/**\n * Transfer — dual list-box. Items in the left (\"source\") column move\n * to the right (\"target\") column via arrow buttons; `value` tracks\n * the keys currently on the right.\n *\n * Vocabulary per cardinal rule 23 §B:\n * • `value` / `defaultValue` / `onValueChange` (Radix-style)\n * — NOT `targetKeys`. The string-array carries \"the chosen set\",\n * which on this primitive happens to be the right column.\n * • `size`: `\"small\" | \"default\" | \"large\"`\n * • `disabled` boolean\n *\n * DOM mirrors `.transfer` / `.transfer-list` / `.transfer-actions`\n * from `30-input.css`.\n */\n\nexport interface TransferItem {\n key: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport type TransferSize = \"small\" | \"default\" | \"large\";\n\nexport interface TransferProps {\n dataSource: TransferItem[];\n /** Keys currently on the right (\"target\") column. */\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n /** Headers for the two columns — `[left, right]`. */\n titles?: [ReactNode, ReactNode];\n size?: TransferSize;\n disabled?: boolean;\n className?: string;\n /** Search box above each column. */\n showSearch?: boolean;\n /** Placeholder for the search input when `showSearch` is true. */\n searchPlaceholder?: string;\n /** Renderer for each item label (defaults to `item.label`). */\n renderItem?: (item: TransferItem) => ReactNode;\n}\n\nconst COLUMN_INDEX = { left: 0, right: 1 } as const;\ntype ColumnSide = keyof typeof COLUMN_INDEX;\n\nexport const Transfer = forwardRef<HTMLDivElement, TransferProps>(\n function Transfer(\n {\n dataSource,\n value,\n defaultValue,\n onValueChange,\n titles = [\"\", \"\"],\n size = \"default\",\n disabled,\n className,\n showSearch,\n searchPlaceholder,\n renderItem,\n },\n ref,\n ) {\n const isControlled = value !== undefined;\n const [internalRight, setInternalRight] = useState<string[]>(\n defaultValue ?? [],\n );\n const rightKeys = isControlled ? value ?? [] : internalRight;\n const rightSet = useMemo(() => new Set(rightKeys), [rightKeys]);\n\n const [selectedLeft, setSelectedLeft] = useState<Set<string>>(new Set());\n const [selectedRight, setSelectedRight] = useState<Set<string>>(new Set());\n const [searchLeft, setSearchLeft] = useState(\"\");\n const [searchRight, setSearchRight] = useState(\"\");\n\n const leftItems = useMemo(\n () => dataSource.filter((i) => !rightSet.has(i.key)),\n [dataSource, rightSet],\n );\n const rightItems = useMemo(\n () => dataSource.filter((i) => rightSet.has(i.key)),\n [dataSource, rightSet],\n );\n\n const visibleLeft = useMemo(\n () => filterBySearch(leftItems, searchLeft),\n [leftItems, searchLeft],\n );\n const visibleRight = useMemo(\n () => filterBySearch(rightItems, searchRight),\n [rightItems, searchRight],\n );\n\n const commit = useCallback(\n (nextRight: string[]) => {\n if (!isControlled) setInternalRight(nextRight);\n onValueChange?.(nextRight);\n },\n [isControlled, onValueChange],\n );\n\n const moveRight = useCallback(() => {\n if (disabled) return;\n const movable = leftItems.filter(\n (i) => selectedLeft.has(i.key) && !i.disabled,\n );\n if (movable.length === 0) return;\n const moved = new Set(movable.map((i) => i.key));\n commit([...rightKeys, ...moved]);\n const stillSelected = new Set(selectedLeft);\n for (const k of moved) stillSelected.delete(k);\n setSelectedLeft(stillSelected);\n }, [commit, disabled, leftItems, rightKeys, selectedLeft]);\n\n const moveLeft = useCallback(() => {\n if (disabled) return;\n const movable = rightItems.filter(\n (i) => selectedRight.has(i.key) && !i.disabled,\n );\n if (movable.length === 0) return;\n const moved = new Set(movable.map((i) => i.key));\n commit(rightKeys.filter((k) => !moved.has(k)));\n const stillSelected = new Set(selectedRight);\n for (const k of moved) stillSelected.delete(k);\n setSelectedRight(stillSelected);\n }, [commit, disabled, rightItems, rightKeys, selectedRight]);\n\n const toggleItem = (side: ColumnSide, key: string, item: TransferItem) => {\n if (disabled || item.disabled) return;\n const setter = side === \"left\" ? setSelectedLeft : setSelectedRight;\n setter((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const sizeClass = SIZE_CLASS[size];\n\n return (\n <div\n ref={ref}\n className={cn(\"transfer\", sizeClass, className)}\n aria-disabled={disabled || undefined}\n >\n <Column\n title={titles[0]}\n totalCount={leftItems.length}\n selectedCount={selectedLeft.size}\n visibleItems={visibleLeft}\n selected={selectedLeft}\n disabled={disabled}\n showSearch={showSearch}\n searchValue={searchLeft}\n onSearchChange={setSearchLeft}\n searchPlaceholder={searchPlaceholder}\n renderItem={renderItem}\n onToggle={(key, item) => toggleItem(\"left\", key, item)}\n size={size}\n />\n <div className=\"transfer-actions\">\n <IconButton\n aria-label=\"Move right\"\n disabled={disabled || selectedLeft.size === 0}\n onClick={moveRight}\n size={size === \"small\" ? \"sm\" : \"md\"}\n >\n <ChevronRight size={14} aria-hidden />\n </IconButton>\n <IconButton\n aria-label=\"Move left\"\n disabled={disabled || selectedRight.size === 0}\n onClick={moveLeft}\n size={size === \"small\" ? \"sm\" : \"md\"}\n >\n <ChevronLeft size={14} aria-hidden />\n </IconButton>\n </div>\n <Column\n title={titles[1]}\n totalCount={rightItems.length}\n selectedCount={selectedRight.size}\n visibleItems={visibleRight}\n selected={selectedRight}\n disabled={disabled}\n showSearch={showSearch}\n searchValue={searchRight}\n onSearchChange={setSearchRight}\n searchPlaceholder={searchPlaceholder}\n renderItem={renderItem}\n onToggle={(key, item) => toggleItem(\"right\", key, item)}\n size={size}\n />\n </div>\n );\n },\n);\n\n// ─── Internals ────────────────────────────────────────────────────\n\nconst SIZE_CLASS: Record<TransferSize, string> = {\n small: \"transfer-size-small\",\n default: \"\",\n large: \"transfer-size-large\",\n};\n\nfunction filterBySearch(items: TransferItem[], query: string): TransferItem[] {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter((i) => {\n const labelText = typeof i.label === \"string\" ? i.label : i.key;\n return labelText.toLowerCase().includes(q);\n });\n}\n\ninterface ColumnProps {\n title: ReactNode;\n totalCount: number;\n selectedCount: number;\n visibleItems: TransferItem[];\n selected: Set<string>;\n disabled?: boolean;\n showSearch?: boolean;\n searchValue: string;\n onSearchChange: (next: string) => void;\n searchPlaceholder?: string;\n renderItem?: (item: TransferItem) => ReactNode;\n onToggle: (key: string, item: TransferItem) => void;\n size: TransferSize;\n}\n\nfunction Column({\n title,\n totalCount,\n selectedCount,\n visibleItems,\n selected,\n disabled,\n showSearch,\n searchValue,\n onSearchChange,\n searchPlaceholder,\n renderItem,\n onToggle,\n size,\n}: ColumnProps) {\n return (\n <div className=\"transfer-list\">\n <div className=\"transfer-list-header\">\n <span>\n {title}\n {selectedCount > 0 ? ` (${selectedCount}/${totalCount})` : ` (${totalCount})`}\n </span>\n </div>\n {showSearch && (\n <div className=\"transfer-list-search\">\n <Input\n size={size === \"large\" ? \"default\" : \"small\"}\n placeholder={searchPlaceholder}\n value={searchValue}\n disabled={disabled}\n onChange={(e) => onSearchChange(e.target.value)}\n />\n </div>\n )}\n <div className=\"transfer-list-body\">\n {visibleItems.map((item) => {\n const itemDisabled = disabled || item.disabled;\n const checked = selected.has(item.key);\n return (\n <div\n key={item.key}\n className=\"transfer-list-item\"\n aria-disabled={itemDisabled || undefined}\n onClick={() => onToggle(item.key, item)}\n >\n <Checkbox\n checked={checked}\n disabled={itemDisabled}\n onCheckedChange={() => onToggle(item.key, item)}\n onClick={(e) => e.stopPropagation()}\n />\n <span>{renderItem ? renderItem(item) : item.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { forwardRef, useCallback, useMemo, useState, type ReactNode } from \"react\"\nimport { ChevronDown, ChevronRight } from \"lucide-react\"\nimport { cn } from \"../cn\"\nimport { Popover } from \"../data-display/Popover\"\nimport { Checkbox } from \"./Checkbox\"\n\n/**\n * TreeSelect — tree-structured Select. Renders a Popover containing a\n * recursive tree where each node is expandable. Multi-select supported\n * via `multiple`; single-select highlights one node.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-style selection\n * (single: `string`; multiple: `string[]`)\n * - `multiple` — boolean (NEVER `mode=\"multiple\"`)\n * - `size` — \"small\" | \"default\" | \"large\"\n * - `open` / `defaultOpen` / `onOpenChange`\n * - `disabled`, `placeholder`, `className`\n */\n\nexport interface TreeSelectOption {\n value: string\n label: string\n disabled?: boolean\n children?: TreeSelectOption[]\n}\n\nexport interface TreeSelectProps {\n options: TreeSelectOption[]\n value?: string | string[]\n defaultValue?: string | string[]\n onValueChange?: (value: string | string[]) => void\n multiple?: boolean\n placeholder?: string\n size?: \"small\" | \"default\" | \"large\"\n disabled?: boolean\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Expand every node on first render. */\n defaultExpandAll?: boolean\n className?: string\n}\n\nfunction flattenLabels(options: TreeSelectOption[]): Map<string, string> {\n const out = new Map<string, string>()\n const walk = (nodes: TreeSelectOption[]) => {\n for (const n of nodes) {\n out.set(n.value, n.label)\n if (n.children) walk(n.children)\n }\n }\n walk(options)\n return out\n}\n\nfunction collectAllValues(options: TreeSelectOption[]): string[] {\n const out: string[] = []\n const walk = (nodes: TreeSelectOption[]) => {\n for (const n of nodes) {\n out.push(n.value)\n if (n.children) walk(n.children)\n }\n }\n walk(options)\n return out\n}\n\ninterface TreeNodeProps {\n option: TreeSelectOption\n depth: number\n multiple: boolean\n selectedSet: Set<string>\n expandedSet: Set<string>\n onToggleExpand: (value: string) => void\n onSelect: (option: TreeSelectOption) => void\n}\n\nfunction TreeNode({\n option,\n depth,\n multiple,\n selectedSet,\n expandedSet,\n onToggleExpand,\n onSelect,\n}: TreeNodeProps): ReactNode {\n const hasChildren = !!option.children && option.children.length > 0\n const isExpanded = expandedSet.has(option.value)\n const isSelected = selectedSet.has(option.value)\n return (\n <li\n className=\"treeselect-node-wrap\"\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected || undefined}\n >\n <div\n className=\"treeselect-node\"\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={option.disabled ? \"true\" : undefined}\n style={{ paddingLeft: `calc(var(--spacing-2) + ${depth} * var(--spacing-4))` }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"treeselect-toggle\"\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n onClick={(event) => {\n event.stopPropagation()\n onToggleExpand(option.value)\n }}\n >\n {isExpanded ? (\n <ChevronDown aria-hidden style={{ width: \"var(--spacing-3)\", height: \"var(--spacing-3)\" }} />\n ) : (\n <ChevronRight aria-hidden style={{ width: \"var(--spacing-3)\", height: \"var(--spacing-3)\" }} />\n )}\n </button>\n ) : (\n <span className=\"treeselect-toggle\" aria-hidden />\n )}\n {multiple ? (\n <Checkbox\n className=\"treeselect-checkbox\"\n checked={isSelected}\n disabled={option.disabled}\n onCheckedChange={() => !option.disabled && onSelect(option)}\n />\n ) : null}\n <button\n type=\"button\"\n className=\"treeselect-label\"\n disabled={option.disabled}\n onClick={() => !option.disabled && onSelect(option)}\n >\n {option.label}\n </button>\n </div>\n {hasChildren ? (\n <ul\n className=\"treeselect-children\"\n role=\"group\"\n data-expanded={isExpanded ? \"true\" : \"false\"}\n >\n {option.children!.map((child) => (\n <TreeNode\n key={child.value}\n option={child}\n depth={depth + 1}\n multiple={multiple}\n selectedSet={selectedSet}\n expandedSet={expandedSet}\n onToggleExpand={onToggleExpand}\n onSelect={onSelect}\n />\n ))}\n </ul>\n ) : null}\n </li>\n )\n}\n\nexport const TreeSelect = forwardRef<HTMLButtonElement, TreeSelectProps>(\n function TreeSelect(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n multiple = false,\n placeholder = \"Select\",\n size = \"default\",\n disabled,\n open,\n defaultOpen,\n onOpenChange,\n defaultExpandAll = false,\n className,\n },\n ref,\n ) {\n const isControlled = value !== undefined\n\n const normalizeIn = (raw: string | string[] | undefined): string[] => {\n if (raw === undefined) return []\n return Array.isArray(raw) ? raw : raw ? [raw] : []\n }\n\n const [internal, setInternal] = useState<string[]>(normalizeIn(defaultValue))\n const currentArray = isControlled ? normalizeIn(value) : internal\n const selectedSet = useMemo(() => new Set(currentArray), [currentArray])\n\n const [isOpenInternal, setIsOpenInternal] = useState<boolean>(defaultOpen ?? false)\n const isOpenControlled = open !== undefined\n const isOpen = isOpenControlled ? !!open : isOpenInternal\n\n const setIsOpen = useCallback(\n (next: boolean) => {\n if (!isOpenControlled) setIsOpenInternal(next)\n onOpenChange?.(next)\n },\n [isOpenControlled, onOpenChange],\n )\n\n const allValues = useMemo(() => collectAllValues(options), [options])\n const labelMap = useMemo(() => flattenLabels(options), [options])\n\n const [expandedSet, setExpandedSet] = useState<Set<string>>(() => {\n if (defaultExpandAll) return new Set(allValues)\n // Expand ancestors of any selected node so the selection is visible.\n const out = new Set<string>()\n const walk = (nodes: TreeSelectOption[], parents: string[]) => {\n for (const n of nodes) {\n if (selectedSet.has(n.value)) for (const p of parents) out.add(p)\n if (n.children) walk(n.children, [...parents, n.value])\n }\n }\n walk(options, [])\n return out\n })\n\n const handleToggleExpand = useCallback((nodeValue: string) => {\n setExpandedSet((prev) => {\n const next = new Set(prev)\n if (next.has(nodeValue)) next.delete(nodeValue)\n else next.add(nodeValue)\n return next\n })\n }, [])\n\n const commit = useCallback(\n (nextArray: string[]) => {\n if (!isControlled) setInternal(nextArray)\n if (multiple) onValueChange?.(nextArray)\n else onValueChange?.(nextArray[0] ?? \"\")\n },\n [isControlled, multiple, onValueChange],\n )\n\n const handleSelect = useCallback(\n (option: TreeSelectOption) => {\n if (option.disabled) return\n if (multiple) {\n const next = new Set(currentArray)\n if (next.has(option.value)) next.delete(option.value)\n else next.add(option.value)\n commit(Array.from(next))\n } else {\n commit([option.value])\n setIsOpen(false)\n }\n },\n [multiple, currentArray, commit, setIsOpen],\n )\n\n const triggerText = useMemo(() => {\n if (currentArray.length === 0) return \"\"\n const labels = currentArray.map((v) => labelMap.get(v) ?? v)\n if (multiple) {\n if (labels.length <= 2) return labels.join(\", \")\n return `${labels.slice(0, 2).join(\", \")} +${labels.length - 2}`\n }\n return labels[0]\n }, [currentArray, labelMap, multiple])\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n align=\"start\"\n sideOffset={4}\n className=\"treeselect-content\"\n trigger={\n <button\n ref={ref}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={isOpen}\n disabled={disabled}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={cn(\n \"input\",\n \"treeselect-trigger\",\n size === \"small\" && \"input-size-small\",\n size === \"large\" && \"input-size-large\",\n className,\n )}\n data-placeholder={triggerText === \"\" ? \"true\" : undefined}\n >\n <span className=\"treeselect-trigger-text\">\n {triggerText === \"\" ? placeholder : triggerText}\n </span>\n <ChevronDown\n aria-hidden\n style={{ width: \"var(--spacing-4)\", height: \"var(--spacing-4)\", flexShrink: 0 }}\n />\n </button>\n }\n >\n <ul className=\"treeselect-tree\" role=\"tree\">\n {options.map((option) => (\n <TreeNode\n key={option.value}\n option={option}\n depth={0}\n multiple={multiple}\n selectedSet={selectedSet}\n expandedSet={expandedSet}\n onToggleExpand={handleToggleExpand}\n onSelect={handleSelect}\n />\n ))}\n </ul>\n </Popover>\n )\n },\n)\n","import { Children, cloneElement, isValidElement } from \"react\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport {\n useController,\n type ControllerFieldState,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\";\nimport { Skeleton } from \"../feedback/Skeleton\";\nimport { Spinner } from \"../feedback/Spinner\";\nimport { AutoComplete } from \"./AutoComplete\";\nimport { Cascader } from \"./Cascader\";\nimport { Checkbox } from \"./Checkbox\";\nimport { CheckboxGroup } from \"./CheckboxGroup\";\nimport { ColorPicker } from \"./ColorPicker\";\nimport { Field, type FieldHelpTone } from \"./Field\";\nimport { useFormLoading } from \"./Form\";\nimport { InputNumber } from \"./InputNumber\";\nimport { normalizeLoading, type LoadingProp } from \"../../props\";\nimport { RadioGroup } from \"./Radio\";\nimport { Rate } from \"./Rate\";\nimport { Select } from \"./Select\";\nimport { Slider } from \"./Slider\";\nimport { Switch } from \"./Switch\";\nimport { Transfer } from \"./Transfer\";\nimport { TreeSelect } from \"./TreeSelect\";\n\nexport interface FormFieldProps<\n T extends FieldValues = FieldValues,\n TName extends FieldPath<T> = FieldPath<T>,\n> {\n name: TName;\n label?: ReactNode;\n description?: ReactNode;\n required?: boolean;\n optional?: boolean;\n /** Override the auto-derived help tone (defaults to `\"error\"` when invalid,\n * `\"default\"` when `description` is set, otherwise undefined). */\n tone?: FieldHelpTone;\n /** Per-field loading override. `true` → spinner. `{ kind: \"skeleton\" }` →\n * skeleton placeholder (use during initial data fetch). When omitted,\n * inherits from the surrounding `<Form loading={…}>`. */\n loading?: LoadingProp;\n children: ReactElement;\n}\n\n/**\n * Form-wired Field. Reads value/onChange/error from the surrounding\n * `<Form>` via react-hook-form's `useController`, then clones its single\n * child with the right adapter:\n *\n * - Checkbox / Switch → checked + onCheckedChange\n * - InputNumber → value (number) + onValueChange\n * - Select / AutoComplete / ColorPicker / RadioGroup / Rate / Slider /\n * Cascader / Transfer / TreeSelect → value + onValueChange\n * - default (Input / Textarea / InputSearch / etc.)\n * → value + onChange(event)\n */\nexport function FormField<\n T extends FieldValues = FieldValues,\n TName extends FieldPath<T> = FieldPath<T>,\n>({\n name,\n label,\n description,\n required,\n optional,\n tone,\n loading,\n children,\n}: FormFieldProps<T, TName>) {\n const { field, fieldState } = useController<T, TName>({ name });\n const formLoading = useFormLoading();\n const { active: isLoading, kind: loadKind, label: loadLabel } =\n normalizeLoading(loading ?? formLoading);\n\n const error = extractErrorMessage(fieldState);\n const invalid = fieldState.invalid;\n const child = Children.only(children);\n const wired = isValidElement(child)\n ? adaptChild(child as ReactElement, field as ControllerField, invalid)\n : child;\n const resolvedTone: FieldHelpTone | undefined = error\n ? \"error\"\n : (tone ?? (description !== undefined ? \"default\" : undefined));\n\n let body: ReactElement | ReactNode;\n if (isLoading && loadKind === \"skeleton\") {\n body = <Skeleton className=\"h-9 w-full rounded-md\" aria-label={loadLabel} />;\n } else if (isLoading && loadKind === \"spinner\") {\n body = (\n <div className=\"form-field-spin\">\n <span className=\"form-field-spin__control\">{wired}</span>\n <span className=\"form-field-spin__overlay\" aria-hidden>\n <Spinner size=\"sm\" aria-label={loadLabel ?? \"読み込み中\"} />\n </span>\n </div>\n );\n } else {\n body = wired;\n }\n\n return (\n <Field\n label={label}\n required={required}\n optional={optional}\n tone={resolvedTone}\n help={error ?? description}\n >\n {body}\n </Field>\n );\n}\n\ntype ControllerField = ReturnType<\n typeof useController<FieldValues, string>\n>[\"field\"];\n\nconst BOOLEAN_TOGGLES = new Set<unknown>([Checkbox, Switch]);\nconst VALUE_CHANGE_TYPES = new Set<unknown>([\n Select,\n AutoComplete,\n CheckboxGroup,\n ColorPicker,\n RadioGroup,\n Rate,\n Slider,\n Cascader,\n Transfer,\n TreeSelect,\n]);\n\nfunction adaptChild(\n child: ReactElement,\n field: ControllerField,\n invalid: boolean,\n): ReactElement {\n if (BOOLEAN_TOGGLES.has(child.type)) {\n return cloneElement(child as ReactElement<Record<string, unknown>>, {\n checked: Boolean(field.value),\n onCheckedChange: (next: boolean | \"indeterminate\") =>\n field.onChange(next === true),\n onBlur: field.onBlur,\n \"aria-invalid\": invalid || undefined,\n });\n }\n if (child.type === InputNumber) {\n return cloneElement(child as ReactElement<Record<string, unknown>>, {\n value: typeof field.value === \"number\" ? field.value : undefined,\n onValueChange: (next: number | null) => field.onChange(next),\n onBlur: field.onBlur,\n status: invalid ? \"error\" : undefined,\n });\n }\n if (VALUE_CHANGE_TYPES.has(child.type)) {\n return cloneElement(child as ReactElement<Record<string, unknown>>, {\n value: field.value,\n onValueChange: (next: unknown) => field.onChange(next),\n onBlur: field.onBlur,\n status: invalid ? \"error\" : undefined,\n \"aria-invalid\": invalid || undefined,\n });\n }\n return cloneElement(child as ReactElement<Record<string, unknown>>, {\n value: field.value ?? \"\",\n onChange: (event: unknown) => {\n if (event && typeof event === \"object\" && \"target\" in event) {\n const target = (event as { target: { value: unknown } }).target;\n field.onChange(target.value);\n } else {\n field.onChange(event);\n }\n },\n onBlur: field.onBlur,\n ref: field.ref,\n status: invalid ? \"error\" : undefined,\n \"aria-invalid\": invalid || undefined,\n });\n}\n\nfunction extractErrorMessage(state: ControllerFieldState): string | undefined {\n const err = state.error;\n if (!err) return undefined;\n if (typeof err.message === \"string\" && err.message) return err.message;\n if (err.type) return `Invalid (${err.type})`;\n return \"Invalid value\";\n}\n","import {\n forwardRef,\n useCallback,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * LocaleTabs — bare tab strip with status dots per locale.\n *\n * Mirrors the `K:comp-inputs.html:248-284` reference (pattern ①, \"Locale\n * tabs\"). This primitive is the **header-only** subset: the consumer\n * wires the panel below. For the full input + panel composition see\n * the `LocaleInput` composite under `components/composites/locale-input`.\n *\n * Each tab carries a coloured dot signalling translation status:\n * - `translated` → success (green)\n * - `draft` → warning (amber, stale relative to base)\n * - `missing` → destructive (red, no translation yet)\n *\n * The base locale (first in `locales`, or `baseLocale` if provided)\n * carries a subtle \"(基準 / base)\" suffix so reviewers see the fallback\n * source at a glance.\n *\n * @example\n * <LocaleTabs\n * locales={[\n * { code: \"ja\", label: \"日本語\", status: \"translated\" },\n * { code: \"en\", label: \"English\", status: \"translated\" },\n * { code: \"vi\", label: \"Tiếng Việt\", status: \"draft\" },\n * { code: \"zh\", label: \"简体中文\", status: \"missing\" },\n * ]}\n * baseLocale=\"ja\"\n * meta=\"3 / 4 翻訳済\"\n * onAdd={() => openAddLocale()}\n * />\n */\n\nexport type LocaleTabStatus = \"translated\" | \"draft\" | \"missing\";\n\nexport interface LocaleTabItem {\n code: string;\n label?: ReactNode;\n status?: LocaleTabStatus;\n}\n\nexport interface LocaleTabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n locales: LocaleTabItem[];\n /** Controlled active locale code. */\n value?: string;\n /** Uncontrolled initial locale code. */\n defaultValue?: string;\n onChange?: (next: string) => void;\n /** Locale labelled \"(基準)\" in its tab. Defaults to `locales[0].code`. */\n baseLocale?: string;\n /** Custom label for the base-locale suffix. Defaults to \"(基準)\". */\n baseLabel?: ReactNode;\n /** Right-side meta string (e.g. \"3 / 4 翻訳済\"). */\n meta?: ReactNode;\n /** Click handler for the \"⊕ 追加\" button — when omitted, no button renders. */\n onAdd?: () => void;\n /** Label for the add button. Defaults to \"⊕ 追加\". */\n addLabel?: ReactNode;\n}\n\nconst DOT_CLASS: Record<LocaleTabStatus, string> = {\n translated: \"\",\n draft: \"draft\",\n missing: \"empty\",\n};\n\nexport const LocaleTabs = forwardRef<HTMLDivElement, LocaleTabsProps>(\n function LocaleTabs(\n {\n locales,\n value: controlled,\n defaultValue,\n onChange,\n baseLocale,\n baseLabel = \"(基準)\",\n meta,\n onAdd,\n addLabel = \"⊕ 追加\",\n className,\n ...rest\n },\n ref,\n ) {\n const [internal, setInternal] = useState<string | undefined>(\n defaultValue ?? locales[0]?.code,\n );\n const active = controlled ?? internal;\n const resolvedBase = baseLocale ?? locales[0]?.code;\n\n const select = useCallback(\n (next: string) => {\n if (controlled === undefined) setInternal(next);\n onChange?.(next);\n },\n [controlled, onChange],\n );\n\n return (\n <div\n ref={ref}\n className={cn(\"loc-tabs\", className)}\n role=\"tablist\"\n {...rest}\n >\n {locales.map((locale) => {\n const status = locale.status ?? \"translated\";\n const isActive = locale.code === active;\n const isBase = locale.code === resolvedBase;\n return (\n <button\n key={locale.code}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={cn(isActive && \"on\")}\n onClick={() => select(locale.code)}\n >\n <span className={cn(\"dot\", DOT_CLASS[status])} />\n {locale.label ?? locale.code.toUpperCase()}\n {isBase && (\n <span\n style={{\n fontSize: 10,\n color: \"var(--muted-foreground)\",\n marginLeft: 2,\n }}\n >\n {baseLabel}\n </span>\n )}\n </button>\n );\n })}\n <span className=\"spacer\" />\n {meta !== undefined && <span className=\"meta\">{meta}</span>}\n {onAdd !== undefined && (\n <button\n type=\"button\"\n onClick={onAdd}\n style={{\n border: \"1px solid var(--border)\",\n borderRadius: \"var(--radius-sm)\",\n height: 22,\n padding: \"0 8px\",\n fontSize: 11,\n background: \"var(--background)\",\n }}\n >\n {addLabel}\n </button>\n )}\n </div>\n );\n },\n);\n","import { Check, X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Checklist — vertical list of pass/fail rules with per-row icon.\n *\n * Mirrors the canonical `.checklist` pattern from\n * `K:comp-inputs.html:196-200` (password-rules) + the CSS atom in\n * `shell.css` (`.checklist`, `.checklist li.ok`, `.checklist li.bad`).\n * Each row carries a leading icon (check / x by default) and a label;\n * row tone follows the canonical semantic palette (`--success` for ok,\n * `--destructive` for bad, `--muted-foreground` for neutral / pending).\n *\n * Typical uses: password-rule hints, validation summaries, \"tasks\n * completed\" lists, capability matrices.\n *\n * @example\n * <Checklist\n * items={[\n * { ok: true, label: \"8文字以上\" },\n * { ok: true, label: \"大文字・小文字を含む\" },\n * { ok: false, label: \"記号 (! @ # …) を 1 つ以上\" },\n * ]}\n * />\n *\n * @example with custom icons + neutral pending state\n * <Checklist\n * items={[\n * { ok: true, label: \"Plan approved\", icon: <Check size={11} /> },\n * { ok: null, label: \"Awaiting review\", icon: <Clock size={11} /> },\n * { ok: false, label: \"Budget exceeded\" },\n * ]}\n * />\n */\n\nexport interface ChecklistItem {\n /** `true` → ok / success; `false` → bad / destructive; `null` → neutral / pending. */\n ok: boolean | null;\n label: ReactNode;\n /** Override the default check / x icon. */\n icon?: ReactNode;\n /** Optional trailing hint text. */\n hint?: ReactNode;\n}\n\nexport interface ChecklistProps extends HTMLAttributes<HTMLUListElement> {\n items: ChecklistItem[];\n /** Icon size in px — defaults to 11 (matches canonical). */\n iconSize?: number;\n}\n\nexport const Checklist = forwardRef<HTMLUListElement, ChecklistProps>(\n function Checklist({ items, iconSize = 11, className, ...rest }, ref) {\n return (\n <ul ref={ref} className={cn(\"checklist\", className)} {...rest}>\n {items.map((item, idx) => {\n const tone =\n item.ok === true ? \"ok\" : item.ok === false ? \"bad\" : undefined;\n const fallbackIcon =\n item.ok === true ? (\n <Check size={iconSize} strokeWidth={3} />\n ) : item.ok === false ? (\n <X size={iconSize} strokeWidth={3} />\n ) : null;\n return (\n <li key={idx} className={cn(tone)}>\n {item.icon ?? fallbackIcon}\n <span>{item.label}</span>\n {item.hint !== undefined && (\n <span\n style={{\n marginLeft: \"auto\",\n color: \"var(--muted-foreground)\",\n }}\n >\n {item.hint}\n </span>\n )}\n </li>\n );\n })}\n </ul>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * PageHeader — canonical page chrome strip with title + subtitle +\n * breadcrumb slot + action slot.\n *\n * Mirrors `K:comp-pageheader.html` (three reference patterns: compact,\n * overflow, stacked). The atomic CSS classes (`.ph`, `.ph-bar`,\n * `.ph-title`, `.ph-actions`, `.ph-tabs`, `.ph-body`) live in\n * `shell.css`. React owns the slot composition — visual values stay in\n * tokens.\n *\n * Variant semantics:\n *\n * - `compact` → 1 row, title truncates with ellipsis, actions never\n * wrap. Use for index pages with a single primary\n * CTA + 0–2 secondary actions.\n * - `overflow` → 1 row, primary action + 2–3 icon buttons + \"…\"\n * overflow. Same height as `compact`; the variant flag\n * just signals intent in the JSX.\n * - `stacked` → 2 rows; meta / breadcrumb + tabs go on a second\n * row. Use when the page navigates between sub-views.\n *\n * Slots:\n * - `breadcrumb` → rendered above the title (xs muted text per\n * canonical). Passing this auto-bumps the layout to\n * \"stacked\" if `variant` is \"compact\".\n * - `title` → h1 (16px / 500 weight, ellipsis truncate)\n * - `subtitle` → adjacent baseline text (`.sub`, xs muted)\n * - `actions` → right-aligned slot, flex-shrink:0 / no wrap\n * - `tabs` → second-row tab strip (`.ph-tabs`); pair with\n * `<Tabs variant=\"line\">` or a list of `<a>`\n * - `body` → third-row body strip (`.ph-body`), small muted\n * descriptive copy\n *\n * @example compact\n * <PageHeader\n * title=\"従業員シフト · カレンダー\"\n * subtitle=\"月単位の一括割当\"\n * actions={<><Button size=\"small\">+ 一括割当</Button></>}\n * />\n *\n * @example stacked + tabs\n * <PageHeader\n * variant=\"stacked\"\n * breadcrumb={<Breadcrumb>...</Breadcrumb>}\n * title=\"店舗別 · 月次レポート\"\n * actions={...}\n * tabs={<nav>...</nav>}\n * />\n */\n\nexport type PageHeaderVariant = \"compact\" | \"overflow\" | \"stacked\";\nexport type PageHeaderPadding = \"tight\" | \"default\" | \"cozy\" | \"none\";\n\nexport interface PageHeaderProps\n extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n title: ReactNode;\n subtitle?: ReactNode;\n /** Breadcrumb slot rendered above the title (auto-stacks). */\n breadcrumb?: ReactNode;\n /** Right-aligned action slot — icon buttons, buttons, segmented controls. */\n actions?: ReactNode;\n /** Tab strip on a dedicated second row (`.ph-tabs`). */\n tabs?: ReactNode;\n /** Descriptive body strip below the bar (`.ph-body`). */\n body?: ReactNode;\n /** Layout variant — defaults to `compact`. */\n variant?: PageHeaderVariant;\n /** Internal-spacing density. Shares the vocabulary with `<Card>`\n * (cardinal rule 23 §B): tight (10/12) · default (14/16) · cozy\n * (20/24) · none (consumer pads the inside). Default `default`. */\n padding?: PageHeaderPadding;\n}\n\nconst PADDING_CLASS: Record<PageHeaderPadding, string> = {\n tight: \"ph-padding-tight\",\n default: \"\",\n cozy: \"ph-padding-cozy\",\n none: \"ph-padding-none\",\n};\n\nexport const PageHeader = forwardRef<HTMLElement, PageHeaderProps>(\n function PageHeader(\n {\n title,\n subtitle,\n breadcrumb,\n actions,\n tabs,\n body,\n variant,\n padding = \"default\",\n className,\n ...rest\n },\n ref,\n ) {\n // Auto-promote layout when richer slots are present.\n const resolved: PageHeaderVariant =\n variant ?? (breadcrumb || tabs ? \"stacked\" : \"compact\");\n\n const isStacked = resolved === \"stacked\";\n\n return (\n <section\n ref={ref}\n className={cn(\"ph\", `ph-${resolved}`, PADDING_CLASS[padding], className)}\n {...rest}\n >\n <div className=\"ph-bar\">\n <div\n className={cn(\"ph-title\", isStacked && \"ph-title-stacked\")}\n >\n {breadcrumb !== undefined && (\n <div className=\"ph-breadcrumb\">{breadcrumb}</div>\n )}\n <div className=\"ph-title-row\">\n <h1 className=\"ph-h1\">{title}</h1>\n {subtitle !== undefined && (\n <span className=\"sub\">{subtitle}</span>\n )}\n </div>\n </div>\n {actions !== undefined && (\n <div className=\"ph-actions\">{actions}</div>\n )}\n </div>\n {tabs !== undefined && <div className=\"ph-tabs\">{tabs}</div>}\n {body !== undefined && <div className=\"ph-body\">{body}</div>}\n </section>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * SegmentedControl — single-choice toggle group with no tab-panel.\n *\n * Mirrors the canonical `.seg` strip from\n * `K:comp-pageheader.html:21-24` (day / week / month-style switch).\n * Tabs already covers the case where a switch drives panel content;\n * SegmentedControl is the bare button-row variant for toolbars, view\n * pickers, density toggles, and other \"just pick one\" UIs without\n * panel composition.\n *\n * Two visual variants:\n *\n * - `bar` → connected button row with hairline dividers between\n * items (matches `.seg`; `.seg button + button` border).\n * Default; matches the page-header reference.\n * - `pill` → rounded background, active item lifts onto `--background`\n * with a soft shadow. Matches `.tabs-pills` from Tabs.\n *\n * Controlled or uncontrolled. Pass `items` as an array of\n * `{ value, label, icon?, disabled? }` or compose `<SegmentedControl>`\n * with `<SegmentedItem>` children directly.\n *\n * @example\n * <SegmentedControl\n * items={[\n * { value: \"day\", label: \"日\" },\n * { value: \"week\", label: \"週\" },\n * { value: \"month\", label: \"月\" },\n * ]}\n * defaultValue=\"month\"\n * />\n *\n * @example with icons + controlled state\n * <SegmentedControl\n * value={view}\n * onChange={setView}\n * variant=\"pill\"\n * items={[\n * { value: \"grid\", label: \"Grid\", icon: <LayoutGrid size={13} /> },\n * { value: \"list\", label: \"List\", icon: <List size={13} /> },\n * ]}\n * />\n */\n\nimport type { SizeProp } from \"../../props\";\n\nexport type SegmentedControlVariant = \"bar\" | \"pill\";\n/** Subset of the shared `SizeProp` — SegmentedControl only ships the\n * two compact-side rungs in practice (no `\"large\"` design canon yet). */\nexport type SegmentedControlSize = Exclude<SizeProp, \"large\">;\nexport type SegmentedControlOrientation = \"horizontal\" | \"vertical\";\n\nexport interface SegmentedControlItem<V extends string = string> {\n value: V;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps<V extends string = string>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n items: SegmentedControlItem<V>[];\n value?: V;\n defaultValue?: V;\n onChange?: (next: V) => void;\n variant?: SegmentedControlVariant;\n size?: SegmentedControlSize;\n /** Axis of the radiogroup — controls Arrow-key direction for the\n * roving-tabindex pattern (per WAI-ARIA APG radiogroup). */\n orientation?: SegmentedControlOrientation;\n /** Accessible name for the group — falls back to a generic role label. */\n \"aria-label\"?: string;\n}\n\nexport function SegmentedControl<V extends string = string>({\n items,\n value: controlled,\n defaultValue,\n onChange,\n variant = \"bar\",\n size = \"default\",\n orientation = \"horizontal\",\n className,\n ...rest\n}: SegmentedControlProps<V>) {\n const [internal, setInternal] = useState<V | undefined>(\n defaultValue ?? items[0]?.value,\n );\n const active = controlled ?? internal;\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const select = useCallback(\n (next: V) => {\n if (controlled === undefined) setInternal(next);\n onChange?.(next);\n },\n [controlled, onChange],\n );\n\n // WAI-ARIA APG roving-tabindex: only the checked item is in the\n // page Tab order; Arrow keys roam between items in the group.\n // If the active value is disabled / missing, fall back to the\n // first enabled item so the group is always reachable via Tab.\n const enabledIndices = items.reduce<number[]>((acc, item, i) => {\n if (!item.disabled) acc.push(i);\n return acc;\n }, []);\n const activeIndex = items.findIndex((it) => it.value === active);\n const tabStopIndex =\n activeIndex >= 0 && !items[activeIndex]?.disabled\n ? activeIndex\n : (enabledIndices[0] ?? -1);\n\n const moveFocus = useCallback(\n (currentIndex: number, direction: 1 | -1) => {\n const enabled = enabledIndices;\n if (enabled.length === 0) return;\n const currentSlot = enabled.indexOf(currentIndex);\n const nextSlot =\n currentSlot === -1\n ? 0\n : (currentSlot + direction + enabled.length) % enabled.length;\n const nextIndex = enabled[nextSlot]!;\n const nextItem = items[nextIndex]!;\n itemRefs.current[nextIndex]?.focus();\n select(nextItem.value);\n },\n [enabledIndices, items, select],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>, index: number) => {\n const forwardKey = orientation === \"vertical\" ? \"ArrowDown\" : \"ArrowRight\";\n const backwardKey = orientation === \"vertical\" ? \"ArrowUp\" : \"ArrowLeft\";\n if (event.key === forwardKey) {\n event.preventDefault();\n moveFocus(index, 1);\n } else if (event.key === backwardKey) {\n event.preventDefault();\n moveFocus(index, -1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n const first = enabledIndices[0];\n if (first !== undefined) {\n itemRefs.current[first]?.focus();\n select(items[first]!.value);\n }\n } else if (event.key === \"End\") {\n event.preventDefault();\n const last = enabledIndices[enabledIndices.length - 1];\n if (last !== undefined) {\n itemRefs.current[last]?.focus();\n select(items[last]!.value);\n }\n } else if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n const current = items[index];\n if (current && !current.disabled) select(current.value);\n }\n },\n [enabledIndices, items, moveFocus, orientation, select],\n );\n\n const rootClass =\n variant === \"pill\" ? \"tabs-pills\" : \"segmented\";\n\n return (\n <div\n role=\"radiogroup\"\n aria-orientation={orientation}\n className={cn(\n rootClass,\n size === \"small\" && \"segmented-small\",\n className,\n )}\n {...rest}\n >\n {items.map((item, index) => {\n const isActive = item.value === active;\n const itemClass =\n variant === \"pill\" ? \"tabs-pill\" : \"segmented-item\";\n const isTabStop = index === tabStopIndex;\n return (\n <button\n key={item.value}\n ref={(node) => {\n itemRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n data-state={isActive ? \"active\" : \"inactive\"}\n disabled={item.disabled}\n tabIndex={isTabStop ? 0 : -1}\n className={itemClass}\n onClick={() => !item.disabled && select(item.value)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {item.icon}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Label — form-field label. Wraps Radix Label so `htmlFor` /\n * click-to-focus works out of the box. Maps to `.label` in tokens.css.\n *\n * Pair with <Input /> + an optional `.help` paragraph:\n *\n * <Label htmlFor=\"name\">Display name</Label>\n * <Input id=\"name\" />\n * <p className=\"help\">Visible to teammates.</p>\n */\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function Label({ className, ...rest }, ref) {\n return <LabelPrimitive.Root ref={ref} className={cn(\"label\", className)} {...rest} />\n})\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\nexport type TabsVariant = \"line\" | \"pills\"\nexport type TabsOrientation = \"horizontal\" | \"vertical\"\nexport type TabsPlacement = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nexport interface TabsItem {\n value: string\n label: ReactNode\n content?: ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps\n extends Omit<ComponentPropsWithoutRef<typeof TabsPrimitive.Root>, \"children\"> {\n items: TabsItem[]\n variant?: TabsVariant\n placement?: TabsPlacement\n listClassName?: string\n contentClassName?: string\n children?: ReactNode\n}\n\nexport const Tabs = forwardRef<\n ElementRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(function Tabs(\n {\n items,\n variant = \"line\",\n placement = \"top\",\n className,\n listClassName,\n contentClassName,\n orientation,\n children,\n ...rest\n },\n ref,\n) {\n const radixOrientation: TabsOrientation =\n orientation ?? (placement === \"left\" || placement === \"right\" ? \"vertical\" : \"horizontal\")\n const listClass = variant === \"pills\" ? \"tabs-pills\" : \"tabs\"\n const triggerClass = variant === \"pills\" ? \"tabs-pill\" : \"tab\"\n\n return (\n <TabsPrimitive.Root\n ref={ref}\n orientation={radixOrientation}\n data-placement={placement}\n className={cn(\"tabs-root\", className)}\n {...rest}\n >\n <TabsPrimitive.List className={cn(listClass, listClassName)}>\n {items.map((item) => (\n <TabsPrimitive.Trigger\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className={triggerClass}\n >\n {item.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n {items.map((item) =>\n item.content === undefined ? null : (\n <TabsPrimitive.Content\n key={item.value}\n value={item.value}\n className={contentClassName}\n >\n {item.content}\n </TabsPrimitive.Content>\n ),\n )}\n {children}\n </TabsPrimitive.Root>\n )\n})\n","import type { ComponentProps, CSSProperties, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Avatar — Ant-Design-shaped: shape + size + icon + image + initials.\n *\n * <Avatar size=\"large\" shape=\"square\" src={url} />\n * <Avatar size={48} icon={<UserOutlined />} />\n * <Avatar shape=\"square\" color=\"oklch(56% 0.15 240)\">F</Avatar>\n */\n\nexport type AvatarShape = \"circle\" | \"square\";\nexport type AvatarSizeToken = \"xs\" | \"sm\" | \"default\" | \"lg\" | \"xl\";\nexport type AvatarSize = AvatarSizeToken | number;\n\nexport interface AvatarProps\n extends Omit<ComponentProps<\"span\">, \"color\"> {\n /** Shape — circle (default) or square (rounded-md). */\n shape?: AvatarShape;\n /** Token name (xs|sm|default|lg|xl) or pixel number. */\n size?: AvatarSize;\n /** Image URL — wins over `icon` / children. */\n src?: string;\n alt?: string;\n /** Icon slot — wins over children when `src` is unset. */\n icon?: ReactNode;\n /**\n * Display name — first two initials are rendered as the fallback\n * when no `src` / `icon` / children are passed. Mirrors the\n * design-handoff `<Avatar name=\"Satoshi F\" />` shape (ui-kit.jsx).\n */\n name?: string;\n /**\n * Background colour — used for initials avatars to tint the bg\n * with a brand hue. Accepts any CSS colour value.\n */\n color?: string;\n /** Foreground colour override (rare; defaults follow `color`). */\n textColor?: string;\n /**\n * Variant alias for legacy callers. `brand` maps to color =\n * `var(--brand)` + textColor = `var(--primary-foreground)`.\n */\n variant?: \"default\" | \"brand\";\n}\n\nconst SIZE_PX: Record<AvatarSizeToken, number> = {\n xs: 20,\n sm: 24,\n default: 28,\n lg: 36,\n xl: 48,\n};\n\nfunction resolveSizePx(size: AvatarSize | undefined): number {\n if (size === undefined) return SIZE_PX.default;\n if (typeof size === \"number\") return size;\n return SIZE_PX[size];\n}\n\nfunction deriveInitials(name: string): string {\n return name\n .trim()\n .split(/\\s+/)\n .map((part) => part[0])\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n}\n\nexport function Avatar({\n shape = \"circle\",\n size,\n src,\n alt,\n icon,\n name,\n color,\n textColor,\n variant,\n className,\n style,\n children,\n ...rest\n}: AvatarProps) {\n const px = resolveSizePx(size);\n const fontPx = Math.round(px * 0.42);\n\n const inline: CSSProperties = {\n width: `${px}px`,\n height: `${px}px`,\n fontSize: `${fontPx}px`,\n borderRadius: shape === \"square\" ? \"var(--radius-md)\" : \"var(--radius-full)\",\n ...style,\n };\n if (color) inline.background = color;\n if (textColor) inline.color = textColor;\n\n const isBrand = variant === \"brand\";\n\n return (\n <span\n className={cn(\"avatar\", isBrand && \"brand\", className)}\n style={inline}\n {...rest}\n >\n {src ? (\n <img\n src={src}\n alt={alt ?? \"\"}\n style={{\n width: \"100%\",\n height: \"100%\",\n borderRadius: \"inherit\",\n objectFit: \"cover\",\n }}\n />\n ) : icon !== undefined ? (\n icon\n ) : children !== undefined ? (\n children\n ) : name ? (\n deriveInitials(name)\n ) : null}\n </span>\n );\n}\n","import type { ComponentProps, CSSProperties, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Statistic — Ant-Design KPI tile.\n *\n * <Statistic title=\"Active users\" value={1024} />\n * <Statistic title=\"Revenue\" value={1234.56} precision={2} prefix=\"¥\" />\n * <Statistic title=\"Uptime\" value={99.95} suffix=\"%\" />\n * <Statistic title=\"MRR\" value={5800000} bordered />\n *\n * The `bordered` prop renders the tile with its own card-style frame\n * (border + radius + padding + background) so consumers don't need to\n * wrap with `<Card>` just to get a surface. Default `false` keeps the\n * tile transparent for use inside grids / dashboards where the parent\n * surface already provides the chrome.\n */\n\nexport interface StatisticProps extends Omit<ComponentProps<\"div\">, \"title\" | \"prefix\"> {\n title?: ReactNode;\n value: number | string;\n /** Decimal places when value is a number. */\n precision?: number;\n /** Prepended to value (e.g. \"¥\", icon). */\n prefix?: ReactNode;\n /** Appended to value (e.g. \"%\", \"/mo\"). */\n suffix?: ReactNode;\n /** Locale-aware grouping (default `true` — uses Intl.NumberFormat). */\n groupSeparator?: boolean;\n /** Custom format function. Overrides precision + groupSeparator. */\n formatter?: (value: number | string) => ReactNode;\n /** Text alignment for the tile (default `left`). */\n align?: \"left\" | \"right\" | \"center\";\n /** Font size of the value (px). */\n valueSize?: number;\n /** Render the tile as a standalone card surface (border + radius +\n * padding + bg). Default `false` — the tile is transparent so it\n * composes inside grids that supply their own chrome. */\n bordered?: boolean;\n}\n\nconst ALIGN_CLASS: Record<NonNullable<StatisticProps[\"align\"]>, string> = {\n left: \"items-start text-left\",\n right: \"items-end text-right\",\n center: \"items-center text-center\",\n};\n\nfunction formatValue(\n value: number | string,\n precision?: number,\n groupSeparator = true,\n): string {\n if (typeof value !== \"number\") return String(value);\n const fixed = precision === undefined ? String(value) : value.toFixed(precision);\n if (!groupSeparator) return fixed;\n try {\n return new Intl.NumberFormat(undefined, {\n minimumFractionDigits: precision ?? 0,\n maximumFractionDigits: precision ?? 20,\n }).format(value);\n } catch {\n return fixed;\n }\n}\n\nexport function Statistic({\n title,\n value,\n precision,\n prefix,\n suffix,\n groupSeparator = true,\n formatter,\n align = \"left\",\n valueSize,\n bordered = false,\n className,\n style,\n ...rest\n}: StatisticProps) {\n const formatted = formatter\n ? formatter(value)\n : formatValue(value, precision, groupSeparator);\n const valueStyle: CSSProperties = valueSize\n ? { fontSize: `${valueSize}px` }\n : {};\n return (\n <div\n className={cn(\n \"statistic\",\n ALIGN_CLASS[align],\n bordered && \"statistic-bordered\",\n className,\n )}\n style={style}\n {...rest}\n >\n {title !== undefined && <div className=\"statistic-title\">{title}</div>}\n <div className=\"statistic-value\" style={valueStyle}>\n {prefix !== undefined && (\n <span className=\"statistic-prefix\">{prefix}</span>\n )}\n <span className=\"statistic-number\">{formatted}</span>\n {suffix !== undefined && (\n <span className=\"statistic-suffix\">{suffix}</span>\n )}\n </div>\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Empty — Ant-Design empty-state placeholder.\n *\n * <Empty description=\"No data\" />\n * <Empty image={<CustomIllustration />} description=\"Nothing here yet\">\n * <Button>Create one</Button>\n * </Empty>\n */\n\nexport interface EmptyProps extends ComponentProps<\"div\"> {\n /** Image / illustration / icon at the top. */\n image?: ReactNode;\n /** Text below the image (default `null` — no text). */\n description?: ReactNode;\n /** Action area below description (typically a button). */\n children?: ReactNode;\n}\n\nconst DEFAULT_IMAGE = (\n <svg\n width=\"64\"\n height=\"48\"\n viewBox=\"0 0 64 48\"\n fill=\"none\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <ellipse\n cx=\"32\"\n cy=\"42\"\n rx=\"28\"\n ry=\"3\"\n fill=\"currentColor\"\n opacity=\"0.1\"\n />\n <path\n d=\"M14 18l8-12h20l8 12M14 18v18h36V18M14 18h36\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.45\"\n />\n <path\n d=\"M22 18l4 6h12l4-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.45\"\n />\n </svg>\n);\n\nexport function Empty({\n image,\n description,\n children,\n className,\n ...rest\n}: EmptyProps) {\n return (\n <div className={cn(\"empty\", className)} {...rest}>\n <div className=\"empty-image\">{image ?? DEFAULT_IMAGE}</div>\n {description !== undefined && (\n <p className=\"empty-description\">{description}</p>\n )}\n {children && <div className=\"empty-footer\">{children}</div>}\n </div>\n );\n}\n","import type { ComponentProps, CSSProperties, MouseEvent, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { ColorProp } from \"../../props\";\n\n/**\n * Tag — Ant-Design label chip.\n *\n * <Tag>basic</Tag>\n * <Tag color=\"success\">done</Tag>\n * <Tag color=\"oklch(56% 0.15 240)\">custom hue</Tag>\n * <Tag closable onClose={() => …}>removable</Tag>\n * <Tag bordered={false}>borderless</Tag>\n *\n * Distinct from <Badge>: Badge is for status pills (a numeric or\n * single short word), Tag is for labels (potentially many in a row,\n * potentially closable).\n */\n\n/**\n * Tag accepts the framework's full semantic palette except `\"secondary\"`\n * (that one is reserved for Typography text-dimming). Aliased from the\n * shared `ColorProp` so the vocabulary stays in lockstep with Alert,\n * Result, Timeline, etc.\n */\nexport type TagPresetColor = Exclude<ColorProp, \"secondary\">;\n\nexport interface TagProps extends Omit<ComponentProps<\"span\">, \"color\"> {\n /** Preset hue or a custom CSS color. */\n color?: TagPresetColor | string;\n /** Show outline (default `true`). Borderless = solid-tinted background only. */\n bordered?: boolean;\n /** Show an × button. Calls `onClose`. */\n closable?: boolean;\n onClose?: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Leading icon. */\n icon?: ReactNode;\n}\n\nconst PRESET_VAR: Record<TagPresetColor, string> = {\n default: \"var(--muted-foreground)\",\n success: \"var(--success)\",\n warning: \"var(--warning)\",\n destructive: \"var(--destructive)\",\n info: \"var(--info)\",\n attention: \"var(--attention)\",\n primary: \"var(--primary)\",\n};\n\nfunction resolveHue(color: TagPresetColor | string | undefined): string {\n if (!color) return PRESET_VAR.default;\n if (color in PRESET_VAR) return PRESET_VAR[color as TagPresetColor];\n return color;\n}\n\nexport function Tag({\n color,\n bordered = true,\n closable,\n onClose,\n icon,\n className,\n style,\n children,\n ...rest\n}: TagProps) {\n const hue = resolveHue(color);\n\n const inline: CSSProperties = {\n color: hue,\n background: `color-mix(in oklch, ${hue} 14%, transparent)`,\n borderColor: bordered ? `color-mix(in oklch, ${hue} 35%, transparent)` : \"transparent\",\n ...style,\n };\n\n return (\n <span\n className={cn(\"tag\", !bordered && \"tag-borderless\", className)}\n style={inline}\n {...rest}\n >\n {icon !== undefined && <span className=\"tag-icon\">{icon}</span>}\n <span className=\"tag-label\">{children}</span>\n {closable && (\n <button\n type=\"button\"\n className=\"tag-close\"\n onClick={onClose}\n aria-label=\"Remove tag\"\n >\n ×\n </button>\n )}\n </span>\n );\n}\n","import { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, AlertOctagon } from \"lucide-react\";\nimport { cn } from \"../cn\";\nimport type { FeedbackColorProp } from \"../../props\";\n\n/**\n * Alert — Ant-Design banner-style notice.\n *\n * <Alert color=\"info\" title=\"5月度の締めは 5/31 (土) 23:59 です\" />\n * <Alert\n * color=\"warning\"\n * title=\"3 件の打刻漏れがあります\"\n * description=\"本日中に確認してください。\"\n * actions={<Button size=\"small\">確認する</Button>}\n * closable\n * onClose={() => …}\n * />\n * <Alert variant=\"banner\" color=\"info\" title=\"メンテナンス予定 …\" />\n *\n * Concept mapping (Ant → @godxjp/ui vocabulary per cardinal rule 23 §B):\n * - Ant `type` → `color` (semantic role)\n * - Ant `banner` → `variant=\"banner\"` (full-width borderless)\n * - Ant `message` → `title` (ReactNode slot)\n * - Ant `description` → `description` (ReactNode slot)\n * - Ant `action` → `actions` (plural — matches Card)\n * - Ant `showIcon` → boolean (omit `icon` + set false → no icon)\n * - Ant `closeIcon` → not exposed; default × ships\n * - Ant `closable` → already vocab (Tag uses it)\n * - Ant `onClose` → onClose callback\n */\n\n/** Alias of the shared `FeedbackColorProp` — same shape as\n * ResultColor / ProgressColor; kept as a named export for back-compat. */\nexport type AlertColor = FeedbackColorProp;\n\nexport type AlertVariant = \"outlined\" | \"banner\";\n\nexport interface AlertProps\n extends Omit<ComponentProps<\"div\">, \"color\" | \"title\"> {\n /** Semantic role. Defaults to `default`. */\n color?: AlertColor;\n /** Outlined card (default) or full-width banner. */\n variant?: AlertVariant;\n /** Primary message. */\n title?: ReactNode;\n /** Optional secondary body text. */\n description?: ReactNode;\n /** Leading icon. Omit to auto-pick a semantic icon for the color. */\n icon?: ReactNode;\n /** Render an × close button. */\n closable?: boolean;\n /** Called when the × close button is clicked. */\n onClose?: () => void;\n /** Footer action slot (typically a Button group). */\n actions?: ReactNode;\n}\n\nconst DEFAULT_ICON: Record<AlertColor, ReactNode> = {\n default: <Info aria-hidden=\"true\" width={16} height={16} />,\n info: <Info aria-hidden=\"true\" width={16} height={16} />,\n success: <CheckCircle2 aria-hidden=\"true\" width={16} height={16} />,\n warning: <AlertTriangle aria-hidden=\"true\" width={16} height={16} />,\n destructive: <AlertOctagon aria-hidden=\"true\" width={16} height={16} />,\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n color = \"default\",\n variant = \"outlined\",\n title,\n description,\n icon,\n closable,\n onClose,\n actions,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const resolvedIcon = icon === undefined ? DEFAULT_ICON[color] : icon;\n const showIcon = resolvedIcon !== null && resolvedIcon !== false;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n \"alert\",\n `alert-color-${color}`,\n `alert-variant-${variant}`,\n className,\n )}\n {...rest}\n >\n {showIcon && <span className=\"alert-icon\">{resolvedIcon}</span>}\n <div className=\"alert-body\">\n {title !== undefined && <div className=\"alert-title\">{title}</div>}\n {description !== undefined && (\n <div className=\"alert-desc\">{description}</div>\n )}\n {children}\n {actions !== undefined && (\n <div className=\"alert-actions\">{actions}</div>\n )}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"alert-close\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n ×\n </button>\n )}\n </div>\n );\n});\n","import { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport {\n AlertTriangle,\n CheckCircle2,\n Info,\n XCircle,\n} from \"lucide-react\";\nimport { cn } from \"../cn\";\nimport type { FeedbackColorProp } from \"../../props\";\n\n/**\n * Result — page-level outcome surface (Ant-Design `Result` shape).\n *\n * <Result\n * color=\"success\"\n * title=\"ご注文が完了しました\"\n * description=\"番号 No. 2026-05-17-0042 でお手元に届きます。\"\n * extra={<Button>注文履歴を見る</Button>}\n * />\n *\n * Concept mapping (Ant → @godxjp/ui vocabulary per cardinal rule 23 §B):\n * - Ant `status` → `color` (semantic role; HTTP-status\n * shortcuts dropped — consumers\n * wire their own icon)\n * - Ant `title` → `title` (ReactNode slot)\n * - Ant `subTitle` → `description` (matches Alert vocabulary)\n * - Ant `icon` → `icon` (ReactNode slot)\n * - Ant `extra` → `extra` (matches Card footer slot)\n */\n\n/** Alias of the shared `FeedbackColorProp` — same shape as\n * AlertColor / ProgressColor; kept as a named export for back-compat. */\nexport type ResultColor = FeedbackColorProp;\n\nexport interface ResultProps\n extends Omit<ComponentProps<\"div\">, \"color\" | \"title\"> {\n /** Semantic role. Defaults to `info`. */\n color?: ResultColor;\n /** Primary headline. */\n title?: ReactNode;\n /** Secondary body text. */\n description?: ReactNode;\n /** Leading visual. Omit to auto-pick a semantic icon for the color. */\n icon?: ReactNode;\n /** Action area below the description (typically a Button group). */\n extra?: ReactNode;\n}\n\nconst DEFAULT_ICON: Record<ResultColor, ReactNode> = {\n default: <Info aria-hidden=\"true\" width={64} height={64} />,\n info: <Info aria-hidden=\"true\" width={64} height={64} />,\n success: <CheckCircle2 aria-hidden=\"true\" width={64} height={64} />,\n warning: <AlertTriangle aria-hidden=\"true\" width={64} height={64} />,\n destructive: <XCircle aria-hidden=\"true\" width={64} height={64} />,\n};\n\nexport const Result = forwardRef<HTMLDivElement, ResultProps>(function Result(\n {\n color = \"info\",\n title,\n description,\n icon,\n extra,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const resolvedIcon = icon === undefined ? DEFAULT_ICON[color] : icon;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n className={cn(\"result\", `result-color-${color}`, className)}\n {...rest}\n >\n <div className=\"result-icon\">{resolvedIcon}</div>\n {title !== undefined && <h3 className=\"result-title\">{title}</h3>}\n {description !== undefined && (\n <p className=\"result-desc\">{description}</p>\n )}\n {children}\n {extra !== undefined && <div className=\"result-extra\">{extra}</div>}\n </div>\n );\n});\n","import {\n forwardRef,\n useState,\n type ComponentProps,\n type ElementType,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Typography — Title / Paragraph / Text / Link primitive family.\n *\n * <Typography.Title size={2}>Heading</Typography.Title>\n * <Typography.Paragraph>Lorem ipsum…</Typography.Paragraph>\n * <Typography.Text color=\"secondary\" strong>label</Typography.Text>\n * <Typography.Text code>code</Typography.Text>\n * <Typography.Text copyable>kb@famgia.com</Typography.Text>\n * <Typography.Text truncate>truncate me</Typography.Text>\n * <Typography.Paragraph truncate={{ rows: 3 }}>multi-line clamp</Typography.Paragraph>\n * <Typography.Link href=\"/x\">jump</Typography.Link>\n *\n * Vocabulary (per CLAUDE.md §23.B):\n * - `size` (1..5) — dimensional scale for Title; maps to the canon\n * heading mapping declared in `theme.css`. Same name as the\n * framework-wide `size` vocabulary entry (Button, Input, Avatar,\n * Tag, Badge, IconButton).\n * - `color` — semantic role; identical enum to Tag/Badge/Alert.\n * - `copyable` / `disabled` — adjective-boolean state, same pattern\n * as Tag's `closable` / Input's `disabled`.\n * - `truncate` — `true | { rows: N }`; framework-owned name (NOT\n * Ant's `ellipsis`).\n * - `strong` / `italic` / `underline` / `del` / `mark` / `code` /\n * `keyboard` — HTML5 semantic inline elements; conveniences, not\n * Ant-specific.\n *\n * Cardinal rules honoured:\n * §14 — purely structural primitive (no Radix peer needed)\n * §21 — every axis (theme/accent/density/font-size) flows via tokens\n * §22 — every literal mapped to an existing token; no new tokens;\n * heading scale follows the canon mapping declared in\n * `theme.css` (h1=4xl, h2=2xl, h3=xl, h4=lg, h5=md).\n * §23 — vocabulary first; no Ant-named props leak in.\n * §25 — primitive is the canon; all visuals live in `.typography*`\n * classes in `shell.css`. No inline `style={{...}}`.\n */\n\n// ─── Shared types ────────────────────────────────────────────────\n\nexport type TypographyColor =\n | \"default\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"attention\"\n | \"info\"\n | \"destructive\";\n\n/** Single-line truncate (`true`) or multi-line clamp (`{ rows: N }`). */\nexport type TypographyTruncate = boolean | { rows?: number };\n\nexport interface TypographyCommonProps {\n color?: TypographyColor;\n disabled?: boolean;\n /** Bold weight via `--font-weight-bold`. */\n strong?: boolean;\n italic?: boolean;\n underline?: boolean;\n /** Line-through. */\n del?: boolean;\n /** Highlight pill — wa-iro 山吹 (warning) tint. */\n mark?: boolean;\n /** Render as inline `<code>` chip. */\n code?: boolean;\n /** Render as inline `<kbd>` chip. */\n keyboard?: boolean;\n /** Truncate to one or more rows with ellipsis. */\n truncate?: TypographyTruncate;\n /** Show a copy icon-button after the text. */\n copyable?: boolean | { text?: string; onCopy?: () => void };\n}\n\nconst COLOR_CLASS: Record<TypographyColor, string> = {\n default: \"\",\n secondary: \"typography-color-secondary\",\n success: \"typography-color-success\",\n warning: \"typography-color-warning\",\n attention: \"typography-color-attention\",\n info: \"typography-color-info\",\n destructive: \"typography-color-destructive\",\n};\n\nfunction commonClasses(p: TypographyCommonProps): string {\n return cn(\n p.color && p.color !== \"default\" && COLOR_CLASS[p.color],\n p.disabled && \"typography-disabled\",\n p.strong && \"typography-strong\",\n p.italic && \"typography-italic\",\n p.underline && \"typography-underline\",\n p.del && \"typography-delete\",\n p.mark && \"typography-mark\",\n p.code && \"typography-code\",\n p.keyboard && \"typography-keyboard\",\n p.truncate === true && \"typography-ellipsis\",\n typeof p.truncate === \"object\" &&\n p.truncate !== null &&\n ((p.truncate.rows ?? 1) > 1\n ? \"typography-ellipsis-multi\"\n : \"typography-ellipsis\"),\n );\n}\n\nfunction truncateStyle(\n t: TypographyTruncate | undefined,\n): React.CSSProperties | undefined {\n if (!t || typeof t !== \"object\") return undefined;\n const rows = t.rows ?? 1;\n if (rows <= 1) return undefined;\n return { WebkitLineClamp: rows } as React.CSSProperties;\n}\n\n// ─── Copyable affordance ────────────────────────────────────────\n\nfunction useCopyable(\n copyable: TypographyCommonProps[\"copyable\"],\n rawText: ReactNode,\n) {\n const [copied, setCopied] = useState(false);\n if (!copyable) return null;\n const onCopy = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n const text =\n typeof copyable === \"object\" && copyable.text\n ? copyable.text\n : typeof rawText === \"string\"\n ? rawText\n : \"\";\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (typeof copyable === \"object\" && copyable.onCopy) copyable.onCopy();\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n /* clipboard rejected — fail silently */\n }\n };\n return (\n <button\n type=\"button\"\n className={cn(\"typography-action\", copied && \"copied\")}\n onClick={onCopy}\n aria-label={copied ? \"Copied\" : \"Copy\"}\n >\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {copied ? (\n <polyline points=\"20 6 9 17 4 12\" />\n ) : (\n <>\n <rect x={9} y={9} width={13} height={13} rx={2} ry={2} />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </>\n )}\n </svg>\n </button>\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────\n\nexport type TitleSize = 1 | 2 | 3 | 4 | 5;\n\nexport interface TitleProps\n extends Omit<ComponentProps<\"h1\">, \"color\">,\n TypographyCommonProps {\n /** Heading scale — renders `<h{size}>` and binds the canon\n * font-size token. `1` = `--text-4xl` (h1 cap), `2` = `--text-2xl`\n * (h2), `3` = `--text-xl` (page title), `4` = `--text-lg`\n * (subheading), `5` = `--text-md` (content body). */\n size?: TitleSize;\n}\n\nexport const Title = forwardRef<HTMLHeadingElement, TitleProps>(function Title(\n {\n size = 1,\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n copyable,\n className,\n children,\n style,\n ...rest\n },\n ref,\n) {\n const Tag = `h${size}` as ElementType;\n const action = useCopyable(copyable, children);\n return (\n <Tag\n ref={ref}\n className={cn(\n \"typography typography-title\",\n `typography-title-${size}`,\n commonClasses({\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n }),\n className,\n )}\n style={{ ...truncateStyle(truncate), ...style }}\n {...rest}\n >\n {children}\n {action}\n </Tag>\n );\n});\n\n// ─── Paragraph ───────────────────────────────────────────────────\n\nexport interface ParagraphProps\n extends Omit<ComponentProps<\"p\">, \"color\">,\n TypographyCommonProps {}\n\nexport const Paragraph = forwardRef<HTMLParagraphElement, ParagraphProps>(\n function Paragraph(\n {\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n copyable,\n className,\n children,\n style,\n ...rest\n },\n ref,\n ) {\n const action = useCopyable(copyable, children);\n return (\n <p\n ref={ref}\n className={cn(\n \"typography typography-paragraph\",\n commonClasses({\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n }),\n className,\n )}\n style={{ ...truncateStyle(truncate), ...style }}\n {...rest}\n >\n {children}\n {action}\n </p>\n );\n },\n);\n\n// ─── Text ────────────────────────────────────────────────────────\n\nexport interface TextProps\n extends Omit<ComponentProps<\"span\">, \"color\">,\n TypographyCommonProps {}\n\nexport const Text = forwardRef<HTMLSpanElement, TextProps>(function Text(\n {\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n copyable,\n className,\n children,\n style,\n ...rest\n },\n ref,\n) {\n const action = useCopyable(copyable, children);\n return (\n <span\n ref={ref}\n className={cn(\n \"typography typography-text\",\n commonClasses({\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n }),\n className,\n )}\n style={{ ...truncateStyle(truncate), ...style }}\n {...rest}\n >\n {children}\n {action}\n </span>\n );\n});\n\n// ─── Link ────────────────────────────────────────────────────────\n\nexport interface LinkProps\n extends Omit<ComponentProps<\"a\">, \"color\">,\n Omit<TypographyCommonProps, \"color\"> {\n /** Override link colour (default `--primary`). Use\n * `color=\"destructive\"` etc. when the link's semantic role is\n * non-default. */\n color?: TypographyColor;\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(\n {\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n copyable,\n className,\n children,\n style,\n ...rest\n },\n ref,\n) {\n const action = useCopyable(copyable, children);\n return (\n <a\n ref={ref}\n className={cn(\n \"typography typography-link\",\n commonClasses({\n color,\n disabled,\n strong,\n italic,\n underline,\n del,\n mark,\n code,\n keyboard,\n truncate,\n }),\n className,\n )}\n style={{ ...truncateStyle(truncate), ...style }}\n aria-disabled={disabled || undefined}\n {...rest}\n >\n {children}\n {action}\n </a>\n );\n});\n\n// ─── Namespaced export ───────────────────────────────────────────\n\nexport const Typography = {\n Title,\n Paragraph,\n Text,\n Link,\n};\n","import type { ComponentProps, ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\nexport interface DescriptionsOption {\n label: ReactNode\n value: ReactNode\n span?: number\n className?: string\n}\n\nexport interface DescriptionsProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n title?: ReactNode\n extra?: ReactNode\n items: DescriptionsOption[]\n column?: number\n layout?: \"horizontal\" | \"vertical\"\n bordered?: boolean\n size?: \"small\" | \"default\" | \"large\"\n}\n\nconst SIZE_CLASS: Record<NonNullable<DescriptionsProps[\"size\"]>, string> = {\n small: \"descriptions-size-small\",\n default: \"\",\n large: \"descriptions-size-large\",\n}\n\nexport function Descriptions({\n title,\n extra,\n items,\n column = 3,\n layout = \"horizontal\",\n bordered = false,\n size = \"default\",\n className,\n style,\n ...rest\n}: DescriptionsProps) {\n return (\n <div\n className={cn(\n \"descriptions\",\n layout === \"vertical\" && \"descriptions-vertical\",\n bordered && \"descriptions-bordered\",\n SIZE_CLASS[size],\n className,\n )}\n style={{\n gridTemplateColumns: `repeat(${column}, minmax(0, 1fr))`,\n ...style,\n }}\n {...rest}\n >\n {(title !== undefined || extra !== undefined) && (\n <div className=\"descriptions-header\">\n {title !== undefined && (\n <h3 className=\"descriptions-title\">{title}</h3>\n )}\n {extra !== undefined && (\n <div className=\"descriptions-extra\">{extra}</div>\n )}\n </div>\n )}\n <div\n className=\"descriptions-body\"\n style={{\n gridTemplateColumns: `repeat(${column}, minmax(0, 1fr))`,\n }}\n >\n {items.map((item, index) => (\n <div\n key={`${String(item.label)}-${index}`}\n className={cn(\"descriptions-item\", item.className)}\n style={{ gridColumn: `span ${item.span ?? 1}` }}\n >\n <div className=\"descriptions-item-label\">{item.label}</div>\n <div className=\"descriptions-item-value\">{item.value}</div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Separator — horizontal / vertical divider. Wraps Radix Separator for\n * ARIA + decorative semantics. Maps to `.divider` styling in tokens.css\n * (1px border, theme-aware color).\n */\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = \"horizontal\", decorative = true, ...rest }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n orientation={orientation}\n decorative={decorative}\n className={cn(\n orientation === \"horizontal\" ? \"divider\" : \"\",\n className,\n )}\n style={\n orientation === \"vertical\"\n ? { width: 1, height: \"100%\", background: \"var(--border)\", border: 0 }\n : undefined\n }\n {...rest}\n />\n )\n})\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { type ComponentPropsWithoutRef, type ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\nexport interface DropdownMenuOption {\n key: string\n label?: ReactNode\n onSelect?: ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>[\"onSelect\"]\n disabled?: boolean\n variant?: \"default\" | \"destructive\"\n shortcut?: ReactNode\n type?: \"item\" | \"label\" | \"separator\"\n}\n\nexport interface DropdownMenuProps\n extends Omit<ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>, \"children\"> {\n trigger: ReactNode\n items: DropdownMenuOption[]\n align?: ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>[\"align\"]\n sideOffset?: number\n contentClassName?: string\n}\n\nexport function DropdownMenu({\n trigger,\n items,\n align,\n sideOffset = 6,\n contentClassName,\n ...rootProps\n}: DropdownMenuProps) {\n return (\n <DropdownMenuPrimitive.Root {...rootProps}>\n <DropdownMenuPrimitive.Trigger asChild>{trigger}</DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\"dropdown-menu-content\", contentClassName)}\n >\n {items.map((item) => {\n if (item.type === \"separator\") {\n return (\n <DropdownMenuPrimitive.Separator\n key={item.key}\n className=\"dropdown-menu-separator\"\n />\n )\n }\n if (item.type === \"label\") {\n return (\n <DropdownMenuPrimitive.Label\n key={item.key}\n className=\"dropdown-menu-label\"\n >\n {item.label}\n </DropdownMenuPrimitive.Label>\n )\n }\n return (\n <DropdownMenuPrimitive.Item\n key={item.key}\n disabled={item.disabled}\n onSelect={item.onSelect}\n className=\"dropdown-menu-item\"\n data-variant={item.variant === \"destructive\" ? \"destructive\" : undefined}\n >\n {item.label}\n {item.shortcut && (\n <span className=\"dropdown-menu-shortcut\">{item.shortcut}</span>\n )}\n </DropdownMenuPrimitive.Item>\n )\n })}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n )\n}\n","import {\n Button as RACButton,\n Calendar as RACCalendar,\n CalendarCell as RACCalendarCell,\n CalendarGrid as RACCalendarGrid,\n CalendarGridBody as RACCalendarGridBody,\n CalendarGridHeader as RACCalendarGridHeader,\n CalendarHeaderCell as RACCalendarHeaderCell,\n Heading as RACHeading,\n RangeCalendar as RACRangeCalendar,\n type CalendarProps as RACCalendarProps,\n type DateValue,\n type RangeCalendarProps as RACRangeCalendarProps,\n} from \"react-aria-components\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { cn } from \"../cn\"\n\n/**\n * Calendar — accessible date grid built on React Aria Components.\n *\n * Replaces the prior `react-day-picker` wrapper. The Adobe React\n * Aria stack is the modern shadcn / Radix-ecosystem recommendation\n * for date input: ARIA APG-compliant, full keyboard nav (arrow keys\n * / PageUp/PageDown / Home/End), locale-aware via `react-aria-i18n`,\n * and timezone-correct via `@internationalized/date`.\n *\n * Two exports:\n *\n * - `<Calendar>` — single date selection. `value` is a\n * `@internationalized/date` `CalendarDate` (or null); `onChange`\n * receives the same shape. Convert to/from JS `Date` with\n * `parseDate`, `today`, `getLocalTimeZone` from `@internationalized/date`.\n *\n * - `<RangeCalendar>` — contiguous range selection. `value` is\n * `{ start: CalendarDate, end: CalendarDate } | null`.\n *\n * @example\n * import { Calendar } from \"@godxjp/ui\"\n * import { today, getLocalTimeZone } from \"@internationalized/date\"\n *\n * const [value, setValue] = useState<CalendarDate | null>(\n * today(getLocalTimeZone())\n * )\n * <Calendar value={value} onChange={setValue} aria-label=\"Pick a date\" />\n *\n * @see https://react-spectrum.adobe.com/react-aria/Calendar.html\n */\nexport interface CalendarProps<T extends DateValue = DateValue>\n extends Omit<RACCalendarProps<T>, \"children\"> {\n className?: string\n}\n\nexport function Calendar<T extends DateValue = DateValue>({\n className,\n ...rest\n}: CalendarProps<T>) {\n return (\n <RACCalendar {...rest} className={cn(\"calendar\", className)}>\n <CalendarHeader />\n <RACCalendarGrid>\n <RACCalendarGridHeader>\n {(day) => (\n <RACCalendarHeaderCell className=\"calendar-weekday\">\n {day}\n </RACCalendarHeaderCell>\n )}\n </RACCalendarGridHeader>\n <RACCalendarGridBody>\n {(date) => <RACCalendarCell date={date} className=\"calendar-day\" />}\n </RACCalendarGridBody>\n </RACCalendarGrid>\n </RACCalendar>\n )\n}\n\nexport interface RangeCalendarProps<T extends DateValue = DateValue>\n extends Omit<RACRangeCalendarProps<T>, \"children\"> {\n className?: string\n}\n\nexport function RangeCalendar<T extends DateValue = DateValue>({\n className,\n ...rest\n}: RangeCalendarProps<T>) {\n return (\n <RACRangeCalendar {...rest} className={cn(\"calendar\", \"calendar-range\", className)}>\n <CalendarHeader />\n <RACCalendarGrid>\n <RACCalendarGridHeader>\n {(day) => (\n <RACCalendarHeaderCell className=\"calendar-weekday\">\n {day}\n </RACCalendarHeaderCell>\n )}\n </RACCalendarGridHeader>\n <RACCalendarGridBody>\n {(date) => <RACCalendarCell date={date} className=\"calendar-day\" />}\n </RACCalendarGridBody>\n </RACCalendarGrid>\n </RACRangeCalendar>\n )\n}\n\nfunction CalendarHeader() {\n return (\n <header className=\"calendar-header\">\n <RACButton slot=\"previous\" className=\"calendar-nav\">\n <ChevronLeft aria-hidden size={16} strokeWidth={1.5} />\n </RACButton>\n <RACHeading className=\"calendar-title\" />\n <RACButton slot=\"next\" className=\"calendar-nav\">\n <ChevronRight aria-hidden size={16} strokeWidth={1.5} />\n </RACButton>\n </header>\n )\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport {\n type ComponentPropsWithoutRef,\n type FormHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\nexport interface DialogProps extends ComponentPropsWithoutRef<\n typeof DialogPrimitive.Root\n> {\n trigger?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n className?: string;\n contentProps?: Omit<\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n \"children\" | \"className\"\n >;\n form?: FormHTMLAttributes<HTMLFormElement>;\n}\n\nexport function Dialog({\n trigger,\n title,\n description,\n footer,\n children,\n className,\n contentProps,\n form,\n ...rootProps\n}: DialogProps) {\n const content = (\n <>\n <div className=\"dialog-header\">\n <DialogPrimitive.Title className=\"dialog-title\">\n {title}\n </DialogPrimitive.Title>\n {description !== undefined && (\n <DialogPrimitive.Description className=\"dialog-description\">\n {description}\n </DialogPrimitive.Description>\n )}\n </div>\n {children}\n {footer !== undefined && <div className=\"dialog-footer\">{footer}</div>}\n </>\n );\n const descriptionProps =\n description === undefined\n ? ({ \"aria-describedby\": undefined } as const)\n : {};\n\n return (\n <DialogPrimitive.Root {...rootProps}>\n {trigger !== undefined && (\n <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>\n )}\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"dialog-overlay\" />\n <DialogPrimitive.Content\n {...contentProps}\n {...descriptionProps}\n className={cn(\"dialog-content\", className)}\n >\n {form !== undefined ? <form {...form}>{content}</form> : content}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type FormHTMLAttributes,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\nexport type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nexport interface SheetProps\n extends Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Root>, \"children\"> {\n trigger?: ReactNode\n title?: ReactNode\n description?: ReactNode\n footer?: ReactNode\n children?: ReactNode\n side?: SheetSide\n className?: string\n contentProps?: Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, \"children\">\n form?: FormHTMLAttributes<HTMLFormElement>\n}\n\nexport const Sheet = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n SheetProps\n>(function Sheet(\n {\n trigger,\n title,\n description,\n footer,\n children,\n side = \"right\",\n className,\n contentProps,\n form,\n ...rootProps\n },\n ref,\n) {\n const body = (\n <>\n {(title || description) && (\n <div className=\"dialog-header\">\n {title && <DialogPrimitive.Title className=\"dialog-title\">{title}</DialogPrimitive.Title>}\n {description && (\n <DialogPrimitive.Description className=\"dialog-description\">\n {description}\n </DialogPrimitive.Description>\n )}\n </div>\n )}\n {children}\n {footer && <div className=\"dialog-footer\">{footer}</div>}\n </>\n )\n\n return (\n <DialogPrimitive.Root {...rootProps}>\n {trigger && <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>}\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"sheet-overlay\" />\n <DialogPrimitive.Content\n ref={ref}\n data-side={side}\n {...contentProps}\n className={cn(\"sheet-content\", className, contentProps?.className)}\n >\n {form ? <form {...form}>{body}</form> : body}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n})\n","import * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\nexport interface AlertDialogProps\n extends Omit<ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Root>, \"children\"> {\n trigger?: ReactNode\n title: ReactNode\n description?: ReactNode\n children?: ReactNode\n cancel?: ReactNode\n action?: ReactNode\n footer?: ReactNode\n className?: string\n contentProps?: Omit<ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>, \"children\">\n}\n\nexport const AlertDialog = forwardRef<\n ElementRef<typeof AlertDialogPrimitive.Content>,\n AlertDialogProps\n>(function AlertDialog(\n {\n trigger,\n title,\n description,\n children,\n cancel,\n action,\n footer,\n className,\n contentProps,\n ...rootProps\n },\n ref,\n) {\n return (\n <AlertDialogPrimitive.Root {...rootProps}>\n {trigger && <AlertDialogPrimitive.Trigger asChild>{trigger}</AlertDialogPrimitive.Trigger>}\n <AlertDialogPrimitive.Portal>\n <AlertDialogPrimitive.Overlay className=\"dialog-overlay\" />\n <AlertDialogPrimitive.Content\n ref={ref}\n {...contentProps}\n className={cn(\"dialog-content\", className, contentProps?.className)}\n >\n <div className=\"dialog-header\">\n <AlertDialogPrimitive.Title className=\"dialog-title\">\n {title}\n </AlertDialogPrimitive.Title>\n {description && (\n <AlertDialogPrimitive.Description className=\"dialog-description\">\n {description}\n </AlertDialogPrimitive.Description>\n )}\n </div>\n {children}\n {(footer || cancel || action) && (\n <div className=\"dialog-footer\">\n {footer}\n {cancel && (\n <AlertDialogPrimitive.Cancel className=\"btn btn-secondary\">\n {cancel}\n </AlertDialogPrimitive.Cancel>\n )}\n {action && (\n <AlertDialogPrimitive.Action className=\"btn btn-primary\">\n {action}\n </AlertDialogPrimitive.Action>\n )}\n </div>\n )}\n </AlertDialogPrimitive.Content>\n </AlertDialogPrimitive.Portal>\n </AlertDialogPrimitive.Root>\n )\n})\n","import { useEffect, useState } from \"react\";\nimport type { Breakpoint } from \"../components/layout/Row\";\n\n/**\n * useBreakpoint — reads the framework's responsive breakpoint\n * tokens (`--breakpoint-{xs,sm,md,lg,xl,xxl}`) from the CSS\n * token system and returns the WIDEST currently-matching\n * breakpoint name.\n *\n * Per cardinal rule 22 the breakpoint values are token-pinned —\n * no hardcoded literals here; the hook reads `:root` via\n * `getComputedStyle`. Falls back to Tailwind v4 defaults if the\n * tokens aren't set yet (e.g. SSR / hydration / Storybook iframe\n * before theme.css loads).\n *\n * Per cardinal rule 23 §B the breakpoint name vocabulary is locked\n * across the framework — the `Breakpoint` type lives in\n * `components/layout/Row.ts` and is imported here so\n * consumers see exactly one definition.\n *\n * @example\n * const bp = useBreakpoint()\n * if (bp === \"xs\" || bp === \"sm\") return <MobileShell />\n * return <DesktopShell />\n *\n * @example\n * // Render only on >= md\n * const bp = useBreakpoint()\n * return matchBreakpoint(bp, \"md\") ? <Aside /> : null\n */\nexport type { Breakpoint };\n\nconst BP_ORDER: Breakpoint[] = [\"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"];\nconst BP_ORDER_ASC: Breakpoint[] = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"];\n\nconst FALLBACK_WIDTH: Record<Breakpoint, string> = {\n xs: \"0px\",\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n xxl: \"1536px\",\n};\n\nfunction widthOf(bp: Breakpoint): string {\n if (typeof window === \"undefined\") return FALLBACK_WIDTH[bp];\n const v = getComputedStyle(document.documentElement)\n .getPropertyValue(`--breakpoint-${bp}`)\n .trim();\n return v || FALLBACK_WIDTH[bp];\n}\n\nfunction currentBreakpoint(): Breakpoint {\n if (typeof window === \"undefined\") return \"xs\";\n for (const bp of BP_ORDER) {\n if (window.matchMedia(`(min-width: ${widthOf(bp)})`).matches) {\n return bp;\n }\n }\n return \"xs\";\n}\n\nexport function useBreakpoint(): Breakpoint {\n const [bp, setBp] = useState<Breakpoint>(() => currentBreakpoint());\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const mqls = BP_ORDER.map((b) =>\n window.matchMedia(`(min-width: ${widthOf(b)})`),\n );\n const update = () => setBp(currentBreakpoint());\n mqls.forEach((mql) => mql.addEventListener(\"change\", update));\n update();\n return () => {\n mqls.forEach((mql) => mql.removeEventListener(\"change\", update));\n };\n }, []);\n\n return bp;\n}\n\n/**\n * matchBreakpoint — true if `current` is at-or-above the target\n * breakpoint in the mobile-first order.\n *\n * matchBreakpoint(\"lg\", \"md\") → true (lg ≥ md)\n * matchBreakpoint(\"sm\", \"lg\") → false (sm < lg)\n */\nexport function matchBreakpoint(current: Breakpoint, target: Breakpoint): boolean {\n return BP_ORDER_ASC.indexOf(current) >= BP_ORDER_ASC.indexOf(target);\n}\n","/**\n * @godxjp/ui Table — slim primitive.\n *\n * Renders columns × rows. Sort indicators, resize handles, checkbox\n * column (driven by `selection`), expand toggles, tree twirls, group\n * banners, inline editing, sticky columns. The chrome — view tabs,\n * toolbar, filter chips, batch action band, pagination, column\n * manager Sheet, save-view Dialog — lives on the `<DataTable>`\n * composite (`src/components/composites/data-table/`).\n *\n * v5.0.0 (Stage 4b, Plan §3). The legacy chrome props (`toolbar`,\n * `views`, `batchActions`, `filters`, `onFiltersChange`, `filterBar`,\n * `onResetFilters`, `pagination`, `tableKey`) were removed in this\n * release. See `docs/how-to/migrate-to-data-table.md`.\n */\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n type Column,\n type ColumnPinningState,\n type Row,\n type Table as ReactTable,\n type Updater,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport { matchBreakpoint, useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport type { Breakpoint } from \"../layout/Row\";\nimport {\n Fragment,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../cn\";\nimport { Checkbox } from \"../data-entry/Checkbox\";\nimport { Button } from \"../general/Button\";\nimport { Empty } from \"./Empty\";\nimport type {\n TableColumn,\n TableColumnVisibility,\n TableGroupDescriptor,\n TableProps,\n TableRowKey,\n TableSort,\n TableSortState,\n TableStickyConfig,\n TableStickySide,\n} from \"./Table.types\";\n// Re-export the type surface so existing `from \"./data-display/Table\"`\n// imports continue to resolve identically to before the Stage 4 split.\nexport type {\n TableColumn,\n TableColumnPinningChange,\n TableColumnVisibility,\n TableDensity,\n TableEditingConfig,\n TableExpandableConfig,\n TableGroupBy,\n TableGroupDescriptor,\n TableProps,\n TableRowKey,\n TableSelectionConfig,\n TableSort,\n TableSortState,\n TableStickyConfig,\n TableStickySide,\n TableTreeConfig,\n} from \"./Table.types\";\n// Chrome-shaped types remain importable from this module for the\n// composite consumers that still reference them (PR 4/4 of stage 4b\n// will move them into `composites/data-table/DataTable.types.ts`).\nexport type {\n TableBatchActions,\n TableBatchActionsConfig,\n TableBatchActionsContext,\n TableFilter,\n TableFilterBar,\n TableFilterItem,\n TableFilterOperator,\n TableFilterOption,\n TablePagination,\n TablePaginationConfig,\n TablePaginationCursorConfig,\n TablePaginationLoadMoreConfig,\n TablePaginationNumberedConfig,\n TablePaginationVariantConfig,\n TableToolbar,\n TableToolbarButtonConfig,\n TableToolbarColumnConfig,\n TableToolbarConfig,\n TableToolbarFilterConfig,\n TableToolbarSearchConfig,\n TableViewItem,\n TableViewSnapshot,\n TableViews,\n TableViewsConfig,\n} from \"./Table.types\";\n\nfunction resolveUpdater<T>(updater: Updater<T>, previous: T): T {\n return typeof updater === \"function\"\n ? (updater as (old: T) => T)(previous)\n : updater;\n}\n\nfunction resolveRowKey<TData>(\n row: TData,\n index: number,\n rowKey: TableRowKey<TData>,\n warnMissingRowKey: (rowKey: string) => void,\n) {\n if (typeof rowKey === \"function\") {\n const value = rowKey(row, index);\n return String(value);\n }\n if (\n typeof row === \"object\" &&\n row !== null &&\n Object.prototype.hasOwnProperty.call(row, rowKey)\n ) {\n const value = (row as Record<string, unknown>)[rowKey];\n if (value !== undefined && value !== null) return String(value);\n }\n warnMissingRowKey(rowKey);\n return String(index);\n}\n\nfunction resolveCellClass<TData>(\n value: string | ((row: Row<TData>) => string | undefined) | undefined,\n row: Row<TData>,\n) {\n return typeof value === \"function\" ? value(row) : value;\n}\n\nfunction resolveCellStyle<TData>(\n value:\n | CSSProperties\n | ((row: Row<TData>) => CSSProperties | undefined)\n | undefined,\n row: Row<TData>,\n) {\n return typeof value === \"function\" ? value(row) : value;\n}\n\nfunction getColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction asSortArray(sort: TableSortState | undefined): TableSort[] {\n if (sort === undefined || sort === null) return [];\n return Array.isArray(sort) ? sort : [sort];\n}\n\nfunction findSortEntry(sort: TableSortState | undefined, key: string) {\n const list = asSortArray(sort);\n const index = list.findIndex((item) => item.key === key);\n return index === -1 ? undefined : { entry: list[index], index, list };\n}\n\n/** Single-click cycle: asc → desc → off. Replaces the head of the list. */\nfunction nextSingleSort(\n current: TableSortState | null | undefined,\n key: string,\n): TableSortState {\n const entry = findSortEntry(current, key);\n if (entry === undefined) return { key, direction: \"asc\" };\n if (entry.entry.direction === \"asc\") return { key, direction: \"desc\" };\n return null;\n}\n\n/** Shift-click: extend the list. Same key → cycle that entry's direction or drop it. */\nfunction nextMultiSort(\n current: TableSortState | null | undefined,\n key: string,\n): TableSortState {\n const list = asSortArray(current);\n const index = list.findIndex((item) => item.key === key);\n if (index === -1) {\n return [...list, { key, direction: \"asc\" }];\n }\n const existing = list[index];\n const next = [...list];\n if (existing.direction === \"asc\") {\n next[index] = { key, direction: \"desc\" };\n } else {\n next.splice(index, 1);\n }\n if (next.length === 0) return null;\n if (next.length === 1) return next[0];\n return next;\n}\n\nfunction resolveStickySide(\n config: TableStickyConfig | undefined,\n bp: Breakpoint,\n): TableStickySide | undefined {\n if (config === undefined || config === false) return undefined;\n if (typeof config === \"string\") return config;\n if (config.from !== undefined && !matchBreakpoint(bp, config.from))\n return undefined;\n return config.side;\n}\n\nfunction deriveColumnPinning<TData>(\n columns: TableColumn<TData, unknown>[],\n bp: Breakpoint,\n): ColumnPinningState {\n return columns.reduce<ColumnPinningState>(\n (state, column) => {\n const key = getColumnKey(column);\n if (key === undefined) return state;\n const side = resolveStickySide(column.meta?.sticky, bp);\n if (side === undefined) return state;\n return { ...state, [side]: [...(state[side] ?? []), key] };\n },\n { left: [], right: [] },\n );\n}\n\nfunction getColumnStyle<TData>(\n column: Column<TData, unknown>,\n extra?: CSSProperties,\n): CSSProperties {\n const pinned = column.getIsPinned();\n const size = column.columnDef.size;\n return {\n width: size !== undefined ? `${column.getSize()}px` : undefined,\n minWidth:\n column.columnDef.minSize !== undefined\n ? `${column.columnDef.minSize}px`\n : undefined,\n maxWidth:\n column.columnDef.maxSize !== undefined\n ? `${column.columnDef.maxSize}px`\n : undefined,\n position: pinned ? \"sticky\" : undefined,\n left: pinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: pinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n zIndex: pinned ? 2 : undefined,\n ...extra,\n };\n}\n\nexport function Table<TData>({\n columns,\n data,\n density,\n containerClassName,\n stickyHeader,\n rowKey = \"id\" as TableRowKey<TData>,\n getRowId,\n caption,\n defaultColumnVisibility,\n columnVisibility,\n onColumnVisibilityChange,\n sort,\n onSortChange,\n resizable,\n expandable,\n editing,\n groupBy,\n tree,\n onColumnPinningChange,\n selection,\n footer,\n empty,\n rowClassName,\n className,\n instance,\n ...rest\n}: TableProps<TData>) {\n const { t } = useTranslation();\n const warnedRowKeys = useRef(new Set<string>());\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<TableColumnVisibility>(\n () => columnVisibility ?? defaultColumnVisibility ?? {},\n );\n const effectiveColumnVisibility =\n columnVisibility ?? internalColumnVisibility;\n // Auto-pinning is derived from `meta.sticky` against the current\n // breakpoint, so `{ side: \"right\", from: \"md\" }` only sticks on md+.\n // User-toggled pins live in the `<DataTable>` composite.\n const bp = useBreakpoint();\n const autoColumnPinning = useMemo(\n () => deriveColumnPinning(columns, bp),\n [columns, bp],\n );\n const [userColumnPinning, setUserColumnPinning] =\n useState<ColumnPinningState>({ left: [], right: [] });\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const dedupe = (list: string[]) => Array.from(new Set(list));\n return {\n left: dedupe([\n ...(autoColumnPinning.left ?? []),\n ...(userColumnPinning.left ?? []),\n ]),\n right: dedupe([\n ...(autoColumnPinning.right ?? []),\n ...(userColumnPinning.right ?? []),\n ]),\n };\n }, [autoColumnPinning, userColumnPinning]);\n const handleColumnPinningChange = (updater: Updater<ColumnPinningState>) => {\n const next = resolveUpdater(updater, columnPinning);\n const autoLeft = new Set(autoColumnPinning.left ?? []);\n const autoRight = new Set(autoColumnPinning.right ?? []);\n setUserColumnPinning({\n left: (next.left ?? []).filter((key) => !autoLeft.has(key)),\n right: (next.right ?? []).filter((key) => !autoRight.has(key)),\n });\n onColumnPinningChange?.(next);\n };\n // Expand-row + tree-row + editing internal state.\n const [internalExpandedRowKeys, setInternalExpandedRowKeys] = useState<\n string[]\n >(() => expandable?.defaultExpandedRowKeys ?? []);\n const expandedRowKeys =\n expandable?.expandedRowKeys ?? internalExpandedRowKeys;\n const expandedRowKeySet = new Set(expandedRowKeys);\n function toggleExpandedRow(rowId: string) {\n if (expandable === undefined) return;\n const allowMultiple = expandable.allowMultiple === true;\n const nextSet = new Set(expandedRowKeys);\n if (nextSet.has(rowId)) {\n nextSet.delete(rowId);\n } else {\n if (!allowMultiple) nextSet.clear();\n nextSet.add(rowId);\n }\n const next = Array.from(nextSet);\n if (expandable.expandedRowKeys === undefined)\n setInternalExpandedRowKeys(next);\n expandable.onExpandedRowsChange?.(next);\n }\n const [internalTreeExpandedNodes, setInternalTreeExpandedNodes] = useState<\n string[]\n >(() => tree?.defaultExpandedNodes ?? []);\n const treeExpandedNodes =\n tree?.expandedNodes ?? internalTreeExpandedNodes;\n const treeExpandedSet = new Set(treeExpandedNodes);\n function toggleTreeNode(nodeKey: string) {\n if (tree === undefined) return;\n const nextSet = new Set(treeExpandedNodes);\n if (nextSet.has(nodeKey)) nextSet.delete(nodeKey);\n else nextSet.add(nodeKey);\n const next = Array.from(nextSet);\n if (tree.expandedNodes === undefined) setInternalTreeExpandedNodes(next);\n tree.onExpandedNodesChange?.(next);\n }\n const dirtyRowSet = new Set(editing?.dirtyRowIds ?? []);\n const dirtyCellSet = new Set(editing?.dirtyCellIds ?? []);\n const resolveGetRowId =\n getRowId ??\n ((row: TData, index: number) =>\n resolveRowKey(row, index, rowKey, (missingRowKey) => {\n if (warnedRowKeys.current.has(missingRowKey)) return;\n warnedRowKeys.current.add(missingRowKey);\n console.warn(\n `[godx-ui/Table] rowKey \"${missingRowKey}\" was not found on a row. Pass rowKey or getRowId to provide a stable row id.`,\n );\n }));\n const handleColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n const next = resolveUpdater(updater, effectiveColumnVisibility);\n if (columnVisibility === undefined) setInternalColumnVisibility(next);\n onColumnVisibilityChange?.(next);\n };\n const tableState = useMemo(\n () => ({ columnPinning, columnVisibility: effectiveColumnVisibility }),\n [columnPinning, effectiveColumnVisibility],\n );\n // Always-call-the-hook pattern: the local `useReactTable` runs\n // unconditionally so the rules-of-hooks invariant holds. When an\n // external `instance` is supplied (typically by `<DataTable>` via\n // `useDataTable`) we defer to it for state + row model.\n const localTable = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getRowId: resolveGetRowId,\n enableColumnPinning: true,\n enableColumnResizing: resizable === true,\n columnResizeMode: \"onChange\",\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnPinningChange: handleColumnPinningChange,\n state: tableState,\n });\n const table: ReactTable<TData> = instance ?? localTable;\n const leafColumns = table.getVisibleLeafColumns();\n const hasFooter = leafColumns.some(\n (column) => column.columnDef.footer !== undefined,\n );\n\n // ── Selection wiring (checkbox column only) ──────────────────────\n const selectedRowKeySet = new Set(selection?.selectedRowKeys ?? []);\n const selectableRows = table\n .getRowModel()\n .rows.filter((row) => selection?.getCheckboxDisabled?.(row) !== true);\n const allVisibleSelected =\n selection !== undefined &&\n selectableRows.length > 0 &&\n selectableRows.every((row) => selectedRowKeySet.has(row.id));\n const selectAllVisible = () => {\n if (selection === undefined) return;\n const next = new Set(selection.selectedRowKeys);\n if (allVisibleSelected) selectableRows.forEach((row) => next.delete(row.id));\n else selectableRows.forEach((row) => next.add(row.id));\n selection.onSelectedRowKeysChange(Array.from(next));\n };\n\n const colSpan = Math.max(\n leafColumns.length +\n (selection === undefined ? 0 : 1) +\n (expandable === undefined ? 0 : 1),\n 1,\n );\n const emptyContent = empty ?? <Empty description={t(\"table.emptyDescription\")} />;\n\n function renderDataRow(row: Row<TData>): ReactNode {\n const isEditingRow = editing?.rowId === row.id;\n const isReadOnly = editing?.isRowReadOnly?.(row) === true;\n const isDirtyRow = dirtyRowSet.has(row.id);\n const customClass = resolveCellClass(rowClassName, row);\n const stateClass = cn(\n customClass,\n isEditingRow && \"is-editing\",\n isDirtyRow && !isEditingRow && \"is-dirty\",\n );\n const isExpanded = expandedRowKeySet.has(row.id);\n const canExpand =\n expandable !== undefined &&\n (expandable.rowExpandable === undefined ||\n expandable.rowExpandable(row));\n const rowNodes: ReactNode[] = [];\n rowNodes.push(\n <tr\n key={row.id}\n className={cn(stateClass, isExpanded && \"expanded\")}\n onDoubleClick={\n editing !== undefined && !isReadOnly && !isEditingRow\n ? () => editing.onStart?.(row.id)\n : undefined\n }\n data-row-id={row.id}\n >\n {selection !== undefined && (\n <td className=\"check\">\n <Checkbox\n aria-label={t(\"table.selectRow\", { row: row.id })}\n checked={selectedRowKeySet.has(row.id)}\n disabled={selection.getCheckboxDisabled?.(row)}\n onCheckedChange={(checked) => {\n const next = new Set(selection.selectedRowKeys);\n if (checked === true) next.add(row.id);\n else next.delete(row.id);\n selection.onSelectedRowKeysChange(Array.from(next));\n }}\n />\n </td>\n )}\n {expandable !== undefined && (\n <td className=\"expand-cell\" style={{ width: 32 }}>\n {canExpand && (\n <button\n type=\"button\"\n className={cn(\"expand-toggle\", isExpanded && \"open\")}\n aria-label={\n isExpanded ? t(\"table.collapseRow\") : t(\"table.expandRow\")\n }\n aria-expanded={isExpanded}\n onClick={() => toggleExpandedRow(row.id)}\n >\n ▶\n </button>\n )}\n </td>\n )}\n {row.getVisibleCells().map((cell) => {\n const meta = cell.column.columnDef.meta;\n const cellId = `${row.id}:${cell.column.id}`;\n const isDirtyCell = dirtyCellSet.has(cellId);\n const cellContent =\n isEditingRow && !isReadOnly && editing?.renderEditCell\n ? (editing.renderEditCell(cell.column.columnDef, row) ??\n flexRender(cell.column.columnDef.cell, cell.getContext()))\n : flexRender(cell.column.columnDef.cell, cell.getContext());\n return (\n <td\n key={cell.id}\n className={cn(\n meta?.className,\n cell.column.getIsPinned() &&\n `table-pinned-${cell.column.getIsPinned()}`,\n resolveCellClass(meta?.cellClassName, row),\n isDirtyCell && \"cell-dirty\",\n )}\n style={getColumnStyle(cell.column, {\n ...meta?.style,\n ...resolveCellStyle(meta?.cellStyle, row),\n })}\n >\n {cellContent}\n </td>\n );\n })}\n </tr>,\n );\n if (expandable !== undefined && isExpanded) {\n rowNodes.push(\n <tr key={`${row.id}:expand`} className=\"expand-panel\">\n <td colSpan={colSpan}>{expandable.renderExpandedRow(row)}</td>\n </tr>,\n );\n }\n return <Fragment key={`${row.id}:wrap`}>{rowNodes}</Fragment>;\n }\n\n function renderTreeRow(\n item: TData,\n depth: number,\n nodes: ReactNode[],\n ): void {\n const id = String(resolveGetRowId(item, nodes.length));\n const children = tree?.children(item);\n const hasChildren = (children?.length ?? 0) > 0;\n const isOpen = treeExpandedSet.has(id);\n const visibleColumns = table.getVisibleLeafColumns();\n nodes.push(\n <tr key={id} className={resolveCellClass(rowClassName, {\n id,\n original: item,\n getVisibleCells: () => [],\n } as unknown as Row<TData>)}>\n {visibleColumns.map((column, columnIndex) => {\n const meta = column.columnDef.meta;\n const isFirst = columnIndex === 0;\n const indents = isFirst && depth > 0\n ? Array.from({ length: depth }, (_, i) => (\n <span key={i} className=\"indent\" aria-hidden />\n ))\n : null;\n const twirl = isFirst && hasChildren ? (\n <button\n type=\"button\"\n className={cn(\"twirl-btn\", isOpen && \"open\")}\n aria-label={isOpen ? t(\"table.collapseRow\") : t(\"table.expandRow\")}\n aria-expanded={isOpen}\n onClick={() => toggleTreeNode(id)}\n >\n ▶\n </button>\n ) : isFirst ? (\n <span className=\"indent\" aria-hidden />\n ) : null;\n const accessor = (column.columnDef as { accessorKey?: string })\n .accessorKey;\n let content: ReactNode = null;\n if (typeof column.columnDef.cell === \"function\") {\n content = column.columnDef.cell({\n row: { original: item, id } as Row<TData>,\n column,\n table,\n getValue: () =>\n accessor !== undefined\n ? (item as Record<string, unknown>)[accessor]\n : undefined,\n renderValue: () =>\n accessor !== undefined\n ? (item as Record<string, unknown>)[accessor]\n : undefined,\n cell: {} as never,\n } as never);\n } else if (accessor !== undefined) {\n const raw = (item as Record<string, unknown>)[accessor];\n content = raw === undefined || raw === null ? \"\" : String(raw);\n }\n return (\n <td\n key={column.id}\n className={cn(\n meta?.className,\n column.getIsPinned() && `table-pinned-${column.getIsPinned()}`,\n )}\n style={getColumnStyle(column, { ...meta?.style })}\n >\n {indents}\n {twirl}\n {twirl !== null ? \" \" : null}\n {content}\n </td>\n );\n })}\n </tr>,\n );\n if (hasChildren && isOpen && tree !== undefined) {\n const maxDepth = tree.maxDepth ?? 8;\n if (depth + 1 <= maxDepth) {\n for (const child of children ?? []) {\n renderTreeRow(child, depth + 1, nodes);\n }\n }\n }\n }\n\n function renderBodyRows(): ReactNode {\n const rows = table.getRowModel().rows;\n if (rows.length === 0) {\n return (\n <tr>\n <td colSpan={colSpan} className=\"muted\">\n {emptyContent}\n </td>\n </tr>\n );\n }\n if (tree !== undefined) {\n const nodes: ReactNode[] = [];\n for (const item of data) renderTreeRow(item, 0, nodes);\n return nodes;\n }\n if (groupBy !== undefined) {\n const buckets = new Map<\n string,\n { descriptor: TableGroupDescriptor; rows: Row<TData>[] }\n >();\n const order: string[] = [];\n for (const row of rows) {\n const raw = groupBy(row.original);\n if (raw === undefined) continue;\n const descriptor: TableGroupDescriptor =\n typeof raw === \"string\" ? { key: raw, label: raw } : raw;\n const bucket = buckets.get(descriptor.key);\n if (bucket === undefined) {\n buckets.set(descriptor.key, { descriptor, rows: [row] });\n order.push(descriptor.key);\n } else {\n bucket.rows.push(row);\n }\n }\n const nodes: ReactNode[] = [];\n for (const key of order) {\n const bucket = buckets.get(key);\n if (bucket === undefined) continue;\n const isCollapsed = treeExpandedSet.has(`group:collapse:${key}`);\n nodes.push(\n <tr key={`group:${key}`} className=\"group-row\">\n <td colSpan={colSpan}>\n <button\n type=\"button\"\n className=\"twirl\"\n aria-label={\n isCollapsed\n ? t(\"table.expandRow\")\n : t(\"table.collapseRow\")\n }\n aria-expanded={!isCollapsed}\n onClick={() => toggleTreeNode(`group:collapse:${key}`)}\n style={{\n background: \"transparent\",\n border: 0,\n padding: 0,\n cursor: \"pointer\",\n font: \"inherit\",\n color: \"inherit\",\n }}\n >\n {isCollapsed ? \"▶\" : \"▼\"}\n </button>{\" \"}\n {bucket.descriptor.label}\n {bucket.descriptor.count !== undefined && (\n <span className=\"gcount\">{bucket.descriptor.count}</span>\n )}\n {bucket.descriptor.total !== undefined && (\n <span className=\"gtotal\">{bucket.descriptor.total}</span>\n )}\n </td>\n </tr>,\n );\n if (!isCollapsed) {\n for (const row of bucket.rows) {\n nodes.push(renderDataRow(row));\n }\n }\n }\n return nodes;\n }\n return rows.map((row) => renderDataRow(row));\n }\n\n return (\n <div\n className={cn(\"table-stack\", containerClassName)}\n data-density={density}\n >\n <div className=\"table-scroll\">\n <table\n data-density={density}\n data-sticky-header={stickyHeader ? \"true\" : undefined}\n className={cn(\"table\", className)}\n {...rest}\n >\n {caption !== undefined && <caption>{caption}</caption>}\n <thead data-sticky={stickyHeader ? \"true\" : undefined}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {selection !== undefined && (\n <th className=\"check\">\n <Checkbox\n aria-label={t(\"table.selectAllRows\")}\n checked={allVisibleSelected}\n onCheckedChange={selectAllVisible}\n />\n </th>\n )}\n {expandable !== undefined && (\n <th className=\"expand-col\" style={{ width: 32 }} />\n )}\n {headerGroup.headers.map((header) => {\n const meta = header.column.columnDef.meta;\n const columnKey = getColumnKey(header.column.columnDef);\n const isSortable =\n meta?.sortable === true &&\n columnKey !== undefined &&\n onSortChange !== undefined;\n const sortEntry =\n columnKey !== undefined\n ? findSortEntry(sort, columnKey)\n : undefined;\n const sortedDirection = sortEntry?.entry.direction;\n const multiSortIndex =\n sortEntry !== undefined && sortEntry.list.length > 1\n ? sortEntry.index + 1\n : undefined;\n const headerContent = header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n );\n const canResize =\n resizable === true && header.column.getCanResize();\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n className={cn(\n meta?.className,\n meta?.headerClassName,\n header.column.getIsPinned() &&\n `table-pinned-${header.column.getIsPinned()}`,\n isSortable && \"sortable\",\n canResize && \"has-resize\",\n )}\n style={getColumnStyle(header.column, {\n ...meta?.style,\n ...meta?.headerStyle,\n })}\n aria-sort={\n sortedDirection === \"asc\"\n ? \"ascending\"\n : sortedDirection === \"desc\"\n ? \"descending\"\n : undefined\n }\n >\n {isSortable && columnKey !== undefined ? (\n <button\n type=\"button\"\n className=\"table-sort-button\"\n onClick={(event) => {\n const next = event.shiftKey\n ? nextMultiSort(sort, columnKey)\n : nextSingleSort(sort, columnKey);\n onSortChange(next);\n }}\n >\n {headerContent}\n <span className=\"sort\" aria-hidden>\n <span\n className={\n sortedDirection === \"asc\" ? \"a on\" : \"a\"\n }\n >\n ▲\n </span>\n <span\n className={\n sortedDirection === \"desc\" ? \"d on\" : \"d\"\n }\n >\n ▼\n </span>\n </span>\n {multiSortIndex !== undefined && (\n <span className=\"multi\" aria-hidden>\n {multiSortIndex}\n </span>\n )}\n </button>\n ) : (\n headerContent\n )}\n {canResize && (\n <button\n type=\"button\"\n aria-label={t(\"table.resizeColumn\") || \"Resize column\"}\n className=\"resize\"\n data-resizing={\n header.column.getIsResizing() ? \"true\" : undefined\n }\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => header.column.resetSize()}\n />\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody>{renderBodyRows()}</tbody>\n {hasFooter && (\n <tfoot>\n {table.getFooterGroups().map((footerGroup) => (\n <tr key={footerGroup.id}>\n {footerGroup.headers.map((footer) => {\n const meta = footer.column.columnDef.meta;\n return (\n <td\n key={footer.id}\n colSpan={footer.colSpan}\n className={cn(meta?.className)}\n style={{ ...meta?.style }}\n >\n {footer.isPlaceholder\n ? null\n : flexRender(\n footer.column.columnDef.footer,\n footer.getContext(),\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tfoot>\n )}\n </table>\n </div>\n {footer !== undefined && <div className=\"tbl-footer\">{footer}</div>}\n {editing !== undefined && dirtyRowSet.size > 0 && (\n <div className=\"tbl-footer\" data-state=\"dirty\">\n <span className=\"tbl-footer-icon\" aria-hidden>\n <svg\n width={13}\n height={13}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx={12} cy={12} r={10} />\n <line x1={12} y1={8} x2={12} y2={12} />\n <line x1={12} y1={16} x2={12.01} y2={16} />\n </svg>\n </span>\n <span>\n {editing.unsavedLabel?.(dirtyRowSet.size) ??\n t(\"table.unsavedChanges\", { count: dirtyRowSet.size })}\n </span>\n <span className=\"spacer\" />\n {editing.onCancelAll !== undefined && (\n <Button\n size=\"x-small\"\n variant=\"ghost\"\n onClick={editing.onCancelAll}\n >\n {editing.cancelAllLabel ?? t(\"table.cancelAll\")}\n </Button>\n )}\n {editing.onSaveAll !== undefined && (\n <Button size=\"x-small\" onClick={editing.onSaveAll}>\n {editing.saveAllLabel ?? t(\"table.saveAll\")}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { forwardRef, useEffect, useState, type ChangeEvent, type FocusEvent } from \"react\"\nimport { cn } from \"../cn\"\n\nexport interface TimeInputProps {\n /** Current time value in `\"HH:mm\"` (24-hour) format. */\n value?: string\n /** Fired on blur with the validated `\"HH:mm\"` string. */\n onChange?: (time: string) => void\n /** Additional class name applied to the input element. */\n className?: string\n /** Disable input + propagate aria-disabled. */\n disabled?: boolean\n /** Optional placeholder (defaults to \"HH:mm\"). */\n placeholder?: string\n /** Optional id used for label association. */\n id?: string\n /** Optional name used in form submissions. */\n name?: string\n}\n\nconst TIME_PATTERN = /^([01]\\d|2[0-3]):[0-5]\\d$/\n\nfunction normalize(raw: string): string {\n // Strip whitespace + non-digits-or-colon. Accept either \"HH:mm\" or\n // \"HHmm\" / \"H:mm\" / \"Hmm\" and coerce into canonical \"HH:mm\". Returns\n // the original string when it can't be parsed — the caller decides\n // whether to surface aria-invalid.\n const cleaned = raw.trim()\n if (!cleaned) return \"\"\n if (TIME_PATTERN.test(cleaned)) return cleaned\n const digits = cleaned.replace(/[^0-9]/g, \"\")\n if (digits.length === 3 || digits.length === 4) {\n const hh = digits.slice(0, digits.length - 2).padStart(2, \"0\")\n const mm = digits.slice(-2)\n const candidate = `${hh}:${mm}`\n if (TIME_PATTERN.test(candidate)) return candidate\n }\n return raw\n}\n\n/**\n * TimeInput — narrow text input for HH:mm (24-hour) values.\n * Mirrors the public `@godxjp/ui@0.2.0` API so call sites don't change\n * when upgrading to v2. Visual contract lives in the `.time-input`\n * class in tokens.css.\n *\n * Validation: emits `onChange` with the normalized string on blur if\n * it parses, otherwise leaves the value untouched and surfaces\n * `aria-invalid` so the consumer can style the error state.\n */\nexport const TimeInput = forwardRef<HTMLInputElement, TimeInputProps>(\n function TimeInput(\n { value, onChange, className, disabled, placeholder = \"HH:mm\", id, name },\n ref,\n ) {\n const [draft, setDraft] = useState(value ?? \"\")\n\n useEffect(() => {\n setDraft(value ?? \"\")\n }, [value])\n\n const invalid = draft !== \"\" && !TIME_PATTERN.test(draft)\n\n return (\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={5}\n id={id}\n name={name}\n disabled={disabled}\n placeholder={placeholder}\n value={draft}\n aria-invalid={invalid || undefined}\n className={cn(\"time-input\", className)}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setDraft(e.target.value)}\n onBlur={(e: FocusEvent<HTMLInputElement>) => {\n const next = normalize(e.target.value)\n setDraft(next)\n if (TIME_PATTERN.test(next) && next !== value) onChange?.(next)\n }}\n />\n )\n },\n)\n","import { forwardRef } from \"react\"\nimport {\n Toaster as SonnerToaster,\n toast,\n type ToastClassnames,\n type ToasterProps,\n} from \"sonner\"\nimport { cn } from \"../cn\"\n\nexport { toast }\nexport type { ToasterProps }\n\nconst DEFAULT_TOAST_CLASSNAMES: ToastClassnames = {\n toast: \"toast\",\n title: \"toast-title\",\n description: \"toast-description\",\n loader: \"toast-loader\",\n closeButton: \"toast-close\",\n cancelButton: \"btn btn-secondary btn-sm toast-btn\",\n actionButton: \"btn btn-primary btn-sm toast-btn\",\n success: \"toast toast--success\",\n error: \"toast toast--error\",\n info: \"toast toast--info\",\n warning: \"toast toast--warning\",\n loading: \"toast toast--loading\",\n default: \"toast toast--default\",\n content: \"toast-content\",\n icon: \"toast-icon\",\n}\n\nfunction mergeToastClassNames(override?: ToastClassnames): ToastClassnames {\n if (!override) return DEFAULT_TOAST_CLASSNAMES\n const keys = new Set([\n ...Object.keys(DEFAULT_TOAST_CLASSNAMES),\n ...Object.keys(override),\n ] as (keyof ToastClassnames)[])\n const out: ToastClassnames = {}\n for (const key of keys) {\n const base = DEFAULT_TOAST_CLASSNAMES[key]\n const over = override[key]\n if (over !== undefined || base !== undefined) {\n out[key] = cn(base, over)\n }\n }\n return out\n}\n\n/**\n * Toast host — wraps `sonner` with token classes (`tokens.css` + optional\n * `sonner.css` import). Defaults to `toastOptions.unstyled` so visuals\n * come from `.toast*` atoms, not sonner’s default gray theme.\n */\nexport const Toaster = forwardRef<HTMLElement, ToasterProps>(function Toaster(\n { toastOptions, className, ...props },\n ref,\n) {\n return (\n <SonnerToaster\n ref={ref}\n className={cn(\"toaster\", className)}\n toastOptions={{\n unstyled: true,\n ...toastOptions,\n classNames: mergeToastClassNames(toastOptions?.classNames),\n }}\n {...props}\n />\n )\n})\n","import { forwardRef, useId, useMemo, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Watermark — repeating SVG-pattern overlay applied as a CSS\n * background image on a wrapper element. Tiled rotated text via\n * `<pattern>`-like SVG referenced through `background-image:url(…)`.\n *\n * Theme-aware: the SVG uses `fill='currentColor'`, and the wrapper\n * sets `color: var(--muted-foreground)` so dark / light / accent\n * axes flow through without per-instance overrides.\n *\n * Cardinal rules honoured:\n * §21 — colour reads from `var(--muted-foreground)` (theme axis).\n * §22 — no hardcoded colour literal in the SVG (currentColor).\n * §23 — no prop name collides with the locked vocabulary; the\n * API mirrors the same `content` / `rotate` / `gap` /\n * `fontSize` / `fontFamily` / `opacity` surface as the\n * design canon's watermark example.\n *\n * @example\n * <Watermark content=\"Famgia · Confidential\">\n * <Card>…</Card>\n * </Watermark>\n */\n\nexport interface WatermarkProps extends Omit<ComponentProps<\"div\">, \"content\"> {\n /** Single line or multi-line text. Empty → no watermark drawn. */\n content?: string | string[];\n /** Rotation in degrees. Default `-22`. */\n rotate?: number;\n /** Tile gap `[x, y]` in pixels. Default `[120, 80]`. */\n gap?: [number, number];\n /** Font size in pixels. Default `14`. */\n fontSize?: number;\n /** Font family — defaults to inherited system stack. */\n fontFamily?: string;\n /** Opacity 0-1. Default `0.12`. */\n opacity?: number;\n children?: ReactNode;\n}\n\nexport const Watermark = forwardRef<HTMLDivElement, WatermarkProps>(function Watermark(\n {\n content,\n rotate = -22,\n gap = [120, 80],\n fontSize = 14,\n fontFamily,\n opacity = 0.12,\n className,\n children,\n style,\n ...rest\n },\n ref,\n) {\n const id = useId();\n const patternId = `wm-${id.replace(/[:]/g, \"\")}`;\n void patternId;\n const lines = Array.isArray(content) ? content : content ? [content] : [];\n const [gx, gy] = gap;\n const w = gx;\n const h = gy;\n const cx = w / 2;\n const cy = h / 2;\n const lineHeight = fontSize * 1.4;\n const totalTextHeight = lines.length * lineHeight;\n const textStartY = cy - totalTextHeight / 2 + fontSize;\n\n const svg = useMemo(() => {\n const xmlns = \"http://www.w3.org/2000/svg\";\n return `<svg xmlns='${xmlns}' width='${w}' height='${h}'><g transform='rotate(${rotate} ${cx} ${cy})' fill='currentColor' font-family='${fontFamily ?? \"system-ui, sans-serif\"}' font-size='${fontSize}' opacity='${opacity}'>${lines\n .map(\n (l, i) =>\n `<text x='${cx}' y='${textStartY + i * lineHeight}' text-anchor='middle'>${escapeXml(l)}</text>`,\n )\n .join(\"\")}</g></svg>`;\n }, [w, h, cx, cy, rotate, fontFamily, fontSize, opacity, lines, textStartY, lineHeight]);\n\n const dataUrl = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n\n return (\n <div\n ref={ref}\n className={cn(\"watermark\", className)}\n style={{\n position: \"relative\",\n backgroundImage: lines.length ? dataUrl : undefined,\n backgroundRepeat: \"repeat\",\n backgroundSize: `${w}px ${h}px`,\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\nfunction escapeXml(s: string): string {\n return s.replace(\n /[<>&'\"]/g,\n (c) =>\n ({ \"<\": \"&lt;\", \">\": \"&gt;\", \"&\": \"&amp;\", \"'\": \"&apos;\", '\"': \"&quot;\" })[c]!,\n );\n}\n","import { useState, type ReactNode } from \"react\";\nimport { Popover } from \"../data-display/Popover\";\nimport { Button } from \"../general/Button\";\nimport { cn } from \"../cn\";\n\n/**\n * Popconfirm — inline confirmation popover anchored to its trigger.\n *\n * <Popconfirm\n * title=\"削除しますか?\"\n * description=\"このアイテムは復元できません。\"\n * confirmLabel=\"削除\"\n * confirmVariant=\"destructive\"\n * onConfirm={() => deleteItem()}\n * >\n * <Button variant=\"destructive\">削除</Button>\n * </Popconfirm>\n *\n * Distinct from AlertDialog / Modal (full-screen modal for\n * high-stakes decisions that need focus trap + scrim). Popconfirm\n * is a LIGHTWEIGHT inline confirm — the trigger stays in flow, the\n * popover anchors next to it, no overlay dim.\n *\n * Vocabulary (per cardinal rule 23 §B):\n * - `open` / `defaultOpen` / `onOpenChange` — Radix overlay state\n * - `placement` — popover anchor side\n * - `title` / `description` / `icon` slots\n * - `confirmVariant` — Button `variant` value (\"primary\" | \"destructive\")\n */\n\nexport interface PopconfirmProps {\n title: ReactNode;\n description?: ReactNode;\n confirmLabel?: ReactNode;\n cancelLabel?: ReactNode;\n /** Button variant for the confirm action (\"primary\" | \"destructive\"). */\n confirmVariant?: \"primary\" | \"destructive\";\n /** Leading icon shown beside the title. */\n icon?: ReactNode;\n onConfirm?: () => void;\n onCancel?: () => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** The trigger element (rendered via Radix `asChild`). */\n children?: ReactNode;\n /** Anchor side relative to the trigger. */\n placement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n}\n\nconst DefaultIcon = () => (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <circle cx={12} cy={12} r={10} />\n <line x1={12} y1={8} x2={12} y2={12} />\n <line x1={12} y1={16} x2={12.01} y2={16} />\n </svg>\n);\n\nexport function Popconfirm({\n title,\n description,\n confirmLabel = \"OK\",\n cancelLabel = \"キャンセル\",\n confirmVariant = \"primary\",\n icon,\n onConfirm,\n onCancel,\n open,\n defaultOpen,\n onOpenChange,\n children,\n placement = \"top\",\n className,\n}: PopconfirmProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isControlled = open !== undefined;\n const currentOpen = isControlled ? open : internalOpen;\n const setOpen = (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const handleCancel = () => {\n onCancel?.();\n setOpen(false);\n };\n const handleConfirm = () => {\n onConfirm?.();\n setOpen(false);\n };\n\n const iconColor =\n confirmVariant === \"destructive\" ? \"var(--destructive)\" : \"var(--warning)\";\n\n return (\n <Popover\n open={currentOpen}\n onOpenChange={setOpen}\n trigger={children}\n side={placement}\n align=\"center\"\n className={cn(\"popconfirm\", className)}\n >\n <div className=\"popconfirm-body\">\n <span className=\"popconfirm-icon\" style={{ color: iconColor }}>\n {icon ?? <DefaultIcon />}\n </span>\n <div className=\"popconfirm-text\">\n <div className=\"popconfirm-title\">{title}</div>\n {description && (\n <div className=\"popconfirm-desc\">{description}</div>\n )}\n </div>\n </div>\n <div className=\"popconfirm-actions\">\n <Button variant=\"ghost\" size=\"x-small\" onClick={handleCancel}>\n {cancelLabel}\n </Button>\n <Button\n variant={confirmVariant}\n size=\"x-small\"\n onClick={handleConfirm}\n >\n {confirmLabel}\n </Button>\n </div>\n </Popover>\n );\n}\n","import { forwardRef } from \"react\"\nimport type { HTMLAttributes, ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\nexport interface BreadcrumbOption {\n label: ReactNode\n href?: string\n current?: boolean\n}\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbOption[]\n separator?: ReactNode\n}\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, items, separator = \"/\", ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(\"breadcrumb\", className)}\n {...props}\n >\n {items.map((item, index) => (\n <span key={`${item.href ?? \"crumb\"}-${index}`} className=\"breadcrumb-node\">\n {item.href ? (\n <a\n href={item.href}\n aria-current={item.current ? \"page\" : undefined}\n className={cn(\"breadcrumb-crumb\", item.current && \"current\")}\n >\n {item.label}\n </a>\n ) : (\n <span\n aria-current={item.current ? \"page\" : undefined}\n className={cn(\"breadcrumb-crumb\", item.current && \"current\")}\n >\n {item.label}\n </span>\n )}\n {index < items.length - 1 && (\n <span aria-hidden=\"true\" className=\"breadcrumb-sep\">\n {separator}\n </span>\n )}\n </span>\n ))}\n </nav>\n ),\n)\nBreadcrumb.displayName = \"Breadcrumb\"\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentProps,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Anchor — in-page scroll-spy navigation.\n *\n * Data-driven API:\n * <Anchor items={[{ href: \"#intro\", label: \"Intro\" }, …]} />\n *\n * Vocabulary (§23.B):\n * - `orientation` — axis of stack (\"vertical\" default | \"horizontal\")\n * - `sticky` — pin-on-scroll boolean\n * - `offset` — pixel offset for IntersectionObserver root margin\n * - `value` / `defaultValue` / `onValueChange` — controlled/uncontrolled\n * active section (the active hash; mirrors Tabs/Select selection\n * vocabulary; auto-detected via IntersectionObserver when uncontrolled)\n */\n\nexport type AnchorOrientation = \"horizontal\" | \"vertical\";\n\nexport interface AnchorItem {\n href: string;\n label: ReactNode;\n}\n\nexport interface AnchorProps\n extends Omit<ComponentProps<\"nav\">, \"defaultValue\" | \"onChange\"> {\n orientation?: AnchorOrientation;\n sticky?: boolean;\n /** Pixel offset from the top of the viewport for scroll-spy detection. */\n offset?: number;\n items: AnchorItem[];\n /** Controlled active href (`#intro` etc.). */\n value?: string;\n /** Uncontrolled initial active href. */\n defaultValue?: string;\n onValueChange?: (href: string) => void;\n}\n\nexport const Anchor = forwardRef<HTMLElement, AnchorProps>(function Anchor(\n {\n orientation = \"vertical\",\n sticky,\n offset = 0,\n items,\n value,\n defaultValue,\n onValueChange,\n className,\n ...rest\n },\n ref,\n) {\n const [internalActive, setInternalActive] = useState<string | undefined>(\n defaultValue,\n );\n const active = value ?? internalActive;\n\n const hrefs = useMemo(() => items.map((i) => i.href), [items]);\n\n // Scroll-spy: watch each target section's visibility.\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const allHrefs = hrefs;\n\n const targets = allHrefs\n .map((h) => document.querySelector(h))\n .filter((el): el is Element => el !== null);\n if (!targets.length) return;\n\n const obs = new IntersectionObserver(\n (entries) => {\n const visible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => b.intersectionRatio - a.intersectionRatio);\n if (visible.length === 0) return;\n const hash = `#${visible[0].target.id}`;\n if (value === undefined) setInternalActive(hash);\n onValueChange?.(hash);\n },\n {\n rootMargin: `-${offset}px 0px -50% 0px`,\n threshold: [0.1, 0.5, 0.9],\n },\n );\n targets.forEach((t) => obs.observe(t));\n return () => obs.disconnect();\n }, [hrefs, offset, value, onValueChange]);\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLAnchorElement>, href: string) => {\n const el = document.querySelector(href);\n if (!el) return;\n e.preventDefault();\n // Use getBoundingClientRect + window.scrollY so the scroll\n // target is correct regardless of `offsetParent` — when\n // sections are nested inside a flex/grid container (e.g.\n // a docs layout with sidebar + content), `offsetTop` is\n // measured relative to that parent, not the document, so\n // window.scrollTo lands at the wrong place.\n const rect = (el as HTMLElement).getBoundingClientRect();\n const top = rect.top + window.scrollY - offset;\n window.scrollTo({ top, behavior: \"smooth\" });\n if (value === undefined) setInternalActive(href);\n onValueChange?.(href);\n },\n [offset, value, onValueChange],\n );\n\n return (\n <nav\n ref={ref}\n className={cn(\"anchor\", className)}\n data-orientation={orientation}\n data-sticky={sticky ? \"true\" : undefined}\n aria-orientation={orientation}\n {...rest}\n >\n {items.map((item) => {\n const isActive = active === item.href;\n return (\n <a\n key={item.href}\n href={item.href}\n className=\"anchor-link\"\n data-active={isActive ? \"true\" : undefined}\n aria-current={isActive ? \"location\" : undefined}\n onClick={(event) => handleClick(event, item.href)}\n >\n {item.label}\n </a>\n );\n })}\n </nav>\n );\n});\n","import { forwardRef, useState, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\nexport type MenuOrientation = \"horizontal\" | \"vertical\";\n\nexport interface MenuOption {\n value?: string;\n label?: ReactNode;\n disabled?: boolean;\n icon?: ReactNode;\n extra?: ReactNode;\n type?: \"item\" | \"group\" | \"divider\";\n items?: MenuOption[];\n}\n\nexport interface MenuProps extends Omit<ComponentProps<\"ul\">, \"onChange\" | \"children\"> {\n orientation?: MenuOrientation;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n items: MenuOption[];\n}\n\nexport const Menu = forwardRef<HTMLUListElement, MenuProps>(function Menu(\n {\n orientation = \"vertical\",\n value,\n defaultValue,\n onValueChange,\n items,\n className,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\n const active = value ?? internal;\n const handleChange = (nextValue: string) => {\n if (value === undefined) setInternal(nextValue);\n onValueChange?.(nextValue);\n };\n\n return (\n <ul\n ref={ref}\n role=\"menu\"\n className={cn(\"menu\", className)}\n data-orientation={orientation}\n aria-orientation={orientation}\n {...rest}\n >\n {items.map((item, index) => {\n if (item.type === \"divider\") {\n return (\n <hr\n key={`divider-${index}`}\n role=\"separator\"\n className=\"menu-divider\"\n />\n );\n }\n if (item.type === \"group\") {\n return (\n <div\n key={`group-${index}`}\n role=\"group\"\n aria-label={typeof item.label === \"string\" ? item.label : undefined}\n >\n {item.label && <div className=\"menu-group-label\">{item.label}</div>}\n {item.items?.map((child) => (\n <MenuButton\n key={child.value}\n item={child}\n active={active}\n onValueChange={handleChange}\n />\n ))}\n </div>\n );\n }\n return (\n <MenuButton\n key={item.value ?? index}\n item={item}\n active={active}\n onValueChange={handleChange}\n />\n );\n })}\n </ul>\n );\n});\n\nfunction MenuButton({\n item,\n active,\n onValueChange,\n}: {\n item: MenuOption;\n active?: string;\n onValueChange: (value: string) => void;\n}) {\n const selected = item.value !== undefined && active === item.value;\n return (\n <li role=\"none\" style={{ display: \"contents\" }}>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"menu-item\"\n data-state={selected ? \"selected\" : undefined}\n aria-disabled={item.disabled || undefined}\n disabled={item.disabled}\n onClick={() => {\n if (!item.disabled && item.value !== undefined) onValueChange(item.value);\n }}\n >\n {item.icon && <span className=\"menu-item-icon\">{item.icon}</span>}\n <span className=\"menu-item-label\">{item.label}</span>\n {item.extra && <span className=\"menu-item-extra\">{item.extra}</span>}\n </button>\n </li>\n );\n}\n","import {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\";\nimport {\n forwardRef,\n useMemo,\n useState,\n type ComponentProps,\n type ReactNode,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../cn\";\n\n/**\n * Pagination — page jumper.\n *\n * <Pagination total={120} pageSize={10} defaultValue={1} onValueChange={…} />\n *\n * Three variants:\n * - `default` (pill bar) — freestanding pagination chips\n * - `simple` — only ‹ N/M ›\n * - `embedded` — table-footer layout (`info` + page-size changer +\n * numeric pager). Use when embedding inside a `<Table>` footer.\n *\n * Vocabulary (§23.B):\n * - `value` / `defaultValue` / `onValueChange` — current page (1-based)\n * - `pageSize` / `defaultPageSize` / `onPageSizeChange` — rows per page\n * - `size` — \"small\" | \"default\" — dimensional scale (default + simple)\n * - `variant` — visual treatment (above)\n * - `justify` — \"start\" | \"center\" | \"end\" | \"space-between\" (matches FlexJustify)\n * - `disabled` — interaction state\n * - `showTotal`, `showSizeChanger`, `showFirstLast`, `hideOnSinglePage`\n * — adjective-boolean toggles\n */\n\nexport type PaginationSize = \"small\" | \"default\";\nexport type PaginationVariant = \"default\" | \"simple\" | \"embedded\";\n/** Justify values match FlexJustify spelling (`\"space-between\"`) so the\n * vocabulary stays uniform across layout primitives. Pagination ships\n * 4 of FlexJustify's 6 values (no `space-around` / `space-evenly`). */\nexport type PaginationJustify =\n | \"start\"\n | \"center\"\n | \"end\"\n | \"space-between\";\n\nexport interface PaginationProps\n extends Omit<\n ComponentProps<\"nav\">,\n \"onChange\" | \"defaultValue\" | \"value\"\n > {\n /** Total row count. */\n total: number;\n /** Rows per page. Controlled or uncontrolled via `defaultPageSize`. */\n pageSize?: number;\n defaultPageSize?: number;\n onPageSizeChange?: (pageSize: number) => void;\n /** Current page (1-based). Controlled or uncontrolled via `defaultValue`. */\n value?: number;\n defaultValue?: number;\n onValueChange?: (page: number) => void;\n size?: PaginationSize;\n variant?: PaginationVariant;\n justify?: PaginationJustify;\n disabled?: boolean;\n /** Selectable page sizes when `showSizeChanger` is true. */\n pageSizeOptions?: number[];\n /** Render the page-size `<select>` (embedded variant only). */\n showSizeChanger?: boolean;\n /** Render first/last page chevron buttons (embedded variant). */\n showFirstLast?: boolean;\n /** Suppress render when total fits in a single page. */\n hideOnSinglePage?: boolean;\n /** Show total-row label. Accepts a render function for full control. */\n showTotal?: boolean | ((total: number, range: [number, number]) => ReactNode);\n /** Sibling pages either side of current (default 1). */\n siblings?: number;\n /** Pages anchored at each end before the ellipsis (default 1). */\n boundary?: number;\n /** Override page-size dropdown label (defaults to i18n `table.pageSize`). */\n pageSizeLabel?: ReactNode;\n /** Override first-page button aria-label. */\n firstPageLabel?: string;\n /** Override previous-page button aria-label. */\n previousPageLabel?: string;\n /** Override next-page button aria-label. */\n nextPageLabel?: string;\n /** Override last-page button aria-label. */\n lastPageLabel?: string;\n}\n\n/**\n * Laravel-style page range — first + last anchor pages, a window of\n * `sibling` pages around the current page, and `\"gap\"` markers\n * (rendered as `…`) where pages are elided. Exported for consumers\n * building custom paginators.\n *\n * computePageRange(1, 52) → [1, 2, 3, \"gap\", 52]\n * computePageRange(25, 52) → [1, \"gap\", 24, 25, 26, \"gap\", 52]\n * computePageRange(3, 6) → [1, 2, 3, 4, 5, 6]\n */\nexport function computePageRange(\n current: number,\n total: number,\n sibling = 1,\n boundary = 1,\n): Array<number | \"gap\"> {\n if (total <= 1) return [1];\n const windowSize = 2 * sibling + 1 + 2 * boundary + 2;\n if (total <= windowSize) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n const startPages = Array.from({ length: boundary }, (_, i) => i + 1);\n const endPages = Array.from(\n { length: boundary },\n (_, i) => total - boundary + 1 + i,\n );\n const siblingStart = Math.max(\n Math.min(current - sibling, total - boundary - 2 * sibling - 1),\n boundary + 2,\n );\n const siblingEnd = Math.min(\n Math.max(current + sibling, boundary + 2 * sibling + 2),\n endPages[0] - 2,\n );\n const items: Array<number | \"gap\"> = [];\n items.push(...startPages);\n if (siblingStart > boundary + 2) items.push(\"gap\");\n else if (boundary + 1 < endPages[0]) items.push(boundary + 1);\n for (let p = siblingStart; p <= siblingEnd; p++) items.push(p);\n if (siblingEnd < endPages[0] - 2) items.push(\"gap\");\n else if (endPages[0] - 1 > boundary) items.push(endPages[0] - 1);\n items.push(...endPages);\n return items;\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n function Pagination(\n {\n total,\n pageSize,\n defaultPageSize = 10,\n onPageSizeChange,\n value,\n defaultValue = 1,\n onValueChange,\n size = \"default\",\n variant = \"default\",\n justify = \"start\",\n disabled,\n pageSizeOptions = [10, 20, 50, 100],\n showSizeChanger = true,\n showFirstLast = false,\n hideOnSinglePage = false,\n showTotal,\n siblings = 1,\n boundary = 1,\n pageSizeLabel,\n firstPageLabel,\n previousPageLabel,\n nextPageLabel,\n lastPageLabel,\n className,\n ...rest\n },\n ref,\n ) {\n const { t } = useTranslation();\n const [internalPage, setInternalPage] = useState(defaultValue);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const effectivePageSize = pageSize ?? internalPageSize;\n const safePageSize = Math.max(effectivePageSize, 1);\n const safeTotal = Math.max(total, 0);\n const totalPages = Math.max(1, Math.ceil(safeTotal / safePageSize));\n const current = value ?? internalPage;\n const safeCurrent = Math.min(Math.max(1, current), totalPages);\n\n const range = useMemo(\n () => computePageRange(safeCurrent, totalPages, siblings, boundary),\n [safeCurrent, totalPages, siblings, boundary],\n );\n\n function goToPage(nextPage: number) {\n if (disabled) return;\n const clamped = Math.min(Math.max(1, nextPage), totalPages);\n if (clamped === safeCurrent) return;\n if (value === undefined) setInternalPage(clamped);\n onValueChange?.(clamped);\n }\n\n function changePageSize(nextPageSize: number) {\n if (disabled) return;\n if (pageSize === undefined) setInternalPageSize(nextPageSize);\n onPageSizeChange?.(nextPageSize);\n if (value === undefined) setInternalPage(1);\n onValueChange?.(1);\n }\n\n const start = safeTotal === 0 ? 0 : (safeCurrent - 1) * safePageSize + 1;\n const end = Math.min(safeCurrent * safePageSize, safeTotal);\n\n if (hideOnSinglePage && safeTotal <= safePageSize) return null;\n\n if (variant === \"embedded\") {\n const resolvedPageSizeOptions = Array.from(\n new Set([...pageSizeOptions, safePageSize]),\n ).sort((left, right) => left - right);\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cn(\"pagination\", className)}\n data-variant=\"embedded\"\n data-size={size === \"small\" ? \"small\" : undefined}\n {...rest}\n >\n <div className=\"info\">\n {typeof showTotal === \"function\"\n ? showTotal(safeTotal, [start, end])\n : t(\"table.paginationTotal\", {\n start,\n end,\n total: safeTotal,\n })}\n </div>\n {showSizeChanger && (\n <div className=\"ps\">\n <span>{pageSizeLabel ?? t(\"table.pageSize\")}</span>\n <select\n aria-label={\n typeof pageSizeLabel === \"string\"\n ? pageSizeLabel\n : t(\"table.pageSize\")\n }\n value={safePageSize}\n disabled={disabled}\n onChange={(event) =>\n changePageSize(Number(event.target.value))\n }\n >\n {resolvedPageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n <div className=\"spacer\" />\n <div className=\"pgn\">\n {showFirstLast && (\n <button\n type=\"button\"\n className={safeCurrent === 1 ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === 1}\n onClick={() => goToPage(1)}\n aria-label={firstPageLabel ?? t(\"table.firstPage\")}\n >\n <ChevronsLeft aria-hidden focusable=\"false\" />\n </button>\n )}\n <button\n type=\"button\"\n className={safeCurrent === 1 ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === 1}\n onClick={() => goToPage(safeCurrent - 1)}\n aria-label={previousPageLabel ?? t(\"table.previousPage\")}\n >\n <ChevronLeft aria-hidden focusable=\"false\" />\n </button>\n {range.map((item, index) =>\n item === \"gap\" ? (\n <span key={`gap-${index}`} className=\"gap\" aria-hidden>\n …\n </span>\n ) : (\n <button\n type=\"button\"\n key={item}\n className={item === safeCurrent ? \"on\" : \"\"}\n disabled={disabled}\n onClick={() => goToPage(item)}\n aria-current={item === safeCurrent ? \"page\" : undefined}\n >\n {item}\n </button>\n ),\n )}\n <button\n type=\"button\"\n className={safeCurrent === totalPages ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === totalPages}\n onClick={() => goToPage(safeCurrent + 1)}\n aria-label={nextPageLabel ?? t(\"table.nextPage\")}\n >\n <ChevronRight aria-hidden focusable=\"false\" />\n </button>\n {showFirstLast && (\n <button\n type=\"button\"\n className={safeCurrent === totalPages ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === totalPages}\n onClick={() => goToPage(totalPages)}\n aria-label={lastPageLabel ?? t(\"table.lastPage\")}\n >\n <ChevronsRight aria-hidden focusable=\"false\" />\n </button>\n )}\n </div>\n </nav>\n );\n }\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cn(\"pagination\", className)}\n data-size={size === \"small\" ? \"small\" : undefined}\n data-justify={justify === \"start\" ? undefined : justify}\n {...rest}\n >\n {showTotal && (\n <span className=\"pagination-total\">\n {typeof showTotal === \"function\"\n ? showTotal(safeTotal, [start, end])\n : `${start}–${end} / ${safeTotal}`}\n </span>\n )}\n <button\n type=\"button\"\n className=\"pagination-item\"\n aria-label={previousPageLabel ?? \"Previous page\"}\n onClick={() => goToPage(safeCurrent - 1)}\n disabled={disabled || safeCurrent === 1}\n >\n <ChevronLeft aria-hidden focusable=\"false\" />\n </button>\n {variant === \"simple\" ? (\n <span className=\"pagination-item\" aria-current=\"page\">\n {safeCurrent} / {totalPages}\n </span>\n ) : (\n range.map((p, idx) =>\n p === \"gap\" ? (\n <span key={`e${idx}`} className=\"pagination-ellipsis\" aria-hidden>\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className=\"pagination-item\"\n data-state={p === safeCurrent ? \"selected\" : undefined}\n aria-current={p === safeCurrent ? \"page\" : undefined}\n onClick={() => goToPage(p)}\n disabled={disabled}\n >\n {p}\n </button>\n ),\n )\n )}\n <button\n type=\"button\"\n className=\"pagination-item\"\n aria-label={nextPageLabel ?? \"Next page\"}\n onClick={() => goToPage(safeCurrent + 1)}\n disabled={disabled || safeCurrent === totalPages}\n >\n <ChevronRight aria-hidden focusable=\"false\" />\n </button>\n </nav>\n );\n },\n);\n","import { forwardRef, type ComponentProps, type ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\nexport type StepsOrientation = \"horizontal\" | \"vertical\"\n\nexport interface StepsItem {\n title?: ReactNode\n description?: ReactNode\n icon?: ReactNode\n content?: ReactNode\n className?: string\n}\n\nexport interface StepsProps extends Omit<ComponentProps<\"ol\">, \"children\" | \"color\"> {\n items: StepsItem[]\n orientation?: StepsOrientation\n current?: number\n}\n\nconst CheckIcon = () => (\n <svg width={13} height={13} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={3} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n)\n\nexport const Steps = forwardRef<HTMLOListElement, StepsProps>(function Steps(\n { items, orientation = \"horizontal\", current = 0, className, ...rest },\n ref,\n) {\n const wrapper = orientation === \"vertical\" ? \"steps-v\" : \"steps-h\"\n return (\n <ol\n ref={ref}\n className={cn(wrapper, className)}\n data-orientation={orientation}\n aria-orientation={orientation}\n {...rest}\n >\n {items.map((item, index) => {\n const stateClass =\n index < current ? \"done\" : index === current ? \"cur\" : \"dis\"\n\n return (\n <li\n key={`${String(item.title ?? \"step\")}-${index}`}\n className={cn(\"step\", stateClass, item.className)}\n aria-current={stateClass === \"cur\" ? \"step\" : undefined}\n >\n <span className=\"node\">\n {item.icon ?? (stateClass === \"done\" ? <CheckIcon /> : index + 1)}\n </span>\n {orientation === \"vertical\" ? (\n <div className=\"step-body\">\n {item.title && <div className=\"lbl\">{item.title}</div>}\n {item.description && <div className=\"desc\">{item.description}</div>}\n {item.content}\n </div>\n ) : (\n <>\n {item.title && <span className=\"lbl\">{item.title}</span>}\n {item.description && <span className=\"sub\">{item.description}</span>}\n {item.content}\n </>\n )}\n </li>\n )\n })}\n </ol>\n )\n})\n","import { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { FeedbackColorProp } from \"../../props\";\n\n/**\n * Progress — linear or circular progress indicator.\n *\n * Vocabulary (per cardinal rule 23 §B — concept-first):\n * - `value` / `max` — Radix-style numeric state (matches Tabs/Select).\n * - `variant` — `line` (default) or `circle`.\n * - `color` — semantic role (`default` / `info` / `success` /\n * `warning` / `destructive`).\n * - `size` — dimensional scale (`small` / `default` / `large`).\n * - `showInfo` — render the numeric label (default `true`).\n * - `strokeWidth` — circle stroke thickness in user units (default 6).\n * - `format` — custom label renderer; receives `(value, max)`.\n *\n * Line variant reuses the canonical `.prog` atom from\n * `shell/75-card-atoms.css`; circle variant renders an SVG sweep with\n * `currentColor` so the outer `.progress-color-*` class drives the\n * arc colour. ARIA: `role=\"progressbar\"` + `aria-valuenow/min/max`.\n */\n\nexport type ProgressVariant = \"line\" | \"circle\";\n/** Alias of the shared `FeedbackColorProp` — same shape as\n * AlertColor / ResultColor; kept as a named export for back-compat. */\nexport type ProgressColor = FeedbackColorProp;\nexport type ProgressSize = \"small\" | \"default\" | \"large\";\n\nexport interface ProgressProps extends Omit<ComponentProps<\"div\">, \"color\"> {\n /** Current progress value (0 – `max`). Defaults to 0. */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Visual shape — line bar or circular sweep. */\n variant?: ProgressVariant;\n /** Semantic colour role. */\n color?: ProgressColor;\n /** Dimensional scale. */\n size?: ProgressSize;\n /** Render the numeric label (defaults to true). */\n showInfo?: boolean;\n /** Circle stroke thickness (defaults to 6). */\n strokeWidth?: number;\n /** Custom label renderer. */\n format?: (value: number, max: number) => ReactNode;\n}\n\nconst COLOR_CLASS: Record<ProgressColor, string> = {\n default: \"\",\n info: \"progress-color-info\",\n success: \"progress-color-success\",\n warning: \"progress-color-warning\",\n destructive: \"progress-color-destructive\",\n};\n\nconst SIZE_CLASS: Record<ProgressSize, string> = {\n small: \"progress-size-small\",\n default: \"\",\n large: \"progress-size-large\",\n};\n\nfunction clampPct(value: number, max: number): number {\n if (max <= 0) return 0;\n const pct = (value / max) * 100;\n if (pct < 0) return 0;\n if (pct > 100) return 100;\n return pct;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(\n {\n value = 0,\n max = 100,\n variant = \"line\",\n color = \"default\",\n size = \"default\",\n showInfo = true,\n strokeWidth = 6,\n format,\n className,\n ...rest\n },\n ref,\n ) {\n const pct = clampPct(value, max);\n const label: ReactNode = format\n ? format(value, max)\n : `${Math.round(pct)}%`;\n\n if (variant === \"circle\") {\n const r = 50 - strokeWidth / 2;\n const c = 2 * Math.PI * r;\n const dashOffset = c * (1 - pct / 100);\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn(\n \"progress progress-circle\",\n COLOR_CLASS[color],\n SIZE_CLASS[size],\n className,\n )}\n {...rest}\n >\n <svg viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n <circle\n cx={50}\n cy={50}\n r={r}\n stroke=\"var(--secondary)\"\n strokeWidth={strokeWidth}\n fill=\"none\"\n />\n <circle\n cx={50}\n cy={50}\n r={r}\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n fill=\"none\"\n strokeDasharray={c}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform=\"rotate(-90 50 50)\"\n />\n </svg>\n {showInfo ? <span className=\"progress-info\">{label}</span> : null}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn(\n \"progress progress-line\",\n COLOR_CLASS[color],\n SIZE_CLASS[size],\n className,\n )}\n {...rest}\n >\n <div className=\"prog\">\n <i style={{ width: `${pct}%` }} />\n </div>\n {showInfo ? <span className=\"progress-info\">{label}</span> : null}\n </div>\n );\n },\n);\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * IconRow — `20px icon | content` two-column row used by detail panels\n * and create-event dialogs. Keeps icon glyphs aligned in a tight column\n * regardless of body height.\n *\n * @example\n * <IconRow icon={<Clock />}>\n * <div>10:00 – 11:00</div>\n * <div className=\"muted\">GMT+09</div>\n * </IconRow>\n */\nexport type IconRowAlign = \"top\" | \"center\";\n\nexport interface IconRowProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n icon: ReactNode;\n align?: IconRowAlign;\n children?: ReactNode;\n}\n\nexport function IconRow({\n icon,\n align = \"top\",\n className,\n children,\n ...rest\n}: IconRowProps) {\n return (\n <div className={cn(\"icon-row\", className)} data-align={align} {...rest}>\n <span className=\"icon-row-icon\">{icon}</span>\n <div className=\"icon-row-body\">{children}</div>\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AvatarStack — overlapping circular initials avatars with a `+N`\n * overflow chip. Border = `--background` to knock the avatars out of\n * the surface they sit on.\n *\n * @example\n * <AvatarStack\n * items={[{ id: \"y\", short: \"YT\", color: \"#1e50a2\", name: \"Yuki\" }]}\n * max={3}\n * />\n */\nexport interface AvatarStackItem {\n id: string;\n short: string;\n color: string;\n name?: string;\n}\n\nexport interface AvatarStackProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n items: AvatarStackItem[];\n /** Maximum number of avatars before overflow chip. Default 3. */\n max?: number;\n /** Pixel size of each avatar. Default 22. */\n size?: number;\n}\n\nexport function AvatarStack({\n items,\n max = 3,\n size = 22,\n className,\n style,\n ...rest\n}: AvatarStackProps) {\n const visible = items.slice(0, max);\n const overflow = Math.max(0, items.length - visible.length);\n const fontPx = Math.max(8, Math.round(size * 0.43));\n return (\n <div className={cn(\"avatar-stack\", className)} style={style} {...rest}>\n {visible.map((item) => (\n <span\n key={item.id}\n className=\"avatar-stack-item\"\n title={item.name ?? item.short}\n style={{ background: item.color, width: size, height: size, fontSize: fontPx }}\n >\n {item.short}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className=\"avatar-stack-item avatar-stack-overflow\"\n style={{ width: size, height: size, fontSize: fontPx }}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../cn\";\n\n/**\n * ColorSwatchCheckbox — Google-Calendar-style \"color square = on/off\"\n * checkbox. Border paints in `color`; fill paints `color` when checked.\n * Hidden native `<input>` keeps it a real form control + a11y target.\n *\n * @example\n * <ColorSwatchCheckbox\n * color=\"#4c6cb3\"\n * label=\"godx-admin · Product\"\n * checked={shown}\n * onChange={(next) => setShown(next)}\n * />\n */\nexport interface ColorSwatchCheckboxProps\n extends Omit<ComponentProps<\"label\">, \"onChange\"> {\n color: string;\n label: string;\n checked: boolean;\n onChange?: (next: boolean) => void;\n /** Marks the row as read-only (renders an \"R\" hint instead of a swatch). */\n readonly?: boolean;\n disabled?: boolean;\n}\n\nexport function ColorSwatchCheckbox({\n color,\n label,\n checked,\n onChange,\n readonly = false,\n disabled = false,\n className,\n ...rest\n}: ColorSwatchCheckboxProps) {\n return (\n <label className={cn(\"swatch-check\", className)} {...rest}>\n <span\n className=\"swatch-check-box\"\n style={{\n color,\n background: checked ? color : \"transparent\",\n }}\n >\n {checked && (\n <Check size={10} strokeWidth={3} color=\"white\" aria-hidden=\"true\" />\n )}\n </span>\n <span className=\"swatch-check-name\">{label}</span>\n {readonly && (\n <span className=\"swatch-check-readonly\" title=\"read-only\">\n R\n </span>\n )}\n <input\n type=\"checkbox\"\n className=\"swatch-check-native\"\n checked={checked}\n disabled={disabled}\n onChange={(e) => onChange?.(e.target.checked)}\n />\n </label>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * CalendarOption — color-swatch + name label used inside calendar\n * pickers (e.g. \"Save to which calendar\" select). Stays presentational;\n * the consuming select / dropdown handles state.\n */\nexport interface CalendarOptionProps extends ComponentProps<\"span\"> {\n color: string;\n name: string;\n /** Suffix label (e.g. \"(read-only)\"). */\n meta?: string;\n}\n\nexport function CalendarOption({\n color,\n name,\n meta,\n className,\n ...rest\n}: CalendarOptionProps) {\n return (\n <span className={cn(\"cal-opt\", className)} {...rest}>\n <span className=\"cal-opt-swatch\" style={{ background: color }} />\n <span className=\"cal-opt-name\">{name}</span>\n {meta && <span className=\"cal-opt-meta\">· {meta}</span>}\n </span>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AttendeeChip — pill with leading initials avatar + name + optional\n * remove (✕). Used in event composer attendee fields and similar\n * \"selected items\" chip arrays.\n */\nexport interface AttendeeChipProps extends ComponentProps<\"span\"> {\n name: string;\n short: string;\n color: string;\n onRemove?: () => void;\n}\n\nexport function AttendeeChip({\n name,\n short,\n color,\n onRemove,\n className,\n ...rest\n}: AttendeeChipProps) {\n return (\n <span className={cn(\"attendee-chip\", className)} {...rest}>\n <span className=\"attendee-chip-avatar\" style={{ background: color }}>\n {short}\n </span>\n <span className=\"attendee-chip-name\">{name}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"attendee-chip-close\"\n onClick={onRemove}\n aria-label={`Remove ${name}`}\n >\n <X size={11} aria-hidden=\"true\" />\n </button>\n )}\n </span>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AttendeeListItem — row used in event-detail attendee lists. Avatar,\n * name, optional \"(you)\" marker, optional org line, optional trailing\n * status badge slot.\n */\nexport interface AttendeeListItemProps extends ComponentProps<\"div\"> {\n name: string;\n short: string;\n color: string;\n /** Display \"(you)\" suffix. */\n isSelf?: boolean;\n /** Show \"Organizer · \" prefix in the org line. */\n isOrganizer?: boolean;\n org?: string;\n /** Trailing slot — typically a small Badge. */\n status?: ReactNode;\n /** i18n override for \"(you)\" — defaults to en. */\n selfLabel?: string;\n organizerLabel?: string;\n}\n\nexport function AttendeeListItem({\n name,\n short,\n color,\n isSelf = false,\n isOrganizer = false,\n org,\n status,\n selfLabel = \"(you)\",\n organizerLabel = \"Organizer\",\n className,\n ...rest\n}: AttendeeListItemProps) {\n return (\n <div className={cn(\"attendee-row\", className)} {...rest}>\n <span className=\"attendee-row-avatar\" style={{ background: color }}>\n {short}\n </span>\n <div className=\"attendee-row-body\">\n <div className=\"attendee-row-name\">\n {name}\n {isSelf && <span className=\"attendee-row-me\">{selfLabel}</span>}\n </div>\n {(org || isOrganizer) && (\n <div className=\"attendee-row-org\">\n {isOrganizer ? `${organizerLabel} · ` : \"\"}\n {org}\n </div>\n )}\n </div>\n {status}\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AllDayChip — solid-color rounded chip used for all-day events across\n * week-band, day-header strip, and month-cell rows.\n *\n * Sizes:\n * - `compact` — week-band / detail rows\n * - `month` — month-cell rows (slightly smaller radius + font)\n * - `pill` — day-view header (full pill radius, larger font)\n */\nexport type AllDayChipSize = \"compact\" | \"month\" | \"pill\";\n\nexport interface AllDayChipProps extends ComponentProps<\"button\"> {\n color: string;\n size?: AllDayChipSize;\n children: ComponentProps<\"button\">[\"children\"];\n}\n\nexport function AllDayChip({\n color,\n size = \"compact\",\n className,\n style,\n children,\n ...rest\n}: AllDayChipProps) {\n return (\n <button\n type=\"button\"\n className={cn(\"allday-chip\", className)}\n data-size={size}\n style={{ background: color, ...style }}\n {...rest}\n >\n {children}\n </button>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * DayHeaderPill — small day-of-week label + 32px circular day-of-month\n * pill rendered above each Week-view column.\n *\n * default — neutral\n * today — filled accent + white number\n * selected — soft accent tint + accent number\n */\nexport type DayHeaderPillState = \"default\" | \"today\" | \"selected\";\n\nexport interface DayHeaderPillProps extends ComponentProps<\"div\"> {\n dow: string;\n day: number;\n state?: DayHeaderPillState;\n}\n\nexport function DayHeaderPill({\n dow,\n day,\n state = \"default\",\n className,\n ...rest\n}: DayHeaderPillProps) {\n return (\n <div className={cn(\"day-pill\", className)} data-state={state} {...rest}>\n <span className=\"day-pill-dow\">{dow}</span>\n <span className=\"day-pill-num\">{day}</span>\n </div>\n );\n}\n","// Time helpers shared by the calendar / scheduling primitives. These\n// stay generic (no event-shape assumptions) so other surfaces — a\n// rota planner, a focus-time visualiser — can reuse the same math.\n\n/**\n * Locale used by `fmtHour`. Adds the JA suffix style (`9時`) for `ja`\n * and keeps `HH:00` for everything else.\n */\nexport type TimeLocale = \"vi\" | \"ja\" | \"en\";\n\n/** Parse \"HH:MM\" into { h, m }. Tolerates missing minutes. */\nexport function parseHM(value: string): { h: number; m: number } {\n const [hStr, mStr] = value.split(\":\");\n const h = Number(hStr);\n const m = Number(mStr ?? \"0\");\n return { h: Number.isFinite(h) ? h : 0, m: Number.isFinite(m) ? m : 0 };\n}\n\n/** Pixel offset for a given clock time within a day-grid column. */\nexport function minToY(\n h: number,\n m: number,\n options: { dayStartH: number; pxPerMin: number },\n): number {\n return (h - options.dayStartH) * 60 * options.pxPerMin + m * options.pxPerMin;\n}\n\n/** Format an hour cell label per locale. */\nexport function fmtHour(h: number, locale: TimeLocale): string {\n if (locale === \"ja\") return `${h}時`;\n return `${String(h).padStart(2, \"0\")}:00`;\n}\n\n/** Default day-grid sizing the WeekView / DayView screens use. */\nexport const DEFAULT_GRID = {\n dayStartH: 6,\n dayEndH: 22,\n pxPerMin: 0.9, // 1 hour = 54 px\n} as const;\n\n/**\n * Build a 6×7 Mon-first month grid for (year, monthIdx1to12). Lead-in\n * cells from the previous month and tail cells from the next month are\n * flagged `dim: true`. Shared by MiniMonth + MonthView.\n */\nexport interface MonthCellRef {\n y: number;\n m: number;\n d: number;\n dim: boolean;\n}\nexport function buildMonthGrid(year: number, month: number): MonthCellRef[] {\n const first = new Date(year, month - 1, 1);\n const dow0 = (first.getDay() + 6) % 7;\n const daysInMonth = new Date(year, month, 0).getDate();\n const prevDays = new Date(year, month - 1, 0).getDate();\n const cells: MonthCellRef[] = [];\n for (let i = dow0 - 1; i >= 0; i--) {\n cells.push({ y: year, m: month - 1, d: prevDays - i, dim: true });\n }\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ y: year, m: month, d, dim: false });\n }\n let tail = 1;\n while (cells.length < 42) {\n cells.push({ y: year, m: month + 1, d: tail++, dim: true });\n }\n return cells;\n}\n\n/** YYYY-MM-DD key for a {y,m,d} triple. */\nexport function ymd(y: number, m: number, d: number): string {\n return `${y}-${String(m).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n}\n","import { useEffect, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\nimport { DEFAULT_GRID, fmtHour, minToY, type TimeLocale } from \"./time\";\n\n/**\n * TimeGrid primitives — `GridColumn` (a day-of-events column with\n * hour-line dividers), `TimeGutter` (the labelled hour rail next to\n * it), and `NowLine` (auto-refreshing horizontal indicator at the\n * current time). All consume `--accent-color`, `--surface-*`, `--border`\n * via the `.tg-*` classes in shell.css; no service-specific tokens.\n *\n * @example\n * <div style={{ display: \"grid\", gridTemplateColumns: \"60px 1fr\" }}>\n * <TimeGutter dayStartH={6} dayEndH={22} pxPerMin={0.9} locale=\"vi\" />\n * <GridColumn dayStartH={6} dayEndH={22} pxPerMin={0.9} isToday>\n * <NowLine dayStartH={6} pxPerMin={0.9} />\n * <EventBlock ... />\n * </GridColumn>\n * </div>\n */\n\nexport interface GridColumnProps {\n /** Day-start hour (inclusive). Default 6. */\n dayStartH?: number;\n /** Day-end hour (exclusive). Default 22. */\n dayEndH?: number;\n /** Vertical pixels per minute. Default 0.9 (1h = 54px). */\n pxPerMin?: number;\n /** Tints column subtly when true. */\n isToday?: boolean;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\nexport function GridColumn({\n dayStartH = DEFAULT_GRID.dayStartH,\n dayEndH = DEFAULT_GRID.dayEndH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n isToday = false,\n className,\n style,\n children,\n}: GridColumnProps) {\n const rows: ReactNode[] = [];\n const rowHeight = 60 * pxPerMin;\n for (let h = dayStartH; h < dayEndH; h++) {\n rows.push(<div key={h} className=\"tg-hour-row\" style={{ height: rowHeight }} />);\n }\n return (\n <div\n className={cn(\"tg-col\", className)}\n data-today={isToday || undefined}\n style={style}\n >\n {rows}\n {children}\n </div>\n );\n}\n\nexport interface TimeGutterProps {\n dayStartH?: number;\n dayEndH?: number;\n pxPerMin?: number;\n locale?: TimeLocale;\n className?: string;\n}\n\nexport function TimeGutter({\n dayStartH = DEFAULT_GRID.dayStartH,\n dayEndH = DEFAULT_GRID.dayEndH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n locale = \"en\",\n className,\n}: TimeGutterProps) {\n const rows: ReactNode[] = [];\n const rowHeight = 60 * pxPerMin;\n for (let i = 0; i < dayEndH - dayStartH; i++) {\n rows.push(\n <div key={i} className=\"tg-hour-cell\" style={{ height: rowHeight }}>\n <span className=\"tg-hour-label\">\n {i === 0 ? \"\" : fmtHour(dayStartH + i, locale)}\n </span>\n </div>,\n );\n }\n return <div className={cn(\"tg-gutter\", className)}>{rows}</div>;\n}\n\nexport interface NowLineProps {\n /** Optional override; defaults to the live current time. */\n nowDate?: Date;\n dayStartH?: number;\n pxPerMin?: number;\n /** Auto-refresh interval in ms. Default 60_000 (1 minute). */\n refreshMs?: number;\n}\n\nexport function NowLine({\n nowDate,\n dayStartH = DEFAULT_GRID.dayStartH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n refreshMs = 60_000,\n}: NowLineProps) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n if (nowDate || refreshMs <= 0) return;\n const handle = window.setInterval(() => setTick((t) => t + 1), refreshMs);\n return () => window.clearInterval(handle);\n }, [nowDate, refreshMs]);\n\n const d = nowDate ?? new Date();\n void tick;\n const y = minToY(d.getHours(), d.getMinutes(), { dayStartH, pxPerMin });\n if (y < 0) return null;\n\n return (\n <>\n <div className=\"tg-now-dot\" style={{ top: y - 5 }} />\n <div className=\"tg-now-line\" style={{ top: y }} />\n </>\n );\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\nimport { DEFAULT_GRID, minToY, parseHM } from \"./time\";\nimport type { CalendarEvent, EventBlockVariant } from \"./types\";\n\n/**\n * EventBlock — absolutely-positioned timed-event chip inside a\n * `GridColumn`. Supports four visual treatments:\n *\n * - `solid` — saturated brand color (customer / external meets)\n * - `tint` — soft-mixed background (organizer / accepted)\n * - `tentative` — diagonal hatch over a soft tint\n * - `focus` — repeating subtle stripes (deep-work blocks)\n *\n * Multi-event overlap is handled by `lane` / `lanes` props (horizontal\n * slicing of the column). The selected state paints a 2px accent ring\n * via `--accent-color`.\n *\n * Service-agnostic: pass any `CalendarEvent`-shaped object + a `color`.\n */\nexport interface EventBlockProps {\n event: CalendarEvent;\n /** Event color (typically from the event's calendar). */\n color: string;\n variant?: EventBlockVariant;\n /** Whether the chip renders as the selected event (accent ring). */\n selected?: boolean;\n /** Horizontal lane index (0-based) for overlap layout. */\n lane?: number;\n /** Total lane count in the day. */\n lanes?: number;\n /** Day-grid configuration — must match the parent GridColumn. */\n dayStartH?: number;\n pxPerMin?: number;\n onClick?: (event: CalendarEvent) => void;\n /** Optional render-prop slot for trailing line (e.g. \"cá nhân\"). */\n footer?: ReactNode;\n className?: string;\n}\n\nexport function EventBlock({\n event,\n color,\n variant = \"tint\",\n selected = false,\n lane = 0,\n lanes = 1,\n dayStartH = DEFAULT_GRID.dayStartH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n onClick,\n footer,\n className,\n}: EventBlockProps) {\n const startVal = event.start ?? \"00:00\";\n const endVal = event.end ?? \"23:59\";\n const { h: sh, m: sm } = parseHM(startVal);\n const { h: eh, m: em } = parseHM(endVal);\n const top = minToY(sh, sm, { dayStartH, pxPerMin });\n const height = Math.max(20, minToY(eh, em, { dayStartH, pxPerMin }) - top - 1);\n const durationMin = eh * 60 + em - (sh * 60 + sm);\n const isShort = durationMin < 45;\n\n const bg =\n variant === \"focus\"\n ? `repeating-linear-gradient(135deg, ${color}24 0 6px, ${color}10 6px 12px)`\n : variant === \"tentative\"\n ? `repeating-linear-gradient(135deg, ${color}38 0 5px, transparent 5px 10px), color-mix(in oklch, ${color} 16%, var(--background))`\n : variant === \"solid\"\n ? color\n : `color-mix(in oklch, ${color} 18%, var(--background))`;\n\n const textColor = variant === \"solid\" ? \"white\" : color;\n\n const widthPct = `calc(${100 / Math.max(1, lanes)}% - 4px)`;\n const leftPct = `calc(${(100 * lane) / Math.max(1, lanes)}% + 2px)`;\n\n const style: CSSProperties = {\n top,\n height,\n left: leftPct,\n width: widthPct,\n background: bg,\n color: textColor,\n };\n\n return (\n <button\n type=\"button\"\n className={cn(\"event-block\", className)}\n data-short={isShort || undefined}\n data-selected={selected || undefined}\n data-variant={variant}\n style={style}\n onClick={() => onClick?.(event)}\n >\n <div style={{ display: \"flex\", gap: 4, alignItems: \"baseline\", minWidth: 0 }}>\n <span className=\"event-block-title\">{event.title}</span>\n </div>\n {!isShort && (\n <div className=\"event-block-meta\">\n {event.start}–{event.end}\n {event.location && (\n <span style={{ marginLeft: 6, opacity: 0.75 }}>· {event.location}</span>\n )}\n </div>\n )}\n {!isShort && footer && <div className=\"event-block-foot\">{footer}</div>}\n </button>\n );\n}\n\n/**\n * Naïve lane allocator for overlapping timed events on a single day.\n * Mutates / annotates input objects with `_lane` and `_lanes`; returns\n * the sorted array. Reused by Week + Day screens.\n */\nexport interface LanedEvent extends CalendarEvent {\n _lane: number;\n _lanes: number;\n}\n\nexport function layoutEvents(dayEvents: CalendarEvent[]): LanedEvent[] {\n const evs = [...dayEvents]\n .filter((e): e is CalendarEvent & { start: string; end: string } =>\n typeof e.start === \"string\" && typeof e.end === \"string\",\n )\n .sort((a, b) => a.start.localeCompare(b.start));\n const lanes: (CalendarEvent & { end: string })[][] = [];\n const annotated: LanedEvent[] = [];\n for (const e of evs) {\n let placed = false;\n for (let i = 0; i < lanes.length; i++) {\n const last = lanes[i][lanes[i].length - 1];\n if (last.end <= e.start) {\n lanes[i].push(e);\n annotated.push({ ...e, _lane: i, _lanes: 0 });\n placed = true;\n break;\n }\n }\n if (!placed) {\n lanes.push([e]);\n annotated.push({ ...e, _lane: lanes.length - 1, _lanes: 0 });\n }\n }\n const laneCount = Math.max(1, lanes.length);\n for (const a of annotated) a._lanes = laneCount;\n return annotated;\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * MonthCell — one day cell of a 6×7 month grid. Render-prop friendly:\n * the `events` slot is anything the caller wants (`EventPill` /\n * `AllDayChip` / their own render). Includes a \"+N more\" overflow row\n * helper.\n */\nexport interface MonthCellProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n day: number;\n /** Is this the today cell? Paints the day-number with accent. */\n today?: boolean;\n /** Is this cell from a different month? Dimmed. */\n dim?: boolean;\n /** Sat/Sun cell — slight tint. */\n weekend?: boolean;\n /** Optional small header chip next to the number (e.g. \"Th. 5\" when day === 1). */\n monthLabel?: ReactNode;\n /** Events to render — typically EventPill / AllDayChip components. */\n events?: ReactNode;\n /** Number of additional events beyond what's rendered. */\n overflow?: number;\n /** Localised \"+N more\" label builder. */\n formatOverflow?: (n: number) => ReactNode;\n}\n\nexport function MonthCell({\n day,\n today = false,\n dim = false,\n weekend = false,\n monthLabel,\n events,\n overflow = 0,\n formatOverflow,\n className,\n ...rest\n}: MonthCellProps) {\n return (\n <div\n className={cn(\"month-cell\", className)}\n data-dim={dim || undefined}\n data-weekend={weekend || undefined}\n {...rest}\n >\n <div className=\"month-cell-head\">\n <span className=\"month-cell-num\" data-state={today ? \"today\" : undefined}>\n {day}\n </span>\n {monthLabel && <span className=\"month-cell-month-label\">{monthLabel}</span>}\n </div>\n <div className=\"month-cell-events\">\n {events}\n {overflow > 0 && (\n <span className=\"month-cell-more\">\n {formatOverflow ? formatOverflow(overflow) : `+ ${overflow} more`}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * EventPill — single-line clickable row for month-cell event lists.\n * Layout: `dot · HH:MM · title`. For all-day variants, callers should\n * use `AllDayChip` instead (different visual).\n */\nexport interface EventPillProps extends ComponentProps<\"button\"> {\n color: string;\n time?: string;\n title: string;\n dim?: boolean;\n}\n\nexport function EventPill({\n color,\n time,\n title,\n dim = false,\n className,\n ...rest\n}: EventPillProps) {\n return (\n <button\n type=\"button\"\n className={cn(\"event-pill\", className)}\n data-dim={dim || undefined}\n {...rest}\n >\n <span className=\"event-pill-dot\" style={{ background: color }} />\n {time && <span className=\"event-pill-time\">{time}</span>}\n <span className=\"event-pill-title\">{title}</span>\n </button>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\nimport { buildMonthGrid, ymd } from \"./time\";\n\n/**\n * MiniMonth — compact 6×7 month grid for sidebars and date pickers.\n * Mon-first, 22px-cell. Renders an event dot when `eventDots[ymd]` is\n * truthy and `--accent-color` for today/selected states.\n */\nexport interface MiniMonthYMD {\n y: number;\n m: number;\n d: number;\n}\n\nexport interface MiniMonthProps extends Omit<ComponentProps<\"div\">, \"onSelect\"> {\n /** Year of the grid. */\n year: number;\n /** Month (1–12) of the grid. */\n month: number;\n today: MiniMonthYMD;\n selected?: MiniMonthYMD;\n /** Map of YYYY-MM-DD → has-event boolean. */\n eventDots?: Record<string, boolean>;\n onSelect?: (ymd: MiniMonthYMD) => void;\n /** Day-of-week labels — Mon-first. Default JA single chars. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n}\n\nconst DEFAULT_DOWS = [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"] as const;\n\nexport function MiniMonth({\n year,\n month,\n today,\n selected,\n eventDots,\n onSelect,\n dowLabels = DEFAULT_DOWS,\n className,\n ...rest\n}: MiniMonthProps) {\n const cells = buildMonthGrid(year, month);\n return (\n <div className={cn(\"mini-month\", className)} {...rest}>\n {dowLabels.map((w, i) => (\n <div key={i} className=\"mini-month-dow\">\n {w}\n </div>\n ))}\n {cells.map((c, i) => {\n const isWeekend = i % 7 >= 5;\n const isToday = !c.dim && today.y === c.y && today.m === c.m && today.d === c.d;\n const isSel =\n !c.dim &&\n selected &&\n selected.y === c.y &&\n selected.m === c.m &&\n selected.d === c.d;\n const state = isToday ? \"today\" : isSel ? \"selected\" : undefined;\n const hasDot = !c.dim && eventDots ? Boolean(eventDots[ymd(c.y, c.m, c.d)]) : false;\n return (\n <button\n key={i}\n type=\"button\"\n className=\"mini-month-cell\"\n data-state={state}\n data-dim={c.dim || undefined}\n data-weekend={isWeekend || undefined}\n onClick={() => !c.dim && onSelect?.({ y: c.y, m: c.m, d: c.d })}\n disabled={c.dim}\n >\n <span>{c.d}</span>\n {hasDot && !isToday && <span className=\"mini-month-dot\" />}\n </button>\n );\n })}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AvailabilityRow — one person × N time-slot row used in scheduling /\n * find-a-time grids. Generic over the slot dimension: `slots[i] = 0`\n * (free), `1` (tentative — hatched), `2` (busy — solid tint). An\n * optional `selectedRange` paints the picked-time overlay in accent.\n *\n * Two-cell grid: `personSlot | cellsSlot`, sized externally.\n */\nexport interface AvailabilityRowProps {\n /** Person slot — typically `<AttendeeListItem>` or a name + avatar. */\n person: ReactNode;\n /** 0 = free, 1 = tentative, 2 = busy — one per slot index. */\n slots: ReadonlyArray<0 | 1 | 2>;\n /** [startSlotInclusive, endSlotExclusive] — paints the accent overlay. */\n selectedRange?: [number, number] | null;\n className?: string;\n}\n\nexport function AvailabilityRow({\n person,\n slots,\n selectedRange,\n className,\n}: AvailabilityRowProps) {\n const slotCount = slots.length || 1;\n return (\n <div className={cn(\"avail-row\", className)}>\n <div className=\"avail-row-person\">{person}</div>\n <div\n className=\"avail-row-cells\"\n style={{ gridTemplateColumns: `repeat(${slotCount}, 1fr)` }}\n >\n {slots.map((v, i) => (\n <div key={i} className=\"avail-cell\" data-state={v} />\n ))}\n {selectedRange && (\n <div\n className=\"avail-row-overlay\"\n style={{\n left: `${(selectedRange[0] / slotCount) * 100}%`,\n width: `${((selectedRange[1] - selectedRange[0]) / slotCount) * 100}%`,\n }}\n />\n )}\n </div>\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * SuggestedSlotCard — small button-shaped card surfacing a scheduling\n * recommendation. Two visual treatments: `default` (neutral border) and\n * `best` (accent border + accent text, e.g. \"all attendees free\").\n */\nexport interface SuggestedSlotCardProps extends ComponentProps<\"button\"> {\n label: ReactNode;\n meta?: ReactNode;\n /** Highlight as the best/recommended option. */\n best?: boolean;\n}\n\nexport function SuggestedSlotCard({\n label,\n meta,\n best = false,\n className,\n ...rest\n}: SuggestedSlotCardProps) {\n return (\n <button\n type=\"button\"\n className={cn(\"slot-card\", className)}\n data-best={best || undefined}\n {...rest}\n >\n <span className=\"slot-card-label\">{label}</span>\n {meta && <span className=\"slot-card-meta\">{meta}</span>}\n </button>\n );\n}\n","import {\n Button as RACButton,\n DateField as RACDateField,\n DateInput as RACDateInput,\n DatePicker as RACDatePicker,\n DateRangePicker as RACDateRangePicker,\n DateSegment as RACDateSegment,\n Dialog as RACDialog,\n FieldError as RACFieldError,\n Group as RACGroup,\n Label as RACLabel,\n Popover as RACPopover,\n Text as RACText,\n TimeField as RACTimeField,\n type DateValue,\n type DateFieldProps as RACDateFieldProps,\n type DatePickerProps as RACDatePickerProps,\n type DateRangePickerProps as RACDateRangePickerProps,\n type TimeFieldProps as RACTimeFieldProps,\n type TimeValue,\n} from \"react-aria-components\"\nimport { CalendarIcon } from \"lucide-react\"\nimport { Calendar, RangeCalendar } from \"../data-display/Calendar\"\nimport { cn } from \"../cn\"\n\n/**\n * Date / time input primitives — segmented + popover combinations\n * built on Adobe React Aria Components. Mirrors the dxs-kintai\n * design-system patterns A–E from\n * `design-handoff/ui-system/dxs-kintai-design-system/project/preview/comp-datetimepicker.html`.\n *\n * Five exports:\n *\n * - `<DateField>` — segmented date input only (no popover).\n * - `<TimeField>` — segmented time input (HH:MM, optional seconds).\n * - `<DatePicker>` — single-date trigger + popover + Calendar.\n * - `<DateRangePicker>` — range trigger + popover + RangeCalendar.\n *\n * All four consume `@internationalized/date` values (CalendarDate,\n * Time, etc.) — convert to/from JS Date via `parseDate`, `parseTime`,\n * `today(getLocalTimeZone())` from `@internationalized/date`. The\n * segmented inputs are timezone-correct and locale-aware.\n *\n * Visual theming flows through the four theme axes\n * (`docs/specs/01-theme-axes.md`): `data-theme`, `data-accent`,\n * `data-density`, `data-font-size`.\n */\n\n// ─── DateField — segmented date input only ─────────────────────────\n\nexport interface DateFieldProps<T extends DateValue = DateValue>\n extends RACDateFieldProps<T> {\n label?: string\n description?: string\n errorMessage?: string\n className?: string\n}\n\nexport function DateField<T extends DateValue = DateValue>({\n label,\n description,\n errorMessage,\n className,\n ...rest\n}: DateFieldProps<T>) {\n return (\n <RACDateField {...rest} className={cn(\"field\", className)}>\n {label != null && <RACLabel>{label}</RACLabel>}\n <RACDateInput className=\"dt-segments\">\n {(segment) => <RACDateSegment segment={segment} className=\"dt-seg\" />}\n </RACDateInput>\n {description != null && (\n <RACText slot=\"description\" className=\"help\">\n {description}\n </RACText>\n )}\n <RACFieldError className=\"help err\">{errorMessage}</RACFieldError>\n </RACDateField>\n )\n}\n\n// ─── TimeField — segmented time input ──────────────────────────────\n\nexport interface TimeFieldProps<T extends TimeValue = TimeValue>\n extends RACTimeFieldProps<T> {\n label?: string\n description?: string\n errorMessage?: string\n className?: string\n}\n\nexport function TimeField<T extends TimeValue = TimeValue>({\n label,\n description,\n errorMessage,\n className,\n ...rest\n}: TimeFieldProps<T>) {\n return (\n <RACTimeField {...rest} className={cn(\"field\", className)}>\n {label != null && <RACLabel>{label}</RACLabel>}\n <RACDateInput className=\"dt-segments\">\n {(segment) => <RACDateSegment segment={segment} className=\"dt-seg\" />}\n </RACDateInput>\n {description != null && (\n <RACText slot=\"description\" className=\"help\">\n {description}\n </RACText>\n )}\n <RACFieldError className=\"help err\">{errorMessage}</RACFieldError>\n </RACTimeField>\n )\n}\n\n// ─── DatePicker — trigger + popover + Calendar ─────────────────────\n\nexport interface DatePickerProps<T extends DateValue = DateValue>\n extends RACDatePickerProps<T> {\n label?: string\n description?: string\n errorMessage?: string\n className?: string\n}\n\nexport function DatePicker<T extends DateValue = DateValue>({\n label,\n description,\n errorMessage,\n className,\n ...rest\n}: DatePickerProps<T>) {\n return (\n <RACDatePicker {...rest} className={cn(\"field\", className)}>\n {label != null && <RACLabel>{label}</RACLabel>}\n <RACGroup className=\"dt-trigger\">\n <RACDateInput className=\"dt-segments dt-segments-inline\">\n {(segment) => <RACDateSegment segment={segment} className=\"dt-seg\" />}\n </RACDateInput>\n {/* Trigger button on the right uses a calendar icon\n * (Ant Design / shadcn convention). The previous `▾` chevron\n * read as a generic dropdown affordance — calendar matches the\n * primitive's purpose. */}\n <RACButton className=\"dt-trigger-btn\" aria-label=\"Open calendar\">\n <CalendarIcon aria-hidden size={14} strokeWidth={1.75} />\n </RACButton>\n </RACGroup>\n {description != null && (\n <RACText slot=\"description\" className=\"help\">\n {description}\n </RACText>\n )}\n <RACFieldError className=\"help err\">{errorMessage}</RACFieldError>\n <RACPopover className=\"dt-popover\">\n <RACDialog>\n <Calendar />\n </RACDialog>\n </RACPopover>\n </RACDatePicker>\n )\n}\n\n// ─── DateRangePicker — range trigger + popover + RangeCalendar ─────\n\nexport interface DateRangePickerProps<T extends DateValue = DateValue>\n extends RACDateRangePickerProps<T> {\n label?: string\n description?: string\n errorMessage?: string\n className?: string\n}\n\nexport function DateRangePicker<T extends DateValue = DateValue>({\n label,\n description,\n errorMessage,\n className,\n ...rest\n}: DateRangePickerProps<T>) {\n return (\n <RACDateRangePicker {...rest} className={cn(\"field\", className)}>\n {label != null && <RACLabel>{label}</RACLabel>}\n <RACGroup className=\"dt-trigger\">\n <CalendarIcon aria-hidden size={14} strokeWidth={1.5} className=\"ico\" />\n <RACDateInput slot=\"start\" className=\"dt-segments dt-segments-inline\">\n {(segment) => <RACDateSegment segment={segment} className=\"dt-seg\" />}\n </RACDateInput>\n <span className=\"dt-sep\" aria-hidden>→</span>\n <RACDateInput slot=\"end\" className=\"dt-segments dt-segments-inline\">\n {(segment) => <RACDateSegment segment={segment} className=\"dt-seg\" />}\n </RACDateInput>\n <RACButton className=\"dt-trigger-btn\" aria-label=\"Open calendar\">\n <span aria-hidden>▾</span>\n </RACButton>\n </RACGroup>\n {description != null && (\n <RACText slot=\"description\" className=\"help\">\n {description}\n </RACText>\n )}\n <RACFieldError className=\"help err\">{errorMessage}</RACFieldError>\n <RACPopover className=\"dt-popover\">\n <RACDialog>\n <RangeCalendar />\n </RACDialog>\n </RACPopover>\n </RACDateRangePicker>\n )\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../cn\";\n\n/**\n * Carousel — image / content slide deck.\n *\n * Pass `slides`, one ReactNode per slide. The track translates by\n * index along the configured `orientation`. Plain\n * React + CSS transform — no external dep. Autoplay pauses on hover\n * (mouseenter / mouseleave handlers; CSS `:hover` cannot reach JS).\n *\n * Prop vocabulary follows cardinal rule 23 §B: `value` /\n * `defaultValue` / `onValueChange` for selection state (current slide\n * index), `orientation`, `autoplay` (ms), `loop`, `arrows`, `dots`.\n * NEVER Ant's `activeKey` / `autoplaySpeed`.\n *\n */\n\nexport interface CarouselProps {\n /** Current slide index (0-based). */\n value?: number;\n /** Initial slide index when uncontrolled. */\n defaultValue?: number;\n onValueChange?: (index: number) => void;\n /** Auto-advance interval in ms. Omit / 0 to disable. */\n autoplay?: number;\n /** Wrap from last → first / first → last. Default true. */\n loop?: boolean;\n /** Show prev / next arrows. Default true. */\n arrows?: boolean;\n /** Show dot indicators. Default true. */\n dots?: boolean;\n /** Stack axis. Default \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n slides: ReactNode[];\n}\n\nexport function Carousel({\n value: controlled,\n defaultValue = 0,\n onValueChange,\n autoplay,\n loop = true,\n arrows = true,\n dots = true,\n orientation = \"horizontal\",\n className,\n slides,\n}: CarouselProps) {\n const count = slides.length;\n\n const [internal, setInternal] = useState(defaultValue);\n const active = controlled ?? internal;\n\n const [paused, setPaused] = useState(false);\n\n const goTo = useCallback(\n (next: number) => {\n if (count === 0) return;\n let idx = next;\n if (loop) {\n idx = ((next % count) + count) % count;\n } else {\n idx = Math.max(0, Math.min(count - 1, next));\n }\n if (controlled === undefined) setInternal(idx);\n onValueChange?.(idx);\n },\n [controlled, count, loop, onValueChange],\n );\n\n const next = useCallback(() => goTo(active + 1), [active, goTo]);\n const prev = useCallback(() => goTo(active - 1), [active, goTo]);\n\n // Autoplay loop. Pause on hover (paused === true).\n const autoplayRef = useRef<ReturnType<typeof setInterval> | null>(null);\n useEffect(() => {\n if (!autoplay || autoplay <= 0 || paused || count < 2) return;\n autoplayRef.current = setInterval(() => {\n goTo(active + 1);\n }, autoplay);\n return () => {\n if (autoplayRef.current) clearInterval(autoplayRef.current);\n };\n }, [autoplay, paused, active, count, goTo]);\n\n const isVertical = orientation === \"vertical\";\n const trackStyle = isVertical\n ? { transform: `translateY(-${active * 100}%)`, flexDirection: \"column\" as const }\n : { transform: `translateX(-${active * 100}%)` };\n\n return (\n <div\n className={cn(\"carousel\", className)}\n data-orientation={orientation}\n role=\"region\"\n aria-roledescription=\"carousel\"\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n >\n <div className=\"carousel-viewport\">\n <div className=\"carousel-track\" style={trackStyle}>\n {slides.map((slide, index) => (\n <div\n key={index}\n role=\"group\"\n aria-roledescription=\"slide\"\n className=\"carousel-slide\"\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n\n {arrows && count > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel-arrow prev\"\n aria-label=\"Previous slide\"\n onClick={prev}\n disabled={!loop && active === 0}\n >\n {isVertical ? <ChevronUp size={16} /> : <ChevronLeft size={16} />}\n </button>\n <button\n type=\"button\"\n className=\"carousel-arrow next\"\n aria-label=\"Next slide\"\n onClick={next}\n disabled={!loop && active === count - 1}\n >\n {isVertical ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </button>\n </>\n )}\n\n {dots && count > 1 && (\n <div className=\"carousel-dots\" role=\"tablist\" aria-label=\"Slides\">\n {slides.map((_, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-label={`Go to slide ${i + 1}`}\n aria-selected={i === active}\n data-active={i === active}\n className=\"carousel-dot\"\n onClick={() => goTo(i)}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import { useCallback, useState, type ReactNode } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../cn\";\n\n/**\n * Collapse — accordion-style expandable panel group.\n *\n * Small uncontrolled-friendly implementation (Radix Accordion is not\n * in the locked stack today; if it is added later, swap the internals\n * without touching the public API). Prop vocabulary follows cardinal\n * rule 23 §B: `value` / `defaultValue` / `onValueChange` for\n * expansion state, `multiple` boolean, `variant` for visual treatment,\n * `size` for dimensional scale. NEVER `activeKey` / `accordion` /\n * `bordered`.\n *\n */\n\ntype CollapseValue = string | string[] | undefined;\n\nfunction normalize(value: CollapseValue, multiple: boolean): string[] {\n if (value === undefined) return [];\n if (Array.isArray(value)) return multiple ? value : value.slice(0, 1);\n return [value];\n}\n\nexport interface CollapseItem {\n value: string;\n title: ReactNode;\n extra?: ReactNode;\n disabled?: boolean;\n content?: ReactNode;\n}\n\nexport interface CollapseProps {\n /** Expanded panel key(s). String for single, string[] for multi. */\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n /** Allow multiple panels open simultaneously. Default false. */\n multiple?: boolean;\n /** Visual treatment. Default \"default\". */\n variant?: \"default\" | \"ghost\" | \"outlined\";\n /** Dimensional scale. Default \"default\". */\n size?: \"small\" | \"default\" | \"large\";\n /** Disable every panel. */\n disabled?: boolean;\n items: CollapseItem[];\n className?: string;\n}\n\nexport function Collapse({\n value: controlled,\n defaultValue,\n onValueChange,\n multiple = false,\n variant = \"default\",\n size = \"default\",\n disabled = false,\n items,\n className,\n}: CollapseProps) {\n const [internal, setInternal] = useState<string[]>(\n normalize(defaultValue, multiple),\n );\n const expanded =\n controlled !== undefined ? normalize(controlled, multiple) : internal;\n\n const toggle = useCallback(\n (panelValue: string) => {\n if (disabled) return;\n let nextList: string[];\n if (expanded.includes(panelValue)) {\n nextList = expanded.filter((v) => v !== panelValue);\n } else if (multiple) {\n nextList = [...expanded, panelValue];\n } else {\n nextList = [panelValue];\n }\n if (controlled === undefined) setInternal(nextList);\n onValueChange?.(multiple ? nextList : (nextList[0] ?? \"\"));\n },\n [controlled, disabled, expanded, multiple, onValueChange],\n );\n\n return (\n <div\n className={cn(\n \"collapse-root\",\n `collapse-variant-${variant}`,\n `collapse-size-${size}`,\n className,\n )}\n data-disabled={disabled || undefined}\n >\n {items.map((item) => {\n const isOpen = expanded.includes(item.value);\n const isDisabled = disabled || item.disabled;\n return (\n <div\n key={item.value}\n className=\"collapse-panel\"\n data-state={isOpen ? \"open\" : \"closed\"}\n data-disabled={isDisabled || undefined}\n >\n <button\n type=\"button\"\n className=\"collapse-trigger\"\n aria-expanded={isOpen}\n aria-controls={`collapse-content-${item.value}`}\n disabled={isDisabled}\n onClick={() => toggle(item.value)}\n >\n <ChevronRight className=\"collapse-chevron\" size={14} aria-hidden />\n <span className=\"collapse-title\">{item.title}</span>\n {item.extra !== undefined && <span className=\"collapse-extra\">{item.extra}</span>}\n </button>\n {isOpen && (\n <div\n id={`collapse-content-${item.value}`}\n role=\"region\"\n className=\"collapse-content\"\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * List — header + items + optional footer surface.\n *\n * Two consumption modes:\n *\n * Data-driven: pass `dataSource` + `renderItem`.\n *\n * Prop vocabulary follows cardinal rule 23 §B: `size` for dimensional\n * scale, `bordered` boolean for surface treatment, `cols` for grid\n * mode (column count). NEVER Ant's `itemLayout` / `grid` object —\n * `cols` is the one knob.\n *\n * @example data-driven\n * <List\n * dataSource={users}\n * renderItem={(u) => (\n * <UserRow avatar={<Avatar src={u.photo} />} title={u.name} description={u.role} />\n * )}\n * />\n *\n */\n\nexport interface ListProps<T = unknown> {\n /** Data array; required for data-driven mode. Omit when using children. */\n dataSource?: T[];\n /** Render fn for each datum. */\n renderItem?: (item: T, index: number) => ReactNode;\n /** Optional header content. */\n header?: ReactNode;\n /** Optional footer (e.g. pagination). */\n footer?: ReactNode;\n /** Title rendered above the list as a heading. */\n title?: ReactNode;\n /** Empty state when dataSource is empty (defaults to plain \"No data\"). */\n empty?: ReactNode;\n /** Dimensional scale. Default \"default\". */\n size?: \"small\" | \"default\" | \"large\";\n /** Wrap the list in a bordered surface. */\n bordered?: boolean;\n /** Show dividers between items. Defaults to true when `bordered`. */\n split?: boolean;\n /** Render a loading placeholder instead of items. */\n loading?: boolean;\n /** Grid mode — number of columns. Omit for list (1 column) layout. */\n cols?: number;\n className?: string;\n}\n\nexport function List<T = unknown>({\n dataSource,\n renderItem,\n header,\n footer,\n title,\n empty,\n size = \"default\",\n bordered = false,\n split,\n loading = false,\n cols,\n className,\n}: ListProps<T>) {\n const splitOn = split ?? bordered;\n\n const items: ReactNode = (() => {\n if (loading) {\n return <div className=\"list-loading\">Loading…</div>;\n }\n if (dataSource !== undefined) {\n if (dataSource.length === 0) {\n return (\n <div className=\"list-empty\">\n {empty ?? <span className=\"muted\">No data</span>}\n </div>\n );\n }\n if (!renderItem) return null;\n return dataSource.map((item, i) => {\n const node = renderItem(item, i);\n return (\n <li key={i} className=\"list-item\">\n {node}\n </li>\n );\n });\n }\n return null;\n })();\n\n const isGrid = typeof cols === \"number\" && cols > 1;\n\n return (\n <div\n className={cn(\n \"list\",\n `list-size-${size}`,\n isGrid && \"list-grid\",\n className,\n )}\n data-bordered={bordered || undefined}\n data-split={splitOn || undefined}\n data-cols={isGrid ? cols : undefined}\n >\n {title !== undefined && <div className=\"list-title\">{title}</div>}\n {header !== undefined && <div className=\"list-header\">{header}</div>}\n {isGrid ? (\n <ul className=\"list-items list-grid-inner\">{items}</ul>\n ) : (\n <ul className=\"list-items\">{items}</ul>\n )}\n {footer !== undefined && <div className=\"list-footer\">{footer}</div>}\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useState,\n type ComponentProps,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Image — `<img>` element with optional click-to-preview lightbox.\n *\n * Default opens a fullscreen overlay on click; Esc + outside-click +\n * the corner × button all close it. Loading / error states render\n * via the `placeholder` / `fallback` slots (skeleton-styled by\n * default through the canonical `.image-wrap` class chain in\n * `src/styles/shell/35-badge-tag-misc.css`).\n *\n * @example\n * <Image src=\"/photo.jpg\" alt=\"Sunset\" fit=\"cover\" preview />\n */\n\nexport interface ImageProps extends Omit<ComponentProps<\"img\">, \"loading\"> {\n src: string;\n alt: string;\n /** Click → fullscreen preview overlay. Default true. */\n preview?: boolean;\n /** Loading placeholder (default: skeleton block). */\n placeholder?: ReactNode;\n /** Fallback when src fails to load. */\n fallback?: ReactNode;\n /** Eager / lazy loading. Default \"lazy\". */\n loadStrategy?: \"eager\" | \"lazy\";\n /** Object-fit. Default \"cover\". */\n fit?: \"cover\" | \"contain\" | \"fill\" | \"none\" | \"scale-down\";\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Image({\n src,\n alt,\n preview = true,\n placeholder,\n fallback,\n loadStrategy = \"lazy\",\n fit = \"cover\",\n className,\n style,\n onClick,\n onLoad,\n onError,\n ...rest\n}: ImageProps) {\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\n \"loading\",\n );\n const [open, setOpen] = useState(false);\n\n const handleLoad: ComponentProps<\"img\">[\"onLoad\"] = (event) => {\n setStatus(\"loaded\");\n onLoad?.(event);\n };\n const handleError: ComponentProps<\"img\">[\"onError\"] = (event) => {\n setStatus(\"error\");\n onError?.(event);\n };\n\n const handleClick: ComponentProps<\"img\">[\"onClick\"] = (event) => {\n onClick?.(event);\n if (preview && status === \"loaded\") {\n setOpen(true);\n }\n };\n\n const close = useCallback(() => setOpen(false), []);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") close();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, close]);\n\n const showFallback = status === \"error\" && fallback !== undefined;\n const showPlaceholder = status === \"loading\" && placeholder !== undefined;\n\n return (\n <>\n <span\n className={cn(\"image-wrap\", className)}\n data-preview={preview ? \"true\" : \"false\"}\n data-status={status}\n style={style}\n >\n {showPlaceholder ? <span className=\"image-placeholder\">{placeholder}</span> : null}\n {showFallback ? (\n <span className=\"image-fallback\">{fallback}</span>\n ) : (\n <img\n src={src}\n alt={alt}\n loading={loadStrategy}\n style={{ objectFit: fit }}\n onLoad={handleLoad}\n onError={handleError}\n onClick={handleClick}\n {...rest}\n />\n )}\n </span>\n {open ? (\n <div\n className=\"image-preview-overlay\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={alt}\n onClick={close}\n >\n <img\n src={src}\n alt={alt}\n onClick={(event) => event.stopPropagation()}\n />\n <button\n type=\"button\"\n className=\"image-preview-close\"\n aria-label=\"Close preview\"\n onClick={close}\n >\n ×\n </button>\n </div>\n ) : null}\n </>\n );\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport QR from \"qrcode\";\nimport { cn } from \"../cn\";\n\n/**\n * QRCode — render a QR code as inline SVG.\n *\n * Uses the `qrcode` library to compute the matrix (no canvas / no\n * `dangerouslySetInnerHTML`); each dark cell becomes one `<rect>`.\n * Foreground colour defaults to `currentColor` so the QR theme\n * follows the surrounding text colour (cardinal rule 21 — theme\n * axis flows naturally).\n *\n * @example\n * <QRCode value=\"https://godx.jp\" />\n * <QRCode value=\"https://example\" size={240} icon={<Logo />} />\n */\n\nexport interface QRCodeProps {\n /** Text / URL to encode. */\n value: string;\n /** Output size in pixels. Default 160. */\n size?: number;\n /** Error correction level. Default \"M\". */\n errorLevel?: \"L\" | \"M\" | \"Q\" | \"H\";\n /** Foreground colour (defaults to `currentColor` — themeable). */\n color?: string;\n /** Background colour (defaults to `transparent`). */\n bgColor?: string;\n /** Optional icon overlay (logo in the centre). */\n icon?: ReactNode;\n /** Icon size in px. Default = 22% of `size`. */\n iconSize?: number;\n className?: string;\n}\n\nexport function QRCode({\n value,\n size = 160,\n errorLevel = \"M\",\n color = \"currentColor\",\n bgColor = \"transparent\",\n icon,\n iconSize,\n className,\n}: QRCodeProps) {\n const matrix = useMemo(() => {\n try {\n const qr = QR.create(value, { errorCorrectionLevel: errorLevel });\n return qr.modules;\n } catch {\n return null;\n }\n }, [value, errorLevel]);\n\n if (!matrix) {\n return (\n <span\n className={cn(\"qrcode\", className)}\n style={{ width: size, height: size }}\n aria-label=\"QR code unavailable\"\n />\n );\n }\n\n const { size: modules, data } = matrix;\n const cells: { x: number; y: number }[] = [];\n for (let y = 0; y < modules; y += 1) {\n for (let x = 0; x < modules; x += 1) {\n if (data[y * modules + x]) {\n cells.push({ x, y });\n }\n }\n }\n\n const overlayPx = iconSize ?? Math.round(size * 0.22);\n\n return (\n <span\n className={cn(\"qrcode\", className)}\n style={{ width: size, height: size }}\n >\n <svg\n viewBox={`0 0 ${modules} ${modules}`}\n width={size}\n height={size}\n shapeRendering=\"crispEdges\"\n role=\"img\"\n aria-label={value}\n >\n {bgColor !== \"transparent\" ? (\n <rect width={modules} height={modules} fill={bgColor} />\n ) : null}\n {cells.map((cell) => (\n <rect\n key={`${cell.x}-${cell.y}`}\n x={cell.x}\n y={cell.y}\n width={1}\n height={1}\n fill={color}\n />\n ))}\n </svg>\n {icon !== undefined ? (\n <span\n className=\"qrcode-icon\"\n style={{ width: overlayPx, height: overlayPx }}\n >\n {icon}\n </span>\n ) : null}\n </span>\n );\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport {\n createContext,\n useContext,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Tooltip — Radix-backed floating label anchored to a trigger.\n *\n * Two equivalent consumption modes per cardinal rule 23 (concept-first\n * API + minimise sub-components) and rule 31 (no nested wrappers):\n *\n * 1. Data-driven (preferred) — pass `content`:\n *\n * <Tooltip content=\"保存します\" placement=\"top\">\n * <Button>保存</Button>\n * </Tooltip>\n *\n * Auto-wires the Radix Root + Trigger(asChild) + Content.\n *\n * Shared timing across the app is configured once on\n * `<GodxConfigProvider>` — the consumer never imports a separate\n * `TooltipProvider`. The provider internally mounts the Radix Provider\n * so every nested `<Tooltip>` picks up the same `delayDuration` /\n * `skipDelayDuration`. Per-tooltip overrides flow through the\n * `delayDuration` prop on `<Tooltip>` itself.\n *\n * Styled via the canonical `.tooltip-content` class from\n * `src/styles/shell/35-badge-tag-misc.css` (cardinal rule 21 — reads\n * tokens, honours every axis).\n */\n\n/**\n * Internal marker context — populated by `InternalTooltipProvider`\n * (mounted by `<GodxConfigProvider>`) so data-driven `<Tooltip>` calls\n * can detect they're already inside a Provider and skip\n * double-wrapping. Not exported.\n */\nconst TooltipProviderPresenceContext = createContext<boolean>(false);\n\ntype InternalTooltipProviderProps = ComponentPropsWithoutRef<\n typeof TooltipPrimitive.Provider\n>;\n\n/**\n * `InternalTooltipProvider` — wraps Radix's `Tooltip.Provider` AND\n * populates the internal presence-marker context so nested data-driven\n * `<Tooltip>` calls dedupe automatically.\n *\n * This is an internal surface (not exported from `@godxjp/ui`).\n * `<GodxConfigProvider>` mounts it once at the root so every consumer\n * gets shared tooltip timing without ever importing this directly.\n */\nexport function InternalTooltipProvider({\n children,\n ...rest\n}: InternalTooltipProviderProps) {\n return (\n <TooltipPrimitive.Provider {...rest}>\n <TooltipProviderPresenceContext.Provider value={true}>\n {children}\n </TooltipProviderPresenceContext.Provider>\n </TooltipPrimitive.Provider>\n );\n}\n\ninterface TooltipFloatingProps\n extends ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> {}\n\nfunction TooltipFloating({ className, sideOffset = 4, ...rest }: TooltipFloatingProps) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={sideOffset}\n className={cn(\"tooltip-content\", className)}\n {...rest}\n />\n </TooltipPrimitive.Portal>\n );\n}\n\nexport interface TooltipProps {\n /** Tooltip text / content. When set, primitive auto-wires the\n * Radix Root + Trigger(asChild) + Content around the child trigger\n * element — the consumer just provides the trigger node. When\n * omitted, the primitive renders children without tooltip wiring. */\n content?: ReactNode;\n /** Trigger element (data-driven mode) OR Radix Root children\n * (compositional mode). */\n children?: ReactNode;\n /** Anchor side per cardinal rule 23 §B `placement` vocabulary.\n * Default `top`. Honoured only in data-driven mode. */\n placement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Open / close delay in ms. Default 200. Overrides the\n * app-wide default set on `<GodxConfigProvider>` for this single\n * tooltip; without an override the Provider's shared timing wins. */\n delayDuration?: number;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function Tooltip({\n content,\n children,\n placement = \"top\",\n delayDuration = 200,\n open,\n defaultOpen,\n onOpenChange,\n}: TooltipProps) {\n const hasAncestorProvider = useContext(TooltipProviderPresenceContext);\n if (content === undefined) return <>{children}</>;\n // Data-driven — auto-wire Root + Trigger + Content. Wrap with an\n // ad-hoc Provider ONLY when there's no ancestor Provider (e.g.\n // isolated Storybook render without <GodxConfigProvider>); otherwise\n // the outer Provider's timing would be silently overridden\n // (cardinal rule 31 — no double-wrap).\n const root = (\n <TooltipPrimitive.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipFloating side={placement}>{content}</TooltipFloating>\n </TooltipPrimitive.Root>\n );\n if (hasAncestorProvider) return root;\n return (\n <InternalTooltipProvider delayDuration={delayDuration}>\n {root}\n </InternalTooltipProvider>\n );\n}\n","// Module-level GodxConfig holder.\n//\n// Why a module-level holder, not just React context: axios instances\n// are created at module-load time (before React mounts), and axios\n// interceptors need to read config at REQUEST time — which is after\n// the React tree is up. A mutable holder solves both: the React\n// provider writes into it on mount + on every state change; the\n// interceptor reads via `getGodxConfig()` per request.\n//\n// The holder is the single source of truth at runtime. The React\n// state mirrors it for re-renders; outside of React, anyone (axios,\n// fetch wrapper, error reporter, telemetry, etc.) reads through the\n// `getGodxConfig()` getter.\n\nexport interface GodxConfig {\n /** BCP 47 language tag, e.g. \"ja\", \"en-US\". */\n locale: string;\n /** IANA time zone name, e.g. \"Asia/Tokyo\". */\n timezone: string;\n /**\n * Currency default for `formatCurrency()` calls that omit a code.\n * ISO 4217 — e.g. \"JPY\", \"USD\", \"VND\", \"PHP\". Optional; helpers\n * require an explicit currency when this is undefined.\n */\n currency?: string;\n}\n\nconst DEFAULT: GodxConfig = {\n locale: \"ja\",\n timezone: \"Asia/Tokyo\",\n};\n\nlet CURRENT: GodxConfig = { ...DEFAULT };\nconst subscribers = new Set<(c: GodxConfig) => void>();\n\nexport function getGodxConfig(): GodxConfig {\n return CURRENT;\n}\n\nexport function setGodxConfig(next: Partial<GodxConfig>): void {\n const merged: GodxConfig = { ...CURRENT, ...next };\n if (\n merged.locale === CURRENT.locale &&\n merged.timezone === CURRENT.timezone &&\n merged.currency === CURRENT.currency\n ) {\n return;\n }\n CURRENT = merged;\n for (const fn of subscribers) {\n try {\n fn(CURRENT);\n } catch {\n /* subscriber threw — swallow so other subscribers run */\n }\n }\n}\n\nexport function resetGodxConfig(defaults: GodxConfig = DEFAULT): void {\n setGodxConfig(defaults);\n}\n\nexport function subscribeGodxConfig(\n fn: (c: GodxConfig) => void,\n): () => void {\n subscribers.add(fn);\n return () => {\n subscribers.delete(fn);\n };\n}\n","// Locale + timezone-aware formatters.\n//\n// Per ADR 0005 the framework standardises on native `Intl` APIs for\n// formatting and `@internationalized/date` for value types. These\n// helpers accept the value shapes the framework can encounter in the\n// wild (native `Date`, ISO string, or any `@internationalized/date`\n// value) and resolve the locale + timezone from the\n// preferences holder.\n//\n// Non-React surface — callable from anywhere (axios interceptors,\n// React renders, event handlers, tests). The matching React hook is\n// `useFormatters()` in `src/hooks/useFormatters.ts`; it returns the\n// same surface bound to the live provider context.\n\nimport {\n type CalendarDate,\n type CalendarDateTime,\n type Time,\n type ZonedDateTime,\n} from \"@internationalized/date\";\nimport { getGodxConfig } from \"../preferences/holder\";\n\n/** A value any framework primitive accepts as a date / time input. */\nexport type DateLike =\n | Date\n | string\n | number\n | CalendarDate\n | CalendarDateTime\n | ZonedDateTime;\n\n/** A value any framework primitive accepts as a time-only input. */\nexport type TimeLike = Date | string | number | Time | CalendarDateTime | ZonedDateTime;\n\nexport interface FormatOptions {\n /** BCP 47 locale override. Defaults to the preferences holder. */\n locale?: string;\n /** IANA timezone override. Defaults to the preferences holder. */\n timezone?: string;\n}\n\nexport interface FormatDateOptions extends FormatOptions, Intl.DateTimeFormatOptions {}\nexport interface FormatNumberOptions extends FormatOptions, Intl.NumberFormatOptions {}\nexport interface FormatCurrencyOptions extends FormatOptions, Intl.NumberFormatOptions {\n currency: string;\n}\n\nfunction resolveLocale(opts?: FormatOptions): string {\n return opts?.locale ?? getGodxConfig().locale;\n}\n\nfunction resolveTimezone(opts?: FormatOptions): string {\n return opts?.timezone ?? getGodxConfig().timezone;\n}\n\n/** Convert any DateLike value into a native `Date` for `Intl` use. */\nfunction toDate(value: DateLike): Date {\n if (value instanceof Date) return value;\n if (typeof value === \"number\") return new Date(value);\n if (typeof value === \"string\") return new Date(value);\n if (typeof value === \"object\" && value !== null && \"toDate\" in value) {\n const v = value as CalendarDate | CalendarDateTime | ZonedDateTime;\n return v.toDate(getGodxConfig().timezone);\n }\n throw new TypeError(`format helpers: unsupported value ${String(value)}`);\n}\n\n/** Drop format-specific opts before passing to Intl. */\nfunction extractIntlOpts<T extends FormatOptions>(opts: T | undefined): Omit<T, keyof FormatOptions> {\n if (!opts) return {} as Omit<T, keyof FormatOptions>;\n const { locale: _l, timezone: _t, ...rest } = opts;\n return rest as Omit<T, keyof FormatOptions>;\n}\n\n/** Format a date by locale + timezone. Defaults: medium date style. */\nexport function formatDate(value: DateLike, opts?: FormatDateOptions): string {\n const locale = resolveLocale(opts);\n const timezone = resolveTimezone(opts);\n const intlOpts: Intl.DateTimeFormatOptions = {\n dateStyle: \"medium\",\n ...extractIntlOpts(opts),\n timeZone: timezone,\n };\n return new Intl.DateTimeFormat(locale, intlOpts).format(toDate(value));\n}\n\n/** Format a time by locale + timezone. Defaults: short time. */\nexport function formatTime(value: DateLike, opts?: FormatDateOptions): string {\n const locale = resolveLocale(opts);\n const timezone = resolveTimezone(opts);\n const intlOpts: Intl.DateTimeFormatOptions = {\n timeStyle: \"short\",\n ...extractIntlOpts(opts),\n timeZone: timezone,\n };\n return new Intl.DateTimeFormat(locale, intlOpts).format(toDate(value));\n}\n\n/** Format both date + time. Defaults: medium date, short time. */\nexport function formatDateTime(value: DateLike, opts?: FormatDateOptions): string {\n const locale = resolveLocale(opts);\n const timezone = resolveTimezone(opts);\n const intlOpts: Intl.DateTimeFormatOptions = {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n ...extractIntlOpts(opts),\n timeZone: timezone,\n };\n return new Intl.DateTimeFormat(locale, intlOpts).format(toDate(value));\n}\n\n/** Format a number by locale. */\nexport function formatNumber(value: number, opts?: FormatNumberOptions): string {\n const locale = resolveLocale(opts);\n return new Intl.NumberFormat(locale, extractIntlOpts(opts)).format(value);\n}\n\n/** Format a currency amount. ISO 4217 currency code required. */\nexport function formatCurrency(value: number, opts: FormatCurrencyOptions): string {\n const locale = resolveLocale(opts);\n const intlOpts: Intl.NumberFormatOptions = {\n style: \"currency\",\n ...extractIntlOpts(opts),\n };\n return new Intl.NumberFormat(locale, intlOpts).format(value);\n}\n","// Locale-aware relative-time formatter.\n//\n// Wraps `Intl.RelativeTimeFormat` (browser-native, no library cost) with\n// the diff-bucket logic — second / minute / hour / day / week / month /\n// year — so consumers can pass a single date/time value and get\n// \"2時間前\" / \"2 hours ago\" / \"2 giờ trước\" / \"2 oras na nakalipas\" by\n// reading the active locale from the preferences holder.\n\nimport { type DateLike } from \"./format\";\nimport { getGodxConfig } from \"../preferences/holder\";\n\nexport interface RelativeOptions {\n /** BCP 47 locale override. Defaults to the preferences holder. */\n locale?: string;\n /** Reference moment. Defaults to \"now\". Useful for tests. */\n now?: Date | number;\n /** `Intl.RelativeTimeFormat` numeric style. Default `\"auto\"`. */\n numeric?: \"always\" | \"auto\";\n /** `Intl.RelativeTimeFormat` style. Default `\"long\"`. */\n style?: \"long\" | \"short\" | \"narrow\";\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nfunction toMs(value: DateLike): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") return new Date(value).getTime();\n if (typeof value === \"object\" && value !== null && \"toDate\" in value) {\n return value.toDate(getGodxConfig().timezone).getTime();\n }\n throw new TypeError(`formatRelative: unsupported value ${String(value)}`);\n}\n\n/**\n * Format the distance between `value` and `opts.now` (default: current\n * time) as a locale-aware string.\n *\n * Granularity tops out at \"year\". Anything longer than a year reports\n * \"in N years\" / \"N years ago\".\n */\nexport function formatRelative(value: DateLike, opts: RelativeOptions = {}): string {\n const locale = opts.locale ?? getGodxConfig().locale;\n const nowMs = opts.now instanceof Date ? opts.now.getTime() : (opts.now ?? Date.now());\n const valueMs = toMs(value);\n const diffMs = valueMs - nowMs;\n const abs = Math.abs(diffMs);\n\n let unit: Intl.RelativeTimeFormatUnit;\n let amount: number;\n\n if (abs < MINUTE) {\n unit = \"second\";\n amount = Math.round(diffMs / SECOND);\n } else if (abs < HOUR) {\n unit = \"minute\";\n amount = Math.round(diffMs / MINUTE);\n } else if (abs < DAY) {\n unit = \"hour\";\n amount = Math.round(diffMs / HOUR);\n } else if (abs < WEEK) {\n unit = \"day\";\n amount = Math.round(diffMs / DAY);\n } else if (abs < MONTH) {\n unit = \"week\";\n amount = Math.round(diffMs / WEEK);\n } else if (abs < YEAR) {\n unit = \"month\";\n amount = Math.round(diffMs / MONTH);\n } else {\n unit = \"year\";\n amount = Math.round(diffMs / YEAR);\n }\n\n return new Intl.RelativeTimeFormat(locale, {\n numeric: opts.numeric ?? \"auto\",\n style: opts.style ?? \"long\",\n }).format(amount, unit);\n}\n","// React hook — locale + timezone-bound formatter surface.\n//\n// Reads from `<GodxConfigProvider>` so components re-render when the\n// active locale or timezone changes. Returns a memoised object whose\n// methods always resolve to the current context values.\n//\n// Mirrors the surface of `src/i18n/format.ts` + `src/i18n/relative.ts`\n// — the non-React calls accept explicit `{ locale, timezone }` opts;\n// the hook fills them in from context.\n\nimport { useMemo, useSyncExternalStore } from \"react\";\nimport { getGodxConfig, subscribeGodxConfig } from \"../preferences/holder\";\nimport {\n formatCurrency as fnFormatCurrency,\n formatDate as fnFormatDate,\n formatDateTime as fnFormatDateTime,\n formatNumber as fnFormatNumber,\n formatTime as fnFormatTime,\n type DateLike,\n type FormatCurrencyOptions,\n type FormatDateOptions,\n type FormatNumberOptions,\n} from \"../i18n/format\";\nimport {\n formatRelative as fnFormatRelative,\n type RelativeOptions,\n} from \"../i18n/relative\";\n\nexport interface Formatters {\n /** Active locale (BCP 47). */\n locale: string;\n /** Active IANA timezone. */\n timezone: string;\n formatDate: (value: DateLike, opts?: Omit<FormatDateOptions, \"locale\" | \"timezone\">) => string;\n formatTime: (value: DateLike, opts?: Omit<FormatDateOptions, \"locale\" | \"timezone\">) => string;\n formatDateTime: (value: DateLike, opts?: Omit<FormatDateOptions, \"locale\" | \"timezone\">) => string;\n formatRelative: (value: DateLike, opts?: Omit<RelativeOptions, \"locale\">) => string;\n formatNumber: (value: number, opts?: Omit<FormatNumberOptions, \"locale\">) => string;\n formatCurrency: (value: number, opts: Omit<FormatCurrencyOptions, \"locale\">) => string;\n}\n\nexport function useFormatters(): Formatters {\n // Subscribes to the module-level holder so this hook also works when\n // no `<GodxConfigProvider>` is mounted (e.g. isolated Storybook\n // renders). The holder's initial value matches the provider's\n // initial value — locale/timezone fall through `Intl` defaults.\n const { locale, timezone } = useSyncExternalStore(\n subscribeGodxConfig,\n getGodxConfig,\n getGodxConfig,\n );\n\n return useMemo<Formatters>(\n () => ({\n locale,\n timezone,\n formatDate: (value, opts) => fnFormatDate(value, { ...opts, locale, timezone }),\n formatTime: (value, opts) => fnFormatTime(value, { ...opts, locale, timezone }),\n formatDateTime: (value, opts) =>\n fnFormatDateTime(value, { ...opts, locale, timezone }),\n formatRelative: (value, opts) => fnFormatRelative(value, { ...opts, locale }),\n formatNumber: (value, opts) => fnFormatNumber(value, { ...opts, locale }),\n formatCurrency: (value, opts) =>\n fnFormatCurrency(value, { ...opts, locale }),\n }),\n [locale, timezone],\n );\n}\n","import { type ReactNode } from \"react\";\nimport {\n type CalendarDate,\n type CalendarDateTime,\n type ZonedDateTime,\n} from \"@internationalized/date\";\nimport { cn } from \"../cn\";\nimport { useFormatters } from \"../../hooks/useFormatters\";\nimport type { ColorProp } from \"../../props\";\n\n/**\n * Timeline — chronological event rail.\n *\n * Data-driven API (cardinal rule 23 + rule 31 — no parallel\n * sub-component primitives). Consumers pass an `items` array; the\n * primitive renders the rail end-to-end. Per-item customisation\n * flows through optional `renderItem` for advanced cases.\n *\n * Three visual variants, each backed by an existing CSS atom shipped\n * with the dxs-kintai card canon (`src/styles/shell/80-card-sections.css`):\n *\n * - `\"list\"` (default) — vertical rail with markers, `.tl-list` + `.tl-item`.\n * - `\"branching\"` — approval pipeline with left timestamp, dot, body.\n * `.tl-br` + `.row`.\n * - `\"feed\"` — social-style avatar feed. `.tl-feed` + `.item`.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `variant` — visual treatment (\"list\" | \"branching\" | \"feed\").\n * - `color` per item — semantic role of the marker.\n * - `current` per item — boolean, marks the active item.\n * - `animate` per item — pulsing ring around the marker.\n * - NEVER `mode` / `position` / `type` / `dot` / `pending` synonyms\n * (cardinal rule 32 — a separate `pending` prop is redundant when\n * a regular item with `animate: true` covers the same need).\n *\n * @example Data-driven (preferred)\n * <Timeline\n * items={[\n * { color: \"success\", title: \"申請\", time: \"09:30\" },\n * { color: \"primary\", current: true, animate: true, title: \"承認待ち\" },\n * ]}\n * />\n *\n * @example With renderItem (full custom)\n * <Timeline\n * items={events}\n * renderItem={(it) => <RichRow data={it} />}\n * />\n */\n\nexport type TimelineVariant = \"list\" | \"branching\" | \"feed\";\n\n/** Identical to `TagPresetColor` — the framework's semantic palette\n * minus `\"secondary\"` (which is Typography's text-dimming slot).\n * Aliased so any colour added to `ColorProp` lights up here too. */\nexport type TimelineColor = Exclude<ColorProp, \"secondary\">;\n\nexport interface TimelineItem {\n /** Stable key for React reconciliation. Defaults to the item index\n * but consumers should pass a real id for lists that re-order. */\n key?: string | number;\n /** Semantic role of the marker. Default \"default\". */\n color?: TimelineColor;\n /** Heavier outline on the marker — typically the active step. */\n current?: boolean;\n /** Pulsing ring around the marker — typically paired with\n * `current: true` on an in-progress item. Honours\n * `prefers-reduced-motion` (rule 6 a11y baseline). */\n animate?: boolean;\n /** Time / timestamp slot — right-side label in `branching`, inline\n * `.ts` in `list`, inline `.ts` in `feed`. Accepts a temporal value\n * (`Date`, ISO string, or any `@internationalized/date` value) — in\n * that case the active provider's locale + timezone format it via\n * `useFormatters` (`format` or `relative` controlled by the\n * Timeline `timeFormat` prop). Pass `ReactNode` to opt out. */\n time?:\n | ReactNode\n | Date\n | CalendarDate\n | CalendarDateTime\n | ZonedDateTime;\n /** Avatar slot — `feed` variant only. */\n avatar?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n /** Extra content rendered after `title` + `description`. */\n children?: ReactNode;\n /** Per-item class merged onto the row. */\n className?: string;\n}\n\nexport interface TimelineProps {\n /** Items to render. Each row is a single object — no sub-component\n * ceremony. */\n items: TimelineItem[];\n /** Custom row renderer. When set, takes priority over the default\n * variant rendering — receives the item + the active variant +\n * index, returns the full row JSX. */\n renderItem?: (item: TimelineItem, variant: TimelineVariant, index: number) => ReactNode;\n /** Visual variant. Default `list`. */\n variant?: TimelineVariant;\n /** Render items last-first. */\n reverse?: boolean;\n /** Show the vertical connector line that joins markers. Default\n * `true` for `list` + `branching`; ignored by `feed` (feed has no\n * connector by design). */\n connector?: boolean;\n /** How to render temporal `time` values. `\"relative\"` (default for\n * `feed`) renders \"2 時間前\" / \"2 hours ago\" via `useFormatters`.\n * `\"datetime\"` renders an absolute \"MMM d, HH:mm\" style. `\"time\"`\n * renders the time-of-day portion only. Ignored when `time` is a\n * `ReactNode` (string / JSX). */\n timeFormat?: \"relative\" | \"datetime\" | \"date\" | \"time\";\n className?: string;\n}\n\ntype TimeFormat = NonNullable<TimelineProps[\"timeFormat\"]>;\ntype TemporalValue =\n | Date\n | CalendarDate\n | CalendarDateTime\n | ZonedDateTime;\n\nfunction isTemporal(value: unknown): value is TemporalValue {\n if (value instanceof Date) return true;\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"toDate\" in value &&\n typeof (value as { toDate: unknown }).toDate === \"function\"\n ) {\n return true;\n }\n return false;\n}\n\n// Pure helper — given the formatter surface (resolved once in Timeline)\n// + a TimelineItem.time value + the active `timeFormat` mode, return\n// the renderable node. ReactNode values pass through untouched.\nfunction formatTimeNode(\n value: TimelineItem[\"time\"],\n format: TimeFormat,\n fmt: ReturnType<typeof useFormatters>,\n): ReactNode {\n if (!isTemporal(value)) return value as ReactNode;\n switch (format) {\n case \"relative\":\n return fmt.formatRelative(value);\n case \"date\":\n return fmt.formatDate(value);\n case \"time\":\n return fmt.formatTime(value);\n case \"datetime\":\n default:\n return fmt.formatDateTime(value);\n }\n}\n\n// Map the semantic color vocabulary onto the canonical .tl-* atom\n// hues shipped with the card design system. Atoms cover a subset;\n// the rest fall back to the neutral marker.\nfunction colorClass(color: TimelineColor = \"default\"): string {\n switch (color) {\n case \"success\":\n return \"success\";\n case \"primary\":\n return \"primary\";\n case \"attention\":\n return \"attention\";\n case \"warning\":\n return \"warning\";\n case \"destructive\":\n case \"info\":\n case \"default\":\n default:\n return \"\";\n }\n}\n\nfunction defaultRender(\n item: TimelineItem,\n variant: TimelineVariant,\n timeFormat: TimeFormat,\n fmt: ReturnType<typeof useFormatters>,\n): ReactNode {\n const hue = colorClass(item.color);\n const time = formatTimeNode(item.time, timeFormat, fmt);\n\n if (variant === \"branching\") {\n return (\n <div\n className={cn(\n \"row\",\n hue,\n item.current && \"current\",\n item.animate && \"animate\",\n item.className,\n )}\n >\n <span className=\"when\">{time}</span>\n <div className=\"node\" aria-hidden />\n <div className=\"body\">\n {item.title !== undefined && <div className=\"t\">{item.title}</div>}\n {item.description !== undefined && (\n <div className=\"d\">{item.description}</div>\n )}\n {item.children}\n </div>\n </div>\n );\n }\n\n if (variant === \"feed\") {\n return (\n <div className={cn(\"item\", item.className)}>\n {item.avatar}\n <div className=\"body\">\n <div className=\"h\">\n {item.title !== undefined && <b>{item.title}</b>}\n {time !== undefined && <span className=\"ts\">{time}</span>}\n </div>\n {item.description !== undefined && (\n <div className=\"d\">{item.description}</div>\n )}\n {item.children}\n </div>\n </div>\n );\n }\n\n // Default — list variant.\n return (\n <li\n className={cn(\n \"tl-item\",\n hue,\n item.current && \"current\",\n item.animate && \"animate\",\n item.className,\n )}\n >\n {(item.title !== undefined || time !== undefined) && (\n <div className=\"t-h\">\n {item.title !== undefined && <span>{item.title}</span>}\n {time !== undefined && <span className=\"ts\">{time}</span>}\n </div>\n )}\n {item.description !== undefined && <div className=\"t-d\">{item.description}</div>}\n {item.children}\n </li>\n );\n}\n\nexport function Timeline({\n items,\n renderItem,\n variant = \"list\",\n reverse = false,\n connector = true,\n timeFormat,\n className,\n}: TimelineProps) {\n const ordered = reverse ? items.slice().reverse() : items;\n const fmt = useFormatters();\n // Feed reads as a social timeline so default to \"X時間前\" relative\n // time; list + branching default to absolute \"datetime\" output.\n const effectiveFormat: TimeFormat =\n timeFormat ?? (variant === \"feed\" ? \"relative\" : \"datetime\");\n\n const rows = ordered.map((item, i) => {\n const key = item.key ?? i;\n const node = renderItem\n ? renderItem(item, variant, i)\n : defaultRender(item, variant, effectiveFormat, fmt);\n // Wrap to attach the key in a generic way regardless of returned tag.\n return <RowKey key={key}>{node}</RowKey>;\n });\n\n const className_ = cn(\n variant === \"list\" && \"tl-list\",\n variant === \"branching\" && \"tl-br\",\n variant === \"feed\" && \"tl-feed\",\n // Connector toggle — `feed` variant has no connector by design,\n // so the prop is meaningful only for `list` + `branching`.\n !connector && variant !== \"feed\" && \"tl-no-connector\",\n className,\n );\n\n return variant === \"list\" ? (\n <ul className={className_}>{rows}</ul>\n ) : (\n <div className={className_}>{rows}</div>\n );\n}\n\n/** Internal helper — React needs the key on the element returned by\n * `.map()`. `RowKey` is a transparent wrapper that lets us assign the\n * key without forcing the renderer to do so. Returns the child verbatim\n * via Fragment so it doesn't alter the DOM. */\nfunction RowKey({ children }: { children: ReactNode }): ReactNode {\n return <>{children}</>;\n}\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\"\nimport {\n Button as AriaButton,\n Checkbox as AriaCheckbox,\n SelectionIndicator,\n Tree as AriaTree,\n TreeItem as AriaTreeItem,\n TreeItemContent,\n type Key,\n type Selection,\n} from \"react-aria-components\"\nimport { ChevronRight } from \"lucide-react\"\nimport { cn } from \"../cn\"\n\n/**\n * Tree — standalone hierarchical view (no popover).\n *\n * React Aria-backed sibling of `<TreeSelect>` — same recursive shape,\n * but renders inline with ARIA tree keyboard navigation and selection.\n * Useful for org charts, file explorers, category navigators where the\n * tree IS the surface (not a dropdown).\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-style selection\n * (single: `string`; multiple: `string[]`).\n * - `multiple` — boolean (NEVER `mode=\"multiple\"`).\n * - `expandedKeys` / `defaultExpandedKeys` / `onExpandedKeysChange`\n * — expansion state.\n * - `checkable` — render checkboxes alongside labels.\n * - `showLine` — render connector guides.\n * - `density` — local row spacing override for tree-heavy surfaces.\n *\n * @example\n * <Tree\n * treeData={[\n * { key: \"eng\", title: \"エンジニアリング\", children: [\n * { key: \"fe\", title: \"Frontend\" },\n * { key: \"be\", title: \"Backend\" },\n * ]},\n * ]}\n * defaultExpandedKeys={[\"eng\"]}\n * />\n */\n\nexport interface TreeNode {\n key: string\n title: ReactNode\n icon?: ReactNode\n disabled?: boolean\n selectable?: boolean\n children?: TreeNode[]\n}\n\nexport interface TreeRenderItemState {\n node: TreeNode\n isExpanded: boolean\n isSelected: boolean\n isDisabled: boolean\n hasChildren: boolean\n level: number\n}\n\nexport type TreeDensity = \"compact\" | \"default\" | \"comfortable\"\n\nexport interface TreeProps {\n treeData: TreeNode[]\n /** Selected key(s). */\n value?: string | string[]\n defaultValue?: string | string[]\n onValueChange?: (value: string | string[]) => void\n /** Allow multi-select. */\n multiple?: boolean\n /** Initially-expanded node keys. */\n defaultExpandedKeys?: string[]\n /** Controlled expanded keys. */\n expandedKeys?: string[]\n onExpandedKeysChange?: (keys: string[]) => void\n /** Render checkboxes (multi-select via checkbox). Implies `multiple`. */\n checkable?: boolean\n /** Render connector lines between depths. */\n showLine?: boolean\n /** Local row spacing override. Defaults to the page density. */\n density?: TreeDensity\n /** Override the row's icon + label content without replacing the ARIA tree. */\n renderItem?: (state: TreeRenderItemState) => ReactNode\n className?: string\n}\n\nfunction normalizeIn(raw: string | string[] | undefined): string[] {\n if (raw === undefined) return []\n return Array.isArray(raw) ? raw : raw ? [raw] : []\n}\n\ninterface NodeRowProps {\n node: TreeNode\n checkable: boolean\n depth: number\n guides: boolean[]\n isLast: boolean\n renderItem?: TreeProps[\"renderItem\"]\n}\n\nfunction NodeRow({ node, checkable, depth, guides, isLast, renderItem }: NodeRowProps): ReactNode {\n const hasChildren = !!node.children && node.children.length > 0\n const childGuides = depth === 0 ? [] : [...guides, !isLast]\n return (\n <AriaTreeItem\n className=\"tree-node\"\n id={node.key}\n textValue={String(node.title)}\n isDisabled={node.disabled}\n >\n <TreeItemContent>\n {({ hasChildItems, isExpanded, isSelected, isDisabled, level }) => {\n const content = renderItem?.({\n node,\n isExpanded,\n isSelected,\n isDisabled,\n hasChildren: hasChildItems,\n level,\n }) ?? (\n <>\n {node.icon !== undefined && (\n <span className=\"tree-icon\" aria-hidden>\n {node.icon}\n </span>\n )}\n <span className=\"tree-label\">{node.title}</span>\n </>\n )\n\n return (\n <>\n <span className=\"tree-guides\" aria-hidden>\n {guides.map((continues, index) => (\n <span\n key={index}\n className=\"tree-guide\"\n data-continuation={continues ? \"true\" : undefined}\n />\n ))}\n {depth > 0 && (\n <span\n className=\"tree-guide tree-guide-branch\"\n data-last={isLast ? \"true\" : undefined}\n />\n )}\n </span>\n {hasChildItems ? (\n <AriaButton slot=\"chevron\" className=\"tree-toggle\">\n <ChevronRight aria-hidden className=\"tree-toggle-icon\" />\n </AriaButton>\n ) : (\n <span className=\"tree-toggle\" aria-hidden />\n )}\n {checkable ? (\n <AriaCheckbox slot=\"selection\" className=\"tree-checkbox\" />\n ) : (\n <SelectionIndicator className=\"tree-selection\" />\n )}\n <span className=\"tree-row-content\">{content}</span>\n </>\n )\n }}\n </TreeItemContent>\n {hasChildren\n ? node.children!.map((child, index) => (\n <NodeRow\n key={child.key}\n node={child}\n checkable={checkable}\n depth={depth + 1}\n guides={childGuides}\n isLast={index === node.children!.length - 1}\n renderItem={renderItem}\n />\n ))\n : null}\n </AriaTreeItem>\n )\n}\n\nfunction collectKeys(nodes: TreeNode[], predicate: (node: TreeNode) => boolean): string[] {\n const out: string[] = []\n const walk = (items: TreeNode[]) => {\n for (const item of items) {\n if (predicate(item)) out.push(item.key)\n if (item.children) walk(item.children)\n }\n }\n walk(nodes)\n return out\n}\n\nfunction selectionFromKeys(keys: Iterable<Key> | \"all\"): string[] {\n if (keys === \"all\") return []\n return Array.from(keys, String)\n}\n\nexport const Tree = forwardRef<HTMLDivElement, TreeProps>(function Tree(\n {\n treeData,\n value,\n defaultValue,\n onValueChange,\n multiple = false,\n defaultExpandedKeys,\n expandedKeys,\n onExpandedKeysChange,\n checkable = false,\n showLine = false,\n density,\n renderItem,\n className,\n },\n ref,\n) {\n const isMulti = multiple || checkable\n const isControlled = value !== undefined\n const [internal, setInternal] = useState<string[]>(normalizeIn(defaultValue))\n const selectedKeys = isControlled ? normalizeIn(value) : internal\n\n const disabledKeys = useMemo(\n () => collectKeys(treeData, (node) => node.disabled === true),\n [treeData],\n )\n\n const selectableKeys = useMemo(\n () => new Set(collectKeys(treeData, (node) => node.selectable !== false)),\n [treeData],\n )\n\n const handleSelectionChange = (keys: Selection) => {\n const next = selectionFromKeys(keys).filter((key) => selectableKeys.has(key))\n const nextValue = isMulti ? next : next.slice(0, 1)\n if (!isControlled) setInternal(nextValue)\n if (isMulti) onValueChange?.(nextValue)\n else onValueChange?.(nextValue[0] ?? \"\")\n }\n\n const handleExpandedChange = (keys: Set<Key>) => {\n onExpandedKeysChange?.(Array.from(keys, String))\n }\n\n return (\n <AriaTree\n ref={ref}\n aria-label=\"Tree\"\n className={cn(\"tree\", className)}\n data-show-line={showLine ? \"true\" : undefined}\n data-density={density}\n selectionMode={isMulti ? \"multiple\" : \"single\"}\n selectionBehavior={checkable ? \"toggle\" : \"replace\"}\n selectedKeys={new Set(selectedKeys)}\n onSelectionChange={handleSelectionChange}\n disabledKeys={disabledKeys}\n expandedKeys={expandedKeys}\n defaultExpandedKeys={expandedKeys === undefined ? defaultExpandedKeys : undefined}\n onExpandedChange={handleExpandedChange}\n >\n {treeData.map((node, index) => (\n <NodeRow\n key={node.key}\n node={node}\n checkable={checkable}\n depth={0}\n guides={[]}\n isLast={index === treeData.length - 1}\n renderItem={renderItem}\n />\n ))}\n </AriaTree>\n )\n})\n","import {\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type RefObject,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../general/Button\";\nimport { cn } from \"../cn\";\n\n/**\n * Tour — multi-step product walkthrough.\n *\n * Overlays the viewport, highlights a target through a true cutout,\n * advances step-by-step. The callout positions near the target's\n * bounding rect (or page-centre when `placement=\"center\"`).\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `open` / `defaultOpen` / `onOpenChange` — Radix-style visibility.\n * - `current` / `defaultCurrent` / `onCurrentChange` — active step.\n * - `placement` — positional anchor of the callout.\n *\n * @example\n * <Tour\n * defaultOpen\n * steps={[\n * { target: \"#new-btn\", title: \"新規作成\", description: \"…\" },\n * { target: \"#filter\", title: \"絞り込み\" },\n * ]}\n * />\n */\n\nexport type TourPlacement = \"top\" | \"right\" | \"bottom\" | \"left\" | \"center\";\n\nexport interface TourStep {\n /** CSS selector OR ref to highlight. Omit / `null` → centred. */\n target?: string | RefObject<HTMLElement | null>;\n title: ReactNode;\n description?: ReactNode;\n /** Callout placement relative to the target. Default \"bottom\". */\n placement?: TourPlacement;\n}\n\nexport interface TourLabels {\n prev?: string;\n next?: string;\n finish?: string;\n skip?: string;\n}\n\nconst DEFAULT_LABELS: Required<TourLabels> = {\n prev: \"Back\",\n next: \"Next\",\n finish: \"Finish\",\n skip: \"Skip\",\n};\n\nexport interface TourProps {\n steps: TourStep[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Controlled current step (0-based). */\n current?: number;\n defaultCurrent?: number;\n onCurrentChange?: (step: number) => void;\n /** Called when the user clicks Finish on the last step. */\n onFinish?: () => void;\n /** Called when the user dismisses (Skip / Esc). */\n onClose?: () => void;\n /** Override button strings. */\n labels?: TourLabels;\n className?: string;\n}\n\ninterface CalloutPosition {\n top: number;\n left: number;\n}\n\nconst CALLOUT_GAP = 12;\nconst CALLOUT_WIDTH = 320;\nconst CALLOUT_HEIGHT_ESTIMATE = 160;\nconst TARGET_PADDING = 4;\n\nfunction resolveTarget(\n target: TourStep[\"target\"],\n): HTMLElement | null {\n if (!target) return null;\n if (typeof target === \"string\") {\n return document.querySelector<HTMLElement>(target);\n }\n return target.current ?? null;\n}\n\nfunction computeCalloutPos(\n rect: DOMRect,\n placement: TourPlacement,\n): CalloutPosition {\n const viewportW =\n typeof window !== \"undefined\" ? window.innerWidth : 1280;\n const viewportH =\n typeof window !== \"undefined\" ? window.innerHeight : 800;\n\n let top = 0;\n let left = 0;\n switch (placement) {\n case \"top\":\n top = rect.top - CALLOUT_HEIGHT_ESTIMATE - CALLOUT_GAP;\n left = rect.left + rect.width / 2 - CALLOUT_WIDTH / 2;\n break;\n case \"right\":\n top = rect.top + rect.height / 2 - CALLOUT_HEIGHT_ESTIMATE / 2;\n left = rect.right + CALLOUT_GAP;\n break;\n case \"left\":\n top = rect.top + rect.height / 2 - CALLOUT_HEIGHT_ESTIMATE / 2;\n left = rect.left - CALLOUT_WIDTH - CALLOUT_GAP;\n break;\n case \"bottom\":\n default:\n top = rect.bottom + CALLOUT_GAP;\n left = rect.left + rect.width / 2 - CALLOUT_WIDTH / 2;\n break;\n }\n\n // Clamp inside the viewport.\n top = Math.max(8, Math.min(viewportH - CALLOUT_HEIGHT_ESTIMATE - 8, top));\n left = Math.max(8, Math.min(viewportW - CALLOUT_WIDTH - 8, left));\n return { top, left };\n}\n\nexport function Tour({\n steps,\n open,\n defaultOpen = false,\n onOpenChange,\n current,\n defaultCurrent = 0,\n onCurrentChange,\n onFinish,\n onClose,\n labels,\n className,\n}: TourProps) {\n const isOpenControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isOpenControlled ? !!open : internalOpen;\n\n const isStepControlled = current !== undefined;\n const [internalStep, setInternalStep] = useState<number>(defaultCurrent);\n const stepIndex = isStepControlled\n ? Math.max(0, Math.min(steps.length - 1, current ?? 0))\n : Math.max(0, Math.min(steps.length - 1, internalStep));\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isOpenControlled, onOpenChange],\n );\n\n const setStep = useCallback(\n (next: number) => {\n if (!isStepControlled) setInternalStep(next);\n onCurrentChange?.(next);\n },\n [isStepControlled, onCurrentChange],\n );\n\n const resolvedLabels = useMemo<Required<TourLabels>>(\n () => ({ ...DEFAULT_LABELS, ...(labels ?? {}) }),\n [labels],\n );\n\n const step = steps[stepIndex];\n const placement: TourPlacement = step?.placement ?? \"bottom\";\n const isFirst = stepIndex === 0;\n const isLast = stepIndex === steps.length - 1;\n\n const [pos, setPos] = useState<CalloutPosition | null>(null);\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n const rafRef = useRef<number | null>(null);\n const reactMaskId = useId();\n const maskId = `tour-mask-${reactMaskId.replace(/:/g, \"\")}`;\n\n const recompute = useCallback(() => {\n if (!isOpen || !step) {\n setPos(null);\n setTargetRect(null);\n return;\n }\n if (placement === \"center\" || step.target == null) {\n setPos(null);\n setTargetRect(null);\n return;\n }\n const el = resolveTarget(step.target);\n if (!el) {\n setPos(null);\n setTargetRect(null);\n return;\n }\n const rect = el.getBoundingClientRect();\n setTargetRect(rect);\n setPos(computeCalloutPos(rect, placement));\n }, [isOpen, placement, step]);\n\n useEffect(() => {\n if (!isOpen) return;\n recompute();\n const onScroll = () => {\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(recompute);\n };\n window.addEventListener(\"scroll\", onScroll, true);\n window.addEventListener(\"resize\", onScroll);\n return () => {\n window.removeEventListener(\"scroll\", onScroll, true);\n window.removeEventListener(\"resize\", onScroll);\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n };\n }, [isOpen, recompute]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n onClose?.();\n }, [setOpen, onClose]);\n\n const handleNext = useCallback(() => {\n if (isLast) {\n setOpen(false);\n onFinish?.();\n return;\n }\n setStep(stepIndex + 1);\n }, [isLast, stepIndex, setStep, setOpen, onFinish]);\n\n const handlePrev = useCallback(() => {\n if (isFirst) return;\n setStep(stepIndex - 1);\n }, [isFirst, stepIndex, setStep]);\n\n useEffect(() => {\n if (!isOpen) return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") handleClose();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [isOpen, handleClose]);\n\n if (!isOpen || !step || typeof document === \"undefined\") return null;\n\n const calloutStyle =\n pos !== null\n ? { top: pos.top, left: pos.left }\n : ({} as Record<string, never>);\n\n const highlightStyle =\n targetRect !== null\n ? {\n top: targetRect.top - TARGET_PADDING,\n left: targetRect.left - TARGET_PADDING,\n width: targetRect.width + TARGET_PADDING * 2,\n height: targetRect.height + TARGET_PADDING * 2,\n }\n : null;\n\n return createPortal(\n <div\n className={cn(\"tour-overlay\", className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"tour-callout-title\"\n >\n <svg className=\"tour-mask\" aria-hidden onClick={handleClose}>\n <defs>\n <mask id={maskId}>\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n {highlightStyle !== null && (\n <rect\n className=\"tour-mask-cutout\"\n x={highlightStyle.left}\n y={highlightStyle.top}\n width={highlightStyle.width}\n height={highlightStyle.height}\n rx={8}\n ry={8}\n fill=\"black\"\n />\n )}\n </mask>\n </defs>\n <rect\n className=\"tour-mask-scrim\"\n width=\"100%\"\n height=\"100%\"\n mask={`url(#${maskId})`}\n />\n </svg>\n {highlightStyle !== null && (\n <div\n className=\"tour-highlight\"\n aria-hidden\n style={highlightStyle}\n />\n )}\n <div\n className={cn(\n \"tour-callout\",\n pos === null && \"tour-callout-center\",\n )}\n style={calloutStyle}\n data-placement={placement}\n >\n <div className=\"tour-callout-title\" id=\"tour-callout-title\">\n {step.title}\n </div>\n {step.description !== undefined && (\n <div className=\"tour-callout-desc\">{step.description}</div>\n )}\n <div className=\"tour-callout-footer\">\n <span className=\"tour-callout-progress\">\n {stepIndex + 1} / {steps.length}\n </span>\n <div className=\"tour-callout-actions\">\n <Button variant=\"ghost\" size=\"small\" onClick={handleClose}>\n {resolvedLabels.skip}\n </Button>\n {!isFirst && (\n <Button variant=\"secondary\" size=\"small\" onClick={handlePrev}>\n {resolvedLabels.prev}\n </Button>\n )}\n <Button variant=\"primary\" size=\"small\" onClick={handleNext}>\n {isLast ? resolvedLabels.finish : resolvedLabels.next}\n </Button>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","// Upload primitive types — shared across <Upload>, <ImageUpload>,\n// and <AvatarUploader>. Surface follows Ant Design's <Upload>\n// (uid + name + status + percent + originFile) so a consumer\n// switching from antd has a one-to-one mental model.\n\nimport type { ReactNode } from \"react\";\n\nexport type UploadStatus =\n | \"pending\"\n | \"uploading\"\n | \"success\"\n | \"error\"\n | \"removed\";\n\nexport type UploadListType = \"text\" | \"picture\" | \"picture-card\";\n\nexport interface UploadFile {\n /** Stable client-side identifier (used as React key). */\n uid: string;\n /** File name shown in the list. */\n name: string;\n /** Size in bytes. */\n size: number;\n /** MIME type. */\n type: string;\n /** Lifecycle phase. */\n status: UploadStatus;\n /** 0..100. */\n percent: number;\n /** Human-readable error from the upload transport. */\n error?: string;\n /** Final URL (or pre-existing URL for controlled mode). */\n url?: string;\n /** Local object URL used for thumbnails before upload completes. */\n thumbUrl?: string;\n /** The original `File` — only present until the upload resolves. */\n originFile?: File;\n}\n\nexport interface UploadRequestParams {\n file: File;\n /** Push 0..100 progress to the list item. */\n onProgress: (percent: number) => void;\n /** Aborts when the user removes the item mid-upload. */\n signal: AbortSignal;\n}\n\n/**\n * Service supplies the transport. Resolve with `{ url }` to stamp\n * the final URL on the list item; resolve with `void` to keep the\n * client-side thumbUrl. Throw to surface an error.\n */\nexport type UploadCustomRequest = (\n params: UploadRequestParams,\n) => Promise<{ url?: string } | void>;\n\nexport interface UploadLabels {\n /** Default trigger CTA. */\n dropHint: string;\n /** Second-line hint under the dashed trigger. */\n dropSubHint: string;\n /** Picture-card \"+ Upload\". */\n pictureCardHint: string;\n /** Per-item remove button aria-label. */\n remove: string;\n /** Per-item retry button aria-label. */\n retry: string;\n /** Per-item preview button aria-label. */\n preview: string;\n /** Error: file type rejected. */\n rejectedType: string;\n /** Error: file too large (supports `{{mb}}` interpolation). */\n rejectedTooLarge: string;\n /** Error: too many files (supports `{{count}}` interpolation). */\n rejectedTooMany: string;\n}\n\nexport const DEFAULT_UPLOAD_LABELS: UploadLabels = {\n dropHint: \"Click or drag file to upload\",\n dropSubHint: \"Single or multiple files supported\",\n pictureCardHint: \"Upload\",\n remove: \"Remove\",\n retry: \"Retry\",\n preview: \"Preview\",\n rejectedType: \"File type not allowed\",\n rejectedTooLarge: \"File must be smaller than {{mb}} MB\",\n rejectedTooMany: \"At most {{count}} file(s) allowed\",\n};\n\nexport interface UploadProps {\n /** Allow selecting multiple files at once. */\n multiple?: boolean;\n /** MIME pattern passed to `<input accept=>`, e.g. `image/*`, `.pdf,.docx`. */\n accept?: string;\n /** Max bytes per file. Files larger are rejected before upload. */\n maxSize?: number;\n /** Max items in the list (ignored when `multiple=false`). */\n maxCount?: number;\n /** Hide the trigger + disable all actions. */\n disabled?: boolean;\n /** Visual variant of the file list. */\n listType?: UploadListType;\n /** Controlled mode — when supplied the composite never owns state. */\n fileList?: UploadFile[];\n /** Uncontrolled initial state. */\n defaultFileList?: UploadFile[];\n /** Synchronous or async gate run before queueing. Return false → skip. */\n beforeUpload?: (file: File) => boolean | Promise<boolean>;\n /** Service-supplied transport. */\n customRequest: UploadCustomRequest;\n /** Fires whenever the list mutates (controlled + uncontrolled). */\n onChange?: (files: UploadFile[]) => void;\n /** Fires before remove. Return false / reject to keep the item. */\n onRemove?: (file: UploadFile) => boolean | Promise<boolean>;\n /** Fires when the user taps the preview button. */\n onPreview?: (file: UploadFile) => void;\n /** Override label strings. */\n labels?: Partial<UploadLabels>;\n /** Map a thrown error to user copy. */\n errorMapper?: (err: unknown) => string;\n /** Replace the default dashed trigger area. */\n trigger?: ReactNode;\n /** Alias for `trigger` (composability with shadcn-style). */\n children?: ReactNode;\n /** Extra className on the outer wrapper. */\n className?: string;\n}\n","// Upload validation helpers — MIME + size + count gates run before\n// queueing a file into the list. Pure functions; no React, no state.\n\nimport type { UploadLabels } from \"./types\";\n\nexport interface ValidationContext {\n accept?: string;\n maxSize?: number;\n labels: UploadLabels;\n}\n\n/**\n * Match a file against the `accept` pattern. Supports the same forms\n * as `<input accept>`:\n *\n * - extension list: `.pdf,.docx`\n * - MIME exact: `image/png,application/pdf`\n * - MIME wildcard: `image/*`\n * - mixed: `image/*,.pdf`\n * - empty / undefined: accept everything\n */\nexport function matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept.trim() === \"\") return true;\n const tokens = accept\n .split(\",\")\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n\n const fileType = file.type.toLowerCase();\n const fileName = file.name.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith(\".\")) {\n return fileName.endsWith(token);\n }\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, -1); // keep trailing slash\n return fileType.startsWith(prefix);\n }\n return fileType === token;\n });\n}\n\nexport interface ValidationResult {\n ok: boolean;\n error?: string;\n}\n\nexport function validateFile(\n file: File,\n ctx: ValidationContext,\n): ValidationResult {\n if (!matchesAccept(file, ctx.accept)) {\n return { ok: false, error: ctx.labels.rejectedType };\n }\n if (ctx.maxSize !== undefined && file.size > ctx.maxSize) {\n const mb = Math.max(1, Math.round(ctx.maxSize / 1024 / 1024));\n return {\n ok: false,\n error: ctx.labels.rejectedTooLarge.replace(\"{{mb}}\", String(mb)),\n };\n }\n return { ok: true };\n}\n\nexport function validateCount(\n currentCount: number,\n incoming: number,\n maxCount: number | undefined,\n labels: UploadLabels,\n): ValidationResult {\n if (maxCount === undefined) return { ok: true };\n if (currentCount + incoming > maxCount) {\n return {\n ok: false,\n error: labels.rejectedTooMany.replace(\"{{count}}\", String(maxCount)),\n };\n }\n return { ok: true };\n}\n","// useUpload — owns the controlled-or-uncontrolled fileList state +\n// per-item AbortController + the orchestration for enqueue / remove\n// / retry. Components render; this hook drives.\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n UploadCustomRequest,\n UploadFile,\n UploadLabels,\n UploadProps,\n} from \"./types\";\nimport { DEFAULT_UPLOAD_LABELS } from \"./types\";\nimport { validateCount, validateFile } from \"./validate\";\n\nlet uidCounter = 0;\nfunction nextUid(): string {\n uidCounter += 1;\n return `upload-${Date.now().toString(36)}-${uidCounter.toString(36)}`;\n}\n\ninterface UseUploadArgs\n extends Pick<\n UploadProps,\n | \"multiple\"\n | \"accept\"\n | \"maxSize\"\n | \"maxCount\"\n | \"fileList\"\n | \"defaultFileList\"\n | \"beforeUpload\"\n | \"customRequest\"\n | \"onChange\"\n | \"onRemove\"\n | \"errorMapper\"\n > {\n labels: UploadLabels;\n /**\n * Hook fired after a file successfully resolves through customRequest.\n * Avatar/Image variants can inspect the resulting UploadFile here.\n */\n onItemSuccess?: (file: UploadFile) => void;\n}\n\nexport interface UseUploadReturn {\n files: UploadFile[];\n /** True when at least one item is uploading. */\n isUploading: boolean;\n /** Aggregate validation error from the last enqueue (cleared on next try). */\n rejectionError: string | null;\n /** Push a FileList / File[] through validation + queue. */\n enqueue: (incoming: FileList | File[]) => Promise<void>;\n /** Remove an item (cancels in-flight upload). */\n remove: (uid: string) => Promise<void>;\n /** Retry an errored item with the same originFile. */\n retry: (uid: string) => Promise<void>;\n /** Clear the rejection banner. */\n clearRejection: () => void;\n}\n\nexport function useUpload(args: UseUploadArgs): UseUploadReturn {\n const {\n multiple = false,\n accept,\n maxSize,\n maxCount,\n fileList,\n defaultFileList,\n beforeUpload,\n customRequest,\n onChange,\n onRemove,\n errorMapper,\n labels,\n onItemSuccess,\n } = args;\n\n const controlled = fileList !== undefined;\n const [internal, setInternal] = useState<UploadFile[]>(\n () => defaultFileList ?? [],\n );\n const files = controlled ? (fileList as UploadFile[]) : internal;\n const filesRef = useRef(files);\n filesRef.current = files;\n\n const [rejectionError, setRejectionError] = useState<string | null>(null);\n const aborters = useRef<Map<string, AbortController>>(new Map());\n\n // Cleanup any object URLs we created when the hook unmounts.\n useEffect(() => {\n const map = aborters.current;\n return () => {\n map.forEach((c) => c.abort());\n map.clear();\n };\n }, []);\n\n const commit = useCallback(\n (next: UploadFile[]) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n filesRef.current = next;\n },\n [controlled, onChange],\n );\n\n const patchItem = useCallback(\n (uid: string, patch: Partial<UploadFile>) => {\n const next = filesRef.current.map((f) =>\n f.uid === uid ? { ...f, ...patch } : f,\n );\n commit(next);\n },\n [commit],\n );\n\n const runRequest = useCallback(\n async (item: UploadFile, originFile: File) => {\n const controller = new AbortController();\n aborters.current.set(item.uid, controller);\n patchItem(item.uid, { status: \"uploading\", percent: 0, error: undefined });\n try {\n const result = await (customRequest as UploadCustomRequest)({\n file: originFile,\n onProgress: (p: number) =>\n patchItem(item.uid, { percent: Math.max(0, Math.min(100, p)) }),\n signal: controller.signal,\n });\n if (controller.signal.aborted) return;\n patchItem(item.uid, {\n status: \"success\",\n percent: 100,\n url: result?.url ?? item.url,\n });\n const after = filesRef.current.find((f) => f.uid === item.uid);\n if (after) onItemSuccess?.(after);\n } catch (err) {\n if (controller.signal.aborted) return;\n const msg = errorMapper\n ? errorMapper(err)\n : err instanceof Error\n ? err.message\n : \"Upload failed\";\n patchItem(item.uid, { status: \"error\", error: msg });\n } finally {\n aborters.current.delete(item.uid);\n }\n },\n [customRequest, errorMapper, onItemSuccess, patchItem],\n );\n\n const enqueue = useCallback(\n async (incoming: FileList | File[]) => {\n setRejectionError(null);\n const arr = Array.from(incoming);\n if (arr.length === 0) return;\n\n const restrict = multiple ? arr : arr.slice(0, 1);\n const validationCtx = { accept, maxSize, labels };\n\n const accepted: File[] = [];\n for (const f of restrict) {\n const v = validateFile(f, validationCtx);\n if (!v.ok) {\n setRejectionError(v.error ?? \"Invalid file\");\n continue;\n }\n if (beforeUpload) {\n const ok = await beforeUpload(f);\n if (!ok) continue;\n }\n accepted.push(f);\n }\n if (accepted.length === 0) return;\n\n const baseCount = multiple ? filesRef.current.length : 0;\n const countCheck = validateCount(\n baseCount,\n accepted.length,\n maxCount,\n labels,\n );\n if (!countCheck.ok) {\n setRejectionError(countCheck.error ?? \"Too many files\");\n return;\n }\n\n const newItems: UploadFile[] = accepted.map((file) => ({\n uid: nextUid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: \"pending\",\n percent: 0,\n thumbUrl: file.type.startsWith(\"image/\")\n ? URL.createObjectURL(file)\n : undefined,\n originFile: file,\n }));\n\n const base = multiple ? filesRef.current : [];\n const next = [...base, ...newItems];\n commit(next);\n\n for (const item of newItems) {\n if (!item.originFile) continue;\n // Fire-and-forget; runRequest patches state per-item.\n void runRequest(item, item.originFile);\n }\n },\n [accept, beforeUpload, commit, labels, maxCount, maxSize, multiple, runRequest],\n );\n\n const remove = useCallback(\n async (uid: string) => {\n const item = filesRef.current.find((f) => f.uid === uid);\n if (!item) return;\n if (onRemove) {\n const allowed = await onRemove(item);\n if (allowed === false) return;\n }\n aborters.current.get(uid)?.abort();\n aborters.current.delete(uid);\n if (item.thumbUrl?.startsWith(\"blob:\")) {\n URL.revokeObjectURL(item.thumbUrl);\n }\n const next = filesRef.current.filter((f) => f.uid !== uid);\n commit(next);\n },\n [commit, onRemove],\n );\n\n const retry = useCallback(\n async (uid: string) => {\n const item = filesRef.current.find((f) => f.uid === uid);\n if (!item || !item.originFile) return;\n await runRequest(item, item.originFile);\n },\n [runRequest],\n );\n\n const clearRejection = useCallback(() => setRejectionError(null), []);\n\n const isUploading = useMemo(\n () => files.some((f) => f.status === \"uploading\"),\n [files],\n );\n\n return { files, isUploading, rejectionError, enqueue, remove, retry, clearRejection };\n}\n\nexport { DEFAULT_UPLOAD_LABELS };\n","// <Upload> — generic file uploader composite. Mirrors Ant Design's\n// <Upload> API (multiple, accept, maxCount, listType, fileList,\n// beforeUpload, customRequest, onChange, onRemove, onPreview).\n//\n// Service code supplies `customRequest` to perform the actual HTTP\n// transport. The composite owns the file picker, drag-and-drop,\n// validation, queue state, the progress bar, abort handling, the\n// remove + retry flow, and three list layouts.\n//\n// Sibling primitives:\n// - <ImageUpload> adds picture thumbnails + optional crop\n// - <AvatarUploader> pre-configured single + round crop\n\nimport { useCallback, useId, useRef, useState, type DragEvent } from \"react\";\nimport { File as FileIcon, Image as ImageIcon, RotateCw, Trash2, Upload as UploadIcon } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex } from \"../../layout\";\nimport { cn } from \"../../cn\";\nimport type { UploadFile, UploadProps } from \"./shared/types\";\nimport { DEFAULT_UPLOAD_LABELS } from \"./shared/types\";\nimport { useUpload } from \"./shared/useUpload\";\n\nconst KB = 1024;\nconst MB = 1024 * 1024;\n\nfunction formatSize(bytes: number): string {\n if (bytes >= MB) return `${(bytes / MB).toFixed(1)} MB`;\n if (bytes >= KB) return `${Math.round(bytes / KB)} KB`;\n return `${bytes} B`;\n}\n\ninterface ListItemProps {\n file: UploadFile;\n listType: \"text\" | \"picture\" | \"picture-card\";\n disabled: boolean;\n labels: {\n remove: string;\n retry: string;\n preview: string;\n };\n thumbSize?: number;\n onRemove: (uid: string) => void;\n onRetry: (uid: string) => void;\n onPreview?: (file: UploadFile) => void;\n}\n\nfunction UploadListItem({\n file,\n listType,\n disabled,\n labels,\n thumbSize = 96,\n onRemove,\n onRetry,\n onPreview,\n}: ListItemProps) {\n const isImage = file.type.startsWith(\"image/\") || !!file.thumbUrl;\n\n if (listType === \"picture-card\") {\n return (\n <div\n className=\"upload-picture-card\"\n data-status={file.status}\n style={{ width: thumbSize, height: thumbSize }}\n >\n {file.thumbUrl || file.url ? (\n <img src={file.thumbUrl ?? file.url} alt={file.name} />\n ) : (\n <Flex align=\"center\" justify=\"center\" style={{ height: \"100%\" }}>\n <FileIcon size={20} />\n </Flex>\n )}\n {file.status === \"uploading\" && (\n <div className=\"upload-progress\">\n <div\n className=\"upload-progress-fill\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n )}\n <div className=\"upload-picture-card-actions\">\n {onPreview && file.status === \"success\" && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.preview}\n onClick={() => onPreview(file)}\n >\n <ImageIcon size={14} />\n </Button>\n )}\n {file.status === \"error\" && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.retry}\n onClick={() => onRetry(file.uid)}\n disabled={disabled}\n >\n <RotateCw size={14} />\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.remove}\n onClick={() => onRemove(file.uid)}\n disabled={disabled}\n >\n <Trash2 size={14} />\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className=\"upload-list-item\"\n data-status={file.status}\n style={{ position: \"relative\" }}\n >\n {listType === \"picture\" && isImage && (file.thumbUrl || file.url) ? (\n <img\n src={file.thumbUrl ?? file.url}\n alt={file.name}\n style={{\n width: 40,\n height: 40,\n borderRadius: \"var(--radius-md)\",\n objectFit: \"cover\",\n flex: \"0 0 auto\",\n }}\n />\n ) : (\n <FileIcon size={18} style={{ flex: \"0 0 auto\" }} />\n )}\n <Flex vertical gap={2} style={{ flex: 1, minWidth: 0 }}>\n <span\n style={{\n fontSize: \"var(--text-sm)\",\n color: \"var(--foreground)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={file.name}\n >\n {file.name}\n </span>\n <span\n style={{\n fontSize: \"var(--text-xs)\",\n color:\n file.status === \"error\"\n ? \"var(--destructive)\"\n : \"var(--muted-foreground)\",\n fontVariantNumeric: \"tabular-nums\",\n }}\n >\n {file.status === \"error\"\n ? (file.error ?? \"Upload failed\")\n : file.status === \"uploading\"\n ? `${file.percent}%`\n : formatSize(file.size)}\n </span>\n </Flex>\n {file.status === \"success\" && onPreview && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.preview}\n onClick={() => onPreview(file)}\n disabled={disabled}\n >\n <ImageIcon size={14} />\n </Button>\n )}\n {file.status === \"error\" && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.retry}\n onClick={() => onRetry(file.uid)}\n disabled={disabled}\n >\n <RotateCw size={14} />\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.remove}\n onClick={() => onRemove(file.uid)}\n disabled={disabled}\n >\n <Trash2 size={14} />\n </Button>\n {file.status === \"uploading\" && (\n <div className=\"upload-progress\">\n <div\n className=\"upload-progress-fill\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport function Upload({\n multiple = false,\n accept,\n maxSize,\n maxCount,\n disabled = false,\n listType = \"text\",\n fileList,\n defaultFileList,\n beforeUpload,\n customRequest,\n onChange,\n onRemove,\n onPreview,\n labels: labelOverrides,\n errorMapper,\n trigger,\n children,\n className,\n}: UploadProps) {\n const labels = { ...DEFAULT_UPLOAD_LABELS, ...(labelOverrides ?? {}) };\n const inputId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const {\n files,\n rejectionError,\n enqueue,\n remove,\n retry,\n } = useUpload({\n multiple,\n accept,\n maxSize,\n maxCount,\n fileList,\n defaultFileList,\n beforeUpload,\n customRequest,\n onChange,\n onRemove,\n errorMapper,\n labels,\n });\n\n const openPicker = useCallback(() => {\n if (disabled) return;\n inputRef.current?.click();\n }, [disabled]);\n\n const handleSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n if (!list || list.length === 0) return;\n void enqueue(list);\n e.target.value = \"\";\n },\n [enqueue],\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n if (disabled) return;\n const dropped = e.dataTransfer?.files;\n if (dropped && dropped.length > 0) void enqueue(dropped);\n },\n [disabled, enqueue],\n );\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setDragOver(true);\n },\n [disabled],\n );\n\n const handleDragLeave = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n },\n [],\n );\n\n const triggerNode = trigger ?? children;\n const showPictureCardTrigger =\n listType === \"picture-card\" &&\n (multiple || files.length === 0) &&\n (maxCount === undefined || files.length < maxCount);\n\n const listClass = cn(\n listType === \"picture-card\" ? \"upload-list-picture-card\" : \"upload-list\",\n );\n\n return (\n <div className={cn(\"upload-root\", className)}>\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n\n {listType !== \"picture-card\" && (\n triggerNode ? (\n <span\n onClick={openPicker}\n style={{ display: \"inline-flex\", cursor: disabled ? \"not-allowed\" : \"pointer\" }}\n >\n {triggerNode}\n </span>\n ) : (\n <div\n className=\"upload-trigger\"\n data-dragover={dragOver}\n data-disabled={disabled}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={openPicker}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n aria-disabled={disabled}\n >\n <Flex vertical align=\"center\" gap=\"small\">\n <UploadIcon size={20} />\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--foreground)\" }}>\n {labels.dropHint}\n </span>\n <span style={{ fontSize: \"var(--text-xs)\", color: \"var(--muted-foreground)\" }}>\n {labels.dropSubHint}\n </span>\n </Flex>\n </div>\n )\n )}\n\n {(files.length > 0 || listType === \"picture-card\") && (\n <div className={listClass}>\n {files.map((f) => (\n <UploadListItem\n key={f.uid}\n file={f}\n listType={listType}\n disabled={disabled}\n labels={{ remove: labels.remove, retry: labels.retry, preview: labels.preview }}\n onRemove={remove}\n onRetry={retry}\n onPreview={onPreview}\n />\n ))}\n {showPictureCardTrigger && (\n <div\n className=\"upload-picture-card upload-picture-card-trigger\"\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n data-dragover={dragOver}\n data-disabled={disabled}\n onClick={openPicker}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n aria-disabled={disabled}\n aria-label={labels.pictureCardHint}\n >\n <Flex vertical align=\"center\" justify=\"center\" gap={4} style={{ height: \"100%\" }}>\n <UploadIcon size={18} />\n <span style={{ fontSize: \"var(--text-xs)\", color: \"var(--muted-foreground)\" }}>\n {labels.pictureCardHint}\n </span>\n </Flex>\n </div>\n )}\n </div>\n )}\n\n {rejectionError && (\n <div\n role=\"alert\"\n style={{\n marginTop: \"var(--spacing-2)\",\n fontSize: \"var(--text-sm)\",\n color: \"var(--destructive)\",\n }}\n >\n {rejectionError}\n </div>\n )}\n </div>\n );\n}\n","// <ImageUpload> — image-only gallery. Wraps <Upload> with sensible\n// defaults: image MIME filter, `picture-card` listType, thumbnail\n// previews, and an optional crop step (round or rect) per Ant's\n// imgCrop pattern.\n//\n// For SINGLE image with required crop (e.g. avatar), prefer\n// <AvatarUploader> which is the pre-configured variant.\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport Cropper, { type Area } from \"react-easy-crop\";\nimport { Check, X } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex, Space } from \"../../layout\";\nimport { Upload } from \"./Upload\";\nimport type {\n UploadCustomRequest,\n UploadFile,\n UploadProps,\n} from \"./shared/types\";\n\nexport interface ImageUploadProps\n extends Omit<UploadProps, \"listType\" | \"accept\" | \"customRequest\"> {\n /** MIME allowlist for images (default JPEG/PNG/WebP). */\n allowedTypes?: string[];\n /** Optional crop aspect — when set, every selected image runs through the cropper. */\n aspect?: number;\n /** Crop shape — `round` for avatars, `rect` for banners. Default `rect`. */\n cropShape?: \"round\" | \"rect\";\n /** Picture-card edge in px (default 96 — Ant's picture-card). */\n thumbSize?: number;\n /** Service transport — same shape as <Upload>'s customRequest. */\n customRequest: UploadCustomRequest;\n /** Localised cropper labels. */\n cropLabels?: {\n confirm: string;\n cancel: string;\n zoom: string;\n };\n}\n\nconst DEFAULT_ALLOWED = [\"image/jpeg\", \"image/png\", \"image/webp\"];\n\nconst DEFAULT_CROP_LABELS = {\n confirm: \"Apply\",\n cancel: \"Cancel\",\n zoom: \"Zoom\",\n};\n\nasync function cropImageToBlob(\n imageSrc: string,\n area: Area,\n mime: string,\n): Promise<Blob> {\n const image = new Image();\n image.crossOrigin = \"anonymous\";\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = reject;\n image.src = imageSrc;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = area.width;\n canvas.height = area.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Canvas 2D context unavailable\");\n ctx.drawImage(\n image,\n area.x,\n area.y,\n area.width,\n area.height,\n 0,\n 0,\n area.width,\n area.height,\n );\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => (blob ? resolve(blob) : reject(new Error(\"Canvas export failed\"))),\n mime,\n 0.95,\n );\n });\n}\n\nexport function ImageUpload({\n allowedTypes = DEFAULT_ALLOWED,\n aspect,\n cropShape = \"rect\",\n thumbSize: _thumbSize = 96,\n customRequest,\n cropLabels: cropLabelOverrides,\n beforeUpload,\n ...rest\n}: ImageUploadProps) {\n const cropLabels = { ...DEFAULT_CROP_LABELS, ...(cropLabelOverrides ?? {}) };\n const accept = allowedTypes.join(\",\");\n\n // Crop modal state — only used when `aspect` is set.\n const [pendingFile, setPendingFile] = useState<File | null>(null);\n const [pendingSrc, setPendingSrc] = useState<string | null>(null);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [croppedArea, setCroppedArea] = useState<Area | null>(null);\n\n // Gate to make the original <Upload> accept the cropped File via beforeUpload.\n const cropResolver = useRef<((ok: boolean) => void) | null>(null);\n const replaceWith = useRef<File | null>(null);\n\n useEffect(() => {\n return () => {\n if (pendingSrc?.startsWith(\"blob:\")) URL.revokeObjectURL(pendingSrc);\n };\n }, [pendingSrc]);\n\n const handleBeforeUpload = useCallback(\n async (file: File): Promise<boolean> => {\n // Run consumer's beforeUpload first; if they reject, drop here.\n if (beforeUpload) {\n const ok = await beforeUpload(file);\n if (!ok) return false;\n }\n // No crop requested → straight through.\n if (aspect === undefined) return true;\n\n // Spin up the crop modal and wait for confirm / cancel.\n const src = URL.createObjectURL(file);\n setPendingFile(file);\n setPendingSrc(src);\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setCroppedArea(null);\n replaceWith.current = null;\n\n return new Promise<boolean>((resolve) => {\n cropResolver.current = resolve;\n });\n },\n [aspect, beforeUpload],\n );\n\n // Wrap customRequest so it receives the cropped File when crop produced one.\n const wrappedRequest: UploadCustomRequest = useCallback(\n async (params) => {\n const swap = replaceWith.current;\n replaceWith.current = null;\n const finalParams = swap ? { ...params, file: swap } : params;\n return customRequest(finalParams);\n },\n [customRequest],\n );\n\n const finishCropConfirm = useCallback(async () => {\n if (!pendingFile || !pendingSrc || !croppedArea) {\n cropResolver.current?.(false);\n cropResolver.current = null;\n return;\n }\n try {\n const blob = await cropImageToBlob(pendingSrc, croppedArea, pendingFile.type);\n const cropped = new File([blob], pendingFile.name, {\n type: pendingFile.type,\n });\n replaceWith.current = cropped;\n cropResolver.current?.(true);\n } catch {\n cropResolver.current?.(false);\n } finally {\n cropResolver.current = null;\n if (pendingSrc?.startsWith(\"blob:\")) URL.revokeObjectURL(pendingSrc);\n setPendingFile(null);\n setPendingSrc(null);\n }\n }, [croppedArea, pendingFile, pendingSrc]);\n\n const finishCropCancel = useCallback(() => {\n cropResolver.current?.(false);\n cropResolver.current = null;\n if (pendingSrc?.startsWith(\"blob:\")) URL.revokeObjectURL(pendingSrc);\n setPendingFile(null);\n setPendingSrc(null);\n }, [pendingSrc]);\n\n const onCropComplete = useCallback((_: Area, pixels: Area) => {\n setCroppedArea(pixels);\n }, []);\n\n return (\n <>\n <Upload\n {...rest}\n accept={accept}\n listType=\"picture-card\"\n beforeUpload={handleBeforeUpload}\n customRequest={wrappedRequest}\n />\n\n {pendingSrc && (\n <div\n className=\"upload-cropper-backdrop\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Crop image\"\n >\n <div className=\"upload-cropper\">\n <div className=\"upload-cropper-canvas\">\n <Cropper\n image={pendingSrc}\n crop={crop}\n zoom={zoom}\n aspect={aspect ?? 1}\n cropShape={cropShape}\n showGrid={false}\n onCropChange={setCrop}\n onZoomChange={setZoom}\n onCropComplete={onCropComplete}\n />\n </div>\n <Flex vertical gap=\"default\" style={{ padding: \"var(--spacing-3)\" }}>\n <Flex align=\"center\" gap=\"small\">\n <span\n style={{\n fontSize: \"var(--text-xs)\",\n color: \"var(--muted-foreground)\",\n minWidth: 48,\n }}\n >\n {cropLabels.zoom}\n </span>\n <input\n type=\"range\"\n min={1}\n max={3}\n step={0.1}\n value={zoom}\n onChange={(e) => setZoom(Number(e.target.value))}\n aria-label={cropLabels.zoom}\n style={{ flex: 1 }}\n />\n </Flex>\n <Space size=\"small\">\n <Button type=\"button\" onClick={finishCropConfirm}>\n <Check size={14} />\n {cropLabels.confirm}\n </Button>\n <Button type=\"button\" variant=\"secondary\" onClick={finishCropCancel}>\n <X size={14} />\n {cropLabels.cancel}\n </Button>\n </Space>\n </Flex>\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport type { UploadFile };\n","// <AvatarUploader> — single image + required round crop, the\n// pre-configured avatar variant of the Upload family. Stages:\n// idle → cropping → uploading → success / error.\n//\n// Surface preserved (callsites depend on it):\n// onUpload({ blob, file, onProgress, signal }) — service transport\n// validate(file) — pre-check hook\n// allowedTypes / maxSize / aspect / cropShape — gating + crop\n// labels — i18n\n// errorMapper(err) — friendly copy\n// onSuccess() / onCancel() — lifecycle\n// trigger — slot\n//\n// Internally shares MIME + size validation and the crop helper with\n// the rest of the Upload family.\n\nimport { useCallback, useRef, useState, type ReactNode } from \"react\";\nimport Cropper, { type Area } from \"react-easy-crop\";\nimport { Camera, RotateCw, Upload as UploadIcon, X } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex, Space } from \"../../layout\";\nimport { validateFile } from \"./shared/validate\";\nimport { DEFAULT_UPLOAD_LABELS } from \"./shared/types\";\n\nexport interface AvatarUploaderLabels {\n chooseImage: string;\n upload: string;\n cancel: string;\n cancelUpload: string;\n tryAgain: string;\n uploadSuccess: string;\n change: string;\n rejectedType: string;\n rejectedTooLarge: string;\n}\n\nconst DEFAULT_LABELS: AvatarUploaderLabels = {\n chooseImage: \"Choose image\",\n upload: \"Upload\",\n cancel: \"Cancel\",\n cancelUpload: \"Cancel upload\",\n tryAgain: \"Try again\",\n uploadSuccess: \"Avatar updated successfully.\",\n change: \"Change\",\n rejectedType: \"File must be JPEG, PNG, or WebP\",\n rejectedTooLarge: \"File must be smaller than {{mb}} MB\",\n};\n\nconst DEFAULT_ALLOWED_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"];\nconst DEFAULT_MAX_SIZE = 5 * 1024 * 1024; // 5 MiB\n\nexport interface AvatarUploadCallbackParams {\n /** Selected source file (pre-crop). */\n file: File;\n /** Cropped image blob ready to ship. */\n blob: Blob;\n /** 0..100 progress callback. */\n onProgress?: (pct: number) => void;\n /** AbortController signal — fires when user cancels. */\n signal: AbortSignal;\n}\n\nexport interface AvatarUploaderProps {\n /** Required — service provides the actual upload + persistence. */\n onUpload: (params: AvatarUploadCallbackParams) => Promise<void>;\n /** Override file validation. Return `null` for OK, string for error message. */\n validate?: (file: File) => string | null;\n /** Allowed MIME types (default JPEG/PNG/WebP). */\n allowedTypes?: string[];\n /** Max file size in bytes (default 5 MiB). */\n maxSize?: number;\n /** Crop aspect ratio (default 1, square). */\n aspect?: number;\n /** Crop shape — \"round\" (default, fits avatar) or \"rect\". */\n cropShape?: \"round\" | \"rect\";\n /** Localised button + error strings. */\n labels?: Partial<AvatarUploaderLabels>;\n /** Map a thrown error to a user-friendly message. */\n errorMapper?: (err: unknown) => string;\n /** Hook fired on success after `onUpload` resolves. */\n onSuccess?: () => void;\n /** Hook fired when user picks cancel. */\n onCancel?: () => void;\n /** Render a custom \"choose image\" trigger instead of the default Button. */\n trigger?: ReactNode;\n}\n\ntype Phase = \"idle\" | \"cropping\" | \"uploading\" | \"success\" | \"error\";\n\nasync function cropImage(imageSrc: string, area: Area): Promise<Blob> {\n const image = new Image();\n image.crossOrigin = \"anonymous\";\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = reject;\n image.src = imageSrc;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = area.width;\n canvas.height = area.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Canvas 2D context unavailable\");\n ctx.drawImage(image, area.x, area.y, area.width, area.height, 0, 0, area.width, area.height);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => (blob ? resolve(blob) : reject(new Error(\"Canvas export failed\"))),\n \"image/png\",\n 0.95,\n );\n });\n}\n\nexport function AvatarUploader({\n onUpload,\n validate,\n allowedTypes = DEFAULT_ALLOWED_TYPES,\n maxSize = DEFAULT_MAX_SIZE,\n aspect = 1,\n cropShape = \"round\",\n labels: labelOverrides,\n errorMapper,\n onSuccess,\n onCancel,\n trigger,\n}: AvatarUploaderProps) {\n const labels = { ...DEFAULT_LABELS, ...(labelOverrides ?? {}) };\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [imageSrc, setImageSrc] = useState<string | null>(null);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [croppedArea, setCroppedArea] = useState<Area | null>(null);\n const [progress, setProgress] = useState(0);\n const [errorMsg, setErrorMsg] = useState(\"\");\n const abortRef = useRef<AbortController | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const reset = useCallback(() => {\n setPhase(\"idle\");\n setSelectedFile(null);\n setImageSrc(null);\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setCroppedArea(null);\n setProgress(0);\n setErrorMsg(\"\");\n abortRef.current?.abort();\n abortRef.current = null;\n }, []);\n\n const handleCancel = useCallback(() => {\n abortRef.current?.abort();\n onCancel?.();\n reset();\n }, [onCancel, reset]);\n\n const runDefaultValidation = useCallback(\n (file: File): string | null => {\n const result = validateFile(file, {\n accept: allowedTypes.join(\",\"),\n maxSize,\n labels: {\n ...DEFAULT_UPLOAD_LABELS,\n rejectedType: labels.rejectedType,\n rejectedTooLarge: labels.rejectedTooLarge,\n },\n });\n return result.ok ? null : (result.error ?? null);\n },\n [allowedTypes, maxSize, labels.rejectedType, labels.rejectedTooLarge],\n );\n\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n e.target.value = \"\";\n\n const validationError = validate ? validate(file) : runDefaultValidation(file);\n if (validationError) {\n setErrorMsg(validationError);\n setPhase(\"error\");\n return;\n }\n\n setSelectedFile(file);\n const reader = new FileReader();\n reader.onload = () => {\n setImageSrc(reader.result as string);\n setPhase(\"cropping\");\n };\n reader.readAsDataURL(file);\n },\n [validate, runDefaultValidation],\n );\n\n const onCropComplete = useCallback((_: Area, pixels: Area) => {\n setCroppedArea(pixels);\n }, []);\n\n const handleUpload = useCallback(async () => {\n if (!selectedFile || !imageSrc || !croppedArea) return;\n setPhase(\"uploading\");\n setProgress(0);\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const blob = await cropImage(imageSrc, croppedArea);\n await onUpload({\n file: selectedFile,\n blob,\n onProgress: setProgress,\n signal: controller.signal,\n });\n setPhase(\"success\");\n onSuccess?.();\n } catch (err) {\n if (controller.signal.aborted) return;\n const msg = errorMapper\n ? errorMapper(err)\n : err instanceof Error\n ? err.message\n : \"Upload failed.\";\n setErrorMsg(msg);\n setPhase(\"error\");\n }\n }, [selectedFile, imageSrc, croppedArea, onUpload, onSuccess, errorMapper]);\n\n return (\n <Flex vertical gap=\"default\">\n <input\n ref={inputRef}\n type=\"file\"\n accept={allowedTypes.join(\",\")}\n style={{ display: \"none\" }}\n onChange={handleFileSelect}\n aria-label={labels.chooseImage}\n />\n\n {phase === \"idle\" &&\n (trigger ? (\n <span onClick={() => inputRef.current?.click()}>{trigger}</span>\n ) : (\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => inputRef.current?.click()}\n >\n <Camera size={16} />\n {labels.chooseImage}\n </Button>\n ))}\n\n {phase === \"cropping\" && imageSrc && (\n <Flex vertical gap=\"default\">\n <div style={{ position: \"relative\", width: \"100%\", aspectRatio: \"1 / 1\" }}>\n <Cropper\n image={imageSrc}\n crop={crop}\n zoom={zoom}\n aspect={aspect}\n cropShape={cropShape}\n showGrid={false}\n onCropChange={setCrop}\n onZoomChange={setZoom}\n onCropComplete={onCropComplete}\n />\n </div>\n <input\n type=\"range\"\n min={1}\n max={3}\n step={0.1}\n value={zoom}\n onChange={(e) => setZoom(Number(e.target.value))}\n aria-label=\"Zoom\"\n />\n <Space size=\"small\">\n <Button type=\"button\" onClick={handleUpload}>\n <UploadIcon size={16} />\n {labels.upload}\n </Button>\n <Button type=\"button\" variant=\"secondary\" onClick={handleCancel}>\n <X size={16} />\n {labels.cancel}\n </Button>\n </Space>\n </Flex>\n )}\n\n {phase === \"uploading\" && (\n <Flex vertical gap=\"small\">\n <Flex align=\"center\" gap=\"default\">\n <div\n style={{\n height: \"8px\",\n flex: 1,\n borderRadius: \"var(--radius-full)\",\n background: \"var(--muted)\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n height: \"100%\",\n width: `${progress}%`,\n background: \"var(--primary)\",\n borderRadius: \"var(--radius-full)\",\n transition: \"width 0.3s\",\n }}\n />\n </div>\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--muted-foreground)\", fontVariantNumeric: \"tabular-nums\" }}>\n {progress}%\n </span>\n </Flex>\n <Button type=\"button\" variant=\"secondary\" size=\"small\" onClick={handleCancel}>\n <X size={16} />\n {labels.cancelUpload}\n </Button>\n </Flex>\n )}\n\n {phase === \"success\" && (\n <Flex align=\"center\" gap=\"default\">\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--success)\" }}>\n {labels.uploadSuccess}\n </span>\n <Button type=\"button\" variant=\"ghost\" size=\"small\" onClick={reset}>\n <RotateCw size={16} />\n {labels.change}\n </Button>\n </Flex>\n )}\n\n {phase === \"error\" && (\n <Flex vertical gap=\"small\">\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--destructive)\" }} role=\"alert\">\n {errorMsg}\n </span>\n <Space size=\"small\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={() => inputRef.current?.click()}\n >\n <RotateCw size={16} />\n {labels.tryAgain}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"small\" onClick={reset}>\n {labels.cancel}\n </Button>\n </Space>\n </Flex>\n )}\n </Flex>\n );\n}\n","// @godxjp/ui — media-service client.\n//\n// Transport-layer wrapper around the platform's media-service public\n// API (see services/media-service/api/openapi.yaml). Generic; no\n// service-specific copy. Exposed as a sub-path entry so consumers\n// who only want the transport (e.g. server-rendered callers) can\n// import it without pulling React.\n//\n// Endpoint contract (gateway-routed per cardinal rule 14):\n//\n// POST /upload-sessions -> { upload_url, media_id }\n// POST /upload-sessions/{id}/complete -> ack\n// POST /objects/{id}/promote -> media metadata\n// GET /objects/{id} -> media metadata\n// GET /objects/{id}/download -> { url } (signed view URL)\n//\n// Auth flows through whatever the consumer attached at the global\n// fetch / cookie layer; the framework does not embed credentials.\n//\n// Base URL precedence:\n// 1. setMediaBaseURL(url) override at runtime;\n// 2. import.meta.env.VITE_MEDIA_API_BASE_URL;\n// 3. fallback to \"/api/media/v1\" (matches gateway carve-out).\n//\n// All read/upload helpers return Promise<MediaItem> after normalising\n// whatever shape the server returned, so callers always see the same\n// canonical shape regardless of which endpoint was hit.\n\nexport interface MediaItem {\n id: string;\n filename: string;\n contentType: string;\n /** Signed view URL — fetchable directly as an <img src>. */\n url: string;\n thumbnailUrl?: string;\n width?: number;\n height?: number;\n /** Size in bytes. */\n size?: number;\n}\n\nexport interface MediaInitResponse {\n /** Presigned PUT URL — upload bytes directly here. */\n uploadUrl: string;\n /** Server-assigned media UUID (use for promote + later fetch). */\n mediaId: string;\n}\n\n// ─── Base URL plumbing ────────────────────────────────────────────\n\nconst DEFAULT_BASE_URL = \"/api/media/v1\";\n\nfunction readEnvBaseURL(): string | null {\n // import.meta.env is statically replaced at Vite build time; in\n // Storybook + tsup builds we never see VITE_* — the lookup is\n // defensive. typeof guards keep us SSR-safe.\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const meta = (import.meta as any);\n const raw = meta?.env?.VITE_MEDIA_API_BASE_URL;\n return typeof raw === \"string\" && raw.length > 0 ? raw : null;\n } catch {\n return null;\n }\n}\n\nlet runtimeBaseURL: string | null = null;\n\n/**\n * Override the media-service base URL at runtime (consumer apps can\n * call this once during bootstrap if their deployment differs from\n * `VITE_MEDIA_API_BASE_URL`).\n */\nexport function setMediaBaseURL(url: string): void {\n runtimeBaseURL = url || null;\n}\n\nexport function getMediaBaseURL(): string {\n return runtimeBaseURL ?? readEnvBaseURL() ?? DEFAULT_BASE_URL;\n}\n\nfunction buildURL(path: string): string {\n const base = getMediaBaseURL().replace(/\\/+$/, \"\");\n const rel = path.startsWith(\"/\") ? path : `/${path}`;\n return `${base}${rel}`;\n}\n\n// ─── Error shape ──────────────────────────────────────────────────\n\nexport class MediaClientError extends Error {\n status: number;\n detail?: string;\n constructor(message: string, status: number, detail?: string) {\n super(message);\n this.name = \"MediaClientError\";\n this.status = status;\n this.detail = detail;\n }\n}\n\nasync function parseProblem(res: Response): Promise<MediaClientError> {\n let detail: string | undefined;\n let title = res.statusText || `HTTP ${res.status}`;\n try {\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (ct.includes(\"problem+json\") || ct.includes(\"json\")) {\n const body = (await res.json()) as { title?: string; detail?: string };\n if (body.title) title = body.title;\n if (body.detail) detail = body.detail;\n }\n } catch {\n /* ignore — server returned non-JSON */\n }\n return new MediaClientError(title, res.status, detail);\n}\n\n// ─── Normalisation ────────────────────────────────────────────────\n\n// The server's object payload is loosely typed in the OpenAPI spec\n// today; the SPA only consumes a small slice. Map the common field\n// aliases (id / object_id, content_type / mime_type, signed_url /\n// download_url) so future server evolution does not break callers.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normaliseMediaItem(raw: any, fallbackId?: string): MediaItem {\n const id: string =\n raw?.id ?? raw?.object_id ?? raw?.media_id ?? fallbackId ?? \"\";\n const filename: string =\n raw?.filename ?? raw?.name ?? raw?.object_name ?? \"unknown\";\n const contentType: string =\n raw?.contentType ?? raw?.content_type ?? raw?.mime_type ?? \"application/octet-stream\";\n const url: string =\n raw?.url ?? raw?.signed_url ?? raw?.download_url ?? raw?.view_url ?? \"\";\n const thumbnailUrl: string | undefined =\n raw?.thumbnailUrl ?? raw?.thumbnail_url ?? undefined;\n const width: number | undefined = raw?.width ?? raw?.metadata?.width;\n const height: number | undefined = raw?.height ?? raw?.metadata?.height;\n const size: number | undefined = raw?.size ?? raw?.size_bytes ?? raw?.bytes;\n return { id, filename, contentType, url, thumbnailUrl, width, height, size };\n}\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/**\n * Step 1 of the 3-step upload contract: ask the server for a\n * presigned PUT URL + a media UUID.\n */\nexport async function initUpload(file: File): Promise<MediaInitResponse> {\n const res = await fetch(buildURL(\"/upload-sessions\"), {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n size: file.size,\n }),\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n const uploadUrl: string = body?.upload_url ?? body?.uploadUrl;\n const mediaId: string = body?.media_id ?? body?.id ?? body?.object_id;\n if (!uploadUrl || !mediaId) {\n throw new MediaClientError(\n \"media-service init response missing upload_url or media_id\",\n 502,\n );\n }\n return { uploadUrl, mediaId };\n}\n\n/**\n * Step 2: PUT raw bytes to the presigned URL. Progress reported\n * via XMLHttpRequest (fetch doesn't expose upload-progress events).\n */\nexport function putToPresigned(\n url: string,\n file: File | Blob,\n onProgress?: (percent: number) => void,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", url, true);\n const type =\n (file as File).type || (file instanceof Blob ? file.type : \"\");\n if (type) xhr.setRequestHeader(\"content-type\", type);\n if (onProgress) {\n xhr.upload.addEventListener(\"progress\", (e) => {\n if (e.lengthComputable) {\n onProgress(Math.round((e.loaded / e.total) * 100));\n }\n });\n }\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve();\n } else {\n reject(\n new MediaClientError(\n `presigned PUT failed (${xhr.status})`,\n xhr.status,\n ),\n );\n }\n };\n xhr.onerror = () =>\n reject(new MediaClientError(\"presigned PUT network error\", 0));\n xhr.send(file);\n });\n}\n\n/**\n * Step 3: tell the server the bytes are on the bucket — server\n * promotes the temp object to permanent + returns final metadata.\n */\nexport async function promoteUpload(mediaId: string): Promise<MediaItem> {\n const res = await fetch(buildURL(`/objects/${mediaId}/promote`), {\n method: \"POST\",\n credentials: \"include\",\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n return normaliseMediaItem(body, mediaId);\n}\n\n/** Fetch full metadata + signed view URL for one media UUID. */\nexport async function fetchMedia(id: string): Promise<MediaItem> {\n const res = await fetch(buildURL(`/objects/${id}`), {\n method: \"GET\",\n credentials: \"include\",\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n const item = normaliseMediaItem(body, id);\n // If the server didn't inline a signed URL, hit the download\n // endpoint to materialise one. Server contract leaves this\n // server-side decision flexible.\n if (!item.url) {\n item.url = await fetchSignedURL(id);\n }\n return item;\n}\n\n/**\n * Batch fetch. The server doesn't expose a true batch endpoint, so\n * we fan out concurrent GETs and let the gateway dedupe. Falls back\n * gracefully on per-item errors — items that fail to resolve come\n * back with `url=\"\"` so the UI can render a fallback tile.\n */\nexport async function fetchMediaBatch(ids: string[]): Promise<MediaItem[]> {\n if (ids.length === 0) return [];\n const settled = await Promise.allSettled(ids.map((id) => fetchMedia(id)));\n return settled.map((r, i) =>\n r.status === \"fulfilled\"\n ? r.value\n : {\n id: ids[i],\n filename: \"unknown\",\n contentType: \"application/octet-stream\",\n url: \"\",\n },\n );\n}\n\nasync function fetchSignedURL(id: string): Promise<string> {\n const res = await fetch(buildURL(`/objects/${id}/download`), {\n method: \"GET\",\n credentials: \"include\",\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n return body?.url ?? body?.signed_url ?? body?.download_url ?? \"\";\n}\n\n/**\n * End-to-end upload helper — runs init → PUT → promote, returning\n * the final MediaItem. Consumers that need progress can pass a\n * callback; the value is forwarded to `putToPresigned`.\n */\nexport async function uploadFile(\n file: File,\n onProgress?: (percent: number) => void,\n): Promise<MediaItem> {\n const { uploadUrl, mediaId } = await initUpload(file);\n await putToPresigned(uploadUrl, file, onProgress);\n return promoteUpload(mediaId);\n}\n","// MediaUpload — high-level wrapper that integrates with the\n// platform's media-service. Two value shapes are supported:\n// • MediaItem (full metadata + signed URL) — render immediately\n// • UUID string — component fetches metadata via `fetchMedia(id)`\n// (or `fetchMediaBatch` for arrays) and renders once resolved.\n// Upload flow always goes through media-service's 3-step\n// presigned-URL contract: init → PUT bytes → promote. The result\n// is a MediaItem that gets passed back via `onValueChange`.\n//\n// Consumers ONLY need to persist UUIDs in their domain models;\n// rendering happens automatically.\n\nimport {\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type DragEvent,\n} from \"react\";\nimport { ImagePlus, RotateCw, X } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex } from \"../../layout\";\nimport { cn } from \"../../cn\";\nimport {\n fetchMedia,\n fetchMediaBatch,\n uploadFile,\n type MediaItem,\n} from \"./media-client\";\nimport { AvatarUploader } from \"./AvatarUploader\";\n\n// ─── Shared types ─────────────────────────────────────────────────\n\nexport type MediaUploadSize = \"small\" | \"default\" | \"large\";\nexport type MediaUploadShape = \"square\" | \"circle\" | \"card\";\n\ntype MediaValueSingle = string | MediaItem | null | undefined;\ntype MediaValueMultiple = Array<string | MediaItem>;\n\n// ─── Resolver helpers ─────────────────────────────────────────────\n\n/**\n * Resolve a value that may be `null | string (UUID) | MediaItem` into\n * a MediaItem. UUID branch calls `fetchMedia`; failures resolve to\n * `null` and surface via the `error` state, so the UI can render a\n * fallback \"media not available\" tile without throwing.\n */\nfunction useResolvedMediaItem(value: MediaValueSingle): {\n item: MediaItem | null;\n loading: boolean;\n error: string | null;\n requestedId: string | null;\n} {\n const [item, setItem] = useState<MediaItem | null>(\n typeof value === \"object\" && value !== null ? value : null,\n );\n const [loading, setLoading] = useState(typeof value === \"string\");\n const [error, setError] = useState<string | null>(null);\n const requestedId = typeof value === \"string\" ? value : null;\n\n useEffect(() => {\n let cancelled = false;\n if (value == null) {\n setItem(null);\n setLoading(false);\n setError(null);\n return;\n }\n if (typeof value === \"object\") {\n setItem(value);\n setLoading(false);\n setError(null);\n return;\n }\n // value is a UUID string — fetch it\n setLoading(true);\n setError(null);\n fetchMedia(value)\n .then((it) => {\n if (cancelled) return;\n setItem(it);\n setLoading(false);\n })\n .catch((err: unknown) => {\n if (cancelled) return;\n setItem(null);\n setLoading(false);\n setError(err instanceof Error ? err.message : \"Media not available\");\n });\n return () => {\n cancelled = true;\n };\n }, [value]);\n\n return { item, loading, error, requestedId };\n}\n\nfunction useResolvedMediaList(value: MediaValueMultiple): {\n items: MediaItem[];\n loading: boolean;\n errorIds: string[];\n} {\n const ids = useMemo(\n () => value.filter((v): v is string => typeof v === \"string\"),\n [value],\n );\n const inline = useMemo(\n () =>\n value\n .map((v, i) => (typeof v === \"object\" ? { v, i } : null))\n .filter((x): x is { v: MediaItem; i: number } => x !== null),\n [value],\n );\n\n const [items, setItems] = useState<MediaItem[]>(() => value.map((v) =>\n typeof v === \"object\"\n ? v\n : {\n id: v,\n filename: \"loading\",\n contentType: \"application/octet-stream\",\n url: \"\",\n },\n ));\n const [loading, setLoading] = useState(ids.length > 0);\n const [errorIds, setErrorIds] = useState<string[]>([]);\n\n useEffect(() => {\n let cancelled = false;\n if (ids.length === 0) {\n // Only inline items — emit immediately.\n setItems(inline.map((x) => x.v));\n setLoading(false);\n setErrorIds([]);\n return;\n }\n setLoading(true);\n fetchMediaBatch(ids)\n .then((fetched) => {\n if (cancelled) return;\n // Merge inline + fetched preserving original order\n const merged: MediaItem[] = [];\n const fetchedById = new Map(fetched.map((f) => [f.id, f]));\n const inlineByIdx = new Map(inline.map((x) => [x.i, x.v]));\n const failed: string[] = [];\n value.forEach((v, idx) => {\n if (typeof v === \"object\") {\n merged.push(inlineByIdx.get(idx) as MediaItem);\n } else {\n const got = fetchedById.get(v);\n if (got && got.url) merged.push(got);\n else {\n failed.push(v);\n merged.push(\n got ?? {\n id: v,\n filename: \"unknown\",\n contentType: \"application/octet-stream\",\n url: \"\",\n },\n );\n }\n }\n });\n setItems(merged);\n setErrorIds(failed);\n setLoading(false);\n })\n .catch(() => {\n if (cancelled) return;\n setErrorIds(ids);\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [ids, inline, value]);\n\n return { items, loading, errorIds };\n}\n\n// ─── MediaUpload.Single ───────────────────────────────────────────\n\nexport interface MediaUploadSingleProps {\n /** Controlled — UUID OR full MediaItem; component fetches metadata if only id given. */\n value?: string | MediaItem | null;\n defaultValue?: string | MediaItem | null;\n onValueChange?: (value: MediaItem | null) => void;\n accept?: string;\n /** Max file size in bytes. */\n maxSize?: number;\n disabled?: boolean;\n /** Preview shape — square / circle / card. */\n shape?: MediaUploadShape;\n size?: MediaUploadSize;\n className?: string;\n}\n\nexport function MediaUploadSingle({\n value,\n defaultValue = null,\n onValueChange,\n accept = \"image/*\",\n maxSize,\n disabled = false,\n shape = \"square\",\n size = \"default\",\n className,\n}: MediaUploadSingleProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<MediaValueSingle>(defaultValue);\n const effective = isControlled ? value : internal;\n const { item, loading, error, requestedId } = useResolvedMediaItem(effective);\n\n const [uploading, setUploading] = useState(false);\n const [progress, setProgress] = useState(0);\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n\n const emit = useCallback(\n (next: MediaItem | null) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n const handleFile = useCallback(\n async (file: File) => {\n if (maxSize && file.size > maxSize) {\n setUploadError(\n `File must be smaller than ${(maxSize / (1024 * 1024)).toFixed(0)} MB`,\n );\n return;\n }\n setUploading(true);\n setUploadError(null);\n setProgress(0);\n try {\n const result = await uploadFile(file, setProgress);\n emit(result);\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : \"Upload failed\");\n } finally {\n setUploading(false);\n }\n },\n [emit, maxSize],\n );\n\n const handleSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const f = e.target.files?.[0];\n e.target.value = \"\";\n if (f) void handleFile(f);\n },\n [handleFile],\n );\n\n const [dragOver, setDragOver] = useState(false);\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n if (disabled) return;\n const f = e.dataTransfer?.files?.[0];\n if (f) void handleFile(f);\n },\n [disabled, handleFile],\n );\n\n const openPicker = useCallback(() => {\n if (disabled || uploading) return;\n inputRef.current?.click();\n }, [disabled, uploading]);\n\n const handleRemove = useCallback(() => {\n emit(null);\n setUploadError(null);\n }, [emit]);\n\n const hasImage = !!item && !!item.url;\n\n return (\n <div\n className={cn(\n \"media-upload media-upload-single\",\n `media-upload-size-${size}`,\n `media-upload-shape-${shape}`,\n className,\n )}\n data-disabled={disabled}\n data-media-uuid={requestedId ?? undefined}\n >\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n disabled={disabled}\n onChange={handleSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n <div\n className=\"media-upload-frame\"\n data-dragover={dragOver}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={openPicker}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n onDrop={handleDrop}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n aria-disabled={disabled}\n aria-label={hasImage ? \"Replace image\" : \"Upload image\"}\n >\n {hasImage ? (\n <img src={item.url} alt={item.filename} />\n ) : loading ? (\n <span className=\"media-upload-status\">Loading…</span>\n ) : error ? (\n <Flex vertical align=\"center\" gap={4} className=\"media-upload-status\">\n <span className=\"media-upload-status-title\">Media not available</span>\n {requestedId && (\n <span className=\"media-upload-status-id\">{requestedId}</span>\n )}\n </Flex>\n ) : (\n <Flex vertical align=\"center\" gap={4} className=\"media-upload-status\">\n <ImagePlus size={20} />\n <span>Click or drag</span>\n </Flex>\n )}\n {uploading && (\n <div className=\"upload-progress\">\n <div\n className=\"upload-progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n {hasImage && !disabled && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label=\"Remove image\"\n onClick={handleRemove}\n className=\"media-upload-remove\"\n >\n <X size={14} />\n </Button>\n )}\n {uploadError && (\n <span role=\"alert\" className=\"media-upload-error\">\n {uploadError}\n </span>\n )}\n </div>\n );\n}\n\n// ─── MediaUpload.Multiple ─────────────────────────────────────────\n\nexport interface MediaUploadMultipleProps {\n value?: Array<string | MediaItem>;\n defaultValue?: Array<string | MediaItem>;\n onValueChange?: (value: MediaItem[]) => void;\n accept?: string;\n maxSize?: number;\n maxCount?: number;\n disabled?: boolean;\n size?: MediaUploadSize;\n className?: string;\n}\n\nexport function MediaUploadMultiple({\n value,\n defaultValue = [],\n onValueChange,\n accept = \"image/*\",\n maxSize,\n maxCount,\n disabled = false,\n size = \"default\",\n className,\n}: MediaUploadMultipleProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<MediaValueMultiple>(defaultValue);\n const effective = isControlled ? value : internal;\n const { items, loading, errorIds } = useResolvedMediaList(effective);\n\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const emit = useCallback(\n (next: MediaItem[]) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n const handleFiles = useCallback(\n async (files: FileList) => {\n setUploading(true);\n setUploadError(null);\n const slots =\n maxCount === undefined\n ? files.length\n : Math.max(0, maxCount - items.length);\n const toUpload = Array.from(files).slice(0, slots);\n try {\n const uploaded = await Promise.all(\n toUpload.map((f) => {\n if (maxSize && f.size > maxSize) {\n throw new Error(\n `File must be smaller than ${(maxSize / (1024 * 1024)).toFixed(0)} MB`,\n );\n }\n return uploadFile(f);\n }),\n );\n emit([...items, ...uploaded]);\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : \"Upload failed\");\n } finally {\n setUploading(false);\n }\n },\n [emit, items, maxCount, maxSize],\n );\n\n const handleSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n e.target.value = \"\";\n if (list && list.length > 0) void handleFiles(list);\n },\n [handleFiles],\n );\n\n const openPicker = useCallback(() => {\n if (disabled || uploading) return;\n inputRef.current?.click();\n }, [disabled, uploading]);\n\n const removeAt = useCallback(\n (idx: number) => {\n const next = items.filter((_, i) => i !== idx);\n emit(next);\n },\n [emit, items],\n );\n\n const showAddTile =\n !disabled && (maxCount === undefined || items.length < maxCount);\n\n return (\n <div\n className={cn(\n \"media-upload media-upload-multiple\",\n `media-upload-size-${size}`,\n className,\n )}\n data-disabled={disabled}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple\n disabled={disabled}\n onChange={handleSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n <div className=\"media-upload-grid\">\n {items.map((it, idx) => {\n const failed = !it.url && errorIds.includes(it.id);\n return (\n <div\n key={it.id || idx}\n className=\"media-upload-tile\"\n data-media-uuid={it.id || undefined}\n data-status={failed ? \"error\" : \"ok\"}\n >\n {it.url ? (\n <img src={it.url} alt={it.filename} />\n ) : (\n <Flex\n vertical\n align=\"center\"\n justify=\"center\"\n className=\"media-upload-status\"\n >\n <span className=\"media-upload-status-title\">\n {failed ? \"Unavailable\" : \"Loading…\"}\n </span>\n {it.id && (\n <span className=\"media-upload-status-id\">{it.id}</span>\n )}\n </Flex>\n )}\n {!disabled && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n className=\"media-upload-tile-remove\"\n aria-label=\"Remove image\"\n onClick={() => removeAt(idx)}\n >\n <X size={14} />\n </Button>\n )}\n </div>\n );\n })}\n {showAddTile && (\n <button\n type=\"button\"\n className=\"media-upload-tile media-upload-tile-add\"\n onClick={openPicker}\n disabled={uploading}\n aria-label=\"Add images\"\n >\n <Flex vertical align=\"center\" gap={4}>\n {uploading ? (\n <RotateCw size={18} className=\"media-upload-spin\" />\n ) : (\n <ImagePlus size={18} />\n )}\n <span>{uploading ? \"Uploading…\" : \"Add\"}</span>\n </Flex>\n </button>\n )}\n </div>\n {loading && items.some((it) => !it.url && !errorIds.includes(it.id)) && (\n <span className=\"media-upload-status-line\">Loading media…</span>\n )}\n {uploadError && (\n <span role=\"alert\" className=\"media-upload-error\">\n {uploadError}\n </span>\n )}\n </div>\n );\n}\n\n// ─── MediaUpload.Avatar ───────────────────────────────────────────\n\nexport interface MediaUploadAvatarProps {\n value?: string | MediaItem | null;\n defaultValue?: string | MediaItem | null;\n onValueChange?: (value: MediaItem | null) => void;\n /** Crop aspect ratio (default 1 = square). */\n aspect?: number;\n size?: MediaUploadSize;\n disabled?: boolean;\n className?: string;\n}\n\nconst AVATAR_PX: Record<MediaUploadSize, number> = {\n small: 64,\n default: 96,\n large: 128,\n};\n\nexport function MediaUploadAvatar({\n value,\n defaultValue = null,\n onValueChange,\n aspect = 1,\n size = \"default\",\n disabled = false,\n className,\n}: MediaUploadAvatarProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<MediaValueSingle>(defaultValue);\n const effective = isControlled ? value : internal;\n const { item, loading, error, requestedId } = useResolvedMediaItem(effective);\n\n const emit = useCallback(\n (next: MediaItem | null) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n // Hand the blob from AvatarUploader through the media-service\n // 3-step contract. AvatarUploader doesn't know about MediaItems —\n // we adapt here.\n const handleUpload = useCallback(\n async ({\n blob,\n file,\n onProgress,\n }: {\n blob: Blob;\n file: File;\n onProgress?: (n: number) => void;\n signal: AbortSignal;\n }) => {\n // Wrap the blob in a File so the media-service init payload\n // carries a real filename + content-type.\n const wrapped = new File([blob], file.name, { type: blob.type || file.type });\n const result = await uploadFile(wrapped, onProgress);\n emit(result);\n },\n [emit],\n );\n\n const px = AVATAR_PX[size];\n const hasImage = !!item && !!item.url;\n\n return (\n <div\n className={cn(\n \"media-upload media-upload-avatar\",\n `media-upload-size-${size}`,\n className,\n )}\n data-disabled={disabled}\n data-media-uuid={requestedId ?? undefined}\n >\n <div\n className=\"media-upload-avatar-preview\"\n style={{ width: px, height: px }}\n >\n {hasImage ? (\n <img src={item.url} alt={item.filename} />\n ) : loading ? (\n <span className=\"media-upload-status\">…</span>\n ) : error ? (\n <span className=\"media-upload-status-title\">N/A</span>\n ) : (\n <ImagePlus size={20} />\n )}\n </div>\n {!disabled && (\n <AvatarUploader onUpload={handleUpload} aspect={aspect} cropShape=\"round\" />\n )}\n </div>\n );\n}\n\n// ─── Namespace export ─────────────────────────────────────────────\n\nexport const MediaUpload = {\n Single: MediaUploadSingle,\n Multiple: MediaUploadMultiple,\n Avatar: MediaUploadAvatar,\n};\n\nexport type { MediaItem } from \"./media-client\";\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * LocaleInput — multilingual text field with a tab strip switcher.\n *\n * One field stores a value per locale. The base locale (first in the\n * `locales` list, or `defaultLocale` if provided) is the fallback —\n * when a translation is missing the base value is used at render time.\n * Translation status is surfaced per-tab via a coloured dot:\n *\n * - `filled` → success (green)\n * - `draft` → warning (amber, e.g. stale relative to base)\n * - `empty` → destructive (red, no translation yet)\n *\n * `statusByLocale` lets callers pass the dot state explicitly. If\n * omitted, status is derived: empty string → `empty`, otherwise\n * `filled`.\n *\n * @example\n * <LocaleInput\n * locales={[\"ja\", \"en\", \"vi\"]}\n * baseLocale=\"ja\"\n * values={{ ja: \"特選 まぐろ握り 6貫盛り合わせ\", en: \"Tuna nigiri assortment (6 pcs)\", vi: \"\" }}\n * onChange={(locale, value) => set(locale, value)}\n * placeholder=\"商品名\"\n * />\n *\n * The visual contract maps to the canonical `.loc-tabs` + `.loc-panel`\n * classes from the dxs-kintai design system (no service-specific\n * locale lists baked into the source).\n */\n\nexport type LocaleStatus = \"filled\" | \"draft\" | \"empty\";\n\nexport interface LocaleInputProps {\n /** Ordered locale codes (BCP-47 or arbitrary string). First is base unless `baseLocale` is set. */\n locales: string[];\n /** Locale rendered initially. Defaults to the first locale. */\n defaultLocale?: string;\n /** Controlled active locale. Pair with `onLocaleChange`. */\n activeLocale?: string;\n /** Controlled active-locale change handler. */\n onLocaleChange?: (locale: string) => void;\n /** Fallback locale — labelled \"(base)\" in the tab. Defaults to `locales[0]`. */\n baseLocale?: string;\n /** Current values keyed by locale. */\n values: Record<string, string>;\n /** Fired when the user edits the value for the active locale. */\n onChange?: (locale: string, value: string) => void;\n /** Optional explicit status per locale dot. Derived from `values` when omitted. */\n statusByLocale?: Record<string, LocaleStatus>;\n /** Placeholder rendered in the input/textarea. */\n placeholder?: string;\n /** Render a `<textarea>` instead of `<input>`. */\n multiline?: boolean;\n /** Rows for the textarea (only when `multiline`). */\n rows?: number;\n /** Validation status applied to the visible input. */\n status?: \"default\" | \"error\" | \"warning\";\n /** Show a translation-progress meta string (e.g. \"3 / 4 translated\") in the tab strip. */\n meta?: ReactNode;\n /** Trailing tab-strip slot (e.g. an \"+ Add locale\" button). */\n tabsExtra?: ReactNode;\n /** Resolve a human label from a locale code; defaults to `locale.toUpperCase()`. */\n resolveLocaleLabel?: (locale: string) => ReactNode;\n /** Label shown next to the base locale tab. Defaults to \"(base)\". */\n baseLabel?: ReactNode;\n /** Max length for the input — surfaces a `.count` row when set. */\n maxLength?: number;\n /** Optional help text rendered under the active panel. */\n help?: ReactNode;\n /** Visual class for the help line (`info` | `warn` | `err` | `ok`). */\n helpStatus?: \"info\" | \"warn\" | \"err\" | \"ok\";\n /** Outer wrapper className. */\n className?: string;\n /** Outer wrapper style. */\n style?: CSSProperties;\n /** Input ID — useful when paired with a `<label htmlFor>`. */\n id?: string;\n}\n\nfunction deriveStatus(value: string | undefined): LocaleStatus {\n if (!value || value.trim() === \"\") return \"empty\";\n return \"filled\";\n}\n\nexport const LocaleInput = forwardRef<HTMLDivElement, LocaleInputProps>(\n function LocaleInput(\n {\n locales,\n defaultLocale,\n activeLocale: controlledLocale,\n onLocaleChange,\n baseLocale,\n values,\n onChange,\n statusByLocale,\n placeholder,\n multiline = false,\n rows = 3,\n status = \"default\",\n meta,\n tabsExtra,\n resolveLocaleLabel,\n baseLabel = \"(base)\",\n maxLength,\n help,\n helpStatus,\n className,\n style,\n id,\n },\n ref,\n ) {\n const resolvedBase = baseLocale ?? locales[0];\n const [internalLocale, setInternalLocale] = useState<string>(\n defaultLocale ?? resolvedBase ?? \"\",\n );\n const active = controlledLocale ?? internalLocale;\n\n const selectLocale = useCallback(\n (next: string) => {\n if (onLocaleChange) onLocaleChange(next);\n if (controlledLocale === undefined) setInternalLocale(next);\n },\n [controlledLocale, onLocaleChange],\n );\n\n const value = values[active] ?? \"\";\n const labelFor = useCallback(\n (locale: string): ReactNode =>\n resolveLocaleLabel ? resolveLocaleLabel(locale) : locale.toUpperCase(),\n [resolveLocaleLabel],\n );\n\n const statusMap = useMemo(() => {\n if (statusByLocale) return statusByLocale;\n const derived: Record<string, LocaleStatus> = {};\n for (const loc of locales) derived[loc] = deriveStatus(values[loc]);\n return derived;\n }, [locales, statusByLocale, values]);\n\n const inputStatusClass =\n status === \"error\"\n ? \"input-status-error\"\n : status === \"warning\"\n ? \"input-status-warning\"\n : \"\";\n\n const current = typeof value === \"string\" ? value.length : 0;\n const over = typeof maxLength === \"number\" && current > maxLength;\n const near =\n typeof maxLength === \"number\" && !over && current >= Math.floor(maxLength * 0.9);\n\n return (\n <div ref={ref} className={cn(\"loc-input\", className)} style={style}>\n <div className=\"loc-tabs\" role=\"tablist\">\n {locales.map((locale) => {\n const dotStatus = statusMap[locale] ?? \"empty\";\n const isActive = locale === active;\n const isBase = locale === resolvedBase;\n return (\n <button\n key={locale}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={cn(isActive && \"on\")}\n onClick={() => selectLocale(locale)}\n >\n <span\n className={cn(\n \"dot\",\n dotStatus === \"empty\" && \"empty\",\n dotStatus === \"draft\" && \"draft\",\n )}\n />\n {labelFor(locale)}\n {isBase ? (\n <span\n style={{\n fontSize: 10,\n color: \"var(--muted-foreground)\",\n marginLeft: 2,\n }}\n >\n {baseLabel}\n </span>\n ) : null}\n </button>\n );\n })}\n <span className=\"spacer\" />\n {meta !== undefined && <span className=\"meta\">{meta}</span>}\n {tabsExtra !== undefined && tabsExtra}\n </div>\n\n <div className=\"loc-panel\">\n {multiline ? (\n <textarea\n id={id}\n className={cn(\"input\", inputStatusClass)}\n rows={rows}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(active, e.target.value)}\n style={{\n resize: \"vertical\",\n height: \"auto\",\n padding: \"6px 10px\",\n }}\n maxLength={maxLength}\n />\n ) : (\n <input\n id={id}\n className={cn(\"input\", inputStatusClass)}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(active, e.target.value)}\n maxLength={maxLength}\n />\n )}\n\n {(help !== undefined || maxLength !== undefined) && (\n <div className=\"row-help\">\n {help !== undefined ? (\n <div className={cn(\"help\", helpStatus)}>{help}</div>\n ) : (\n <span />\n )}\n {maxLength !== undefined && (\n <div className={cn(\"count\", near && \"warn\", over && \"over\")}>\n {current} / {maxLength}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\n/**\n * LocaleRowInput — per-row locale form (canonical pattern ②).\n *\n * Renders every locale stacked vertically, each row showing the locale\n * code + a translation-status dot on the left and the input on the\n * right. Useful when reviewers want to see every translation at once.\n */\n\nexport interface LocaleRowInputProps\n extends Omit<LocaleInputProps, \"activeLocale\" | \"onLocaleChange\" | \"defaultLocale\" | \"tabsExtra\" | \"meta\"> {\n /** Per-locale row className. */\n rowClassName?: string;\n}\n\nexport const LocaleRowInput = forwardRef<HTMLDivElement, LocaleRowInputProps>(\n function LocaleRowInput(\n {\n locales,\n values,\n onChange,\n statusByLocale,\n placeholder,\n multiline = false,\n rows = 2,\n status = \"default\",\n resolveLocaleLabel,\n baseLocale,\n className,\n style,\n rowClassName,\n maxLength,\n help,\n helpStatus,\n },\n ref,\n ) {\n const labelFor = useCallback(\n (locale: string): ReactNode =>\n resolveLocaleLabel ? resolveLocaleLabel(locale) : locale.toUpperCase(),\n [resolveLocaleLabel],\n );\n\n const statusMap = useMemo(() => {\n if (statusByLocale) return statusByLocale;\n const derived: Record<string, LocaleStatus> = {};\n for (const loc of locales) derived[loc] = deriveStatus(values[loc]);\n return derived;\n }, [locales, statusByLocale, values]);\n\n const inputStatusClass =\n status === \"error\"\n ? \"input-status-error\"\n : status === \"warning\"\n ? \"input-status-warning\"\n : \"\";\n\n return (\n <div\n ref={ref}\n className={cn(\"loc-rows\", className)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--spacing-2)\",\n ...style,\n }}\n >\n {locales.map((locale) => {\n const dotStatus = statusMap[locale] ?? \"empty\";\n const isBase = baseLocale ? locale === baseLocale : false;\n return (\n <div key={locale} className={cn(\"loc-row\", rowClassName)}>\n <span className=\"flag\">\n <span className=\"code\">{labelFor(locale)}</span>\n <span\n className={cn(\n \"dot\",\n dotStatus === \"empty\" && \"empty\",\n dotStatus === \"draft\" && \"draft\",\n )}\n />\n {isBase && (\n <span style={{ fontSize: 10, color: \"var(--muted-foreground)\" }}>\n base\n </span>\n )}\n </span>\n {multiline ? (\n <textarea\n className={cn(\"input\", inputStatusClass)}\n rows={rows}\n placeholder={placeholder}\n value={values[locale] ?? \"\"}\n onChange={(e) => onChange?.(locale, e.target.value)}\n style={{ resize: \"vertical\", height: \"auto\", padding: \"6px 10px\" }}\n maxLength={maxLength}\n />\n ) : (\n <input\n className={cn(\"input\", inputStatusClass)}\n placeholder={placeholder}\n value={values[locale] ?? \"\"}\n onChange={(e) => onChange?.(locale, e.target.value)}\n maxLength={maxLength}\n />\n )}\n </div>\n );\n })}\n {help !== undefined && (\n <div className={cn(\"help\", helpStatus)}>{help}</div>\n )}\n </div>\n );\n },\n);\n","import { ChevronDown, ChevronLeft, ChevronRight, Plus, Search } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Button } from \"../../general/Button\";\nimport {\n ColorSwatchCheckbox,\n MiniMonth,\n type CalendarRef,\n type MiniMonthYMD,\n} from \"../../data-display/calendar/index\";\n\n/**\n * CalendarSidebar — left rail for the calendar screen:\n * 1. \"Create event\" pill CTA\n * 2. Mini-month with prev/next nav\n * 3. People search field\n * 4. Three grouped calendar lists (mine / org / shared)\n *\n * Generic: takes a flat list of `CalendarRef` and groups by `c.group`.\n * Labels are caller-supplied so the sidebar is locale-agnostic.\n */\nexport interface CalendarSidebarLabels {\n createEvent: string;\n searchPeople: string;\n /** Section labels keyed by `CalendarRef.group`. */\n sections: Record<string, string>;\n /** Mini-month title (e.g. \"5月 2026\"). */\n monthLabel: string;\n /** Footer CTA label (e.g. \"Add another calendar\"). */\n addCalendar?: string;\n}\n\nexport interface CalendarSidebarProps {\n today: MiniMonthYMD;\n selected: MiniMonthYMD;\n /** Year + month for the mini-month grid. */\n miniMonthYear: number;\n miniMonthMonth: number;\n calendars: CalendarRef[];\n eventDots?: Record<string, boolean>;\n labels: CalendarSidebarLabels;\n /** Order of group keys to render. */\n groupOrder?: string[];\n onSelectDate?: (ymd: MiniMonthYMD) => void;\n onToggleCalendar?: (id: string) => void;\n onCreate?: () => void;\n onPrevMonth?: () => void;\n onNextMonth?: () => void;\n onAddCalendar?: () => void;\n /** Optional dow labels passed straight through to MiniMonth. */\n miniMonthDows?: MiniMonthYMD extends infer _ ? readonly [string, string, string, string, string, string, string] : never;\n}\n\nexport function CalendarSidebar({\n today,\n selected,\n miniMonthYear,\n miniMonthMonth,\n calendars,\n eventDots,\n labels,\n groupOrder,\n onSelectDate,\n onToggleCalendar,\n onCreate,\n onPrevMonth,\n onNextMonth,\n onAddCalendar,\n miniMonthDows,\n}: CalendarSidebarProps) {\n const groups = groupOrder ?? Array.from(new Set(calendars.map((c) => c.group ?? \"default\")));\n return (\n <aside className=\"cal-sidebar\">\n <div style={{ padding: 14 }}>\n <button type=\"button\" className=\"cal-sidebar-create\" onClick={onCreate}>\n <span className=\"cal-sidebar-create-icon\">\n <Plus size={15} />\n </span>\n <span>{labels.createEvent}</span>\n </button>\n </div>\n\n <div style={{ padding: \"0 12px 12px\" }}>\n <div\n className=\"row gap-1\"\n style={{ marginBottom: 6, padding: \"0 4px\" }}\n >\n <span style={{ fontSize: 12, fontWeight: 500, color: \"var(--foreground)\" }}>\n {labels.monthLabel}\n </span>\n <span className=\"ml-auto\" style={{ display: \"flex\", gap: 2 }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 22, height: 22, padding: 0 }}\n onClick={onPrevMonth}\n aria-label=\"Previous month\"\n >\n <ChevronLeft size={13} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 22, height: 22, padding: 0 }}\n onClick={onNextMonth}\n aria-label=\"Next month\"\n >\n <ChevronRight size={13} />\n </Button>\n </span>\n </div>\n <MiniMonth\n year={miniMonthYear}\n month={miniMonthMonth}\n today={today}\n selected={selected}\n eventDots={eventDots}\n onSelect={onSelectDate}\n dowLabels={miniMonthDows}\n />\n </div>\n\n <div style={{ padding: \"4px 14px 8px\" }}>\n <div className=\"cal-sidebar-search\">\n <Search size={13} color=\"var(--muted-foreground)\" />\n <input placeholder={labels.searchPeople} />\n </div>\n </div>\n\n {groups.map((group) => {\n const inGroup = calendars.filter((c) => (c.group ?? \"default\") === group);\n if (inGroup.length === 0) return null;\n return (\n <SidebarSection key={group} label={labels.sections[group] ?? group}>\n <div className=\"col\" style={{ gap: 1 }}>\n {inGroup.map((cal) => (\n <ColorSwatchCheckbox\n key={cal.id}\n color={cal.color}\n label={cal.name}\n checked={cal.shown ?? false}\n onChange={() => onToggleCalendar?.(cal.id)}\n readonly={cal.readonly}\n />\n ))}\n </div>\n </SidebarSection>\n );\n })}\n\n {onAddCalendar && labels.addCalendar && (\n <div style={{ padding: \"4px 14px 16px\" }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onAddCalendar}\n style={{\n padding: \"0 6px\",\n color: \"var(--muted-foreground)\",\n fontSize: 11,\n }}\n >\n <Plus size={12} /> {labels.addCalendar}\n </Button>\n </div>\n )}\n </aside>\n );\n}\n\nfunction SidebarSection({ label, children }: { label: string; children: ReactNode }) {\n return (\n <div className=\"cal-sidebar-section\">\n <div className=\"cal-sidebar-section-label\">\n {label}\n <span className=\"ml-auto\">\n <ChevronDown size={12} />\n </span>\n </div>\n {children}\n </div>\n );\n}\n","import {\n Bell,\n ChevronLeft,\n ChevronRight,\n Search,\n Settings,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Button } from \"../../general/Button\";\nimport {\n SegmentedControl,\n type SegmentedControlItem,\n} from \"../../data-display/SegmentedControl\";\n\n/**\n * CalendarTopbar — top rail for the calendar screen:\n * - product sticker + product name + tenant tag\n * - Today button + prev/next nav\n * - main title (date range / month / etc.)\n * - search field (cmd-K)\n * - bell + settings icon buttons\n * - view-switcher segmented control\n * - viewer avatar\n *\n * Generic — service identity strings are caller-supplied so the topbar\n * stays product-agnostic.\n */\nexport interface CalendarTopbarProps<V extends string = string> {\n /** Sticker glyph (single character or short label). */\n sticker: ReactNode;\n productName: ReactNode;\n /** Optional tenant chip (e.g. \"Famgia\"). */\n tenant?: ReactNode;\n titleMain: ReactNode;\n titleSub?: ReactNode;\n /** View-switcher options. */\n views: SegmentedControlItem<V>[];\n view: V;\n onChangeView: (next: V) => void;\n onToday?: () => void;\n onPrev?: () => void;\n onNext?: () => void;\n todayLabel: string;\n searchPlaceholder: string;\n searchKbd?: string;\n /** Viewer avatar — typically `<Avatar size={32}>` with initials. */\n avatar?: ReactNode;\n onSearchOpen?: () => void;\n onNotificationsOpen?: () => void;\n onSettingsOpen?: () => void;\n}\n\nexport function CalendarTopbar<V extends string = string>({\n sticker,\n productName,\n tenant,\n titleMain,\n titleSub,\n views,\n view,\n onChangeView,\n onToday,\n onPrev,\n onNext,\n todayLabel,\n searchPlaceholder,\n searchKbd,\n avatar,\n onSearchOpen,\n onNotificationsOpen,\n onSettingsOpen,\n}: CalendarTopbarProps<V>) {\n return (\n <header className=\"cal-topbar\">\n <div className=\"row gap-2\" style={{ marginRight: 4 }}>\n <span className=\"cal-topbar-sticker\">{sticker}</span>\n <span className=\"cal-topbar-product\">{productName}</span>\n {tenant && <span className=\"cal-topbar-tenant\">{tenant}</span>}\n </div>\n\n <Button variant=\"secondary\" size=\"small\" onClick={onToday}>\n {todayLabel}\n </Button>\n <div className=\"row\" style={{ marginLeft: 2 }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onPrev}\n style={{ width: 28, padding: 0 }}\n aria-label=\"Previous\"\n >\n <ChevronLeft size={15} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onNext}\n style={{ width: 28, padding: 0 }}\n aria-label=\"Next\"\n >\n <ChevronRight size={15} />\n </Button>\n </div>\n\n <h1 className=\"cal-topbar-title\">\n {titleMain}\n {titleSub && <span className=\"cal-topbar-title-sub\">{titleSub}</span>}\n </h1>\n\n <div style={{ marginLeft: \"auto\" }} className=\"row gap-2\">\n <button\n type=\"button\"\n className=\"cal-topbar-search\"\n onClick={onSearchOpen}\n >\n <Search size={13} />\n <span>{searchPlaceholder}</span>\n {searchKbd && <span className=\"cal-topbar-search-kbd\">{searchKbd}</span>}\n </button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 30, padding: 0 }}\n onClick={onNotificationsOpen}\n aria-label=\"Notifications\"\n >\n <Bell size={15} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 30, padding: 0 }}\n onClick={onSettingsOpen}\n aria-label=\"Settings\"\n >\n <Settings size={15} />\n </Button>\n\n <SegmentedControl<V>\n items={views}\n value={view}\n onChange={onChangeView}\n variant=\"pill\"\n aria-label=\"View\"\n />\n\n <div className=\"cal-topbar-divider\" />\n {avatar ?? <span className=\"cal-topbar-avatar\">·</span>}\n </div>\n </header>\n );\n}\n","import {\n AllDayChip,\n DayHeaderPill,\n DEFAULT_GRID,\n EventBlock,\n GridColumn,\n NowLine,\n TimeGutter,\n layoutEvents,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type EventBlockVariant,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\n\n/**\n * WeekView — 7-column scrolling time grid with all-day band on top.\n * Computes the Mon-Sun window around `selected` automatically; takes a\n * flat list of `CalendarEvent` and filters them by visibility (`shown`)\n * of their owning calendar.\n *\n * Service-agnostic: the consumer maps `event.type` + `event.status` to\n * the EventBlock visual variant via `resolveVariant`.\n */\nexport interface WeekViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface WeekViewProps {\n today: WeekViewYMD;\n selected: WeekViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n locale?: TimeLocale;\n /** Currently selected event id (paints the accent ring). */\n selectedEventId?: string | null;\n onPickEvent?: (event: CalendarEvent) => void;\n /** Override day-of-week labels. Defaults per locale. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n /** Map an event → EventBlock variant. Defaults: customer→solid, focus→focus, tentative→tentative, else tint. */\n resolveVariant?: (event: CalendarEvent) => EventBlockVariant;\n /** All-day label (defaults: locale-specific). */\n allDayLabel?: string;\n /** Timezone label (top-left corner). */\n tzLabel?: string;\n /** Now-line override (mostly for storybook determinism). */\n nowOverride?: Date;\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n vi: [\"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\", \"CN\"],\n en: [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"],\n};\nconst ALL_DAY_DEFAULTS: Record<TimeLocale, string> = {\n ja: \"終日\",\n vi: \"Cả ngày\",\n en: \"All day\",\n};\n\nfunction defaultResolveVariant(ev: CalendarEvent): EventBlockVariant {\n if (ev.status === \"tentative\") return \"tentative\";\n if (ev.type === \"focus\") return \"focus\";\n if (ev.type === \"customer\") return \"solid\";\n return \"tint\";\n}\n\nexport function WeekView({\n today,\n selected,\n events,\n calendars,\n locale = \"en\",\n selectedEventId,\n onPickEvent,\n dowLabels,\n resolveVariant = defaultResolveVariant,\n allDayLabel,\n tzLabel,\n nowOverride,\n}: WeekViewProps) {\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const sel = new Date(selected.y, selected.m - 1, selected.d);\n const dow0 = (sel.getDay() + 6) % 7;\n const monday = new Date(sel);\n monday.setDate(sel.getDate() - dow0);\n\n const days = Array.from({ length: 7 }, (_, i) => {\n const d = new Date(monday);\n d.setDate(monday.getDate() + i);\n return { y: d.getFullYear(), m: d.getMonth() + 1, d: d.getDate() };\n });\n\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n const allDayByDay = days.map((d) =>\n visible.filter((e) => e.allDay && e.date === ymd(d.y, d.m, d.d)),\n );\n const timedByDay = days.map((d) =>\n layoutEvents(visible.filter((e) => !e.allDay && e.date === ymd(d.y, d.m, d.d))),\n );\n\n return (\n <div className=\"cal-weekview\">\n <div className=\"cal-weekview-head\">\n <div className=\"cal-weekview-tz\">{tzLabel ?? \"GMT+09\"}</div>\n {days.map((d, i) => {\n const isToday =\n today.y === d.y && today.m === d.m && today.d === d.d;\n const isSelected =\n selected.y === d.y && selected.m === d.m && selected.d === d.d;\n return (\n <DayHeaderPill\n key={i}\n dow={dowLabel[i]}\n day={d.d}\n state={isToday ? \"today\" : isSelected ? \"selected\" : \"default\"}\n />\n );\n })}\n </div>\n\n <div className=\"cal-weekview-allday\">\n <div className=\"cal-weekview-allday-label\">\n {allDayLabel ?? ALL_DAY_DEFAULTS[locale]}\n </div>\n {days.map((d, i) => (\n <div key={i} className=\"cal-weekview-allday-cell\">\n {allDayByDay[i].map((ev) => (\n <AllDayChip\n key={ev.id}\n color={colorOf(ev)}\n size=\"compact\"\n onClick={() => onPickEvent?.(ev)}\n >\n {ev.title}\n </AllDayChip>\n ))}\n </div>\n ))}\n </div>\n\n <div className=\"cal-weekview-scroll\">\n <div className=\"cal-weekview-grid\">\n <TimeGutter\n dayStartH={DEFAULT_GRID.dayStartH}\n dayEndH={DEFAULT_GRID.dayEndH}\n pxPerMin={DEFAULT_GRID.pxPerMin}\n locale={locale}\n />\n {days.map((d, i) => {\n const isToday =\n today.y === d.y && today.m === d.m && today.d === d.d;\n return (\n <GridColumn key={i} isToday={isToday}>\n {timedByDay[i].map((ev) => (\n <EventBlock\n key={ev.id}\n event={ev}\n color={colorOf(ev)}\n variant={resolveVariant(ev)}\n selected={selectedEventId === ev.id}\n lane={ev._lane}\n lanes={ev._lanes}\n onClick={onPickEvent}\n />\n ))}\n {isToday && <NowLine nowDate={nowOverride} />}\n </GridColumn>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n","import {\n AllDayChip,\n EventPill,\n MonthCell,\n buildMonthGrid,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\n\n/**\n * MonthView — 6×7 month grid (Mon-first). Each cell shows up to 4\n * events (overflow indicator below). All-day events render as solid\n * color bars (`AllDayChip` size=month); timed events render as one-line\n * `EventPill`s.\n */\nexport interface MonthViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface MonthViewProps {\n today: MonthViewYMD;\n selected: MonthViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n locale?: TimeLocale;\n onPickEvent?: (event: CalendarEvent) => void;\n /** Max events shown per cell before overflow row. Default 4. */\n maxEventsPerCell?: number;\n /** Override day-of-week labels. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n /** Localise the \"+N more\" suffix. */\n formatOverflow?: (n: number) => string;\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n vi: [\"THỨ HAI\", \"THỨ BA\", \"THỨ TƯ\", \"THỨ NĂM\", \"THỨ SÁU\", \"THỨ BẢY\", \"CHỦ NHẬT\"],\n en: [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"],\n};\n\nfunction defaultOverflow(locale: TimeLocale, n: number): string {\n if (locale === \"ja\") return `+ ${n} 件`;\n if (locale === \"vi\") return `+ ${n} khác`;\n return `+ ${n} more`;\n}\n\nexport function MonthView({\n today,\n selected,\n events,\n calendars,\n locale = \"en\",\n onPickEvent,\n maxEventsPerCell = 4,\n dowLabels,\n formatOverflow,\n}: MonthViewProps) {\n const cells = buildMonthGrid(selected.y, selected.m);\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const overflowFmt = formatOverflow ?? ((n: number) => defaultOverflow(locale, n));\n\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n const byDay = (key: string) => visible.filter((e) => e.date === key);\n\n return (\n <div className=\"cal-monthview\">\n <div className=\"cal-monthview-dows\">\n {dowLabel.map((w, i) => (\n <div key={i} className=\"cal-monthview-dow\">\n {w}\n </div>\n ))}\n </div>\n <div className=\"cal-monthview-grid\">\n {cells.map((c, i) => {\n const key = ymd(c.y, c.m, c.d);\n const dayEvents = byDay(key);\n const slice = dayEvents.slice(0, maxEventsPerCell);\n const more = dayEvents.length - slice.length;\n const isToday =\n !c.dim && today.y === c.y && today.m === c.m && today.d === c.d;\n const isWeekend = i % 7 >= 5;\n return (\n <MonthCell\n key={i}\n day={c.d}\n today={isToday}\n dim={c.dim}\n weekend={isWeekend}\n monthLabel={\n c.d === 1 && !c.dim\n ? locale === \"ja\"\n ? `${c.m}月`\n : locale === \"vi\"\n ? `Th. ${c.m}`\n : String(c.m)\n : undefined\n }\n overflow={more}\n formatOverflow={() => overflowFmt(more)}\n events={slice.map((ev) =>\n ev.allDay ? (\n <AllDayChip\n key={ev.id}\n color={colorOf(ev)}\n size=\"month\"\n onClick={() => onPickEvent?.(ev)}\n >\n {ev.title}\n </AllDayChip>\n ) : (\n <EventPill\n key={ev.id}\n color={colorOf(ev)}\n time={ev.start}\n title={ev.title}\n dim={c.dim}\n onClick={() => onPickEvent?.(ev)}\n />\n ),\n )}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","import { cn } from \"../../cn\";\n\n/**\n * DayHeaderHero — page-header strip rendered above `DayView`: large\n * day number + day-of-week + month/year + optional Today badge + event\n * count summary. Visually distinct from the `DayHeaderPill` atom (which\n * sits inside a week's column header).\n */\nexport interface DayHeaderHeroProps {\n day: number;\n dow: string;\n monthLabel: string;\n isToday?: boolean;\n todayLabel?: string;\n eventCount?: number;\n formatEventCount?: (n: number) => string;\n className?: string;\n}\n\nexport function DayHeaderHero({\n day,\n dow,\n monthLabel,\n isToday = false,\n todayLabel = \"Today\",\n eventCount,\n formatEventCount,\n className,\n}: DayHeaderHeroProps) {\n const countLabel =\n eventCount === undefined\n ? null\n : formatEventCount\n ? formatEventCount(eventCount)\n : `${eventCount} events`;\n return (\n <div className={cn(\"day-hero\", className)} data-today={isToday || undefined}>\n <span className=\"day-hero-num\">{day}</span>\n <div className=\"col\" style={{ gap: 0 }}>\n <span className=\"day-hero-dow\">{dow}</span>\n <span className=\"day-hero-month\">{monthLabel}</span>\n </div>\n {isToday && <span className=\"day-hero-today-badge\">{todayLabel}</span>}\n {countLabel && (\n <span className=\"ml-auto day-hero-count\">{countLabel}</span>\n )}\n </div>\n );\n}\n","import {\n AllDayChip,\n DEFAULT_GRID,\n EventBlock,\n GridColumn,\n NowLine,\n TimeGutter,\n layoutEvents,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type EventBlockVariant,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\nimport { DayHeaderHero } from \"./DayHeaderHero\";\n\n/**\n * DayView — single-column time grid with a hero header showing the\n * date number + day-of-week + Today badge + event count. All-day\n * events render as pill chips across a strip beneath the hero.\n */\nexport interface DayViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface DayViewProps {\n today: DayViewYMD;\n selected: DayViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n locale?: TimeLocale;\n selectedEventId?: string | null;\n onPickEvent?: (event: CalendarEvent) => void;\n resolveVariant?: (event: CalendarEvent) => EventBlockVariant;\n /** Override dow labels. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n /** \"Today\" badge text. */\n todayLabel?: string;\n /** Localise \"(count) events\" — receives count. */\n formatEventCount?: (count: number) => string;\n nowOverride?: Date;\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\", \"日曜日\"],\n vi: [\"Thứ hai\", \"Thứ ba\", \"Thứ tư\", \"Thứ năm\", \"Thứ sáu\", \"Thứ bảy\", \"Chủ nhật\"],\n en: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n};\n\nfunction defaultResolveVariant(ev: CalendarEvent): EventBlockVariant {\n if (ev.status === \"tentative\") return \"tentative\";\n if (ev.type === \"focus\") return \"focus\";\n if (ev.type === \"customer\") return \"solid\";\n return \"tint\";\n}\n\nexport function DayView({\n today,\n selected,\n events,\n calendars,\n locale = \"en\",\n selectedEventId,\n onPickEvent,\n resolveVariant = defaultResolveVariant,\n dowLabels,\n todayLabel,\n formatEventCount,\n nowOverride,\n}: DayViewProps) {\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const key = ymd(selected.y, selected.m, selected.d);\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const dayEvs = visible.filter((e) => e.date === key);\n const allDay = dayEvs.filter((e) => e.allDay);\n const timed = layoutEvents(dayEvs.filter((e) => !e.allDay));\n const isToday =\n today.y === selected.y && today.m === selected.m && today.d === selected.d;\n const dow = (new Date(selected.y, selected.m - 1, selected.d).getDay() + 6) % 7;\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n\n return (\n <div className=\"cal-dayview\">\n <div className=\"cal-dayview-col\">\n <DayHeaderHero\n day={selected.d}\n dow={dowLabel[dow]}\n monthLabel={\n locale === \"ja\"\n ? `${selected.y}年${selected.m}月`\n : `${selected.m}/${selected.y}`\n }\n isToday={isToday}\n todayLabel={todayLabel}\n eventCount={timed.length + allDay.length}\n formatEventCount={formatEventCount}\n />\n\n {allDay.length > 0 && (\n <div className=\"cal-dayview-allday-strip\">\n {allDay.map((ev) => (\n <AllDayChip\n key={ev.id}\n color={colorOf(ev)}\n size=\"pill\"\n onClick={() => onPickEvent?.(ev)}\n >\n {ev.title}\n </AllDayChip>\n ))}\n </div>\n )}\n\n <div className=\"cal-dayview-scroll\">\n <div className=\"cal-dayview-grid\">\n <TimeGutter\n dayStartH={DEFAULT_GRID.dayStartH}\n dayEndH={DEFAULT_GRID.dayEndH}\n pxPerMin={DEFAULT_GRID.pxPerMin}\n locale={locale}\n />\n <GridColumn isToday={isToday}>\n {timed.map((ev) => (\n <EventBlock\n key={ev.id}\n event={ev}\n color={colorOf(ev)}\n variant={resolveVariant(ev)}\n selected={selectedEventId === ev.id}\n lane={ev._lane}\n lanes={ev._lanes}\n onClick={onPickEvent}\n />\n ))}\n {isToday && <NowLine nowDate={nowOverride} />}\n </GridColumn>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import {\n AvatarStack,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type PersonRef,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\n\n/**\n * AgendaView — date-grouped list of events for the next N days. Each\n * group renders a 92px date gutter (dow + day number + month + NOW\n * pill) | rail of event rows (time, title, location, avatar stack).\n */\nexport interface AgendaViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface AgendaViewProps {\n today: AgendaViewYMD;\n selected: AgendaViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n /** People directory used to resolve attendee IDs to AvatarStack items. */\n people: PersonRef[];\n locale?: TimeLocale;\n /** Number of days to render starting from the week's Monday. Default 14. */\n days?: number;\n onPickEvent?: (event: CalendarEvent) => void;\n /** Localised \"All day\" label override. */\n allDayLabel?: string;\n todayBadge?: string;\n dowLabels?: readonly [string, string, string, string, string, string, string];\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n vi: [\"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\", \"CN\"],\n en: [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"],\n};\n\nconst ALL_DAY_DEFAULTS: Record<TimeLocale, string> = {\n ja: \"終日\",\n vi: \"Cả ngày\",\n en: \"All day\",\n};\n\nexport function AgendaView({\n today,\n selected,\n events,\n calendars,\n people,\n locale = \"en\",\n days = 14,\n onPickEvent,\n allDayLabel,\n todayBadge = \"NOW\",\n dowLabels,\n}: AgendaViewProps) {\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const allDayText = allDayLabel ?? ALL_DAY_DEFAULTS[locale];\n const sel = new Date(selected.y, selected.m - 1, selected.d);\n const dow0 = (sel.getDay() + 6) % 7;\n const monday = new Date(sel);\n monday.setDate(sel.getDate() - dow0);\n\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n const personOf = (id: string) => people.find((p) => p.id === id);\n\n const day = (i: number) => {\n const d = new Date(monday);\n d.setDate(monday.getDate() + i);\n return d;\n };\n\n return (\n <div className=\"cal-agendaview\">\n <div className=\"cal-agendaview-inner\">\n {Array.from({ length: days }, (_, i) => day(i)).map((d) => {\n const y = d.getFullYear();\n const m = d.getMonth() + 1;\n const dd = d.getDate();\n const key = ymd(y, m, dd);\n const dayEvs = visible\n .filter((e) => e.date === key)\n .sort((a, b) =>\n (a.allDay ? \"00:00\" : (a.start ?? \"\")).localeCompare(\n b.allDay ? \"00:00\" : (b.start ?? \"\"),\n ),\n );\n if (dayEvs.length === 0) return null;\n const isToday = today.y === y && today.m === m && today.d === dd;\n const dow = (d.getDay() + 6) % 7;\n const monthShort =\n locale === \"ja\" ? `${m}月` : locale === \"vi\" ? `Th. ${m}` : String(m);\n return (\n <div key={key} className=\"cal-agenda-day\">\n <div className=\"cal-agenda-gutter\" data-today={isToday || undefined}>\n <span className=\"cal-agenda-gutter-dow\">{dowLabel[dow]}</span>\n <span className=\"cal-agenda-gutter-num\">{dd}</span>\n <span className=\"cal-agenda-gutter-month\">{monthShort}</span>\n {isToday && <span className=\"cal-agenda-gutter-now\">{todayBadge}</span>}\n </div>\n <div className=\"col\" style={{ gap: 6 }}>\n {dayEvs.map((ev) => {\n const color = colorOf(ev);\n const attendees = ev.attendees\n .map(personOf)\n .filter((p): p is PersonRef => Boolean(p))\n .map((p) => ({\n id: p.id,\n short: p.short,\n color: p.color,\n name: p.name,\n }));\n return (\n <button\n key={ev.id}\n type=\"button\"\n className=\"cal-agenda-event\"\n style={{ color }}\n onClick={() => onPickEvent?.(ev)}\n >\n <span className=\"cal-agenda-event-time\">\n {ev.allDay ? allDayText : `${ev.start} – ${ev.end}`}\n </span>\n <span className=\"cal-agenda-event-title\">\n {ev.title}\n {ev.location && (\n <span className=\"cal-agenda-event-location\">· {ev.location}</span>\n )}\n </span>\n <AvatarStack items={attendees} max={3} size={22} />\n </button>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import {\n Bell,\n Check,\n FileText,\n Globe,\n Pencil,\n Plus,\n RefreshCw,\n Trash2,\n Users,\n X,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Badge } from \"../../data-display/Badge\";\nimport { Button } from \"../../general/Button\";\nimport {\n AttendeeListItem,\n IconRow,\n type CalendarEvent,\n type CalendarRef,\n type PersonRef,\n} from \"../../data-display/calendar/index\";\n\n/**\n * EventDetailPanel — 360px right-rail panel for an opened event.\n * Header — color-dot + title + cal name + status + edit/delete/close\n * Body — when / where / attendees / description / notifications rows\n * Footer — RSVP 3-button row (Yes / Maybe / No)\n *\n * Generic: status labels + RSVP labels + \"(you)\" + section labels all\n * caller-supplied so the panel stays locale-agnostic.\n */\nexport interface EventDetailLabels {\n joinMeeting?: string;\n attendeesSummary: (count: number, accepted: number) => string;\n addPerson: string;\n rsvpQuestion: string;\n rsvpYes: string;\n rsvpMaybe: string;\n rsvpNo: string;\n selfLabel: string;\n organizerLabel: string;\n /** Date/time line for the When row, e.g. \"Wed, May 20 · GMT+09\". */\n whenSubtitle: ReactNode;\n /** \"All day\" / \"Cả ngày\" / \"終日\". */\n allDay: string;\n /** Status label per `event.status`. */\n statusLabels: Record<string, string>;\n}\n\nexport interface EventDetailPanelProps {\n event: CalendarEvent;\n calendar?: CalendarRef;\n people: PersonRef[];\n labels: EventDetailLabels;\n /** Description body content — JSX so callers can use markdown / lists. */\n description?: ReactNode;\n /** Notifications list. */\n notifications?: ReactNode;\n onClose?: () => void;\n onEdit?: () => void;\n onDelete?: () => void;\n onRSVP?: (rsvp: \"yes\" | \"maybe\" | \"no\") => void;\n}\n\nexport function EventDetailPanel({\n event,\n calendar,\n people,\n labels,\n description,\n notifications,\n onClose,\n onEdit,\n onDelete,\n onRSVP,\n}: EventDetailPanelProps) {\n const color = calendar?.color ?? \"#4c6cb3\";\n const organizerId = event.attendees[0];\n const statusLabel = event.status ? labels.statusLabels[event.status] ?? event.status : \"\";\n\n return (\n <aside className=\"cal-detail-aside\">\n <div className=\"cal-detail-head\">\n <span className=\"cal-detail-dot\" style={{ background: color }} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <h2 className=\"cal-detail-title\">{event.title}</h2>\n <div className=\"cal-detail-sub\">\n {calendar?.name ?? \"—\"}\n {statusLabel && <> · {statusLabel}</>}\n </div>\n </div>\n <div className=\"row gap-1\">\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onEdit}\n style={{ width: 26, padding: 0 }}\n aria-label=\"Edit\"\n >\n <Pencil size={13} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onDelete}\n style={{ width: 26, padding: 0 }}\n aria-label=\"Delete\"\n >\n <Trash2 size={13} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onClose}\n style={{ width: 26, padding: 0 }}\n aria-label=\"Close\"\n >\n <X size={13} />\n </Button>\n </div>\n </div>\n\n <div className=\"cal-detail-body\">\n <IconRow icon={<RefreshCw size={15} />}>\n <div style={{ fontSize: 13, fontWeight: 500 }}>\n {event.allDay\n ? labels.allDay\n : `${event.start ?? \"\"} – ${event.end ?? \"\"}`}\n </div>\n <div style={{ fontSize: 11.5, color: \"var(--muted-foreground)\" }}>\n {labels.whenSubtitle}\n </div>\n </IconRow>\n\n {event.location && (\n <IconRow icon={<Globe size={15} />}>\n <div style={{ fontSize: 13, fontWeight: 500 }}>{event.location}</div>\n {labels.joinMeeting && (\n <a\n style={{\n fontSize: 11.5,\n color: \"var(--accent-color)\",\n textDecoration: \"none\",\n }}\n >\n {labels.joinMeeting}\n </a>\n )}\n </IconRow>\n )}\n\n <IconRow icon={<Users size={15} />}>\n <div\n style={{\n fontSize: 12,\n color: \"var(--muted-foreground)\",\n marginBottom: 6,\n }}\n >\n {labels.attendeesSummary(event.attendees.length, event.attendees.length)}\n </div>\n <div className=\"col\" style={{ gap: 4 }}>\n {event.attendees.map((pid) => {\n const p = people.find((x) => x.id === pid);\n if (!p) return null;\n return (\n <AttendeeListItem\n key={pid}\n name={p.name}\n short={p.short}\n color={p.color}\n isSelf={p.self}\n isOrganizer={organizerId === pid}\n org={p.org}\n selfLabel={labels.selfLabel}\n organizerLabel={labels.organizerLabel}\n status={\n <Badge variant=\"success\" style={{ fontSize: 10 }}>\n <span className=\"dot\" />\n OK\n </Badge>\n }\n />\n );\n })}\n </div>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{\n marginTop: 6,\n padding: \"0 6px\",\n color: \"var(--muted-foreground)\",\n fontSize: 11,\n }}\n >\n <Plus size={12} /> {labels.addPerson}\n </Button>\n </IconRow>\n\n {description && (\n <IconRow icon={<FileText size={15} />}>{description}</IconRow>\n )}\n\n {notifications && (\n <IconRow icon={<Bell size={15} />}>{notifications}</IconRow>\n )}\n </div>\n\n <div className=\"cal-detail-foot\">\n <div className=\"cal-detail-rsvp-label\">{labels.rsvpQuestion}</div>\n <div className=\"row\" style={{ gap: 6 }}>\n <Button\n variant=\"primary\"\n\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => onRSVP?.(\"yes\")}\n >\n <Check size={13} /> {labels.rsvpYes}\n </Button>\n <Button\n variant=\"secondary\"\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => onRSVP?.(\"maybe\")}\n >\n {labels.rsvpMaybe}\n </Button>\n <Button\n variant=\"secondary\"\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => onRSVP?.(\"no\")}\n >\n {labels.rsvpNo}\n </Button>\n </div>\n </div>\n </aside>\n );\n}\n","import { FileText, Globe, RefreshCw, Repeat, Users, Zap, Plus } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\nimport { Button } from \"../../general/Button\";\nimport { Tabs } from \"../../navigation/Tabs\";\nimport {\n AttendeeChip,\n CalendarOption,\n IconRow,\n type CalendarRef,\n type PersonRef,\n} from \"../../data-display/calendar/index\";\n\n/**\n * CreateEventDialog — 880×640 modal-shaped create form. Two-column\n * layout: form on the left, options rail on the right (calendar\n * picker, free/busy, notifications, guest permissions, helper card).\n *\n * Does NOT manage open/close — the consumer wraps the JSX in a Radix\n * `Dialog` (or any portal). The visual shell + the form scaffolding is\n * what this component owns.\n */\nexport interface CreateEventTab {\n id: string;\n label: ReactNode;\n}\n\nexport interface CreateEventLabels {\n /** Repeat-rule option list — caller-supplied so locale stays out of the SDK. */\n repeatOptions: { value: string; label: string }[];\n whenFromLabel: string;\n whenToLabel: string;\n allDay: string;\n locationPlaceholder: string;\n createMeet: string;\n attendeesPlaceholder: string;\n findATime: string;\n attendeesSummary: ReactNode;\n detailsButton: string;\n cancel: string;\n save: string;\n /** Right-rail section labels. */\n rail: {\n saveTo: string;\n showAs: string;\n showAsBusy: string;\n showAsFree: string;\n notifications: string;\n addNotification: string;\n guestPermissions: string;\n permissionEdit: string;\n permissionInvite: string;\n permissionGuestList: string;\n helpTitle: string;\n helpBody: (calendarName: string) => ReactNode;\n };\n}\n\nexport interface CreateEventDialogProps {\n /** Default form values. */\n initialTitle?: string;\n initialCalendarId: string;\n /** Tab ids (e.g. event / task / focus / ooo). */\n tabs: CreateEventTab[];\n initialTab?: string;\n /** Visible calendars to choose from (read-only ones filtered out). */\n calendars: CalendarRef[];\n /** Selected attendee list (chip array). */\n attendees: PersonRef[];\n /** When summary line (e.g. \"Wed, May 20\"). */\n whenDate: ReactNode;\n /** Start / end time strings. */\n whenStart: string;\n whenEnd: string;\n labels: CreateEventLabels;\n /** Notifications list — caller renders pills. */\n notificationsList?: ReactNode;\n /** Description default value. */\n descriptionDefault?: string;\n onRemoveAttendee?: (id: string) => void;\n onChangeCalendar?: (id: string) => void;\n onChangeTitle?: (next: string) => void;\n onCancel?: () => void;\n onSave?: () => void;\n}\n\nexport function CreateEventDialog({\n initialTitle = \"\",\n initialCalendarId,\n tabs,\n initialTab,\n calendars,\n attendees,\n whenDate,\n whenStart,\n whenEnd,\n labels,\n notificationsList,\n descriptionDefault,\n onRemoveAttendee,\n onChangeCalendar,\n onChangeTitle,\n onCancel,\n onSave,\n}: CreateEventDialogProps) {\n const [tab, setTab] = useState(initialTab ?? tabs[0]?.id ?? \"event\");\n const [title, setTitle] = useState(initialTitle);\n const [calId, setCalId] = useState(initialCalendarId);\n const [allDay, setAllDay] = useState(false);\n const [showAs, setShowAs] = useState<\"busy\" | \"free\">(\"busy\");\n const cal = calendars.find((c) => c.id === calId);\n const editableCalendars = calendars.filter((c) => !c.readonly);\n\n return (\n <div className=\"cal-create-dialog\">\n <div className=\"cal-create-main\">\n <div className=\"cal-create-head\">\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: 3,\n background: cal?.color ?? \"#1e50a2\",\n flexShrink: 0,\n }}\n />\n <input\n className=\"cal-create-title-input\"\n value={title}\n onChange={(e) => {\n setTitle(e.target.value);\n onChangeTitle?.(e.target.value);\n }}\n />\n </div>\n\n <Tabs\n value={tab}\n onValueChange={setTab}\n listClassName=\"cal-create-tabs\"\n items={tabs.map((t) => ({ value: t.id, label: t.label }))}\n />\n\n <div className=\"cal-create-body\">\n <IconRow icon={<RefreshCw size={15} />} align=\"center\">\n <div className=\"row gap-2\" style={{ flexWrap: \"wrap\" }}>\n <div className=\"input\" style={{ width: 152, display: \"inline-flex\", alignItems: \"center\" }}>\n {whenDate}\n </div>\n <span style={{ fontSize: 12, color: \"var(--muted-foreground)\" }}>\n {labels.whenFromLabel}\n </span>\n <div className=\"input\" style={{ width: 92, display: \"inline-flex\", alignItems: \"center\" }}>\n {whenStart}\n </div>\n <span style={{ fontSize: 12, color: \"var(--muted-foreground)\" }}>\n {labels.whenToLabel}\n </span>\n <div className=\"input\" style={{ width: 92, display: \"inline-flex\", alignItems: \"center\" }}>\n {whenEnd}\n </div>\n <label\n className=\"row gap-1\"\n style={{\n fontSize: 12,\n marginLeft: 6,\n color: \"var(--muted-foreground)\",\n cursor: \"pointer\",\n }}\n >\n <input\n type=\"checkbox\"\n checked={allDay}\n onChange={(e) => setAllDay(e.target.checked)}\n />\n {labels.allDay}\n </label>\n </div>\n </IconRow>\n\n <IconRow icon={<Repeat size={14} />} align=\"center\">\n <select className=\"input\" style={{ width: 260 }} defaultValue={labels.repeatOptions[0]?.value}>\n {labels.repeatOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </IconRow>\n\n <IconRow icon={<Globe size={15} />} align=\"center\">\n <div className=\"row gap-2\" style={{ width: \"100%\" }}>\n <input className=\"input\" placeholder={labels.locationPlaceholder} style={{ flex: 1 }} />\n <Button variant=\"secondary\" size=\"small\">\n <Zap size={13} /> {labels.createMeet}\n </Button>\n </div>\n </IconRow>\n\n <IconRow icon={<Users size={15} />}>\n <div className=\"row gap-1\" style={{ flexWrap: \"wrap\" }}>\n {attendees.map((p) => (\n <AttendeeChip\n key={p.id}\n name={p.name}\n short={p.short}\n color={p.color}\n onRemove={() => onRemoveAttendee?.(p.id)}\n />\n ))}\n <input\n className=\"input\"\n style={{ flex: 1, minWidth: 200, border: 0, background: \"transparent\" }}\n placeholder={labels.attendeesPlaceholder}\n />\n </div>\n <div\n className=\"row gap-2\"\n style={{ marginTop: 6, fontSize: 11.5, color: \"var(--muted-foreground)\" }}\n >\n <Button\n variant=\"ghost\"\n size=\"small\"\n\n style={{ padding: 0, height: \"auto\" }}\n >\n {labels.findATime}\n </Button>\n <span>·</span>\n <span>{labels.attendeesSummary}</span>\n </div>\n </IconRow>\n\n <IconRow icon={<FileText size={15} />}>\n <textarea\n className=\"input\"\n defaultValue={descriptionDefault}\n style={{\n height: 92,\n padding: 10,\n resize: \"none\",\n fontFamily: \"var(--font-sans-jp)\",\n }}\n />\n </IconRow>\n </div>\n\n <div className=\"cal-create-foot\">\n <Button variant=\"ghost\" size=\"small\">\n {labels.detailsButton}\n </Button>\n <div className=\"ml-auto row gap-2\">\n <Button variant=\"secondary\" size=\"small\" onClick={onCancel}>\n {labels.cancel}\n </Button>\n <Button variant=\"primary\" size=\"small\" onClick={onSave}>\n {labels.save}\n </Button>\n </div>\n </div>\n </div>\n\n <div className=\"cal-create-rail\">\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.saveTo}</div>\n <select\n className=\"input\"\n style={{ width: \"100%\" }}\n value={calId}\n onChange={(e) => {\n setCalId(e.target.value);\n onChangeCalendar?.(e.target.value);\n }}\n >\n {editableCalendars.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name}\n </option>\n ))}\n </select>\n </div>\n\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.showAs}</div>\n <div className=\"row gap-1\">\n <button\n type=\"button\"\n className=\"btn btn-secondary btn-sm\"\n data-active={showAs === \"busy\"}\n style={{\n flex: 1,\n background:\n showAs === \"busy\"\n ? \"color-mix(in oklch, var(--accent-color) 14%, transparent)\"\n : \"var(--surface-3)\",\n borderColor: showAs === \"busy\" ? \"var(--accent-color)\" : \"var(--border)\",\n color: showAs === \"busy\" ? \"var(--accent-color)\" : \"var(--foreground)\",\n }}\n onClick={() => setShowAs(\"busy\")}\n >\n {labels.rail.showAsBusy}\n </button>\n <button\n type=\"button\"\n className=\"btn btn-secondary btn-sm\"\n data-active={showAs === \"free\"}\n style={{\n flex: 1,\n background: showAs === \"free\" ? \"var(--surface-3)\" : \"transparent\",\n }}\n onClick={() => setShowAs(\"free\")}\n >\n {labels.rail.showAsFree}\n </button>\n </div>\n </div>\n\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.notifications}</div>\n <div className=\"col\" style={{ gap: 4, fontSize: 12 }}>\n {notificationsList}\n <Button\n variant=\"ghost\"\n size=\"small\"\n\n style={{ padding: 0, height: 22, fontSize: 11, justifyContent: \"flex-start\" }}\n >\n <Plus size={11} /> {labels.rail.addNotification}\n </Button>\n </div>\n </div>\n\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.guestPermissions}</div>\n <div className=\"col\" style={{ gap: 6, fontSize: 12 }}>\n <label className=\"row gap-2\">\n <input type=\"checkbox\" defaultChecked /> {labels.rail.permissionEdit}\n </label>\n <label className=\"row gap-2\">\n <input type=\"checkbox\" defaultChecked /> {labels.rail.permissionInvite}\n </label>\n <label className=\"row gap-2\">\n <input type=\"checkbox\" defaultChecked /> {labels.rail.permissionGuestList}\n </label>\n </div>\n </div>\n\n <div className=\"cal-create-rail-info\">\n <div className=\"row gap-2\" style={{ marginBottom: 4 }}>\n <CalendarOption color={cal?.color ?? \"#1e50a2\"} name={cal?.name ?? \"—\"} />\n </div>\n <p\n style={{\n margin: 0,\n fontSize: 10.5,\n color: \"var(--muted-foreground)\",\n lineHeight: 1.5,\n }}\n >\n {labels.rail.helpBody(cal?.name ?? \"\")}\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Badge } from \"../../data-display/Badge\";\nimport { Button } from \"../../general/Button\";\nimport {\n AvailabilityRow,\n SuggestedSlotCard,\n type PersonRef,\n} from \"../../data-display/calendar/index\";\n\n/**\n * FindATimePanel — 1100×720 scheduling assistant. People rows on the\n * left, time grid on the right with busy / tentative / free shading;\n * \"chosen-time\" overlay tracks `selectedRange`. Footer: suggested-slot\n * cards. Legend at the bottom.\n *\n * Generic: caller supplies the people directory + their per-slot\n * availability arrays. Labels are caller-supplied for locale fit.\n */\nexport interface FindATimeLabels {\n title: string;\n subtitle: ReactNode;\n peopleCol: string;\n peopleCount: (n: number) => string;\n durationLabel: string;\n expandHours: string;\n apply: string;\n /** \"Suggestions — slots all attendees free\". */\n suggestionsLabel: string;\n /** Legend texts. */\n legendBusy: string;\n legendTentative: string;\n legendFree: string;\n workingHours: string;\n}\n\nexport interface FindATimeSlotSuggestion {\n id: string;\n label: ReactNode;\n meta: ReactNode;\n best?: boolean;\n /** Optional click → set selectedRange to this slot. */\n range?: [number, number];\n}\n\nexport interface FindATimePanelProps {\n people: PersonRef[];\n /** Per-person availability: 0 = free, 1 = tentative, 2 = busy. */\n availability: Record<string, ReadonlyArray<0 | 1 | 2>>;\n /** Working-hour range (e.g. 9..18) — header label only; slot count comes from availability arrays. */\n hours: number[];\n selectedRange: [number, number] | null;\n onChangeRange?: (range: [number, number] | null) => void;\n suggestions: FindATimeSlotSuggestion[];\n labels: FindATimeLabels;\n onPrev?: () => void;\n onNext?: () => void;\n selfLabel?: string;\n}\n\nexport function FindATimePanel({\n people,\n availability,\n hours,\n selectedRange,\n onChangeRange,\n suggestions,\n labels,\n onPrev,\n onNext,\n selfLabel = \"(you)\",\n}: FindATimePanelProps) {\n const firstAvail = Object.values(availability)[0];\n const slotCount = firstAvail?.length ?? hours.length * 2;\n\n return (\n <div className=\"cal-find\">\n <header className=\"cal-find-head\">\n <div>\n <h2 className=\"cal-find-title\">{labels.title}</h2>\n <div className=\"cal-find-sub\">{labels.subtitle}</div>\n </div>\n <div className=\"row gap-1\" style={{ marginLeft: 6 }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 26, padding: 0 }}\n onClick={onPrev}\n aria-label=\"Previous\"\n >\n <ChevronLeft size={14} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 26, padding: 0 }}\n onClick={onNext}\n aria-label=\"Next\"\n >\n <ChevronRight size={14} />\n </Button>\n </div>\n <Badge variant=\"info\" style={{ marginLeft: 4 }}>\n <span className=\"dot\" />\n {labels.peopleCount(people.length)}\n </Badge>\n <Badge variant=\"neutral\">\n <span className=\"dot\" />\n {labels.durationLabel}\n </Badge>\n <div className=\"ml-auto row gap-2\">\n <Button variant=\"secondary\" size=\"small\">\n {labels.expandHours}\n </Button>\n <Button variant=\"primary\" size=\"small\">\n {labels.apply}\n </Button>\n </div>\n </header>\n\n <div className=\"cal-find-body\">\n <div className=\"cal-find-grid\">\n <div className=\"cal-find-people-head\">{labels.peopleCol}</div>\n <div\n className=\"cal-find-hours\"\n style={{ gridTemplateColumns: `repeat(${slotCount}, 1fr)` }}\n >\n {hours.map((h, i) => (\n <div\n key={h}\n className=\"cal-find-hour\"\n style={{\n gridColumn: \"span 2\",\n borderRight: i === hours.length - 1 ? \"none\" : undefined,\n }}\n >\n {String(h).padStart(2, \"0\")}:00\n </div>\n ))}\n </div>\n\n {people.map((p) => {\n const slots = availability[p.id] ?? Array.from({ length: slotCount }, () => 0 as const);\n return (\n <AvailabilityRow\n key={p.id}\n slots={slots}\n selectedRange={selectedRange ?? null}\n person={\n <>\n <span\n style={{\n width: 26,\n height: 26,\n borderRadius: 999,\n background: p.color,\n color: \"white\",\n display: \"grid\",\n placeItems: \"center\",\n fontSize: 10,\n fontWeight: 600,\n }}\n >\n {p.short}\n </span>\n <div style={{ minWidth: 0 }}>\n <div\n style={{\n fontSize: 12.5,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {p.name}\n {p.self && (\n <span\n style={{\n marginLeft: 4,\n color: \"var(--muted-foreground)\",\n fontSize: 10,\n }}\n >\n {selfLabel}\n </span>\n )}\n </div>\n <div style={{ fontSize: 10, color: \"var(--muted-foreground)\" }}>\n {p.org}\n {p.role && <> · {p.role}</>}\n </div>\n </div>\n </>\n }\n />\n );\n })}\n </div>\n\n <div className=\"cal-find-suggestions\">\n <div className=\"cal-find-suggestions-label\">{labels.suggestionsLabel}</div>\n <div style={{ display: \"flex\", gap: 8, flexWrap: \"wrap\" }}>\n {suggestions.map((s) => (\n <SuggestedSlotCard\n key={s.id}\n label={s.label}\n meta={s.meta}\n best={s.best}\n onClick={() => s.range && onChangeRange?.(s.range)}\n />\n ))}\n </div>\n </div>\n </div>\n\n <footer className=\"cal-find-legend\">\n <div className=\"row gap-2\">\n <span className=\"cal-find-legend-swatch\" data-state=\"2\" /> {labels.legendBusy}\n </div>\n <div className=\"row gap-2\">\n <span className=\"cal-find-legend-swatch\" data-state=\"1\" /> {labels.legendTentative}\n </div>\n <div className=\"row gap-2\">\n <span className=\"cal-find-legend-swatch\" data-state=\"0\" /> {labels.legendFree}\n </div>\n <span className=\"ml-auto\">{labels.workingHours}</span>\n </footer>\n </div>\n );\n}\n","/**\n * Table Import / Export composite (canon ⑪).\n *\n * Two surfaces — both consumed alongside any `<Table>` primitive,\n * never as a Table prop (per cardinal rule 32 — not a redundant\n * prop on Table, but a separate composite). They share the\n * `.ie-card` atom set in `src/styles/shell/40-table.css`.\n *\n * - `TableImportFlow` — 4-step stepper (file → mapping → validate →\n * apply), file card with progress, per-row error preview.\n * - `TableExportDialog` — modal with format + range + columns\n * options + cancel / export footer.\n */\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\nimport { Dialog } from \"../../feedback/Dialog\";\nimport { Button } from \"../../general/Button\";\nimport { Radio, RadioGroup } from \"../../data-entry/Radio\";\nimport { Checkbox } from \"../../data-entry/Checkbox\";\n\n// ── Import flow ─────────────────────────────────────────────────────\n\nexport type TableImportStep =\n | \"file\"\n | \"mapping\"\n | \"validate\"\n | \"apply\";\n\nconst STEP_ORDER: TableImportStep[] = [\n \"file\",\n \"mapping\",\n \"validate\",\n \"apply\",\n];\n\nexport interface TableImportStepperLabels {\n file?: ReactNode;\n mapping?: ReactNode;\n validate?: ReactNode;\n apply?: ReactNode;\n}\n\nconst DEFAULT_STEP_LABELS: Required<TableImportStepperLabels> = {\n file: \"ファイル選択\",\n mapping: \"列マッピング\",\n validate: \"検証 / プレビュー\",\n apply: \"反映\",\n};\n\nexport interface TableImportFileInfo {\n /** Detected file name (display only). */\n name: string;\n /** Row count summary, e.g. `1,284 行`. */\n rowSummary?: ReactNode;\n /** Byte size summary, e.g. `132 KB`. */\n sizeSummary?: ReactNode;\n /** Detected encoding label (canon shows `SHIFT-JIS 検出`). */\n encodingLabel?: ReactNode;\n /** 0–1 progress fraction during validation. */\n progress?: number;\n /** Free-form left / right meta beneath the progress bar. */\n progressLeftLabel?: ReactNode;\n progressRightLabel?: ReactNode;\n /** Whether to show the success file icon (vs the error one). */\n status?: \"ok\" | \"error\";\n}\n\nexport interface TableImportErrorRow {\n line: ReactNode;\n message: ReactNode;\n value: ReactNode;\n severity?: \"error\" | \"warning\";\n}\n\nexport interface TableImportFlowProps {\n title?: ReactNode;\n /** Currently active step (one of the 4). */\n currentStep: TableImportStep;\n stepLabels?: TableImportStepperLabels;\n file?: TableImportFileInfo;\n errors?: TableImportErrorRow[];\n /** Renders the actions row at the bottom of the card. */\n actions?: ReactNode;\n className?: string;\n}\n\nexport function TableImportFlow({\n title,\n currentStep,\n stepLabels,\n file,\n errors,\n actions,\n className,\n}: TableImportFlowProps) {\n const labels = { ...DEFAULT_STEP_LABELS, ...stepLabels };\n const currentIndex = STEP_ORDER.indexOf(currentStep);\n return (\n <section className={cn(\"ie-card\", className)}>\n {title !== undefined && <h4>{title}</h4>}\n <ol className=\"ie-stepper\" aria-label=\"import-steps\">\n {STEP_ORDER.map((step, index) => {\n const state =\n index < currentIndex\n ? \"done\"\n : index === currentIndex\n ? \"on\"\n : undefined;\n return (\n <li\n key={step}\n className={cn(\"ie-step\", state)}\n aria-current={state === \"on\" ? \"step\" : undefined}\n >\n <span className=\"n\">\n {state === \"done\" ? \"✓\" : String(index + 1)}\n </span>\n <span>{labels[step]}</span>\n </li>\n );\n })}\n </ol>\n {file !== undefined && (\n <div className=\"ie-file-card\">\n <div className=\"ie-file-card-row\">\n <FileIcon status={file.status ?? \"ok\"} />\n <span className=\"name\">{file.name}</span>\n {(file.rowSummary !== undefined ||\n file.sizeSummary !== undefined) && (\n <span className=\"meta\">\n {file.rowSummary !== undefined && <>· {file.rowSummary} </>}\n {file.sizeSummary !== undefined && <>· {file.sizeSummary}</>}\n </span>\n )}\n {file.encodingLabel !== undefined && (\n <span className=\"tag\">{file.encodingLabel}</span>\n )}\n </div>\n {file.progress !== undefined && (\n <>\n <div className=\"ie-progress\">\n <i\n style={{\n width: `${Math.round(\n Math.min(Math.max(file.progress, 0), 1) * 100,\n )}%`,\n }}\n />\n </div>\n {(file.progressLeftLabel !== undefined ||\n file.progressRightLabel !== undefined) && (\n <div className=\"ie-progress-meta\">\n <span>{file.progressLeftLabel}</span>\n <span>{file.progressRightLabel}</span>\n </div>\n )}\n </>\n )}\n </div>\n )}\n {errors !== undefined && errors.length > 0 && (\n <table className=\"table ie-error-table\">\n <thead>\n <tr>\n <th style={{ height: 26 }}>行</th>\n <th style={{ height: 26 }}>エラー</th>\n <th style={{ height: 26 }}>値</th>\n </tr>\n </thead>\n <tbody>\n {errors.map((row, index) => (\n <tr\n key={index}\n className={\n row.severity === \"warning\" ? \"is-warning\" : \"is-error\"\n }\n >\n <td>\n <span className=\"c-mono\">{row.line}</span>\n </td>\n <td>{row.message}</td>\n <td>\n <span className=\"c-mono\">{row.value}</span>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n {actions !== undefined && <div className=\"actions-row\">{actions}</div>}\n </section>\n );\n}\n\nfunction FileIcon({ status }: { status: \"ok\" | \"error\" }) {\n const stroke = status === \"ok\" ? \"var(--success)\" : \"var(--destructive)\";\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={stroke}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n );\n}\n\n// ── Export dialog ───────────────────────────────────────────────────\n\nexport type TableExportFormat = \"csv-utf8\" | \"csv-shift-jis\" | \"xlsx\" | \"pdf\";\nexport type TableExportRange =\n | \"current-filter\"\n | \"selected\"\n | \"all\";\n\nexport interface TableExportDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n /** Selected output format. */\n format: TableExportFormat;\n onFormatChange: (format: TableExportFormat) => void;\n /** Selected scope. */\n range: TableExportRange;\n onRangeChange: (range: TableExportRange) => void;\n /** Whether to include hidden columns. */\n includeHiddenColumns: boolean;\n onIncludeHiddenColumnsChange: (next: boolean) => void;\n /** Counts shown next to the range options. */\n rangeCounts?: {\n currentFilter?: number;\n selected?: number;\n all?: number;\n };\n /** Counts shown next to the columns options. */\n columnCounts?: {\n visible?: number;\n total?: number;\n };\n /** Save callback. */\n onExport: () => void;\n /** Cancel callback. */\n onCancel?: () => void;\n exportLabel?: ReactNode;\n cancelLabel?: ReactNode;\n /** Optional copy overrides. */\n labels?: {\n format?: ReactNode;\n range?: ReactNode;\n columns?: ReactNode;\n csvUtf8?: ReactNode;\n csvShiftJis?: ReactNode;\n xlsx?: ReactNode;\n pdf?: ReactNode;\n currentFilter?: (count?: number) => ReactNode;\n selected?: (count?: number) => ReactNode;\n all?: (count?: number) => ReactNode;\n visibleOnly?: (count?: number) => ReactNode;\n includeHidden?: (count?: number) => ReactNode;\n };\n}\n\nconst DEFAULT_EXPORT_LABELS = {\n format: \"形式\",\n range: \"範囲\",\n columns: \"列\",\n csvUtf8: \"CSV (UTF-8 with BOM)\",\n csvShiftJis: \"CSV (SHIFT-JIS · Excel 互換)\",\n xlsx: \"Excel (.xlsx) · スタイル付き\",\n pdf: \"PDF レポート · 月次サマリー\",\n};\n\nexport function TableExportDialog({\n open,\n onOpenChange,\n title = \"エクスポート\",\n format,\n onFormatChange,\n range,\n onRangeChange,\n includeHiddenColumns,\n onIncludeHiddenColumnsChange,\n rangeCounts,\n columnCounts,\n onExport,\n onCancel,\n exportLabel = \"エクスポート\",\n cancelLabel = \"キャンセル\",\n labels,\n}: TableExportDialogProps) {\n const text = { ...DEFAULT_EXPORT_LABELS, ...labels };\n const currentFilterLabel =\n labels?.currentFilter?.(rangeCounts?.currentFilter) ??\n `現在の絞り込み (${(rangeCounts?.currentFilter ?? 0).toLocaleString()} 件)`;\n const selectedLabel =\n labels?.selected?.(rangeCounts?.selected) ??\n `選択中の ${(rangeCounts?.selected ?? 0).toLocaleString()} 件のみ`;\n const allLabel =\n labels?.all?.(rangeCounts?.all) ??\n `全件 (${(rangeCounts?.all ?? 0).toLocaleString()} 件)`;\n const visibleOnlyLabel =\n labels?.visibleOnly?.(columnCounts?.visible) ??\n `表示中の列のみ (${columnCounts?.visible ?? 0} 列)`;\n const includeHiddenLabel =\n labels?.includeHidden?.(columnCounts?.total) ??\n `隠している列も含む (全 ${columnCounts?.total ?? 0} 列)`;\n return (\n <Dialog\n open={open}\n onOpenChange={onOpenChange}\n title={title}\n footer={\n <>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={() => {\n onCancel?.();\n onOpenChange(false);\n }}\n >\n {cancelLabel}\n </Button>\n <Button size=\"small\" onClick={onExport}>\n {exportLabel}\n </Button>\n </>\n }\n >\n <div className=\"ie-card\" style={{ border: 0, padding: 0, gap: 12 }}>\n <div>\n <div className=\"section-title\">{text.format}</div>\n <RadioGroup\n orientation=\"vertical\"\n value={format}\n onValueChange={(next) => onFormatChange(next as TableExportFormat)}\n >\n <Radio value=\"csv-utf8\">{text.csvUtf8}</Radio>\n <Radio value=\"csv-shift-jis\">{text.csvShiftJis}</Radio>\n <Radio value=\"xlsx\">{text.xlsx}</Radio>\n <Radio value=\"pdf\">{text.pdf}</Radio>\n </RadioGroup>\n </div>\n <div className=\"section\">\n <div className=\"section-title\">{text.range}</div>\n <RadioGroup\n orientation=\"vertical\"\n value={range}\n onValueChange={(next) => onRangeChange(next as TableExportRange)}\n >\n <Radio value=\"current-filter\">{currentFilterLabel}</Radio>\n <Radio value=\"selected\">{selectedLabel}</Radio>\n <Radio value=\"all\">{allLabel}</Radio>\n </RadioGroup>\n </div>\n <div className=\"section\">\n <div className=\"section-title\">{text.columns}</div>\n <label>\n <Checkbox\n checked={!includeHiddenColumns}\n onCheckedChange={(checked) =>\n onIncludeHiddenColumnsChange(checked !== true)\n }\n >\n {visibleOnlyLabel}\n </Checkbox>\n </label>\n <label data-muted={includeHiddenColumns ? \"false\" : \"true\"}>\n <Checkbox\n checked={includeHiddenColumns}\n onCheckedChange={(checked) =>\n onIncludeHiddenColumnsChange(checked === true)\n }\n >\n {includeHiddenLabel}\n </Checkbox>\n </label>\n </div>\n </div>\n </Dialog>\n );\n}\n","/**\n * @godxjp/ui DataTable — chrome renderers.\n *\n * Stage 4b of the Table refactor (Plan §3). The view-tabs, toolbar,\n * batch-action band, and filter chip bar are all rendered here on\n * behalf of `<DataTable>`. The slim `<Table>` primitive renders\n * only the body of the table.\n *\n * These functions also remain importable by the primitive's\n * deprecated chrome rendering path so the back-compat surface stays\n * pixel-identical until v5.0.0 strips it.\n */\nimport { isValidElement, type ReactNode } from \"react\";\nimport { Search } from \"lucide-react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport { Badge } from \"../../data-display/Badge\";\nimport { Tag } from \"../../data-display/Tag\";\nimport type {\n TableBatchActions,\n TableBatchActionsConfig,\n TableBatchActionsContext,\n TableColumn,\n TableFilter,\n TableFilterBar,\n TableFilterItem,\n TableFilterOperator,\n TableFilterOption,\n TableToolbar,\n TableToolbarButtonConfig,\n TableToolbarConfig,\n TableViewItem,\n TableViews,\n TableViewsConfig,\n} from \"../../data-display/Table.types\";\nimport { Button } from \"../../general/Button\";\nimport { InputSearch } from \"../../data-entry/InputSearch\";\nimport { Select } from \"../../data-entry/Select\";\n\n// ── Type-guard helpers ──────────────────────────────────────────────\n\nexport function isTableToolbarConfig(\n value: TableToolbar | undefined,\n): value is TableToolbarConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n (\"search\" in value ||\n \"filter\" in value ||\n \"columns\" in value ||\n \"primaryAction\" in value ||\n \"actions\" in value)\n );\n}\n\nexport function isTableViewsConfig(\n value: TableViews | undefined,\n): value is TableViewsConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n \"items\" in value\n );\n}\n\nexport function isTableBatchActionsConfig<TData>(\n value: TableBatchActions<TData> | undefined,\n): value is TableBatchActionsConfig<TData> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n \"selectedRowKeys\" in value &&\n \"onSelectedRowKeysChange\" in value &&\n \"actions\" in value\n );\n}\n\nexport function isToolbarButtonConfig(\n value: ReactNode | TableToolbarButtonConfig,\n): value is TableToolbarButtonConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n (\"label\" in value || \"onClick\" in value || \"disabled\" in value)\n );\n}\n\nexport function isFilterItems(\n filterBar: TableFilterBar | undefined,\n): filterBar is TableFilterItem[] {\n return Array.isArray(filterBar);\n}\n\n// ── Rendering helpers ───────────────────────────────────────────────\n\nexport function renderTableViews(\n views: TableViewsConfig,\n items: TableViewItem[],\n applyView: (view: TableViewItem) => void,\n deleteView: (view: TableViewItem) => void,\n saveView: () => void,\n defaultSaveLabel: string,\n defaultDeleteLabel: string,\n) {\n return (\n <>\n {items.map((view) => (\n <span\n key={view.key}\n className={view.key === views.activeKey ? \"tab-wrap on\" : \"tab-wrap\"}\n >\n <button\n type=\"button\"\n className=\"tab\"\n disabled={view.disabled}\n onClick={() => applyView(view)}\n >\n {view.dotColor !== undefined && (\n <span\n className=\"dot\"\n style={{ background: view.dotColor }}\n aria-hidden\n />\n )}\n {view.label}\n {view.count !== undefined && (\n <span className=\"count\">{view.count}</span>\n )}\n </button>\n {view.deletable === true && (\n <button\n type=\"button\"\n className=\"tab-delete\"\n aria-label={`${views.deleteLabel ?? defaultDeleteLabel}: ${String(view.label)}`}\n disabled={view.disabled}\n onClick={(event) => {\n event.stopPropagation();\n deleteView(view);\n }}\n >\n ×\n </button>\n )}\n </span>\n ))}\n <span className=\"spacer\" />\n {views.saveable !== false && (\n <button type=\"button\" className=\"tab add\" onClick={saveView}>\n {views.saveLabel ?? defaultSaveLabel}\n </button>\n )}\n </>\n );\n}\n\nexport function renderToolbarPrimaryAction(\n primaryAction: TableToolbarConfig[\"primaryAction\"],\n defaultLabel: string,\n) {\n if (primaryAction === undefined || primaryAction === false) return null;\n if (!isToolbarButtonConfig(primaryAction)) return primaryAction;\n return (\n <Button\n className=\"tbl-primary-action\"\n size=\"small\"\n onClick={primaryAction.onClick}\n disabled={primaryAction.disabled}\n >\n {primaryAction.label ?? defaultLabel}\n </Button>\n );\n}\n\nexport function renderTableToolbar(\n toolbar: TableToolbar | undefined,\n t: (key: string, options?: Record<string, unknown>) => string,\n onColumnSettingsClick: () => void,\n) {\n if (toolbar === undefined || toolbar === false) return null;\n if (!isTableToolbarConfig(toolbar)) return toolbar;\n\n return (\n <>\n {toolbar.search !== undefined && toolbar.search !== false && (\n <InputSearch\n ref={toolbar.search.inputRef}\n aria-label={toolbar.search.ariaLabel ?? t(\"common.search\")}\n className=\"tbl-search-input\"\n size=\"small\"\n placeholder={\n toolbar.search.placeholder ?? t(\"table.searchPlaceholder\")\n }\n value={toolbar.search.value}\n disabled={toolbar.search.disabled}\n onChange={(event) =>\n toolbar.search !== false &&\n toolbar.search?.onValueChange(event.target.value)\n }\n onSearch={toolbar.search.onSearch}\n onClear={() => {\n if (toolbar.search === false) return;\n toolbar.search?.onValueChange(\"\");\n toolbar.search?.onSearch?.(\"\");\n toolbar.search?.onClear?.();\n }}\n suffix={toolbar.search.suffix}\n />\n )}\n {toolbar.search !== undefined && toolbar.search !== false && (\n <Button\n className=\"tbl-search-action\"\n size=\"small\"\n variant=\"primary\"\n aria-label={t(\"common.search\")}\n disabled={toolbar.search.disabled}\n startContent={<Search aria-hidden=\"true\" focusable=\"false\" />}\n onClick={() =>\n toolbar.search !== false &&\n toolbar.search?.onSearch?.(toolbar.search.value)\n }\n >\n <span className=\"tbl-search-action-label\">{t(\"common.search\")}</span>\n </Button>\n )}\n {toolbar.filter !== undefined && toolbar.filter !== false && (\n <Button\n className=\"tbl-filter-action\"\n size=\"small\"\n variant=\"outline\"\n disabled={toolbar.filter.disabled}\n onClick={toolbar.filter.onClick}\n >\n {toolbar.filter.label ?? t(\"table.detailFilter\")}\n {toolbar.filter.count !== undefined && toolbar.filter.count > 0 && (\n <>\n {\" \"}\n <Badge variant=\"primary\" dot={false}>\n {toolbar.filter.count}\n </Badge>\n </>\n )}\n </Button>\n )}\n <span className=\"spacer\" />\n <span className=\"tbl-extra-actions\">\n {toolbar.columns !== undefined && toolbar.columns !== false && (\n <Button\n className=\"tbl-column-action\"\n size=\"small\"\n variant=\"outline\"\n disabled={toolbar.columns.disabled}\n onClick={toolbar.columns.onClick ?? onColumnSettingsClick}\n >\n {toolbar.columns.label ?? t(\"table.columnSettings\")}\n </Button>\n )}\n {renderToolbarPrimaryAction(\n toolbar.primaryAction,\n t(\"table.newRecord\"),\n )}\n {toolbar.actions}\n </span>\n </>\n );\n}\n\n// ── Filter helpers ──────────────────────────────────────────────────\n\nexport function operatorSymbol(operator: TableFilterOperator | undefined): string {\n switch (operator) {\n case \"neq\": return \"≠\";\n case \"contains\": return \"∋\";\n case \"startsWith\": return \"≻\";\n case \"endsWith\": return \"≺\";\n case \"gt\": return \">\";\n case \"gte\": return \"≥\";\n case \"lt\": return \"<\";\n case \"lte\": return \"≤\";\n case \"between\": return \"..\";\n case \"in\": return \"∈\";\n case \"eq\":\n case undefined:\n default:\n return \"=\";\n }\n}\n\nexport function renderFilterBar(filterBar: TableFilterBar, label: string) {\n if (!isFilterItems(filterBar)) return filterBar;\n return (\n <>\n <span className=\"lbl\">{label}:</span>\n {filterBar.map((item) => {\n if (item.options !== undefined) {\n return (\n <span key={item.key} className=\"table-filter-select-wrap\">\n <Select\n value={item.value ?? \"\"}\n onValueChange={item.onValueChange}\n options={item.options.map((option) => ({\n ...option,\n label: `${item.label}: ${option.label}`,\n }))}\n triggerClassName=\"table-filter-select\"\n />\n {item.onClose !== undefined && (\n <button\n type=\"button\"\n className=\"table-filter-clear\"\n onClick={item.onClose}\n aria-label={`${item.label} clear`}\n >\n ×\n </button>\n )}\n </span>\n );\n }\n return (\n <Tag\n key={item.key}\n color={item.color ?? \"primary\"}\n closable={item.closable ?? item.onClose !== undefined}\n onClose={item.onClose}\n >\n {item.label} {operatorSymbol(item.operator)}{\" \"}\n {item.valueLabel ?? item.value}\n </Tag>\n );\n })}\n </>\n );\n}\n\nfunction getColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nexport function labelForColumn<TData>(\n column: TableColumn<TData, unknown>,\n key: string,\n): ReactNode {\n if (column.meta?.filterLabel !== undefined) return column.meta.filterLabel;\n if (typeof column.header === \"string\") return column.header;\n return key;\n}\n\nexport function valueLabelFor(\n optionList: TableFilterOption[] | undefined,\n value: TableFilter[\"value\"],\n) {\n const option = optionList?.find((item) => item.value === String(value));\n return option?.label ?? value;\n}\n\nexport function deriveFilterBar<TData>(\n columns: TableColumn<TData, unknown>[],\n filters: TableFilter[] | undefined,\n onFiltersChange: ((filters: TableFilter[]) => void) | undefined,\n): TableFilterItem[] {\n if (filters === undefined || filters.length === 0) return [];\n return filters.flatMap((filter) => {\n const column = columns.find((item) => getColumnKey(item) === filter.key);\n if (column !== undefined && column.meta?.filterable !== true) return [];\n const options = column?.meta?.filterOptions;\n return [\n {\n key: filter.key,\n label: column ? labelForColumn(column, filter.key) : filter.key,\n value: filter.value == null ? undefined : String(filter.value),\n valueLabel: filter.valueLabel ?? valueLabelFor(options, filter.value),\n operator: filter.operator,\n options,\n onValueChange:\n options !== undefined && onFiltersChange !== undefined\n ? (value: string) =>\n onFiltersChange(\n filters.map((item) =>\n item.key === filter.key\n ? {\n ...item,\n value,\n valueLabel: valueLabelFor(options, value),\n }\n : item,\n ),\n )\n : undefined,\n closable: onFiltersChange !== undefined,\n onClose:\n onFiltersChange !== undefined\n ? () =>\n onFiltersChange(\n filters.filter((item) => item.key !== filter.key),\n )\n : undefined,\n },\n ];\n });\n}\n\n// ── Chrome sub-components ───────────────────────────────────────────\n\ninterface ViewTabsProps {\n config: TableViewsConfig;\n items: TableViewItem[];\n applyView: (view: TableViewItem) => void;\n deleteView: (view: TableViewItem) => void;\n saveView: () => void;\n defaultSaveLabel: string;\n defaultDeleteLabel: string;\n}\n\nexport function ViewTabs(props: ViewTabsProps) {\n return (\n <div className=\"tbl-views\">\n {renderTableViews(\n props.config,\n props.items,\n props.applyView,\n props.deleteView,\n props.saveView,\n props.defaultSaveLabel,\n props.defaultDeleteLabel,\n )}\n </div>\n );\n}\n\ninterface ToolbarBarProps {\n toolbar: TableToolbar;\n t: (key: string, options?: Record<string, unknown>) => string;\n onOpenColumns: () => void;\n}\n\nexport function ToolbarBar(props: ToolbarBarProps) {\n const content = renderTableToolbar(props.toolbar, props.t, props.onOpenColumns);\n if (content === null) return null;\n return <div className=\"table-toolbar\">{content}</div>;\n}\n\ninterface BatchActionBandProps<TData> {\n batchConfig: TableBatchActionsConfig<TData>;\n selectableRows: Row<TData>[];\n selectedRows: Row<TData>[];\n allVisibleSelected: boolean;\n selectAllVisible: () => void;\n clearSelection: () => void;\n t: (key: string, options?: Record<string, unknown>) => string;\n}\n\nexport function BatchActionBand<TData>(props: BatchActionBandProps<TData>) {\n const {\n batchConfig,\n selectableRows,\n selectedRows,\n allVisibleSelected,\n selectAllVisible,\n clearSelection,\n t,\n } = props;\n if (batchConfig.selectedRowKeys.length === 0) return null;\n const context: TableBatchActionsContext<TData> = {\n selectedRowKeys: batchConfig.selectedRowKeys,\n selectedRows,\n totalSelectableCount: selectableRows.length,\n selectAllVisible,\n clearSelection,\n };\n const actions =\n typeof batchConfig.actions === \"function\"\n ? batchConfig.actions(context)\n : batchConfig.actions;\n return (\n <div className=\"tbl-batch-bar\">\n <span className=\"count\">\n {batchConfig.selectedLabel?.(batchConfig.selectedRowKeys.length) ??\n t(\"table.selectedRows\", {\n count: batchConfig.selectedRowKeys.length,\n })}\n </span>\n {!allVisibleSelected && selectableRows.length > 0 && (\n <Button size=\"small\" variant=\"ghost\" onClick={selectAllVisible}>\n {batchConfig.selectAllLabel?.(selectableRows.length) ??\n t(\"table.selectAllVisible\", { count: selectableRows.length })}\n </Button>\n )}\n {actions}\n <span className=\"spacer\" />\n <Button size=\"small\" variant=\"ghost\" onClick={clearSelection}>\n {batchConfig.clearLabel ?? t(\"table.clearSelection\")}\n </Button>\n </div>\n );\n}\n\ninterface FilterChipBarProps {\n items: TableFilterBar;\n label: string;\n onResetFilters?: () => void;\n resetLabel: string;\n}\n\nexport function FilterChipBar(props: FilterChipBarProps) {\n const { items, label, onResetFilters, resetLabel } = props;\n if (items === undefined) return null;\n if (isFilterItems(items) && items.length === 0) return null;\n return (\n <div className=\"tbl-filter-bar\">\n {renderFilterBar(items, label)}\n {onResetFilters !== undefined && (\n <Button size=\"x-small\" variant=\"ghost\" onClick={onResetFilters}>\n {resetLabel}\n </Button>\n )}\n </div>\n );\n}\n","/**\n * @godxjp/ui DataTable — column manager Sheet.\n *\n * Stage 4b of the Table refactor (Plan §3). Lives on the composite\n * side. Reads + writes column visibility + pinning through the\n * provided TanStack `table` instance.\n */\nimport { Lock, LockOpen } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport type {\n Column,\n ColumnPinningState,\n Table as ReactTable,\n} from \"@tanstack/react-table\";\nimport { Button } from \"../../general/Button\";\nimport { Checkbox } from \"../../data-entry/Checkbox\";\nimport { Sheet } from \"../../feedback/Sheet\";\nimport type { TableColumn } from \"../../data-display/Table.types\";\n\nfunction getColumnKeyFromDef<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction getColumnSettingsLabel<TData>(column: Column<TData, unknown>) {\n const meta = column.columnDef.meta;\n if (meta?.filterLabel !== undefined) return meta.filterLabel;\n if (typeof column.columnDef.header === \"string\") return column.columnDef.header;\n return column.id;\n}\n\ninterface ColumnManagerSheetProps<TData> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n table: ReactTable<TData>;\n autoColumnPinning: ColumnPinningState;\n columnPinning: ColumnPinningState;\n onColumnPinningChange: (pinning: ColumnPinningState) => void;\n}\n\nexport function ColumnManagerSheet<TData>(props: ColumnManagerSheetProps<TData>) {\n const { open, onOpenChange, table, autoColumnPinning, columnPinning, onColumnPinningChange } = props;\n const { t } = useTranslation();\n const columnSettingsColumns = table\n .getAllLeafColumns()\n .filter(\n (column) =>\n getColumnKeyFromDef(column.columnDef) !== undefined &&\n column.columnDef.meta?.hideable !== false &&\n column.getCanHide(),\n );\n\n return (\n <Sheet\n open={open}\n onOpenChange={onOpenChange}\n className=\"table-filter-sheet\"\n side=\"right\"\n title={t(\"table.columnSettings\")}\n description={t(\"table.columnSettingsDescription\")}\n footer={\n <>\n <Button\n size=\"small\"\n variant=\"ghost\"\n onClick={() => table.setColumnVisibility({})}\n >\n {t(\"table.showAllColumns\")}\n </Button>\n <Button size=\"small\" onClick={() => onOpenChange(false)}>\n {t(\"table.closeColumnSettings\")}\n </Button>\n </>\n }\n >\n <div className=\"table-filter-field-list\">\n {columnSettingsColumns.map((column) => {\n const pinned = column.getIsPinned();\n const isAutoPinned =\n (autoColumnPinning.left ?? []).includes(column.id) ||\n (autoColumnPinning.right ?? []).includes(column.id);\n return (\n <section key={column.id} className=\"table-column-field\">\n <Checkbox\n checked={column.getIsVisible()}\n disabled={pinned !== false}\n onCheckedChange={(checked) =>\n column.toggleVisibility(checked === true)\n }\n >\n {getColumnSettingsLabel(column)}\n </Checkbox>\n <button\n type=\"button\"\n className=\"col-lock\"\n aria-label={\n pinned === false\n ? t(\"table.lockColumn\")\n : t(\"table.unlockColumn\")\n }\n aria-pressed={pinned !== false}\n data-locked={pinned !== false ? \"true\" : \"false\"}\n disabled={isAutoPinned}\n onClick={() => {\n const next: ColumnPinningState = {\n left: [...(columnPinning.left ?? [])],\n right: [...(columnPinning.right ?? [])],\n };\n next.left = (next.left ?? []).filter(\n (id) => id !== column.id,\n );\n next.right = (next.right ?? []).filter(\n (id) => id !== column.id,\n );\n if (pinned === false) {\n next.left = [...(next.left ?? []), column.id];\n if (!column.getIsVisible()) column.toggleVisibility(true);\n }\n onColumnPinningChange(next);\n }}\n >\n {pinned === false ? (\n <LockOpen aria-hidden=\"true\" focusable=\"false\" />\n ) : (\n <Lock aria-hidden=\"true\" focusable=\"false\" />\n )}\n </button>\n </section>\n );\n })}\n </div>\n </Sheet>\n );\n}\n","/**\n * @godxjp/ui DataTable — pagination band.\n *\n * Stage 4b of the Table refactor (Plan §3). Owns the numbered /\n * load-more / cursor pagination rendering for the composite. The\n * slim `<Table>` primitive no longer renders pagination.\n */\nimport { isValidElement, type ReactNode } from \"react\";\nimport { Pagination } from \"../../navigation/Pagination\";\nimport { Button } from \"../../general/Button\";\nimport type {\n TablePagination,\n TablePaginationCursorConfig,\n TablePaginationLoadMoreConfig,\n TablePaginationNumberedConfig,\n TablePaginationVariantConfig,\n} from \"../../data-display/Table.types\";\n\nexport function isTablePaginationVariantConfig(\n value: TablePagination | undefined,\n): value is TablePaginationVariantConfig {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n isValidElement(value)\n )\n return false;\n const candidate = value as { type?: string };\n if (candidate.type === \"load-more\" || candidate.type === \"cursor\")\n return true;\n return \"total\" in value && \"current\" in value && \"pageSize\" in value;\n}\n\nexport function isNumberedPaginationConfig(\n value: TablePaginationVariantConfig,\n): value is TablePaginationNumberedConfig {\n return value.type === undefined || value.type === \"numbered\";\n}\n\ninterface PaginationRendered {\n variant: TablePaginationVariantConfig[\"type\"];\n node: ReactNode;\n}\n\nexport function renderTablePagination(\n pagination: TablePagination | undefined,\n t: (key: string, options?: Record<string, unknown>) => string,\n): PaginationRendered | null {\n if (pagination === undefined || pagination === false) return null;\n if (!isTablePaginationVariantConfig(pagination))\n return { variant: undefined, node: pagination as ReactNode };\n if (pagination.type === \"load-more\")\n return { variant: \"load-more\", node: renderLoadMore(pagination, t) };\n if (pagination.type === \"cursor\")\n return { variant: \"cursor\", node: renderCursor(pagination, t) };\n const config = pagination;\n return {\n variant: \"numbered\",\n node: (\n <Pagination\n variant=\"embedded\"\n showFirstLast\n total={config.total}\n pageSize={config.pageSize}\n value={config.current}\n onValueChange={(page) => config.onChange?.(page, config.pageSize)}\n onPageSizeChange={(size) => config.onChange?.(1, size)}\n pageSizeOptions={config.pageSizeOptions}\n showSizeChanger={config.showSizeChanger}\n showTotal={\n config.showTotal !== undefined ? config.showTotal : true\n }\n hideOnSinglePage={config.hideOnSinglePage}\n disabled={config.disabled}\n />\n ),\n };\n}\n\nexport function renderLoadMore(\n config: TablePaginationLoadMoreConfig,\n t: (key: string, options?: Record<string, unknown>) => string,\n): ReactNode {\n const remaining = Math.max(config.total - config.currentCount, 0);\n const batch =\n config.batchSize !== undefined\n ? Math.min(config.batchSize, remaining)\n : remaining;\n const defaultLabel = t(\"table.loadMore\", { count: batch });\n return (\n <div className=\"tbl-load-more\">\n <Button\n size=\"small\"\n variant=\"outline\"\n disabled={!config.hasMore || config.loadingMore === true}\n onClick={config.onLoadMore}\n >\n {config.loadMoreLabel ?? defaultLabel}\n </Button>\n <div className=\"tbl-load-more-progress\">\n {config.progressLabel?.(config.currentCount, config.total) ??\n t(\"table.loadMoreProgress\", {\n current: config.currentCount,\n total: config.total,\n })}\n </div>\n </div>\n );\n}\n\nexport function renderCursor(\n config: TablePaginationCursorConfig,\n t: (key: string, options?: Record<string, unknown>) => string,\n): ReactNode {\n const inputType = config.inputType ?? \"month\";\n return (\n <>\n <Button\n size=\"x-small\"\n variant=\"ghost\"\n disabled={config.disabled}\n onClick={config.onJumpToLatest}\n >\n {config.jumpToLatestLabel ?? t(\"table.jumpToLatest\")}\n </Button>\n <Button\n size=\"x-small\"\n variant=\"outline\"\n disabled={config.disabled}\n onClick={config.onPrev}\n >\n {config.prevLabel ?? t(\"table.previousPeriod\")}\n </Button>\n <span className=\"spacer\" />\n <div className=\"label\">{config.label}</div>\n <span className=\"spacer\" />\n <input\n type={inputType}\n value={config.value}\n disabled={config.disabled}\n aria-label={t(\"table.jumpToPeriod\")}\n onChange={(event) => config.onChange(event.target.value)}\n />\n <Button\n size=\"x-small\"\n variant=\"outline\"\n disabled={config.disabled}\n onClick={config.onNext}\n >\n {config.nextLabel ?? t(\"table.nextPeriod\")}\n </Button>\n </>\n );\n}\n\ninterface DataTablePaginationBandProps {\n config: TablePagination;\n t: (key: string, options?: Record<string, unknown>) => string;\n}\n\nexport function DataTablePaginationBand(props: DataTablePaginationBandProps) {\n const rendered = renderTablePagination(props.config, props.t);\n if (rendered === null) return null;\n if (rendered.variant === \"numbered\") {\n // <Pagination variant=\"embedded\"> owns its <nav> wrapper.\n return <>{rendered.node}</>;\n }\n return (\n <div\n className={rendered.variant === \"load-more\" ? undefined : \"tbl-pagination\"}\n data-variant={rendered.variant}\n >\n {rendered.node}\n </div>\n );\n}\n","/**\n * @godxjp/ui DataTable — save view Dialog.\n *\n * Stage 4b of the Table refactor (Plan §3). Lives on the composite\n * side. Surfaces a duplicate-warning Alert when the snapshot matches\n * an existing view.\n */\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert } from \"../../feedback/Alert\";\nimport { Button } from \"../../general/Button\";\nimport { Dialog } from \"../../feedback/Dialog\";\nimport { Input } from \"../../data-entry/Input\";\nimport type { TableViewItem } from \"../../data-display/Table.types\";\n\ninterface SaveViewDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n defaultName: string;\n duplicateView: TableViewItem | undefined;\n onConfirm: (label: string) => void;\n}\n\nexport function SaveViewDialog(props: SaveViewDialogProps) {\n const { open, onOpenChange, defaultName, duplicateView, onConfirm } = props;\n const { t } = useTranslation();\n const [viewName, setViewName] = useState(defaultName);\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setViewName(defaultName);\n onOpenChange(next);\n }}\n title={t(\"table.saveViewTitle\")}\n description={t(\"table.saveViewDescription\")}\n form={{\n onSubmit: (event) => {\n event.preventDefault();\n const label = viewName.trim();\n if (label === \"\") return;\n onConfirm(label);\n },\n }}\n footer={\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"small\"\n onClick={() => onOpenChange(false)}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button type=\"submit\" size=\"small\" disabled={viewName.trim() === \"\"}>\n {duplicateView === undefined\n ? t(\"common.save\")\n : t(\"table.continueSaveView\")}\n </Button>\n </>\n }\n >\n <div style={{ display: \"grid\", gap: \"var(--spacing-3)\" }}>\n <Input\n autoFocus\n aria-label={t(\"table.viewName\")}\n value={viewName}\n onChange={(event) => setViewName(event.target.value)}\n placeholder={t(\"table.viewNamePlaceholder\")}\n />\n {duplicateView !== undefined && (\n <Alert\n color=\"warning\"\n title={t(\"table.duplicateViewTitle\", {\n name: String(duplicateView.label),\n })}\n description={t(\"table.duplicateViewDescription\")}\n />\n )}\n </div>\n </Dialog>\n );\n}\n","/**\n * @godxjp/ui DataTable — packaged-table composite.\n *\n * Stage 4b of the Table refactor (Plan §3). Renders the chrome\n * (views, toolbar, filter chips, batch action band, pagination,\n * column manager Sheet, save-view Dialog) around the slim\n * `<Table>` primitive. The TanStack instance is built by\n * `useDataTable` and passed in via the `instance` prop so primitive\n * and composite share state.\n */\nimport { useMemo, useState, type ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../../cn\";\nimport {\n Table,\n type TableToolbarConfig,\n type TableViewItem,\n} from \"../../data-display/Table\";\nimport { Button } from \"../../general/Button\";\nimport { Empty } from \"../../data-display/Empty\";\nimport {\n BatchActionBand,\n FilterChipBar,\n ToolbarBar,\n ViewTabs,\n deriveFilterBar,\n isFilterItems,\n isTableBatchActionsConfig,\n isTableViewsConfig,\n} from \"./DataTableChrome\";\nimport { ColumnManagerSheet } from \"./ColumnManagerSheet\";\nimport { DataTablePaginationBand } from \"./DataTablePaginationBand\";\nimport { SaveViewDialog } from \"./SaveViewDialog\";\nimport type {\n DataTableProps,\n DataTableSlots,\n} from \"./DataTable.types\";\nimport type { DataTableInstance } from \"./useDataTable\";\n\nexport type { DataTableProps, DataTableSlots } from \"./DataTable.types\";\n\nfunction applySlots<TData>(\n instance: DataTableInstance<TData>,\n slots: DataTableSlots | undefined,\n): DataTableInstance<TData>[\"chromeProps\"][\"toolbar\"] {\n const toolbar = instance.chromeProps.toolbar;\n if (slots?.toolbar !== undefined) return slots.toolbar;\n if (\n toolbar === undefined ||\n toolbar === false ||\n typeof toolbar !== \"object\" ||\n toolbar === null ||\n Array.isArray(toolbar) ||\n \"props\" in (toolbar as object)\n )\n return toolbar;\n if (slots?.primaryAction === undefined && slots?.toolbarActions === undefined)\n return toolbar;\n // After the guards above, toolbar is a TableToolbarConfig object.\n const config = toolbar as TableToolbarConfig;\n return {\n ...config,\n primaryAction: slots?.primaryAction ?? config.primaryAction,\n actions: slots?.toolbarActions ?? config.actions,\n };\n}\n\nexport function DataTable<TData>({\n table,\n slots,\n className,\n containerClassName,\n}: DataTableProps<TData>) {\n const { t } = useTranslation();\n const [columnSettingsOpen, setColumnSettingsOpen] = useState(false);\n const [saveViewOpen, setSaveViewOpen] = useState(false);\n\n const tableProps = table.tableProps;\n const chrome = table.chromeProps;\n const instance = table.instance;\n const views = table.views;\n\n const toolbar = applySlots(table, slots);\n const viewsConfig = isTableViewsConfig(chrome.views) ? chrome.views : undefined;\n const viewsContent = chrome.views;\n const viewItems = useMemo<TableViewItem[]>(\n () =>\n viewsConfig === undefined\n ? []\n : [...viewsConfig.items],\n [viewsConfig],\n );\n\n // ── Batch action band wiring (composite-owned) ──────────────────\n const batchConfig = isTableBatchActionsConfig<TData>(chrome.batchActions)\n ? chrome.batchActions\n : undefined;\n const selectedRowKeySet = new Set(batchConfig?.selectedRowKeys ?? []);\n const rows = instance.getRowModel().rows;\n const selectableRows = rows.filter(\n (row) => batchConfig?.getCheckboxDisabled?.(row) !== true,\n );\n const selectedRows = rows.filter((row) => selectedRowKeySet.has(row.id));\n const allVisibleSelected =\n selectableRows.length > 0 &&\n selectableRows.every((row) => selectedRowKeySet.has(row.id));\n const selectAllVisible = () => {\n if (batchConfig === undefined) return;\n const next = new Set(batchConfig.selectedRowKeys);\n if (allVisibleSelected)\n selectableRows.forEach((row) => next.delete(row.id));\n else selectableRows.forEach((row) => next.add(row.id));\n batchConfig.onSelectedRowKeysChange(Array.from(next));\n };\n const clearSelection = () => batchConfig?.onSelectedRowKeysChange([]);\n\n // ── Filter chip bar (auto-derived or custom) ────────────────────\n const activeFilterBar =\n chrome.filterBar ??\n deriveFilterBar(tableProps.columns, chrome.filters, chrome.onFiltersChange);\n const hasFilterBar =\n activeFilterBar !== undefined &&\n (!isFilterItems(activeFilterBar) || activeFilterBar.length > 0);\n\n // ── Save-view callbacks ─────────────────────────────────────────\n const applyView = (view: TableViewItem) => {\n viewsConfig?.onActiveKeyChange?.(view.key);\n viewsConfig?.onViewApply?.(view);\n };\n const deleteView = (view: TableViewItem) => {\n if (chrome.savedViews.some((item) => item.key === view.key)) {\n chrome.setSavedViews(\n chrome.savedViews.filter((item) => item.key !== view.key),\n );\n if (\n viewsConfig?.activeKey === view.key &&\n viewsConfig.items[0] !== undefined\n )\n applyView(viewsConfig.items[0]);\n return;\n }\n viewsConfig?.onDeleteView?.(view);\n };\n const openSaveView = () => {\n if (viewsConfig?.onSaveCurrent !== undefined) {\n viewsConfig.onSaveCurrent();\n return;\n }\n setSaveViewOpen(true);\n };\n const confirmSaveView = (label: string) => {\n const nextView: TableViewItem = {\n key: `saved-${Date.now()}`,\n label,\n deletable: true,\n ...chrome.currentViewSnapshot,\n };\n chrome.setSavedViews([...chrome.savedViews, nextView]);\n viewsConfig?.onActiveKeyChange?.(nextView.key);\n setSaveViewOpen(false);\n };\n\n // ── Toolbar config: detect columns button to open Sheet ─────────\n const hasColumnsButton =\n typeof toolbar === \"object\" &&\n toolbar !== null &&\n !Array.isArray(toolbar) &&\n \"columns\" in toolbar &&\n toolbar.columns !== undefined &&\n toolbar.columns !== false &&\n toolbar.columns.onClick === undefined;\n\n // ── Empty state with reset-filters action ───────────────────────\n const emptyContent: ReactNode =\n slots?.emptyState ??\n tableProps.empty ??\n (\n <Empty description={t(\"table.emptyDescription\")}>\n {hasFilterBar && chrome.onResetFilters !== undefined && (\n <Button size=\"small\" variant=\"outline\" onClick={chrome.onResetFilters}>\n {t(\"table.resetFilters\")}\n </Button>\n )}\n </Empty>\n );\n\n // ── Build selection prop to forward to <Table> (for checkbox column) ──\n // The primitive needs the selection state to render the checkbox\n // column; the chrome batch-action band is rendered here separately.\n const selectionForPrimitive =\n batchConfig !== undefined\n ? {\n selectedRowKeys: batchConfig.selectedRowKeys,\n onSelectedRowKeysChange: batchConfig.onSelectedRowKeysChange,\n getCheckboxDisabled: batchConfig.getCheckboxDisabled,\n }\n : undefined;\n\n // touch the unused-locally-derived `views` so lint stays calm.\n void views;\n void viewItems;\n\n return (\n <div\n className={cn(\"table-stack\", containerClassName, tableProps.containerClassName)}\n data-density={tableProps.density}\n >\n {viewsConfig !== undefined && (\n <ViewTabs\n config={viewsConfig}\n items={[...viewsConfig.items, ...chrome.savedViews]}\n applyView={applyView}\n deleteView={deleteView}\n saveView={openSaveView}\n defaultSaveLabel={t(\"table.saveView\")}\n defaultDeleteLabel={t(\"table.deleteView\")}\n />\n )}\n {viewsContent !== undefined && viewsConfig === undefined && viewsContent !== false && (\n <div className=\"tbl-views\">{viewsContent as ReactNode}</div>\n )}\n {toolbar !== undefined && toolbar !== false && (\n <ToolbarBar\n toolbar={toolbar}\n t={t}\n onOpenColumns={() => setColumnSettingsOpen(true)}\n />\n )}\n {batchConfig !== undefined && (\n <BatchActionBand\n batchConfig={batchConfig}\n selectableRows={selectableRows}\n selectedRows={selectedRows}\n allVisibleSelected={allVisibleSelected}\n selectAllVisible={selectAllVisible}\n clearSelection={clearSelection}\n t={t}\n />\n )}\n {hasFilterBar && (\n <FilterChipBar\n items={activeFilterBar}\n label={t(\"table.conditions\")}\n onResetFilters={chrome.onResetFilters}\n resetLabel={t(\"table.resetFilters\")}\n />\n )}\n <Table\n {...tableProps}\n instance={instance}\n selection={selectionForPrimitive}\n className={cn(tableProps.className, className)}\n empty={emptyContent}\n footer={slots?.footer ?? tableProps.footer}\n />\n {chrome.pagination !== undefined && (\n <DataTablePaginationBand config={chrome.pagination} t={t} />\n )}\n {hasColumnsButton && columnSettingsOpen && (\n <ColumnManagerSheet\n open={columnSettingsOpen}\n onOpenChange={setColumnSettingsOpen}\n table={instance}\n autoColumnPinning={chrome.autoColumnPinning}\n columnPinning={chrome.columnPinning}\n onColumnPinningChange={chrome.setColumnPinning}\n />\n )}\n {viewsConfig !== undefined &&\n viewsConfig.onSaveCurrent === undefined &&\n saveViewOpen && (\n <SaveViewDialog\n open={saveViewOpen}\n onOpenChange={setSaveViewOpen}\n defaultName={chrome.saveViewDefaultName(1)}\n duplicateView={chrome.duplicateView}\n onConfirm={confirmSaveView}\n />\n )}\n </div>\n );\n}\n","/**\n * @godxjp/ui DataTable — localStorage persistence helpers.\n *\n * Moved out of `data-display/Table.persistence.ts` in Stage 4b\n * (Plan §3). The `<DataTable>` composite owns persistence; the slim\n * `<Table>` primitive no longer reads or writes localStorage.\n *\n * Industry standard. Modern table libraries (TanStack, Material\n * React Table, Mantine React Table) recommend persistence as\n * consumer code via `useState` + `on[StateName]Change` callbacks\n * rather than a built-in primitive feature. The same pattern is\n * available via the `useTableState` hook (see\n * `docs/reference/hooks/useTableState.md`) — that's the preferred\n * surface for new consumers.\n */\nimport type { ColumnPinningState } from \"@tanstack/react-table\";\nimport type {\n TableColumn,\n TableColumnVisibility,\n TableFilter,\n TableSort,\n TableViewItem,\n} from \"../../data-display/Table.types\";\n\nexport const MAX_PERSISTED_TABLE_VIEWS = 20;\n\nexport function getTableColumnVisibilityStorageKey(tableKey: string): string {\n return `godxui:table:${tableKey}:columnVisibility`;\n}\n\nexport function getTableColumnPinningStorageKey(tableKey: string): string {\n return `godxui:table:${tableKey}:columnPinning`;\n}\n\nexport function getTableViewsStorageKey(tableKey: string): string {\n return `godxui:table:${tableKey}:views`;\n}\n\ninterface PersistedColumnVisibility {\n version: 1;\n columnKeys: string[];\n visibility: TableColumnVisibility;\n}\n\ninterface PersistedColumnPinning {\n version: 2;\n columnKeys: string[];\n pinning: { left: string[]; right: string[] };\n}\n\ninterface PersistedTableView {\n key: string;\n label: string;\n filters?: TableFilter[];\n sort?: TableSort | null;\n columnVisibility?: TableColumnVisibility;\n}\n\ninterface PersistedTableViews {\n version: 1;\n columnKeys: string[];\n views: PersistedTableView[];\n}\n\nfunction isColumnVisibility(\n value: unknown,\n): value is TableColumnVisibility {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.values(value).every((item) => typeof item === \"boolean\")\n );\n}\n\nfunction localGetColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction getColumnKeys<TData>(\n columns: TableColumn<TData, unknown>[],\n): string[] {\n return columns\n .map((column) => localGetColumnKey(column))\n .filter((key): key is string => key !== undefined)\n .sort();\n}\n\nfunction hasSameColumnKeys(left: string[], right: string[]): boolean {\n return (\n left.length === right.length &&\n left.every((key, index) => key === right[index])\n );\n}\n\nfunction isPersistedColumnVisibility(\n value: unknown,\n): value is PersistedColumnVisibility {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return false;\n const candidate = value as {\n version?: unknown;\n columnKeys?: unknown;\n visibility?: unknown;\n };\n return (\n candidate.version === 1 &&\n Array.isArray(candidate.columnKeys) &&\n candidate.columnKeys.every((item) => typeof item === \"string\") &&\n isColumnVisibility(candidate.visibility)\n );\n}\n\nexport function readPersistedColumnVisibility<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n): TableColumnVisibility | undefined {\n if (tableKey === undefined || typeof window === \"undefined\") return undefined;\n try {\n const stored = window.localStorage.getItem(\n getTableColumnVisibilityStorageKey(tableKey),\n );\n if (stored === null) return undefined;\n const parsed = JSON.parse(stored) as unknown;\n if (!isPersistedColumnVisibility(parsed)) return undefined;\n if (!hasSameColumnKeys(parsed.columnKeys, getColumnKeys(columns)))\n return undefined;\n return parsed.visibility;\n } catch {\n return undefined;\n }\n}\n\nexport function writePersistedColumnVisibility<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n columnVisibility: TableColumnVisibility,\n): void {\n if (tableKey === undefined || typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(\n getTableColumnVisibilityStorageKey(tableKey),\n JSON.stringify({\n version: 1,\n columnKeys: getColumnKeys(columns),\n visibility: columnVisibility,\n } satisfies PersistedColumnVisibility),\n );\n } catch {\n // localStorage can be unavailable in private browsing or sandboxed iframes.\n }\n}\n\nfunction isPersistedColumnPinning(\n value: unknown,\n): value is PersistedColumnPinning {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return false;\n const candidate = value as {\n version?: unknown;\n columnKeys?: unknown;\n pinning?: unknown;\n };\n if (\n candidate.version !== 2 ||\n !Array.isArray(candidate.columnKeys) ||\n !candidate.columnKeys.every((item) => typeof item === \"string\") ||\n typeof candidate.pinning !== \"object\" ||\n candidate.pinning === null\n )\n return false;\n const pinning = candidate.pinning as { left?: unknown; right?: unknown };\n const isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((item) => typeof item === \"string\");\n return isStringArray(pinning.left) && isStringArray(pinning.right);\n}\n\nexport function readPersistedColumnPinning<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n): ColumnPinningState | undefined {\n if (tableKey === undefined || typeof window === \"undefined\") return undefined;\n try {\n const stored = window.localStorage.getItem(\n getTableColumnPinningStorageKey(tableKey),\n );\n if (stored === null) return undefined;\n const parsed = JSON.parse(stored) as unknown;\n if (!isPersistedColumnPinning(parsed)) return undefined;\n if (!hasSameColumnKeys(parsed.columnKeys, getColumnKeys(columns)))\n return undefined;\n return { left: parsed.pinning.left, right: parsed.pinning.right };\n } catch {\n return undefined;\n }\n}\n\nexport function writePersistedColumnPinning<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n columnPinning: ColumnPinningState,\n): void {\n if (tableKey === undefined || typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(\n getTableColumnPinningStorageKey(tableKey),\n JSON.stringify({\n version: 2,\n columnKeys: getColumnKeys(columns),\n pinning: {\n left: columnPinning.left ?? [],\n right: columnPinning.right ?? [],\n },\n } satisfies PersistedColumnPinning),\n );\n } catch {\n // localStorage can be unavailable in private browsing or sandboxed iframes.\n }\n}\n\nfunction isPersistedTableView(value: unknown): value is PersistedTableView {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return false;\n const candidate = value as Partial<PersistedTableView>;\n return (\n typeof candidate.key === \"string\" &&\n typeof candidate.label === \"string\" &&\n (candidate.filters === undefined || Array.isArray(candidate.filters)) &&\n (candidate.columnVisibility === undefined ||\n isColumnVisibility(candidate.columnVisibility))\n );\n}\n\nexport function readPersistedTableViews<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n): TableViewItem[] {\n if (tableKey === undefined || typeof window === \"undefined\") return [];\n try {\n const stored = window.localStorage.getItem(getTableViewsStorageKey(tableKey));\n if (stored === null) return [];\n const parsed = JSON.parse(stored) as unknown;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed))\n return [];\n const candidate = parsed as Partial<PersistedTableViews>;\n if (\n candidate.version !== 1 ||\n !Array.isArray(candidate.columnKeys) ||\n !hasSameColumnKeys(candidate.columnKeys, getColumnKeys(columns)) ||\n !Array.isArray(candidate.views)\n )\n return [];\n return candidate.views\n .filter(isPersistedTableView)\n .slice(-MAX_PERSISTED_TABLE_VIEWS)\n .map((view) => ({\n ...view,\n deletable: true,\n }));\n } catch {\n return [];\n }\n}\n\nexport function writePersistedTableViews<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n views: TableViewItem[],\n): void {\n if (tableKey === undefined || typeof window === \"undefined\") return;\n try {\n const persistedViews = views\n .flatMap((view): PersistedTableView[] =>\n typeof view.label === \"string\"\n ? [\n {\n key: view.key,\n label: view.label,\n filters: view.filters,\n sort: view.sort,\n columnVisibility: view.columnVisibility,\n },\n ]\n : [],\n )\n .slice(-MAX_PERSISTED_TABLE_VIEWS);\n window.localStorage.setItem(\n getTableViewsStorageKey(tableKey),\n JSON.stringify({\n version: 1,\n columnKeys: getColumnKeys(columns),\n views: persistedViews,\n } satisfies PersistedTableViews),\n );\n } catch {\n // localStorage can be unavailable in private browsing or sandboxed iframes.\n }\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport {\n getCoreRowModel,\n useReactTable,\n type ColumnPinningState,\n type Table as ReactTable,\n type Updater,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport { matchBreakpoint, useBreakpoint } from \"../../../hooks/useBreakpoint\";\nimport type { Breakpoint } from \"../../layout/Row\";\nimport {\n MAX_PERSISTED_TABLE_VIEWS,\n readPersistedColumnPinning,\n readPersistedColumnVisibility,\n readPersistedTableViews,\n writePersistedColumnPinning,\n writePersistedColumnVisibility,\n writePersistedTableViews,\n} from \"./persistence\";\nimport type {\n TableBatchActionsConfig,\n TableColumn,\n TableColumnPinningChange,\n TableColumnVisibility,\n TableDensity,\n TableEditingConfig,\n TableExpandableConfig,\n TableFilter,\n TableFilterBar,\n TableGroupBy,\n TablePagination,\n TableRowKey,\n TableSortState,\n TableStickyConfig,\n TableStickySide,\n TableToolbar,\n TableTreeConfig,\n TableViewItem,\n TableViews,\n TableViewSnapshot,\n} from \"../../data-display/Table.types\";\nimport type { UseTablePaginationResult } from \"../../../hooks/useTablePagination\";\nimport type { UseTableSelectionResult } from \"../../../hooks/useTableSelection\";\nimport type { UseTableViewsResult } from \"../../../hooks/useTableViews\";\n\nexport interface UseDataTableOptions<TData> {\n data: TData[];\n columns: TableColumn<TData, unknown>[];\n rowKey?: TableRowKey<TData>;\n getRowId?: (row: TData, index: number) => string;\n\n selection?: UseTableSelectionResult;\n batchActions?:\n | ReactNode\n | TableBatchActionsConfig<TData>\n | {\n actions: TableBatchActionsConfig<TData>[\"actions\"];\n getCheckboxDisabled?: TableBatchActionsConfig<\n TData\n >[\"getCheckboxDisabled\"];\n selectedLabel?: TableBatchActionsConfig<TData>[\"selectedLabel\"];\n selectAllLabel?: TableBatchActionsConfig<TData>[\"selectAllLabel\"];\n clearLabel?: TableBatchActionsConfig<TData>[\"clearLabel\"];\n };\n\n pagination?: UseTablePaginationResult;\n total?: number;\n pageSizeOptions?: number[];\n showSizeChanger?: boolean;\n showTotal?: (total: number, range: [number, number]) => ReactNode;\n /** Direct pagination config — bypasses the `UseTablePaginationResult` slice. */\n paginationConfig?: TablePagination;\n\n views?: UseTableViewsResult;\n onViewApply?: (view: TableViewItem) => void;\n\n filters?: TableFilter[];\n onFiltersChange?: (filters: TableFilter[]) => void;\n filterBar?: TableFilterBar;\n onResetFilters?: () => void;\n\n sort?: TableSortState;\n onSortChange?: (sort: TableSortState) => void;\n resizable?: boolean;\n\n columnVisibility?: TableColumnVisibility;\n defaultColumnVisibility?: TableColumnVisibility;\n onColumnVisibilityChange?: (columnVisibility: TableColumnVisibility) => void;\n onColumnPinningChange?: TableColumnPinningChange;\n\n toolbar?: TableToolbar;\n\n expandable?: TableExpandableConfig<TData>;\n tree?: TableTreeConfig<TData>;\n editing?: TableEditingConfig<TData>;\n groupBy?: TableGroupBy<TData>;\n\n density?: TableDensity;\n stickyHeader?: boolean;\n rowClassName?: string | ((row: { original: TData }) => string | undefined);\n caption?: ReactNode;\n footer?: ReactNode;\n empty?: ReactNode;\n tableKey?: string;\n containerClassName?: string;\n className?: string;\n}\n\n// ── Helpers (private; mirror primitive internals while Stage 4b lands) ──\n\nfunction resolveUpdater<T>(updater: Updater<T>, previous: T): T {\n return typeof updater === \"function\"\n ? (updater as (old: T) => T)(previous)\n : updater;\n}\n\nfunction getColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction resolveStickySide(\n config: TableStickyConfig | undefined,\n bp: Breakpoint,\n): TableStickySide | undefined {\n if (config === undefined || config === false) return undefined;\n if (typeof config === \"string\") return config;\n if (config.from !== undefined && !matchBreakpoint(bp, config.from))\n return undefined;\n return config.side;\n}\n\nfunction deriveColumnPinning<TData>(\n columns: TableColumn<TData, unknown>[],\n bp: Breakpoint,\n): ColumnPinningState {\n return columns.reduce<ColumnPinningState>(\n (state, column) => {\n const key = getColumnKey(column);\n if (key === undefined) return state;\n const side = resolveStickySide(column.meta?.sticky, bp);\n if (side === undefined) return state;\n return { ...state, [side]: [...(state[side] ?? []), key] };\n },\n { left: [], right: [] },\n );\n}\n\nfunction resolveRowKey<TData>(\n row: TData,\n index: number,\n rowKey: TableRowKey<TData>,\n warnMissingRowKey: (rowKey: string) => void,\n) {\n if (typeof rowKey === \"function\") {\n const value = rowKey(row, index);\n return String(value);\n }\n if (\n typeof row === \"object\" &&\n row !== null &&\n Object.prototype.hasOwnProperty.call(row, rowKey)\n ) {\n const value = (row as Record<string, unknown>)[rowKey];\n if (value !== undefined && value !== null) return String(value);\n }\n warnMissingRowKey(rowKey);\n return String(index);\n}\n\nfunction normalizeFilters(filters: TableFilter[] | undefined) {\n return (filters ?? [])\n .map((filter) => ({\n key: filter.key,\n operator: filter.operator ?? \"eq\",\n value: filter.value ?? null,\n }))\n .sort((left, right) => left.key.localeCompare(right.key));\n}\n\nfunction normalizeVisibility(columnVisibility: TableColumnVisibility | undefined) {\n return Object.fromEntries(\n Object.entries(columnVisibility ?? {}).sort(([left], [right]) =>\n left.localeCompare(right),\n ),\n );\n}\n\nfunction sameViewSnapshot(\n view: TableViewItem,\n snapshot: TableViewSnapshot,\n) {\n return (\n JSON.stringify(normalizeFilters(view.filters)) ===\n JSON.stringify(normalizeFilters(snapshot.filters)) &&\n JSON.stringify(view.sort ?? null) === JSON.stringify(snapshot.sort ?? null) &&\n JSON.stringify(normalizeVisibility(view.columnVisibility)) ===\n JSON.stringify(normalizeVisibility(snapshot.columnVisibility))\n );\n}\n\nfunction buildBatchActions<TData>(\n selection: UseTableSelectionResult | undefined,\n batchActions: UseDataTableOptions<TData>[\"batchActions\"],\n): ReactNode | TableBatchActionsConfig<TData> | undefined {\n if (batchActions === undefined) return undefined;\n if (\n batchActions !== null &&\n typeof batchActions === \"object\" &&\n !Array.isArray(batchActions) &&\n \"selectedRowKeys\" in batchActions\n ) {\n return batchActions as TableBatchActionsConfig<TData>;\n }\n if (selection === undefined) return batchActions as ReactNode;\n if (\n batchActions !== null &&\n typeof batchActions === \"object\" &&\n !Array.isArray(batchActions) &&\n \"actions\" in batchActions\n ) {\n const partial = batchActions as Extract<\n UseDataTableOptions<TData>[\"batchActions\"],\n { actions: unknown }\n >;\n return {\n selectedRowKeys: selection.selectedRowKeys,\n onSelectedRowKeysChange: selection.setSelectedRowKeys,\n actions: partial.actions,\n getCheckboxDisabled: partial.getCheckboxDisabled,\n selectedLabel: partial.selectedLabel,\n selectAllLabel: partial.selectAllLabel,\n clearLabel: partial.clearLabel,\n };\n }\n return {\n selectedRowKeys: selection.selectedRowKeys,\n onSelectedRowKeysChange: selection.setSelectedRowKeys,\n actions: batchActions as ReactNode,\n };\n}\n\nfunction buildViewsConfig(\n views: UseTableViewsResult | undefined,\n onViewApply: UseDataTableOptions<unknown>[\"onViewApply\"],\n): import(\"../../data-display/Table.types\").TableViewsConfig | undefined {\n if (views === undefined) return undefined;\n return {\n items: views.items,\n activeKey: views.activeKey,\n onActiveKeyChange: views.setActiveKey,\n onViewApply: (view) => {\n views.applyView(view);\n onViewApply?.(view);\n },\n onDeleteView: (view) => views.deleteView(view.key),\n };\n}\n\n// ── Public surface ────────────────────────────────────────────────\n\nexport interface DataTableInstance<TData> {\n /** Resolved props ready to spread on `<Table>` — already strips chrome. */\n tableProps: {\n columns: TableColumn<TData, unknown>[];\n data: TData[];\n rowKey?: TableRowKey<TData>;\n getRowId?: (row: TData, index: number) => string;\n density?: TableDensity;\n stickyHeader?: boolean;\n resizable?: boolean;\n caption?: ReactNode;\n footer?: ReactNode;\n empty?: ReactNode;\n containerClassName?: string;\n className?: string;\n rowClassName?:\n | string\n | ((row: { original: TData }) => string | undefined);\n sort?: TableSortState;\n onSortChange?: (sort: TableSortState) => void;\n expandable?: TableExpandableConfig<TData>;\n tree?: TableTreeConfig<TData>;\n editing?: TableEditingConfig<TData>;\n groupBy?: TableGroupBy<TData>;\n };\n /** TanStack instance built by the hook (Stage 4b — hoisted from the primitive). */\n instance: ReactTable<TData>;\n /** Chrome config — consumed by `<DataTable>`'s renderers, not by the primitive. */\n chromeProps: {\n views: TableViews | undefined;\n toolbar: TableToolbar | undefined;\n batchActions: ReactNode | TableBatchActionsConfig<TData> | undefined;\n filterBar: TableFilterBar | undefined;\n filters: TableFilter[] | undefined;\n onFiltersChange: ((filters: TableFilter[]) => void) | undefined;\n onResetFilters: (() => void) | undefined;\n pagination: TablePagination | undefined;\n columnVisibility: TableColumnVisibility;\n columnPinning: ColumnPinningState;\n autoColumnPinning: ColumnPinningState;\n setColumnPinning: (pinning: ColumnPinningState) => void;\n setColumnVisibility: (visibility: TableColumnVisibility) => void;\n currentViewSnapshot: TableViewSnapshot;\n duplicateView: TableViewItem | undefined;\n savedViews: TableViewItem[];\n setSavedViews: (views: TableViewItem[]) => void;\n saveViewDefaultName: (count: number) => string;\n };\n /** Slice references (so consumer hooks remain visible). */\n selection: UseTableSelectionResult | undefined;\n pagination: UseTablePaginationResult | undefined;\n views: UseTableViewsResult | undefined;\n}\n\n/**\n * useDataTable — composite-level state + TanStack instance builder.\n *\n * Stage 4b of the Table refactor (Plan §3). The TanStack instance and\n * the chrome-related state (column visibility, column pinning, saved\n * views) live here on the composite side; `<DataTable>` renders the\n * chrome around the slim `<Table>` primitive.\n */\nexport function useDataTable<TData>(\n options: UseDataTableOptions<TData>,\n): DataTableInstance<TData> {\n const {\n selection,\n pagination,\n total,\n pageSizeOptions,\n showSizeChanger,\n showTotal,\n paginationConfig,\n views,\n onViewApply,\n batchActions,\n columns,\n data,\n rowKey = \"id\" as TableRowKey<TData>,\n getRowId,\n columnVisibility: controlledColumnVisibility,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n onColumnPinningChange,\n sort,\n onSortChange,\n resizable,\n expandable,\n editing,\n groupBy,\n tree,\n filterBar,\n filters,\n onFiltersChange,\n onResetFilters,\n toolbar,\n footer,\n empty,\n rowClassName,\n density,\n stickyHeader,\n caption,\n tableKey,\n containerClassName,\n className,\n } = options;\n\n // ── Column visibility ────────────────────────────────────────────\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<TableColumnVisibility>(\n () =>\n controlledColumnVisibility ??\n readPersistedColumnVisibility(tableKey, columns) ??\n defaultColumnVisibility ??\n {},\n );\n const effectiveColumnVisibility =\n controlledColumnVisibility ?? internalColumnVisibility;\n\n // ── Column pinning (auto + user) ─────────────────────────────────\n const bp = useBreakpoint();\n const autoColumnPinning = useMemo(\n () => deriveColumnPinning(columns, bp),\n [columns, bp],\n );\n const [userColumnPinning, setUserColumnPinning] =\n useState<ColumnPinningState>(\n () =>\n readPersistedColumnPinning(tableKey, columns) ?? {\n left: [],\n right: [],\n },\n );\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const dedupe = (list: string[]) => Array.from(new Set(list));\n return {\n left: dedupe([\n ...(autoColumnPinning.left ?? []),\n ...(userColumnPinning.left ?? []),\n ]),\n right: dedupe([\n ...(autoColumnPinning.right ?? []),\n ...(userColumnPinning.right ?? []),\n ]),\n };\n }, [autoColumnPinning, userColumnPinning]);\n\n // ── Saved views (persisted) ─────────────────────────────────────\n const [internalSavedViews, setInternalSavedViews] = useState<TableViewItem[]>(\n () => readPersistedTableViews(tableKey, columns),\n );\n\n // Persistence effects\n useEffect(() => {\n writePersistedColumnVisibility(tableKey, columns, effectiveColumnVisibility);\n }, [columns, effectiveColumnVisibility, tableKey]);\n useEffect(() => {\n writePersistedColumnPinning(tableKey, columns, userColumnPinning);\n }, [columns, userColumnPinning, tableKey]);\n useEffect(() => {\n writePersistedTableViews(tableKey, columns, internalSavedViews);\n }, [columns, internalSavedViews, tableKey]);\n\n // ── TanStack instance (hoisted from the primitive) ──────────────\n const warnedRowKeys = useRef(new Set<string>());\n const resolveGetRowId =\n getRowId ??\n ((row: TData, index: number) =>\n resolveRowKey(row, index, rowKey, (missingRowKey) => {\n if (warnedRowKeys.current.has(missingRowKey)) return;\n warnedRowKeys.current.add(missingRowKey);\n console.warn(\n `[godx-ui/Table] rowKey \"${missingRowKey}\" was not found on a row. Pass rowKey or getRowId to provide a stable row id.`,\n );\n }));\n\n const handleColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n const next = resolveUpdater(updater, effectiveColumnVisibility);\n if (controlledColumnVisibility === undefined) setInternalColumnVisibility(next);\n onColumnVisibilityChange?.(next);\n };\n const handleColumnPinningChange = (updater: Updater<ColumnPinningState>) => {\n const next = resolveUpdater(updater, columnPinning);\n const autoLeft = new Set(autoColumnPinning.left ?? []);\n const autoRight = new Set(autoColumnPinning.right ?? []);\n setUserColumnPinning({\n left: (next.left ?? []).filter((key) => !autoLeft.has(key)),\n right: (next.right ?? []).filter((key) => !autoRight.has(key)),\n });\n onColumnPinningChange?.(next);\n };\n\n const tableState = useMemo(\n () => ({ columnPinning, columnVisibility: effectiveColumnVisibility }),\n [columnPinning, effectiveColumnVisibility],\n );\n const instance = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getRowId: resolveGetRowId,\n enableColumnPinning: true,\n enableColumnResizing: resizable === true,\n columnResizeMode: \"onChange\",\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnPinningChange: handleColumnPinningChange,\n state: tableState,\n });\n\n // ── Pagination ──────────────────────────────────────────────────\n const paginationProp: TablePagination | undefined = paginationConfig\n ? paginationConfig\n : pagination\n ? {\n current: pagination.page,\n pageSize: pagination.pageSize,\n total: total ?? data.length,\n pageSizeOptions,\n showSizeChanger,\n showTotal,\n onChange: pagination.onChange,\n }\n : undefined;\n\n // ── Views snapshot + duplicate detection ────────────────────────\n const currentViewSnapshot: TableViewSnapshot = {\n filters: filters ?? [],\n sort: Array.isArray(sort) ? (sort[0] ?? null) : (sort ?? null),\n columnVisibility: effectiveColumnVisibility,\n };\n const builtInViewsConfig = buildViewsConfig(views, onViewApply);\n const viewItems = builtInViewsConfig\n ? [...(views?.items ?? []), ...internalSavedViews]\n : [];\n const duplicateView = viewItems.find((view) =>\n sameViewSnapshot(view, currentViewSnapshot),\n );\n\n const setSavedViews = (next: TableViewItem[]) => {\n const trimmed = next.slice(-MAX_PERSISTED_TABLE_VIEWS);\n setInternalSavedViews(trimmed);\n builtInViewsConfig?.onItemsChange?.([...(views?.items ?? []), ...trimmed]);\n };\n\n return {\n tableProps: {\n columns,\n data,\n rowKey,\n getRowId,\n density,\n stickyHeader,\n resizable,\n caption,\n footer,\n empty,\n containerClassName,\n className,\n rowClassName,\n sort,\n onSortChange,\n expandable,\n tree,\n editing,\n groupBy,\n },\n instance,\n chromeProps: {\n views: builtInViewsConfig,\n toolbar,\n batchActions: buildBatchActions(selection, batchActions),\n filterBar,\n filters,\n onFiltersChange,\n onResetFilters,\n pagination: paginationProp,\n columnVisibility: effectiveColumnVisibility,\n columnPinning,\n autoColumnPinning,\n setColumnPinning: handleColumnPinningChange,\n setColumnVisibility: handleColumnVisibilityChange,\n currentViewSnapshot,\n duplicateView,\n savedViews: internalSavedViews,\n setSavedViews,\n saveViewDefaultName: (count: number) =>\n `View ${internalSavedViews.length + count}`,\n },\n selection,\n pagination,\n views,\n };\n}\n","// Japanese translation dictionary — primary locale of the GoDX Forge\n// design system. Mirrors the `T.ja` dictionary in the design prototype\n// (chats/chat1.md → ui-kit.jsx).\nconst ja = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"オペレーター\",\n developer: \"開発者\",\n },\n nav: {\n products: \"プロダクト\",\n projects: \"プロジェクト\",\n devs: \"開発者\",\n dashboard: \"ダッシュボード\",\n overview: \"概要\",\n productHome: \"プロダクトホーム\",\n projectHome: \"プロジェクトホーム\",\n workspace: \"ワークスペース\",\n devPanel: \"開発者パネル\",\n agents: \"AIエージェント\",\n codeBrowser: \"コード\",\n domains: \"ドメイン\",\n designSystem: \"デザインシステム\",\n sandbox: \"サンドボックス\",\n deploys: \"デプロイ\",\n branches: \"ブランチ\",\n prs: \"プルリクエスト\",\n members: \"メンバー\",\n roadmap: \"ロードマップ\",\n activity: \"アクティビティ\",\n wiki: \"Wiki\",\n issues: \"課題\",\n plans: \"PDCA計画\",\n ideas: \"アイデア (Shape Up)\",\n gantt: \"ガント\",\n settings: \"設定\",\n logout: \"ログアウト\",\n login: \"ログイン\",\n },\n shell: {\n pickProduct: \"プロダクトを選択\",\n pickProject: \"プロジェクトを選択\",\n searchProducts: \"プロダクトを検索…\",\n searchProjects: \"全プロダクトから検索…\",\n recent: \"最近\",\n activeProduct: \"アクティブプロダクト\",\n noProjects: \"プロジェクト未割当\",\n browseAllProducts: \"全プロダクトを表示\",\n sidebarCollapse: \"サイドバー折畳み\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"表示\",\n density: \"密度\",\n densityCompact: \"密\",\n densityDefault: \"標準\",\n densityComfortable: \"広\",\n theme: \"テーマ\",\n themeLight: \"Light\",\n themeDark: \"Dark\",\n product: \"プロダクト\",\n locale: \"ロケール\",\n language: \"言語\",\n },\n kpi: {\n activeDevs: \"アクティブな開発者\",\n openIssues: \"未解決の課題\",\n deployments: \"デプロイ\",\n uptime: \"稼働率\",\n recentActivity: \"最近のアクティビティ\",\n quickActions: \"クイック操作\",\n },\n common: {\n search: \"検索\",\n new: \"新規\",\n save: \"保存\",\n cancel: \"キャンセル\",\n submit: \"送信\",\n delete: \"削除\",\n edit: \"編集\",\n loading: \"読み込み中…\",\n empty: \"データなし\",\n back: \"戻る\",\n backToProduct: \"プロダクトに戻る\",\n },\n table: {\n conditions: \"条件\",\n emptyDescription: \"該当するデータがありません\",\n resetFilters: \"条件をリセット\",\n searchPlaceholder: \"検索…\",\n detailFilter: \"詳細フィルタ\",\n columnSettings: \"列設定\",\n columnSettingsDescription:\n \"表示する列を選択します。固定列と操作列は常に表示されます。\",\n showAllColumns: \"すべて表示\",\n closeColumnSettings: \"閉じる\",\n newRecord: \"+ 新規\",\n saveView: \"+ ビューを保存\",\n deleteView: \"ビューを削除\",\n saveViewTitle: \"ビューを保存\",\n saveViewDescription: \"現在のフィルタ、並び順、列表示をビューとして保存します。\",\n defaultViewName: \"保存ビュー {{count}}\",\n viewName: \"ビュー名\",\n viewNamePlaceholder: \"ビュー名を入力\",\n duplicateViewTitle: \"既存ビュー「{{name}}」と同じ条件・列設定です。\",\n duplicateViewDescription: \"同じ内容で別名保存しますか?\",\n continueSaveView: \"続行して保存\",\n selectedRows: \"{{count}} 件選択中\",\n selectAllVisible: \"表示中の {{count}} 件を選択\",\n clearSelection: \"選択解除\",\n selectAllRows: \"すべて選択\",\n selectRow: \"行 {{row}} を選択\",\n paginationTotal: \"{{start}} – {{end}} 件 / 全 {{total}} 件\",\n pageSize: \"表示件数\",\n firstPage: \"最初のページ\",\n previousPage: \"前のページ\",\n nextPage: \"次のページ\",\n lastPage: \"最後のページ\",\n loadMore: \"さらに {{count}} 件読み込む\",\n loadMoreProgress: \"{{current}} / {{total}} 件 表示中\",\n jumpToLatest: \"<< 最新\",\n previousPeriod: \"← 前の月\",\n nextPeriod: \"次の月 →\",\n jumpToPeriod: \"期間にジャンプ\",\n expandRow: \"詳細を展開\",\n collapseRow: \"詳細を折り畳む\",\n cellEditor: \"セル編集\",\n saveAll: \"すべて保存\",\n cancelAll: \"すべて取消\",\n unsavedChanges: \"{{count}} 件 未保存の変更があります\",\n unsavedChanges_other: \"{{count}} 件 未保存の変更があります\",\n lockColumn: \"列を固定\",\n unlockColumn: \"固定を解除\",\n },\n workspace: {\n files: \"ファイル\",\n commits: \"コミット\",\n rules: \"ルール\",\n tokens: \"トークン\",\n components: \"コンポーネント\",\n typography: \"タイポグラフィ\",\n color: \"カラー\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"仮説\",\n metrics: \"成功指標\",\n risks: \"リスク\",\n linkedTasks: \"関連タスク\",\n decisionLog: \"意思決定ログ\",\n review: \"振り返り\",\n nextCycle: \"次サイクル\",\n },\n issue: {\n conversation: \"会話\",\n checklist: \"チェックリスト\",\n codeChanges: \"コード変更\",\n history: \"履歴\",\n assignee: \"担当者\",\n reviewers: \"レビュー担当\",\n labels: \"ラベル\",\n milestone: \"マイルストーン\",\n sprint: \"スプリント\",\n points: \"ポイント\",\n blockers: \"ブロック関係\",\n relatedPlan: \"所属 PDCA\",\n addComment: \"コメントを追加…\",\n status: \"ステータス\",\n priority: \"優先度\",\n submitWithChanges: \"送信時に変更を反映\",\n },\n};\n\nexport default ja;\nexport type ForgeTranslations = typeof ja;\n","import type { ForgeTranslations } from \"./ja\";\n\nconst en: ForgeTranslations = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"Operator\",\n developer: \"Developer\",\n },\n nav: {\n products: \"Products\",\n projects: \"Projects\",\n devs: \"Developers\",\n dashboard: \"Dashboard\",\n overview: \"Overview\",\n productHome: \"Product home\",\n projectHome: \"Project home\",\n workspace: \"Workspace\",\n devPanel: \"Dev panel\",\n agents: \"AI agents\",\n codeBrowser: \"Code\",\n domains: \"Domains\",\n designSystem: \"Design system\",\n sandbox: \"Sandbox\",\n deploys: \"Deploys\",\n branches: \"Branches\",\n prs: \"Pull requests\",\n members: \"Members\",\n roadmap: \"Roadmap\",\n activity: \"Activity\",\n wiki: \"Wiki\",\n issues: \"Issues\",\n plans: \"PDCA plans\",\n ideas: \"Ideas (Shape Up)\",\n gantt: \"Gantt\",\n settings: \"Settings\",\n logout: \"Sign out\",\n login: \"Sign in\",\n },\n shell: {\n pickProduct: \"Pick a product\",\n pickProject: \"Pick a project\",\n searchProducts: \"Search products…\",\n searchProjects: \"Search across products…\",\n recent: \"Recent\",\n activeProduct: \"Active product\",\n noProjects: \"No projects assigned\",\n browseAllProducts: \"Browse all products\",\n sidebarCollapse: \"Collapse sidebar\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"Display\",\n density: \"Density\",\n densityCompact: \"Compact\",\n densityDefault: \"Default\",\n densityComfortable: \"Comfortable\",\n theme: \"Theme\",\n themeLight: \"Light\",\n themeDark: \"Dark\",\n product: \"Product\",\n locale: \"Locale\",\n language: \"Language\",\n },\n kpi: {\n activeDevs: \"Active developers\",\n openIssues: \"Open issues\",\n deployments: \"Deploys today\",\n uptime: \"Uptime\",\n recentActivity: \"Recent activity\",\n quickActions: \"Quick actions\",\n },\n common: {\n search: \"Search\",\n new: \"New\",\n save: \"Save\",\n cancel: \"Cancel\",\n submit: \"Submit\",\n delete: \"Delete\",\n edit: \"Edit\",\n loading: \"Loading…\",\n empty: \"No data\",\n back: \"Back\",\n backToProduct: \"Back to product\",\n },\n table: {\n conditions: \"Conditions\",\n emptyDescription: \"No matching data\",\n resetFilters: \"Reset filters\",\n searchPlaceholder: \"Search…\",\n detailFilter: \"Detailed filters\",\n columnSettings: \"Columns\",\n columnSettingsDescription:\n \"Choose which columns to show. Fixed and action columns stay visible.\",\n showAllColumns: \"Show all\",\n closeColumnSettings: \"Close\",\n newRecord: \"+ New\",\n saveView: \"+ Save view\",\n deleteView: \"Delete view\",\n saveViewTitle: \"Save view\",\n saveViewDescription:\n \"Save the current filters, sort, and column visibility as a view.\",\n defaultViewName: \"Saved view {{count}}\",\n viewName: \"View name\",\n viewNamePlaceholder: \"Enter a view name\",\n duplicateViewTitle: \"Same filters and columns as “{{name}}”.\",\n duplicateViewDescription: \"Save the same state under a different name?\",\n continueSaveView: \"Continue and save\",\n selectedRows: \"{{count}} selected\",\n selectAllVisible: \"Select visible {{count}}\",\n clearSelection: \"Clear selection\",\n selectAllRows: \"Select all rows\",\n selectRow: \"Select row {{row}}\",\n paginationTotal: \"{{start}}–{{end}} of {{total}}\",\n pageSize: \"Rows per page\",\n firstPage: \"First page\",\n previousPage: \"Previous page\",\n nextPage: \"Next page\",\n lastPage: \"Last page\",\n loadMore: \"Load {{count}} more\",\n loadMoreProgress: \"{{current}} / {{total}} shown\",\n jumpToLatest: \"<< Latest\",\n previousPeriod: \"← Previous\",\n nextPeriod: \"Next →\",\n jumpToPeriod: \"Jump to period\",\n expandRow: \"Expand row\",\n collapseRow: \"Collapse row\",\n cellEditor: \"Cell editor\",\n saveAll: \"Save all\",\n cancelAll: \"Cancel all\",\n unsavedChanges: \"{{count}} unsaved change\",\n unsavedChanges_other: \"{{count}} unsaved changes\",\n lockColumn: \"Lock column\",\n unlockColumn: \"Unlock column\",\n },\n workspace: {\n files: \"Files\",\n commits: \"Commits\",\n rules: \"Rules\",\n tokens: \"Tokens\",\n components: \"Components\",\n typography: \"Typography\",\n color: \"Color\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"Hypothesis\",\n metrics: \"Success metrics\",\n risks: \"Risks\",\n linkedTasks: \"Linked tasks\",\n decisionLog: \"Decision log\",\n review: \"Review\",\n nextCycle: \"Next cycle\",\n },\n issue: {\n conversation: \"Conversation\",\n checklist: \"Checklist\",\n codeChanges: \"Code changes\",\n history: \"History\",\n assignee: \"Assignee\",\n reviewers: \"Reviewers\",\n labels: \"Labels\",\n milestone: \"Milestone\",\n sprint: \"Sprint\",\n points: \"Points\",\n blockers: \"Blockers\",\n relatedPlan: \"Linked PDCA\",\n addComment: \"Add a comment…\",\n status: \"Status\",\n priority: \"Priority\",\n submitWithChanges: \"Apply changes on submit\",\n },\n};\n\nexport default en;\n","import type { ForgeTranslations } from \"./ja\";\n\nconst vi: ForgeTranslations = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"Operator\",\n developer: \"Lập trình viên\",\n },\n nav: {\n products: \"Sản phẩm\",\n projects: \"Dự án\",\n devs: \"Lập trình viên\",\n dashboard: \"Bảng điều khiển\",\n overview: \"Tổng quan\",\n productHome: \"Trang chủ sản phẩm\",\n projectHome: \"Trang chủ dự án\",\n workspace: \"Workspace\",\n devPanel: \"Bảng dev\",\n agents: \"AI agent\",\n codeBrowser: \"Code\",\n domains: \"Tên miền\",\n designSystem: \"Design system\",\n sandbox: \"Sandbox\",\n deploys: \"Deploy\",\n branches: \"Branch\",\n prs: \"Pull request\",\n members: \"Thành viên\",\n roadmap: \"Lộ trình\",\n activity: \"Hoạt động\",\n wiki: \"Wiki\",\n issues: \"Issue\",\n plans: \"Kế hoạch PDCA\",\n ideas: \"Ý tưởng (Shape Up)\",\n gantt: \"Gantt\",\n settings: \"Cài đặt\",\n logout: \"Đăng xuất\",\n login: \"Đăng nhập\",\n },\n shell: {\n pickProduct: \"Chọn sản phẩm\",\n pickProject: \"Chọn dự án\",\n searchProducts: \"Tìm sản phẩm…\",\n searchProjects: \"Tìm trong tất cả sản phẩm…\",\n recent: \"Gần đây\",\n activeProduct: \"Sản phẩm hiện tại\",\n noProjects: \"Chưa được gán dự án\",\n browseAllProducts: \"Xem tất cả sản phẩm\",\n sidebarCollapse: \"Thu gọn sidebar\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"Hiển thị\",\n density: \"Mật độ\",\n densityCompact: \"Dày\",\n densityDefault: \"Mặc định\",\n densityComfortable: \"Rộng\",\n theme: \"Theme\",\n themeLight: \"Sáng\",\n themeDark: \"Tối\",\n product: \"Sản phẩm\",\n locale: \"Ngôn ngữ\",\n language: \"Ngôn ngữ\",\n },\n kpi: {\n activeDevs: \"Dev đang hoạt động\",\n openIssues: \"Issue mở\",\n deployments: \"Deploy hôm nay\",\n uptime: \"Uptime\",\n recentActivity: \"Hoạt động gần đây\",\n quickActions: \"Thao tác nhanh\",\n },\n common: {\n search: \"Tìm kiếm\",\n new: \"Mới\",\n save: \"Lưu\",\n cancel: \"Hủy\",\n submit: \"Gửi\",\n delete: \"Xóa\",\n edit: \"Sửa\",\n loading: \"Đang tải…\",\n empty: \"Không có dữ liệu\",\n back: \"Quay lại\",\n backToProduct: \"Quay về sản phẩm\",\n },\n table: {\n conditions: \"Điều kiện\",\n emptyDescription: \"Không có dữ liệu phù hợp\",\n resetFilters: \"Đặt lại điều kiện\",\n searchPlaceholder: \"Tìm kiếm…\",\n detailFilter: \"Bộ lọc chi tiết\",\n columnSettings: \"Cột\",\n columnSettingsDescription:\n \"Chọn các cột cần hiển thị. Cột cố định và cột thao tác luôn hiển thị.\",\n showAllColumns: \"Hiện tất cả\",\n closeColumnSettings: \"Đóng\",\n newRecord: \"+ Tạo mới\",\n saveView: \"+ Lưu view\",\n deleteView: \"Xoá view\",\n saveViewTitle: \"Lưu view\",\n saveViewDescription:\n \"Lưu bộ lọc, sắp xếp và trạng thái hiển thị cột hiện tại thành một view.\",\n defaultViewName: \"View đã lưu {{count}}\",\n viewName: \"Tên view\",\n viewNamePlaceholder: \"Nhập tên view\",\n duplicateViewTitle: \"Trùng bộ lọc và cột với “{{name}}”.\",\n duplicateViewDescription: \"Lưu cùng trạng thái này dưới tên khác?\",\n continueSaveView: \"Tiếp tục lưu\",\n selectedRows: \"Đã chọn {{count}} dòng\",\n selectAllVisible: \"Chọn {{count}} dòng đang hiển thị\",\n clearSelection: \"Bỏ chọn\",\n selectAllRows: \"Chọn tất cả dòng\",\n selectRow: \"Chọn dòng {{row}}\",\n paginationTotal: \"{{start}}–{{end}} / tổng {{total}}\",\n pageSize: \"Số dòng\",\n firstPage: \"Trang đầu\",\n previousPage: \"Trang trước\",\n nextPage: \"Trang sau\",\n lastPage: \"Trang cuối\",\n loadMore: \"Tải thêm {{count}}\",\n loadMoreProgress: \"{{current}} / {{total}} đang hiển thị\",\n jumpToLatest: \"<< Mới nhất\",\n previousPeriod: \"← Kỳ trước\",\n nextPeriod: \"Kỳ sau →\",\n jumpToPeriod: \"Nhảy tới kỳ\",\n expandRow: \"Mở chi tiết\",\n collapseRow: \"Đóng chi tiết\",\n cellEditor: \"Trình soạn ô\",\n saveAll: \"Lưu tất cả\",\n cancelAll: \"Hủy tất cả\",\n unsavedChanges: \"{{count}} thay đổi chưa lưu\",\n unsavedChanges_other: \"{{count}} thay đổi chưa lưu\",\n lockColumn: \"Khóa cột\",\n unlockColumn: \"Bỏ khóa cột\",\n },\n workspace: {\n files: \"File\",\n commits: \"Commit\",\n rules: \"Quy tắc\",\n tokens: \"Token\",\n components: \"Component\",\n typography: \"Kiểu chữ\",\n color: \"Màu sắc\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"Giả thuyết\",\n metrics: \"Chỉ số thành công\",\n risks: \"Rủi ro\",\n linkedTasks: \"Task liên kết\",\n decisionLog: \"Nhật ký quyết định\",\n review: \"Tổng kết\",\n nextCycle: \"Chu kỳ tiếp\",\n },\n issue: {\n conversation: \"Hội thoại\",\n checklist: \"Checklist\",\n codeChanges: \"Thay đổi code\",\n history: \"Lịch sử\",\n assignee: \"Người phụ trách\",\n reviewers: \"Reviewer\",\n labels: \"Nhãn\",\n milestone: \"Milestone\",\n sprint: \"Sprint\",\n points: \"Điểm\",\n blockers: \"Phụ thuộc\",\n relatedPlan: \"PDCA liên quan\",\n addComment: \"Thêm comment…\",\n status: \"Trạng thái\",\n priority: \"Ưu tiên\",\n submitWithChanges: \"Áp dụng thay đổi khi gửi\",\n },\n};\n\nexport default vi;\n","import type { ForgeTranslations } from \"./ja\";\n\n// Filipino (Tagalog) translation — mandatory locale per the umbrella\n// frontend-architecture spec §6.\nconst fil: ForgeTranslations = {\n brand: {\n forge: \"GoDX Forge\",\n operator: \"Operator\",\n developer: \"Developer\",\n },\n nav: {\n products: \"Mga Produkto\",\n projects: \"Mga Proyekto\",\n devs: \"Mga Developer\",\n dashboard: \"Dashboard\",\n overview: \"Pangkalahatang-tanaw\",\n productHome: \"Tahanan ng produkto\",\n projectHome: \"Tahanan ng proyekto\",\n workspace: \"Workspace\",\n devPanel: \"Panel ng dev\",\n agents: \"Mga AI agent\",\n codeBrowser: \"Code\",\n domains: \"Mga domain\",\n designSystem: \"Design system\",\n sandbox: \"Sandbox\",\n deploys: \"Mga deploy\",\n branches: \"Mga branch\",\n prs: \"Mga pull request\",\n members: \"Mga miyembro\",\n roadmap: \"Roadmap\",\n activity: \"Aktibidad\",\n wiki: \"Wiki\",\n issues: \"Mga isyu\",\n plans: \"Mga plano\",\n ideas: \"Mga ideya (Shape Up)\",\n gantt: \"Gantt\",\n settings: \"Mga setting\",\n logout: \"Mag-sign out\",\n login: \"Mag-sign in\",\n },\n shell: {\n pickProduct: \"Pumili ng produkto\",\n pickProject: \"Pumili ng proyekto\",\n searchProducts: \"Maghanap ng mga produkto…\",\n searchProjects: \"Maghanap sa lahat ng produkto…\",\n recent: \"Kamakailang\",\n activeProduct: \"Aktibong produkto\",\n noProjects: \"Walang mga proyektong itinalaga\",\n browseAllProducts: \"Tingnan ang lahat ng produkto\",\n sidebarCollapse: \"I-collapse ang sidebar\",\n },\n tweaks: {\n title: \"Tweaks\",\n display: \"Display\",\n density: \"Density\",\n densityCompact: \"Compact\",\n densityDefault: \"Default\",\n densityComfortable: \"Comfortable\",\n theme: \"Tema\",\n themeLight: \"Light\",\n themeDark: \"Dark\",\n product: \"Produkto\",\n locale: \"Lokasyon\",\n language: \"Wika\",\n },\n kpi: {\n activeDevs: \"Mga aktibong developer\",\n openIssues: \"Mga bukas na isyu\",\n deployments: \"Mga deploy ngayon\",\n uptime: \"Uptime\",\n recentActivity: \"Kamakailang aktibidad\",\n quickActions: \"Mabilis na aksyon\",\n },\n common: {\n search: \"Maghanap\",\n new: \"Bago\",\n save: \"I-save\",\n cancel: \"Kanselahin\",\n submit: \"Isumite\",\n delete: \"Tanggalin\",\n edit: \"I-edit\",\n loading: \"Naglo-load…\",\n empty: \"Walang datos\",\n back: \"Bumalik\",\n backToProduct: \"Bumalik sa produkto\",\n },\n table: {\n conditions: \"Mga kondisyon\",\n emptyDescription: \"Walang tumutugmang datos\",\n resetFilters: \"I-reset ang mga filter\",\n searchPlaceholder: \"Maghanap…\",\n detailFilter: \"Detalyadong filter\",\n columnSettings: \"Mga column\",\n columnSettingsDescription:\n \"Piliin ang mga column na ipapakita. Palaging nakikita ang fixed at action columns.\",\n showAllColumns: \"Ipakita lahat\",\n closeColumnSettings: \"Isara\",\n newRecord: \"+ Bago\",\n saveView: \"+ I-save ang view\",\n deleteView: \"Tanggalin ang view\",\n saveViewTitle: \"I-save ang view\",\n saveViewDescription:\n \"I-save ang kasalukuyang filters, sort, at column visibility bilang view.\",\n defaultViewName: \"Naka-save na view {{count}}\",\n viewName: \"Pangalan ng view\",\n viewNamePlaceholder: \"Ilagay ang pangalan ng view\",\n duplicateViewTitle: \"Kapareho ng filters at columns ng “{{name}}”.\",\n duplicateViewDescription: \"I-save ang parehong state gamit ang ibang pangalan?\",\n continueSaveView: \"Magpatuloy at i-save\",\n selectedRows: \"{{count}} ang napili\",\n selectAllVisible: \"Piliin ang nakikitang {{count}}\",\n clearSelection: \"Alisin ang pagpili\",\n selectAllRows: \"Piliin lahat ng row\",\n selectRow: \"Piliin ang row {{row}}\",\n paginationTotal: \"{{start}}–{{end}} sa {{total}}\",\n pageSize: \"Bilang ng row\",\n firstPage: \"Unang pahina\",\n previousPage: \"Nakaraang pahina\",\n nextPage: \"Susunod na pahina\",\n lastPage: \"Huling pahina\",\n loadMore: \"Mag-load pa ng {{count}}\",\n loadMoreProgress: \"{{current}} / {{total}} ang ipinakita\",\n jumpToLatest: \"<< Pinakabago\",\n previousPeriod: \"← Nakaraan\",\n nextPeriod: \"Susunod →\",\n jumpToPeriod: \"Tumalon sa panahon\",\n expandRow: \"Palawakin ang row\",\n collapseRow: \"Tiklupin ang row\",\n cellEditor: \"Tagaedit ng cell\",\n saveAll: \"I-save lahat\",\n cancelAll: \"Kanselahin lahat\",\n unsavedChanges: \"{{count}} hindi naka-save na pagbabago\",\n unsavedChanges_other: \"{{count}} hindi naka-save na pagbabago\",\n lockColumn: \"I-lock ang column\",\n unlockColumn: \"I-unlock ang column\",\n },\n workspace: {\n files: \"Mga file\",\n commits: \"Mga commit\",\n rules: \"Mga patakaran\",\n tokens: \"Mga token\",\n components: \"Mga component\",\n typography: \"Typography\",\n color: \"Kulay\",\n },\n pdca: {\n plan: \"Plan\",\n do: \"Do\",\n check: \"Check\",\n act: \"Act\",\n hypothesis: \"Hypothesis\",\n metrics: \"Sukatan ng tagumpay\",\n risks: \"Mga panganib\",\n linkedTasks: \"Mga naka-link na gawain\",\n decisionLog: \"Log ng desisyon\",\n review: \"Pagsusuri\",\n nextCycle: \"Susunod na cycle\",\n },\n issue: {\n conversation: \"Pag-uusap\",\n checklist: \"Checklist\",\n codeChanges: \"Mga pagbabago sa code\",\n history: \"Kasaysayan\",\n assignee: \"Itinalaga sa\",\n reviewers: \"Mga reviewer\",\n labels: \"Mga label\",\n milestone: \"Milestone\",\n sprint: \"Sprint\",\n points: \"Mga puntos\",\n blockers: \"Mga blocker\",\n relatedPlan: \"Naka-link na PDCA\",\n addComment: \"Magdagdag ng komento…\",\n status: \"Status\",\n priority: \"Priyoridad\",\n submitWithChanges: \"Ilapat ang mga pagbabago sa pagsumite\",\n },\n};\n\nexport default fil;\n","// @godxjp/ui — i18n bootstrap.\n//\n// Locale resolution order:\n// 1. localStorage[\"godx.locale\"] (user override via Tweaks panel)\n// 2. navigator.language prefix (ja-JP → ja, en-US → en, vi-VN → vi)\n// 3. JA fallback (design's primary locale)\n//\n// Supported locales: ja / en / vi / fil (required by the umbrella\n// frontend-architecture spec §6).\n// Services may add extra locales via `i18n.addResourceBundle` — never\n// replace the base set.\nimport i18next from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport ja from \"./locales/ja\";\nimport en from \"./locales/en\";\nimport vi from \"./locales/vi\";\nimport fil from \"./locales/fil\";\n\nexport const SUPPORTED_LOCALES = [\"ja\", \"en\", \"vi\", \"fil\"] as const;\n/** @deprecated Use GodxLocale instead. */\nexport type ForgeLocale = (typeof SUPPORTED_LOCALES)[number];\nexport type GodxLocale = (typeof SUPPORTED_LOCALES)[number];\n\nexport const GODX_LOCALE_STORAGE_KEY = \"godx.locale\";\n/** @deprecated Use GODX_LOCALE_STORAGE_KEY instead. */\nexport const FORGE_LOCALE_STORAGE_KEY = GODX_LOCALE_STORAGE_KEY;\n\nexport function initI18n(): typeof i18next {\n void i18next\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources: {\n ja: { translation: ja },\n en: { translation: en },\n vi: { translation: vi },\n fil: { translation: fil },\n },\n fallbackLng: \"ja\",\n supportedLngs: SUPPORTED_LOCALES,\n load: \"languageOnly\",\n interpolation: { escapeValue: false },\n detection: {\n order: [\"localStorage\", \"navigator\"],\n lookupLocalStorage: GODX_LOCALE_STORAGE_KEY,\n caches: [\"localStorage\"],\n },\n });\n return i18next;\n}\n\nexport default i18next;\n\nexport {\n formatDate,\n formatTime,\n formatDateTime,\n formatNumber,\n formatCurrency,\n type DateLike,\n type TimeLike,\n type FormatOptions,\n type FormatDateOptions,\n type FormatNumberOptions,\n type FormatCurrencyOptions,\n} from \"./format\";\n\nexport { formatRelative, type RelativeOptions } from \"./relative\";\n","// useTweaks — shared client state for the design system's Tweaks panel.\n//\n// Mirrors the design prototype `useTweaks` hook (tweaks-panel.jsx). Each\n// tweak is persisted to localStorage so reloads keep the user's chosen\n// density / theme / tenant / sidebar-collapsed setting. Locale is owned\n// by i18next (see src/i18n/index.ts) but exposed through this hook so\n// the Tweaks UI has a single dispatcher.\nimport { useCallback, useEffect, useState } from \"react\";\nimport i18n, { GODX_LOCALE_STORAGE_KEY, type GodxLocale } from \"../i18n\";\nimport type { ForgeProduct } from \"../components/shell/types\";\n\nexport type Density = \"compact\" | \"default\" | \"comfortable\";\nexport type Theme = \"light\" | \"dark\";\n\nexport type Tweaks = {\n density: Density;\n theme: Theme;\n tenant: string;\n locale: GodxLocale;\n sidebarCollapsed: boolean;\n};\n\nconst STORAGE_KEY = \"godx.tweaks\";\n\nconst DEFAULTS: Tweaks = {\n density: \"default\",\n theme: \"light\",\n tenant: \"godx\",\n locale: \"ja\",\n sidebarCollapsed: false,\n};\n\nfunction loadInitial(): Tweaks {\n if (typeof window === \"undefined\") return DEFAULTS;\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n const stored = raw ? (JSON.parse(raw) as Partial<Tweaks>) : {};\n const detected = (i18n.language?.slice(0, 2) || \"ja\") as GodxLocale;\n return {\n ...DEFAULTS,\n ...stored,\n locale: (stored.locale ?? detected) as GodxLocale,\n };\n } catch {\n return DEFAULTS;\n }\n}\n\nexport function useTweaks() {\n const [tweaks, setTweaks] = useState<Tweaks>(loadInitial);\n\n // Persist every change to localStorage.\n useEffect(() => {\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(tweaks));\n } catch {\n /* Storage may be disabled (private mode). Silently degrade. */\n }\n }, [tweaks]);\n\n // Reflect tweaks onto <html> so the design tokens (CSS custom\n // properties scoped to [data-tenant=…], [data-theme=…], [data-density=…])\n // pick up the change without rerunning React.\n useEffect(() => {\n const html = document.documentElement;\n html.dataset.theme = tweaks.theme;\n html.dataset.density = tweaks.density;\n html.dataset.tenant = tweaks.tenant;\n html.lang = tweaks.locale;\n }, [tweaks.theme, tweaks.density, tweaks.tenant, tweaks.locale]);\n\n // Forward locale changes to i18next so the UI re-renders strings.\n // Guarded by `isInitialized` so consumers that mount this hook\n // before calling `initI18n()` no-op instead of crashing inside\n // i18next's resolver (`toResolveHierarchy is undefined`).\n useEffect(() => {\n if (!i18n.isInitialized) return;\n if (i18n.language?.slice(0, 2) !== tweaks.locale) {\n void i18n.changeLanguage(tweaks.locale);\n try {\n window.localStorage.setItem(GODX_LOCALE_STORAGE_KEY, tweaks.locale);\n } catch {\n /* ignore */\n }\n }\n }, [tweaks.locale]);\n\n const setTweak = useCallback(<K extends keyof Tweaks>(key: K, value: Tweaks[K]) => {\n setTweaks((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n return { tweaks, setTweak, setTweaks } as const;\n}\n\n/** Derive tenant-select options from a consumer-supplied product\n * catalogue. Shell consumers pass their own products — useTweaks\n * doesn't ship with mock data per cardinal rule 28. */\nexport function productOptions(products: ForgeProduct[]): Array<{ value: string; label: string }> {\n return products.map((p) => ({ value: p.tenant, label: p.name }));\n}\n","import { useCallback, useState } from \"react\";\n\nexport interface UseTablePaginationOptions {\n /** Initial page (1-based). Default 1. */\n defaultPage?: number;\n /** Initial page size. Default 20. */\n defaultPageSize?: number;\n /** Controlled page — when set, hook becomes view-only for page. */\n page?: number;\n /** Controlled page size — when set, hook becomes view-only for size. */\n pageSize?: number;\n /** Fires when either page or pageSize changes. */\n onChange?: (page: number, pageSize: number) => void;\n}\n\nexport interface UseTablePaginationResult {\n page: number;\n pageSize: number;\n setPage: (page: number) => void;\n setPageSize: (pageSize: number) => void;\n /** Unified handler — matches `<Pagination onChange>` and `<Table pagination.onChange>` shapes. */\n onChange: (page: number, pageSize: number) => void;\n /** Reset page to 1 (keep size). Call after filter/sort/search changes. */\n resetPage: () => void;\n /** Reset both back to defaults. */\n reset: () => void;\n}\n\n/**\n * useTablePagination — `page` + `pageSize` slice.\n *\n * Ergonomic accessor for the canonical pagination state any\n * `<DataTable>` (or bare `<Table pagination=…>`) needs. Mirrors the\n * MRT / TanStack pattern: controlled OR uncontrolled, single `onChange`\n * surface that matches `<Pagination>`.\n *\n * @example\n * const pagination = useTablePagination({ defaultPageSize: 20 });\n * const rows = useMemo(\n * () => allRows.slice((pagination.page - 1) * pagination.pageSize, ...),\n * [allRows, pagination.page, pagination.pageSize],\n * );\n * <Table pagination={{ ...pagination, total: allRows.length }} />\n */\nexport function useTablePagination(\n options: UseTablePaginationOptions = {},\n): UseTablePaginationResult {\n const {\n defaultPage = 1,\n defaultPageSize = 20,\n page: controlledPage,\n pageSize: controlledPageSize,\n onChange,\n } = options;\n\n const [internalPage, setInternalPage] = useState(defaultPage);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n\n const page = controlledPage ?? internalPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n const setPage = useCallback(\n (nextPage: number) => {\n if (controlledPage === undefined) setInternalPage(nextPage);\n onChange?.(nextPage, pageSize);\n },\n [controlledPage, onChange, pageSize],\n );\n\n const setPageSize = useCallback(\n (nextPageSize: number) => {\n if (controlledPageSize === undefined) setInternalPageSize(nextPageSize);\n // Page-size change conventionally resets to page 1.\n if (controlledPage === undefined) setInternalPage(1);\n onChange?.(1, nextPageSize);\n },\n [controlledPage, controlledPageSize, onChange],\n );\n\n const handleChange = useCallback(\n (nextPage: number, nextPageSize: number) => {\n if (controlledPage === undefined) setInternalPage(nextPage);\n if (controlledPageSize === undefined) setInternalPageSize(nextPageSize);\n onChange?.(nextPage, nextPageSize);\n },\n [controlledPage, controlledPageSize, onChange],\n );\n\n const resetPage = useCallback(() => {\n if (controlledPage === undefined) setInternalPage(1);\n onChange?.(1, pageSize);\n }, [controlledPage, onChange, pageSize]);\n\n const reset = useCallback(() => {\n if (controlledPage === undefined) setInternalPage(defaultPage);\n if (controlledPageSize === undefined) setInternalPageSize(defaultPageSize);\n onChange?.(defaultPage, defaultPageSize);\n }, [\n controlledPage,\n controlledPageSize,\n defaultPage,\n defaultPageSize,\n onChange,\n ]);\n\n return {\n page,\n pageSize,\n setPage,\n setPageSize,\n onChange: handleChange,\n resetPage,\n reset,\n };\n}\n","import { useCallback, useState } from \"react\";\n\nexport type TableSelectionMode = \"single\" | \"multiple\";\n\nexport interface UseTableSelectionOptions {\n /** \"single\" replaces previous selection on toggle/select. Default \"multiple\". */\n mode?: TableSelectionMode;\n /** Initial selected row keys (uncontrolled). */\n defaultSelected?: string[];\n /** Controlled selected row keys — when set, hook becomes view-only. */\n selected?: string[];\n /** Fires when selection changes. */\n onChange?: (selectedRowKeys: string[]) => void;\n}\n\nexport interface UseTableSelectionResult {\n selectedRowKeys: string[];\n setSelectedRowKeys: (keys: string[]) => void;\n /** Toggle a single row's selection. */\n toggle: (key: string) => void;\n /** Add a row to the selection (no-op in \"single\" — replaces). */\n select: (key: string) => void;\n /** Remove a row from the selection. */\n deselect: (key: string) => void;\n /** Clear the selection. */\n clear: () => void;\n /** True if the row is currently selected. */\n isSelected: (key: string) => boolean;\n /** Number of selected rows. */\n count: number;\n}\n\n/**\n * useTableSelection — controlled-or-uncontrolled row selection.\n *\n * Mirrors `<Table batchActions={{ selectedRowKeys, onSelectedRowKeysChange }}>`\n * shape. `mode=\"single\"` replaces on toggle; `mode=\"multiple\"` (default)\n * adds/removes individual keys.\n *\n * @example\n * const selection = useTableSelection({ mode: \"multiple\" });\n * <Table\n * batchActions={{\n * selectedRowKeys: selection.selectedRowKeys,\n * onSelectedRowKeysChange: selection.setSelectedRowKeys,\n * actions: <Button onClick={() => approve(selection.selectedRowKeys)}>承認</Button>,\n * }}\n * />\n */\nexport function useTableSelection(\n options: UseTableSelectionOptions = {},\n): UseTableSelectionResult {\n const {\n mode = \"multiple\",\n defaultSelected = [],\n selected: controlledSelected,\n onChange,\n } = options;\n\n const [internal, setInternal] = useState<string[]>(defaultSelected);\n const selectedRowKeys = controlledSelected ?? internal;\n\n const setSelectedRowKeys = useCallback(\n (next: string[]) => {\n if (controlledSelected === undefined) setInternal(next);\n onChange?.(next);\n },\n [controlledSelected, onChange],\n );\n\n const select = useCallback(\n (key: string) => {\n const next =\n mode === \"single\"\n ? [key]\n : selectedRowKeys.includes(key)\n ? selectedRowKeys\n : [...selectedRowKeys, key];\n if (next === selectedRowKeys) return;\n setSelectedRowKeys(next);\n },\n [mode, selectedRowKeys, setSelectedRowKeys],\n );\n\n const deselect = useCallback(\n (key: string) => {\n if (!selectedRowKeys.includes(key)) return;\n setSelectedRowKeys(selectedRowKeys.filter((k) => k !== key));\n },\n [selectedRowKeys, setSelectedRowKeys],\n );\n\n const toggle = useCallback(\n (key: string) => {\n if (selectedRowKeys.includes(key)) {\n setSelectedRowKeys(selectedRowKeys.filter((k) => k !== key));\n } else {\n setSelectedRowKeys(mode === \"single\" ? [key] : [...selectedRowKeys, key]);\n }\n },\n [mode, selectedRowKeys, setSelectedRowKeys],\n );\n\n const clear = useCallback(() => {\n if (selectedRowKeys.length === 0) return;\n setSelectedRowKeys([]);\n }, [selectedRowKeys.length, setSelectedRowKeys]);\n\n const isSelected = useCallback(\n (key: string) => selectedRowKeys.includes(key),\n [selectedRowKeys],\n );\n\n return {\n selectedRowKeys,\n setSelectedRowKeys,\n toggle,\n select,\n deselect,\n clear,\n isSelected,\n count: selectedRowKeys.length,\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nexport interface UseTableStateOptions<T> {\n /** localStorage key — required to enable persistence. Hook acts as plain useState if omitted. */\n storageKey?: string;\n /** Initial value (used when storage is empty / invalid / disabled). */\n defaultValue: T;\n /**\n * Bump to invalidate previously persisted data. Stored records with a\n * different version are discarded on read.\n */\n version?: number;\n /**\n * Optional migration from older versions. Receives `{ version, value }`\n * and returns a value of the current schema, or `undefined` to discard.\n */\n migrate?: (stored: { version: number; value: unknown }) => T | undefined;\n /** Override the storage backend — useful in tests / SSR. Defaults to `window.localStorage`. */\n storage?: Storage | null;\n}\n\ninterface PersistedEnvelope<T> {\n version: number;\n value: T;\n}\n\nfunction readPersisted<T>(\n storage: Storage | null | undefined,\n storageKey: string,\n currentVersion: number,\n migrate?: UseTableStateOptions<T>[\"migrate\"],\n): T | undefined {\n if (!storage) return undefined;\n try {\n const raw = storage.getItem(storageKey);\n if (raw === null) return undefined;\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed !== \"object\" || parsed === null) return undefined;\n const envelope = parsed as Partial<PersistedEnvelope<T>>;\n if (typeof envelope.version !== \"number\" || !(\"value\" in envelope))\n return undefined;\n if (envelope.version === currentVersion) return envelope.value as T;\n if (migrate)\n return migrate({\n version: envelope.version,\n value: envelope.value as unknown,\n });\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writePersisted<T>(\n storage: Storage | null | undefined,\n storageKey: string,\n version: number,\n value: T,\n) {\n if (!storage) return;\n try {\n storage.setItem(\n storageKey,\n JSON.stringify({ version, value } satisfies PersistedEnvelope<T>),\n );\n } catch {\n // Storage can be unavailable in private mode or sandboxed iframes.\n }\n}\n\nfunction resolveStorage(\n override: Storage | null | undefined,\n): Storage | null {\n if (override !== undefined) return override;\n if (typeof window === \"undefined\") return null;\n try {\n return window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * useTableState — versioned, persistent useState.\n *\n * Drop-in replacement for `useState<T>` that mirrors writes to\n * localStorage (or a custom Storage adapter) under `storageKey`.\n * Bump `version` to invalidate older records, or provide `migrate`\n * to transform them.\n *\n * Industry pattern: TanStack / MRT / MantineRT all recommend\n * \"consumer code with `onStateChange` callbacks\" for persistence —\n * this hook is the canonical small wrapper.\n *\n * @example\n * const [filters, setFilters] = useTableState({\n * storageKey: \"orders.filters.v1\",\n * defaultValue: [] as TableFilter[],\n * version: 1,\n * });\n */\nexport function useTableState<T>(\n options: UseTableStateOptions<T>,\n): [T, (next: T | ((prev: T) => T)) => void] {\n const {\n storageKey,\n defaultValue,\n version = 1,\n migrate,\n storage: storageOverride,\n } = options;\n\n const storage = resolveStorage(storageOverride);\n const [value, setValue] = useState<T>(() => {\n if (storageKey === undefined) return defaultValue;\n const persisted = readPersisted<T>(storage, storageKey, version, migrate);\n return persisted !== undefined ? persisted : defaultValue;\n });\n\n useEffect(() => {\n if (storageKey === undefined) return;\n writePersisted(storage, storageKey, version, value);\n }, [storage, storageKey, value, version]);\n\n const setNext = useCallback(\n (next: T | ((prev: T) => T)) => {\n setValue((prev) =>\n typeof next === \"function\" ? (next as (prev: T) => T)(prev) : next,\n );\n },\n [],\n );\n\n return [value, setNext];\n}\n","import { useCallback, useState } from \"react\";\nimport type {\n TableViewItem,\n TableViewSnapshot,\n} from \"../components/data-display/Table\";\nimport { useTableState } from \"./useTableState\";\n\nexport interface UseTableViewsOptions {\n /** Built-in (preset) views — never persisted, always present in the merged list. */\n items: TableViewItem[];\n /** Active view key on first render. Default: `items[0]?.key`. */\n defaultActive?: string;\n /** Controlled active view key. */\n activeKey?: string;\n /** Fires when the active view changes (via `apply` or `setActiveKey`). */\n onActiveKeyChange?: (key: string) => void;\n /** Fires when a user-saved view list mutates. */\n onSavedViewsChange?: (views: TableViewItem[]) => void;\n /**\n * Optional persistence — when set, user-saved views are stored under\n * this localStorage key (versioned via `useTableState`).\n */\n storageKey?: string;\n /** Max number of user-saved views kept. Default 20. */\n maxSavedViews?: number;\n}\n\nexport interface UseTableViewsResult {\n /** Merged list (built-in + saved). */\n items: TableViewItem[];\n /** Saved-by-user subset only. */\n savedViews: TableViewItem[];\n activeKey: string | undefined;\n setActiveKey: (key: string) => void;\n /** Apply a view — sets active key and returns the snapshot for state hydration. */\n applyView: (view: TableViewItem) => TableViewSnapshot;\n /** Persist a new user view from the current snapshot. Returns the saved view. */\n saveView: (label: string, snapshot: TableViewSnapshot) => TableViewItem;\n /** Remove a saved view by key. No-op for built-in views. */\n deleteView: (key: string) => void;\n /** Mark active view as \"custom\" (e.g. after manual filter/sort edits). */\n markCustom: () => void;\n}\n\nconst CUSTOM_KEY = \"custom\";\n\nfunction isPersistableLabel(label: TableViewItem[\"label\"]): label is string {\n return typeof label === \"string\";\n}\n\nfunction generateKey(): string {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return `view-${crypto.randomUUID()}`;\n }\n return `view-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * useTableViews — saved-view state for tabbed Table headers.\n *\n * Owns the active-view key + a list of user-saved views. Built-in\n * (preset) views pass through unchanged; user-saved views are\n * persisted to localStorage when `storageKey` is provided.\n *\n * @example\n * const views = useTableViews({\n * items: BUILT_IN_VIEWS,\n * storageKey: \"orders.views.v1\",\n * });\n * <Table\n * views={{\n * items: views.items,\n * activeKey: views.activeKey,\n * onActiveKeyChange: views.setActiveKey,\n * onViewApply: (v) => {\n * const snapshot = views.applyView(v);\n * setFilters(snapshot.filters ?? []);\n * setSort(snapshot.sort ?? null);\n * },\n * onDeleteView: (v) => views.deleteView(v.key),\n * }}\n * />\n */\nexport function useTableViews(\n options: UseTableViewsOptions,\n): UseTableViewsResult {\n const {\n items: builtInItems,\n defaultActive,\n activeKey: controlledActiveKey,\n onActiveKeyChange,\n onSavedViewsChange,\n storageKey,\n maxSavedViews = 20,\n } = options;\n\n const [internalActiveKey, setInternalActiveKey] = useState<string | undefined>(\n defaultActive ?? builtInItems[0]?.key,\n );\n const activeKey = controlledActiveKey ?? internalActiveKey;\n\n const [savedViews, setSavedViewsState] = useTableState<TableViewItem[]>({\n storageKey,\n defaultValue: [],\n version: 1,\n });\n\n const updateSavedViews = useCallback(\n (next: TableViewItem[] | ((prev: TableViewItem[]) => TableViewItem[])) => {\n setSavedViewsState((prev) => {\n const resolved = typeof next === \"function\" ? next(prev) : next;\n const trimmed = resolved.slice(-maxSavedViews);\n onSavedViewsChange?.(trimmed);\n return trimmed;\n });\n },\n [maxSavedViews, onSavedViewsChange, setSavedViewsState],\n );\n\n const setActiveKey = useCallback(\n (key: string) => {\n if (controlledActiveKey === undefined) setInternalActiveKey(key);\n onActiveKeyChange?.(key);\n },\n [controlledActiveKey, onActiveKeyChange],\n );\n\n const applyView = useCallback(\n (view: TableViewItem): TableViewSnapshot => {\n setActiveKey(view.key);\n return {\n filters: view.filters,\n sort: view.sort,\n columnVisibility: view.columnVisibility,\n };\n },\n [setActiveKey],\n );\n\n const saveView = useCallback(\n (label: string, snapshot: TableViewSnapshot): TableViewItem => {\n const next: TableViewItem = {\n key: generateKey(),\n label,\n ...snapshot,\n deletable: true,\n };\n updateSavedViews((prev) => [...prev, next]);\n setActiveKey(next.key);\n return next;\n },\n [setActiveKey, updateSavedViews],\n );\n\n const deleteView = useCallback(\n (key: string) => {\n const target = savedViews.find((view) => view.key === key);\n if (!target || !isPersistableLabel(target.label)) return;\n updateSavedViews((prev) => prev.filter((view) => view.key !== key));\n if (activeKey === key) {\n const firstBuiltIn = builtInItems[0]?.key;\n if (firstBuiltIn !== undefined) setActiveKey(firstBuiltIn);\n }\n },\n [activeKey, builtInItems, savedViews, setActiveKey, updateSavedViews],\n );\n\n const markCustom = useCallback(() => {\n if (activeKey === CUSTOM_KEY) return;\n setActiveKey(CUSTOM_KEY);\n }, [activeKey, setActiveKey]);\n\n return {\n items: [...builtInItems, ...savedViews],\n savedViews,\n activeKey,\n setActiveKey,\n applyView,\n saveView,\n deleteView,\n markCustom,\n };\n}\n"]}