@spacesync/client 0.1.10 → 0.1.11

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 (123) hide show
  1. package/dist/analog-clock-picker.js +3 -11
  2. package/dist/analog-clock-picker.js.map +1 -1
  3. package/dist/booking-schedule-calendars.js +5 -11
  4. package/dist/booking-schedule-calendars.js.map +1 -1
  5. package/dist/booking-space-layout-picker.js +8 -11
  6. package/dist/booking-space-layout-picker.js.map +1 -1
  7. package/dist/button-Iem7kbk0.d.ts +16 -0
  8. package/dist/chat-stick-to-bottom.js +0 -10
  9. package/dist/chat-stick-to-bottom.js.map +1 -1
  10. package/dist/chunk-2IZODKTR.js +116 -0
  11. package/dist/chunk-2IZODKTR.js.map +1 -0
  12. package/dist/chunk-2TT2ZGMT.js +21 -0
  13. package/dist/chunk-2TT2ZGMT.js.map +1 -0
  14. package/dist/chunk-3MAGTCCN.js +192 -0
  15. package/dist/chunk-3MAGTCCN.js.map +1 -0
  16. package/dist/chunk-56H7UFAW.js +237 -0
  17. package/dist/chunk-56H7UFAW.js.map +1 -0
  18. package/dist/chunk-5HOK5JHR.js +60 -0
  19. package/dist/chunk-5HOK5JHR.js.map +1 -0
  20. package/dist/{chunk-H7EX6B6N.js → chunk-5NOKULX2.js} +5 -4
  21. package/dist/chunk-5NOKULX2.js.map +1 -0
  22. package/dist/chunk-6VJQIBC3.js +715 -0
  23. package/dist/chunk-6VJQIBC3.js.map +1 -0
  24. package/dist/chunk-BQVMO33N.js +133 -0
  25. package/dist/chunk-BQVMO33N.js.map +1 -0
  26. package/dist/chunk-CXXOKCLJ.js +37 -0
  27. package/dist/chunk-CXXOKCLJ.js.map +1 -0
  28. package/dist/chunk-FN4BWFDX.js +43 -0
  29. package/dist/chunk-FN4BWFDX.js.map +1 -0
  30. package/dist/chunk-HRHDOLWU.js +62 -0
  31. package/dist/chunk-HRHDOLWU.js.map +1 -0
  32. package/dist/chunk-HZB2EHEH.js +216 -0
  33. package/dist/chunk-HZB2EHEH.js.map +1 -0
  34. package/dist/chunk-IBGGQXTH.js +21 -0
  35. package/dist/chunk-IBGGQXTH.js.map +1 -0
  36. package/dist/chunk-JCEOU7BU.js +128 -0
  37. package/dist/chunk-JCEOU7BU.js.map +1 -0
  38. package/dist/{chunk-RV5PMZYZ.js → chunk-MBZAYH5D.js} +4 -18
  39. package/dist/chunk-MBZAYH5D.js.map +1 -0
  40. package/dist/chunk-NWVNYKND.js +153 -0
  41. package/dist/chunk-NWVNYKND.js.map +1 -0
  42. package/dist/chunk-OV5ODANJ.js +224 -0
  43. package/dist/chunk-OV5ODANJ.js.map +1 -0
  44. package/dist/chunk-PPMJZVR4.js +37 -0
  45. package/dist/chunk-PPMJZVR4.js.map +1 -0
  46. package/dist/{chunk-CKCXQBHQ.js → chunk-RC5SWZPB.js} +5 -4
  47. package/dist/chunk-RC5SWZPB.js.map +1 -0
  48. package/dist/chunk-SHMKDGFF.js +75 -0
  49. package/dist/chunk-SHMKDGFF.js.map +1 -0
  50. package/dist/chunk-T3SOBIYA.js +61 -0
  51. package/dist/chunk-T3SOBIYA.js.map +1 -0
  52. package/dist/chunk-TH5RASJS.js +97 -0
  53. package/dist/chunk-TH5RASJS.js.map +1 -0
  54. package/dist/{chunk-LUB7QWGU.js → chunk-VIJ2HWPZ.js} +5 -159
  55. package/dist/chunk-VIJ2HWPZ.js.map +1 -0
  56. package/dist/chunk-VQ63T7CJ.js +22 -0
  57. package/dist/chunk-VQ63T7CJ.js.map +1 -0
  58. package/dist/chunk-XDVGFHK4.js +50 -0
  59. package/dist/chunk-XDVGFHK4.js.map +1 -0
  60. package/dist/chunk-XI4BQY5T.js +188 -0
  61. package/dist/chunk-XI4BQY5T.js.map +1 -0
  62. package/dist/detail-page-header.js +1 -1
  63. package/dist/file-viewer-dialog.js +3 -9
  64. package/dist/file-viewer-dialog.js.map +1 -1
  65. package/dist/floor-switcher.js +5 -9
  66. package/dist/floor-switcher.js.map +1 -1
  67. package/dist/layout-canvas-view.js +8 -11
  68. package/dist/page-list-chrome.js +5 -3
  69. package/dist/page-list-loading.js +5 -3
  70. package/dist/page-list-loading.js.map +1 -1
  71. package/dist/platform-support-message-composer.js +2 -10
  72. package/dist/platform-support-message-composer.js.map +1 -1
  73. package/dist/sidebar-Dzvrjr69.d.ts +85 -0
  74. package/dist/styles/theme.css +52 -2
  75. package/dist/styles/theme.css.map +1 -1
  76. package/dist/theme-appearance-control.js +2 -1
  77. package/dist/theme-appearance-control.js.map +1 -1
  78. package/dist/ui/accordion.d.ts +9 -0
  79. package/dist/ui/accordion.js +4 -0
  80. package/dist/ui/accordion.js.map +1 -0
  81. package/dist/ui/calendar.d.ts +6 -0
  82. package/dist/ui/calendar.js +4 -0
  83. package/dist/ui/calendar.js.map +1 -0
  84. package/dist/ui/carousel.d.ts +22 -0
  85. package/dist/ui/carousel.js +5 -0
  86. package/dist/ui/carousel.js.map +1 -0
  87. package/dist/ui/chart.d.ts +42 -0
  88. package/dist/ui/chart.js +229 -0
  89. package/dist/ui/chart.js.map +1 -0
  90. package/dist/ui/command.d.ts +19 -0
  91. package/dist/ui/command.js +5 -0
  92. package/dist/ui/command.js.map +1 -0
  93. package/dist/ui/context-menu.d.ts +27 -0
  94. package/dist/ui/context-menu.js +4 -0
  95. package/dist/ui/context-menu.js.map +1 -0
  96. package/dist/ui/form.d.ts +27 -0
  97. package/dist/ui/form.js +5 -0
  98. package/dist/ui/form.js.map +1 -0
  99. package/dist/ui/input-otp.d.ts +13 -0
  100. package/dist/ui/input-otp.js +4 -0
  101. package/dist/ui/input-otp.js.map +1 -0
  102. package/dist/ui/menubar.d.ts +28 -0
  103. package/dist/ui/menubar.js +4 -0
  104. package/dist/ui/menubar.js.map +1 -0
  105. package/dist/ui/navigation-menu.d.ts +17 -0
  106. package/dist/ui/navigation-menu.js +4 -0
  107. package/dist/ui/navigation-menu.js.map +1 -0
  108. package/dist/ui/resizable.d.ts +10 -0
  109. package/dist/ui/resizable.js +4 -0
  110. package/dist/ui/resizable.js.map +1 -0
  111. package/dist/ui/sidebar.d.ts +7 -0
  112. package/dist/ui/sidebar.js +9 -0
  113. package/dist/ui/sidebar.js.map +1 -0
  114. package/dist/ui.d.ts +28 -272
  115. package/dist/ui.js +2427 -6
  116. package/dist/ui.js.map +1 -1
  117. package/package.json +5 -1
  118. package/dist/chunk-CKCXQBHQ.js.map +0 -1
  119. package/dist/chunk-F7MU5T46.js +0 -5146
  120. package/dist/chunk-F7MU5T46.js.map +0 -1
  121. package/dist/chunk-H7EX6B6N.js.map +0 -1
  122. package/dist/chunk-LUB7QWGU.js.map +0 -1
  123. package/dist/chunk-RV5PMZYZ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/carousel.tsx"],"names":[],"mappings":";;;;;;AA6BA,IAAM,eAAA,GAAwB,oBAA2C,IAAI,CAAA;AAE7E,SAAS,WAAA,GAAc;AACrB,EAAA,MAAM,OAAA,GAAgB,iBAAW,eAAe,CAAA;AAEhD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,QAAA,CAAS,UAAuB,WAAA,EAAwC;AAC/E,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,gBAAA,CAAiB,2BAA2B,CAAA;AACnE,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,gBAAgB,YAAA,GAAe,QAAA,CAAS,WAAA,GAAc,GAAA,GAAM,SAAS,YAAA,GAAe,GAAA;AAAA,EAC7F;AACA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,WAAA,KAAgB,eACnB,MAAA,CAAO,UAAA,GAAa,MAAM,UAAA,GAC1B,MAAA,CAAO,YAAY,KAAA,CAAM,SAAA;AAAA,EAC/B;AACA,EAAA,OAAO,WAAA,KAAgB,YAAA,GAAe,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,YAAA;AAClE;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,WAAA,GAAc,YAAA;AAAA,EACd,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,MAAM,WAAA,GAAoB,aAA8B,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,eAAgC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAS,KAAK,CAAA;AAE9D,EAAA,MAAM,cAAA,GAAuB,KAAA,CAAA,WAAA,CAAY,CAAC,IAAA,KAAgC;AACxE,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAA0B,kBAAY,MAAM;AAChD,IAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,GAAA,GAAM,WAAA,KAAgB,YAAA,GAAe,EAAA,CAAG,aAAa,EAAA,CAAG,SAAA;AAC9D,IAAA,MAAM,GAAA,GACJ,gBAAgB,YAAA,GACZ,EAAA,CAAG,cAAc,EAAA,CAAG,WAAA,GACpB,EAAA,CAAG,YAAA,GAAe,EAAA,CAAG,YAAA;AAC3B,IAAA,gBAAA,CAAiB,MAAM,CAAC,CAAA;AACxB,IAAA,gBAAA,CAAiB,GAAA,GAAM,MAAM,CAAC,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,WAAA,GAAoB,KAAA,CAAA,WAAA;AAAA,IACxB,CAAC,GAAA,KAAgB;AACf,MAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,EAAI,WAAW,CAAA,GAAI,GAAA;AAC1C,MAAA,EAAA,CAAG,QAAA,CAAS;AAAA,QACV,IAAA,EAAM,WAAA,KAAgB,YAAA,GAAe,KAAA,GAAQ,CAAA;AAAA,QAC7C,GAAA,EAAK,WAAA,KAAgB,UAAA,GAAa,KAAA,GAAQ,CAAA;AAAA,QAC1C,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,UAAA,GAAmB,kBAAY,MAAM;AACzC,IAAA,WAAA,CAAY,EAAE,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAA,GAAmB,kBAAY,MAAM;AACzC,IAAA,WAAA,CAAY,CAAC,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,KAAA,KAA+C;AAC9C,MAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,QAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,UAAA,EAAW;AAAA,QACb,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,YAAA,EAAc;AACrC,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,UAAA,EAAW;AAAA,QACb;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,QAAQ,SAAA,EAAW;AAC3B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,WAAA,EAAa;AACpC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,UAAA,EAAY,UAAU;AAAA,GACtC;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,UAAA;AACX,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,iBAAA,EAAkB;AAClB,IAAA,EAAA,CAAG,iBAAiB,QAAA,EAAU,iBAAA,EAAmB,EAAE,OAAA,EAAS,MAAM,CAAA;AAClE,IAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,iBAAiB,CAAA;AACrD,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,MAAM,QAAQ,EAAA,CAAG,iBAAA;AACjB,IAAA,IAAI,KAAA,YAAiB,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AACpD,IAAA,OAAO,MAAM;AACX,MAAA,EAAA,CAAG,mBAAA,CAAoB,UAAU,iBAAiB,CAAA;AAClD,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,iBAAA,EAAmB,UAAU,CAAC,CAAA;AAElC,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAA,GAAS;AAAA,MACP,UAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,GAAG,CAAC,MAAA,EAAQ,YAAY,UAAA,EAAY,aAAA,EAAe,aAAa,CAAC,CAAA;AAEjE,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,WAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,CAAA;AAAA,UACV,gBAAA,EAAkB,aAAA;AAAA,UAClB,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,UACnC,IAAA,EAAK,QAAA;AAAA,UACL,sBAAA,EAAqB,UAAA;AAAA,UACrB,WAAA,EAAU,UAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,MAAM,EAAE,cAAA,EAAgB,WAAA,EAAY,GAAI,WAAA,EAAY;AAEpD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,cAAA;AAAA,MACL,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8FAAA;AAAA,QACA,WAAA,KAAgB,eACZ,yDAAA,GACA;AAAA,OACN;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,kBAAA;AAAA,UACV,WAAW,EAAA,CAAG,MAAA,EAAQ,WAAA,KAAgB,UAAA,IAAc,YAAY,SAAS,CAAA;AAAA,UACxE,GAAG;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,sBAAA,EAAqB,OAAA;AAAA,MACrB,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,mBAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,2DAAA;AAAA,QACA,WAAA,KAAgB,eACZ,iCAAA,GACA,2CAAA;AAAA,QACJ,CAAC,aAAA,IAAiB,QAAA;AAAA,QAClB;AAAA,OACF;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MAET,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACX,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC1C;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,eAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,2DAAA;AAAA,QACA,WAAA,KAAgB,eACZ,kCAAA,GACA,8CAAA;AAAA,QACJ,CAAC,aAAA,IAAiB,QAAA;AAAA,QAClB;AAAA,OACF;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MAET,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,wBACZ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACtC;AAEJ","file":"chunk-56H7UFAW.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = {\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n};\n\ntype CarouselProps = {\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n orientation: \"horizontal\" | \"vertical\";\n setViewportRef: (node: HTMLDivElement | null) => void;\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n};\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nfunction itemStep(viewport: HTMLElement, orientation: \"horizontal\" | \"vertical\") {\n const items = viewport.querySelectorAll(\"[data-slot=carousel-item]\");\n const first = items[0] as HTMLElement | undefined;\n const second = items[1] as HTMLElement | undefined;\n if (!first) {\n return orientation === \"horizontal\" ? viewport.clientWidth * 0.8 : viewport.clientHeight * 0.8;\n }\n if (second) {\n return orientation === \"horizontal\"\n ? second.offsetLeft - first.offsetLeft\n : second.offsetTop - first.offsetTop;\n }\n return orientation === \"horizontal\" ? first.offsetWidth : first.offsetHeight;\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n setApi,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const viewportRef = React.useRef<HTMLDivElement | null>(null);\n const [viewportEl, setViewportEl] = React.useState<HTMLDivElement | null>(null);\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const setViewportRef = React.useCallback((node: HTMLDivElement | null) => {\n viewportRef.current = node;\n setViewportEl(node);\n }, []);\n\n const updateScrollState = React.useCallback(() => {\n const el = viewportRef.current;\n if (!el) return;\n const pos = orientation === \"horizontal\" ? el.scrollLeft : el.scrollTop;\n const max =\n orientation === \"horizontal\"\n ? el.scrollWidth - el.clientWidth\n : el.scrollHeight - el.clientHeight;\n setCanScrollPrev(pos > 1);\n setCanScrollNext(pos < max - 1);\n }, [orientation]);\n\n const scrollByDir = React.useCallback(\n (dir: -1 | 1) => {\n const el = viewportRef.current;\n if (!el) return;\n const delta = itemStep(el, orientation) * dir;\n el.scrollBy({\n left: orientation === \"horizontal\" ? delta : 0,\n top: orientation === \"vertical\" ? delta : 0,\n behavior: \"smooth\",\n });\n },\n [orientation],\n );\n\n const scrollPrev = React.useCallback(() => {\n scrollByDir(-1);\n }, [scrollByDir]);\n\n const scrollNext = React.useCallback(() => {\n scrollByDir(1);\n }, [scrollByDir]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (orientation === \"horizontal\") {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [orientation, scrollNext, scrollPrev],\n );\n\n React.useEffect(() => {\n const el = viewportEl;\n if (!el) return;\n updateScrollState();\n el.addEventListener(\"scroll\", updateScrollState, { passive: true });\n const observer = new ResizeObserver(updateScrollState);\n observer.observe(el);\n const track = el.firstElementChild;\n if (track instanceof Element) observer.observe(track);\n return () => {\n el.removeEventListener(\"scroll\", updateScrollState);\n observer.disconnect();\n };\n }, [updateScrollState, viewportEl]);\n\n React.useEffect(() => {\n setApi?.({\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n });\n }, [setApi, scrollPrev, scrollNext, canScrollPrev, canScrollNext]);\n\n return (\n <CarouselContext.Provider\n value={{\n orientation,\n setViewportRef,\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n tabIndex={0}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { setViewportRef, orientation } = useCarousel();\n\n return (\n <div\n ref={setViewportRef}\n data-slot=\"carousel-viewport\"\n className={cn(\n \"scroll-smooth [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\",\n orientation === \"horizontal\"\n ? \"overflow-x-auto overflow-y-hidden snap-x snap-mandatory\"\n : \"overflow-y-auto overflow-x-hidden snap-y snap-mandatory\",\n )}\n >\n <div\n data-slot=\"carousel-content\"\n className={cn(\"flex\", orientation === \"vertical\" && \"flex-col\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\"min-w-0 shrink-0 grow-0 snap-start basis-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n type=\"button\"\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n {...props}\n className={cn(\n \"absolute z-10 size-8 rounded-full bg-background shadow-sm\",\n orientation === \"horizontal\"\n ? \"top-1/2 left-2 -translate-y-1/2\"\n : \"top-2 left-1/2 -translate-x-1/2 rotate-90\",\n !canScrollPrev && \"hidden\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n type=\"button\"\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n {...props}\n className={cn(\n \"absolute z-10 size-8 rounded-full bg-background shadow-sm\",\n orientation === \"horizontal\"\n ? \"top-1/2 right-2 -translate-y-1/2\"\n : \"bottom-2 left-1/2 -translate-x-1/2 rotate-90\",\n !canScrollNext && \"hidden\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"]}
@@ -0,0 +1,60 @@
1
+ import { cn } from './chunk-DMPSQ22Q.js';
2
+ import { ChevronRight, ChevronLeft } from 'lucide-react';
3
+ import { DayPicker } from 'react-day-picker';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ function Calendar({
7
+ className,
8
+ classNames,
9
+ showOutsideDays = true,
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ DayPicker,
14
+ {
15
+ showOutsideDays,
16
+ className: cn("p-3", className),
17
+ classNames: {
18
+ months: "flex flex-col sm:flex-row gap-2",
19
+ month: "flex flex-col gap-4",
20
+ caption: "flex justify-center pt-1 relative items-center w-full",
21
+ caption_label: "text-sm font-medium",
22
+ nav: "flex items-center gap-1",
23
+ nav_button: cn(
24
+ "inline-flex size-7 items-center justify-center rounded-md border border-white/15 bg-card/5 p-0 text-popover-foreground transition-colors hover:bg-card/10 hover:text-white"
25
+ ),
26
+ nav_button_previous: "absolute left-1",
27
+ nav_button_next: "absolute right-1",
28
+ table: "w-full border-collapse space-x-1",
29
+ head_row: "flex",
30
+ head_cell: "w-9 rounded-md font-normal text-[0.8rem] text-popover-foreground/50",
31
+ row: "flex w-full mt-2",
32
+ cell: cn(
33
+ "relative p-0 text-center text-sm focus-within:relative focus-within:z-20",
34
+ props.mode === "range" ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md [&:has([aria-selected])]:bg-card/10" : "[&:has([aria-selected])]:rounded-md"
35
+ ),
36
+ day: cn(
37
+ "inline-flex size-9 items-center justify-center rounded-md p-0 text-sm font-normal text-popover-foreground transition-colors hover:bg-card/10 hover:text-white aria-selected:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/25"
38
+ ),
39
+ day_range_start: "day-range-start rounded-md bg-card font-medium text-foreground hover:bg-card hover:text-foreground",
40
+ day_range_end: "day-range-end rounded-md bg-card font-medium text-foreground hover:bg-card hover:text-foreground",
41
+ day_selected: "rounded-md bg-card font-medium text-foreground hover:bg-card hover:text-foreground focus:bg-card focus:text-foreground focus-visible:ring-0",
42
+ day_today: "rounded-md bg-card/10 font-medium text-popover-foreground aria-selected:bg-card aria-selected:text-foreground",
43
+ day_outside: "day-outside text-popover-foreground/30 aria-selected:bg-card/15 aria-selected:text-popover-foreground/50",
44
+ day_disabled: "text-popover-foreground/30 opacity-50",
45
+ day_range_middle: "rounded-none aria-selected:bg-card/10 aria-selected:text-popover-foreground",
46
+ day_hidden: "invisible",
47
+ ...classNames
48
+ },
49
+ components: {
50
+ IconLeft: ({ className: className2, ...props2 }) => /* @__PURE__ */ jsx(ChevronLeft, { className: cn("size-4", className2), strokeWidth: 2, ...props2 }),
51
+ IconRight: ({ className: className2, ...props2 }) => /* @__PURE__ */ jsx(ChevronRight, { className: cn("size-4", className2), strokeWidth: 2, ...props2 })
52
+ },
53
+ ...props
54
+ }
55
+ );
56
+ }
57
+
58
+ export { Calendar };
59
+ //# sourceMappingURL=chunk-5HOK5JHR.js.map
60
+ //# sourceMappingURL=chunk-5HOK5JHR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/calendar.tsx"],"names":["className","props"],"mappings":";;;;;AAQA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAA2C;AACzC,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,SAAS,CAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,iCAAA;AAAA,QACR,KAAA,EAAO,qBAAA;AAAA,QACP,OAAA,EAAS,uDAAA;AAAA,QACT,aAAA,EAAe,qBAAA;AAAA,QACf,GAAA,EAAK,yBAAA;AAAA,QACL,UAAA,EAAY,EAAA;AAAA,UACV;AAAA,SACF;AAAA,QACA,mBAAA,EAAqB,iBAAA;AAAA,QACrB,eAAA,EAAiB,kBAAA;AAAA,QACjB,KAAA,EAAO,kCAAA;AAAA,QACP,QAAA,EAAU,MAAA;AAAA,QACV,SAAA,EACE,qEAAA;AAAA,QACF,GAAA,EAAK,kBAAA;AAAA,QACL,IAAA,EAAM,EAAA;AAAA,UACJ,0EAAA;AAAA,UACA,KAAA,CAAM,IAAA,KAAS,OAAA,GACX,0MAAA,GACA;AAAA,SACN;AAAA,QACA,GAAA,EAAK,EAAA;AAAA,UACH;AAAA,SACF;AAAA,QACA,eAAA,EACE,oGAAA;AAAA,QACF,aAAA,EACE,kGAAA;AAAA,QACF,YAAA,EACE,6IAAA;AAAA,QACF,SAAA,EACE,+GAAA;AAAA,QACF,WAAA,EACE,0GAAA;AAAA,QACF,YAAA,EAAc,uCAAA;AAAA,QACd,gBAAA,EACE,6EAAA;AAAA,QACF,UAAA,EAAY,WAAA;AAAA,QACZ,GAAG;AAAA,OACL;AAAA,MACA,UAAA,EAAY;AAAA,QACV,UAAU,CAAC,EAAE,WAAAA,UAAAA,EAAW,GAAGC,QAAM,qBAC/B,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,GAAG,QAAA,EAAUD,UAAS,GAAG,WAAA,EAAa,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,QAE9E,WAAW,CAAC,EAAE,WAAAD,UAAAA,EAAW,GAAGC,QAAM,qBAChC,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,GAAG,QAAA,EAAUD,UAAS,GAAG,WAAA,EAAa,CAAA,EAAI,GAAGC,MAAAA,EAAO;AAAA,OAEjF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-5HOK5JHR.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { DayPicker } from \"react-day-picker\";\n\nimport { cn } from \"./utils\";\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: React.ComponentProps<typeof DayPicker>) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-2\",\n month: \"flex flex-col gap-4\",\n caption: \"flex justify-center pt-1 relative items-center w-full\",\n caption_label: \"text-sm font-medium\",\n nav: \"flex items-center gap-1\",\n nav_button: cn(\n \"inline-flex size-7 items-center justify-center rounded-md border border-white/15 bg-card/5 p-0 text-popover-foreground transition-colors hover:bg-card/10 hover:text-white\",\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-x-1\",\n head_row: \"flex\",\n head_cell:\n \"w-9 rounded-md font-normal text-[0.8rem] text-popover-foreground/50\",\n row: \"flex w-full mt-2\",\n cell: cn(\n \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20\",\n props.mode === \"range\"\n ? \"[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md [&:has([aria-selected])]:bg-card/10\"\n : \"[&:has([aria-selected])]:rounded-md\",\n ),\n day: cn(\n \"inline-flex size-9 items-center justify-center rounded-md p-0 text-sm font-normal text-popover-foreground transition-colors hover:bg-card/10 hover:text-white aria-selected:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/25\",\n ),\n day_range_start:\n \"day-range-start rounded-md bg-card font-medium text-foreground hover:bg-card hover:text-foreground\",\n day_range_end:\n \"day-range-end rounded-md bg-card font-medium text-foreground hover:bg-card hover:text-foreground\",\n day_selected:\n \"rounded-md bg-card font-medium text-foreground hover:bg-card hover:text-foreground focus:bg-card focus:text-foreground focus-visible:ring-0\",\n day_today:\n \"rounded-md bg-card/10 font-medium text-popover-foreground aria-selected:bg-card aria-selected:text-foreground\",\n day_outside:\n \"day-outside text-popover-foreground/30 aria-selected:bg-card/15 aria-selected:text-popover-foreground/50\",\n day_disabled: \"text-popover-foreground/30 opacity-50\",\n day_range_middle:\n \"rounded-none aria-selected:bg-card/10 aria-selected:text-popover-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n IconLeft: ({ className, ...props }) => (\n <ChevronLeft className={cn(\"size-4\", className)} strokeWidth={2} {...props} />\n ),\n IconRight: ({ className, ...props }) => (\n <ChevronRight className={cn(\"size-4\", className)} strokeWidth={2} {...props} />\n ),\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar };\n"]}
@@ -1,6 +1,7 @@
1
- import { SearchField, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Pagination, PaginationContent, PaginationItem, PaginationPrevious, PaginationEllipsis, PaginationLink, PaginationNext } from './chunk-LUB7QWGU.js';
2
- import { Button } from './chunk-VHINHHZQ.js';
1
+ import { SearchField, Pagination, PaginationContent, PaginationItem, PaginationPrevious, PaginationEllipsis, PaginationLink, PaginationNext } from './chunk-BQVMO33N.js';
2
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-VIJ2HWPZ.js';
3
3
  import { shellTopBarPrimaryButtonClass, shellTopBarOutlineButtonClass } from './chunk-FCY5FYJB.js';
4
+ import { Button } from './chunk-VHINHHZQ.js';
4
5
  import { cn } from './chunk-DMPSQ22Q.js';
5
6
  import { useRef, useEffect } from 'react';
6
7
  import { ChevronUp, ChevronDown, ChevronsUpDown } from 'lucide-react';
@@ -576,5 +577,5 @@ function DetailSection({
576
577
  }
577
578
 
578
579
  export { DetailSection, DetailTableFrame, PageListEmptyState, PageListHeader, PageListHeaderRow, PageListPagination, PageListPrimaryActionButton, PageListRoot, PageListSearchField, PageListSecondaryActionButton, PageListSortableTh, PageListStatCard, PageListStatGrid, PageListStickyThead, PageListTable, PageListTableArea, PageListTd, PageListTh, PageListThead, PageListTitleRow, PageListToolbar, PageListTr, ShellTopBarPrimaryActionButton, ShellTopBarSecondaryActionButton, pageListStickyColumnClass, pageListTableWithFixedColumnsClass, pageListTdClass, pageListThClass };
579
- //# sourceMappingURL=chunk-H7EX6B6N.js.map
580
- //# sourceMappingURL=chunk-H7EX6B6N.js.map
580
+ //# sourceMappingURL=chunk-5NOKULX2.js.map
581
+ //# sourceMappingURL=chunk-5NOKULX2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/page-list-sticky-columns.ts","../src/shell/page-list-chrome.tsx"],"names":[],"mappings":"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","file":"chunk-5NOKULX2.js","sourcesContent":["import { cn } from \"../ui/utils\";\n\nexport type PageListColumnFixed = \"left\" | \"right\";\n\nexport type PageListStickyColumnOptions = {\n side: PageListColumnFixed;\n layer: \"head\" | \"body\";\n sortActive?: boolean;\n};\n\nconst leftEdgeShadow = cn(\n \"after:pointer-events-none after:absolute after:inset-y-0 after:right-0 after:w-3 after:translate-x-full\",\n \"after:bg-gradient-to-r after:from-black/[0.06] after:to-transparent dark:after:from-black/20\",\n \"after:opacity-0 after:transition-opacity\",\n \"group-data-[scrolled-x=true]/table-scroll:after:opacity-100\",\n);\n\nconst rightEdgeShadow = cn(\n \"before:pointer-events-none before:absolute before:inset-y-0 before:left-0 before:w-3 before:-translate-x-full\",\n \"before:bg-gradient-to-l before:from-black/[0.06] before:to-transparent dark:before:from-black/20\",\n \"before:opacity-0 before:transition-opacity\",\n \"group-data-[scrolled-x-end=false]/table-scroll:before:opacity-100\",\n);\n\n/** Sticky left/right column classes for horizontally scrollable list tables (antd-style). */\nexport function pageListStickyColumnClass({\n side,\n layer,\n sortActive = false,\n}: PageListStickyColumnOptions): string {\n const isHead = layer === \"head\";\n const pin = side === \"left\" ? \"left-0\" : \"right-0\";\n const edgeShadow = side === \"left\" ? leftEdgeShadow : rightEdgeShadow;\n\n return cn(\n \"relative sticky\",\n pin,\n isHead ? \"top-0 z-[3]\" : \"z-[1]\",\n sortActive\n ? \"bg-blue-50/80 dark:bg-blue-950/40\"\n : isHead\n ? \"bg-card\"\n : \"bg-card group-hover:bg-accent\",\n edgeShadow,\n );\n}\n\n/** Use on tables with fixed columns instead of border-collapse. */\nexport const pageListTableWithFixedColumnsClass = \"border-separate border-spacing-0\";\n","import { useEffect, useRef, type ButtonHTMLAttributes, type MouseEvent, type ReactNode } from \"react\";\nimport { ChevronDown, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport type { SortDirection } from \"../hooks/use-client-sort\";\nimport {\n pageListStickyColumnClass,\n pageListTableWithFixedColumnsClass,\n type PageListColumnFixed,\n} from \"./page-list-sticky-columns\";\nexport {\n pageListStickyColumnClass,\n pageListTableWithFixedColumnsClass,\n type PageListColumnFixed,\n} from \"./page-list-sticky-columns\";\nimport {\n shellTopBarNeutralActionDataAttr,\n shellTopBarOutlineButtonClass,\n shellTopBarPrimaryButtonClass,\n} from \"./shell-top-bar-chrome\";\nimport { cn } from \"../ui/utils\";\nimport { Button } from \"../ui/button\";\nimport { SearchField } from \"../ui/search-field\";\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"../ui/pagination\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport type { UseClientPaginationResult } from \"../hooks/use-client-pagination\";\n\n/** Fills the app main pane (white card on grey chrome). */\nexport function PageListRoot({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div className={cn(\"h-full flex flex-col min-h-0 bg-card\", className)} {...props} />\n );\n}\n\n/** White header block under the app chrome. */\nexport function PageListHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"shrink-0 bg-card border-b border-border px-5 pt-4 pb-4\", className)}\n {...props}\n />\n );\n}\n\nexport function PageListTitleRow({\n title,\n subtitle,\n actions,\n titleAddon,\n}: {\n title: ReactNode;\n subtitle?: string;\n actions?: ReactNode;\n /** Rendered before the title (e.g. live indicator). */\n titleAddon?: ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div>\n {titleAddon ? (\n <div className=\"flex items-center gap-2 mb-1\">\n {titleAddon}\n <h1 className=\"text-base font-semibold text-foreground\">{title}</h1>\n </div>\n ) : (\n <h1 className=\"text-base font-semibold text-foreground\">{title}</h1>\n )}\n {subtitle ? <p className=\"text-xs text-muted-foreground mt-1\">{subtitle}</p> : null}\n </div>\n {actions ? (\n <div className=\"flex flex-wrap items-center gap-2 shrink-0\">{actions}</div>\n ) : null}\n </div>\n );\n}\n\n/** Primary CTA in a page list header (e.g. New announcement). */\nexport function PageListPrimaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button\n type=\"button\"\n className={cn(\n \"h-9 gap-1.5 rounded-xl bg-blue-500 px-4 text-sm font-medium text-white hover:bg-blue-600\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Secondary CTA for empty states and alternate actions. */\nexport function PageListSecondaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n className={cn(\n \"h-9 gap-1.5 rounded-xl border-border bg-card px-4 text-sm font-medium text-foreground hover:bg-accent\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Primary CTA rendered in {@link ShellTopBar} actions on the dark shell. */\nexport function ShellTopBarPrimaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button type=\"button\" size=\"sm\" className={cn(shellTopBarPrimaryButtonClass, className)} {...props} />\n );\n}\n\n/** Secondary / outline CTA in {@link ShellTopBar} — same chrome as detail header actions (Edit member, Add adjustment). */\nexport function ShellTopBarSecondaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className={cn(shellTopBarOutlineButtonClass, className)}\n {...props}\n />\n );\n}\n\nexport { shellTopBarNeutralActionDataAttr };\n\n/** Search, filters, or secondary controls (spacing matches Live space). */\nexport function PageListToolbar({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"mt-4 flex flex-col gap-3 items-start\", className)} {...props} />;\n}\n\n/** Compact KPI tiles (Live space stat row). */\nexport function PageListStatGrid({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"mt-4 grid grid-cols-2 gap-2 sm:grid-cols-4\", className)}\n {...props}\n />\n );\n}\n\nexport type PageListStatTone = \"default\" | \"danger\" | \"success\";\n\nexport function PageListStatCard({\n label,\n value,\n tone = \"default\",\n}: {\n label: string;\n value: ReactNode;\n tone?: PageListStatTone;\n}) {\n const shell =\n tone === \"danger\"\n ? \"border-red-100 bg-red-50/80\"\n : tone === \"success\"\n ? \"border-emerald-100 bg-emerald-50/80\"\n : \"border-border bg-muted\";\n const labelClass =\n tone === \"danger\"\n ? \"text-red-600/80\"\n : tone === \"success\"\n ? \"text-emerald-700/80\"\n : \"text-muted-foreground\";\n const valueClass =\n tone === \"danger\" ? \"text-red-700\" : tone === \"success\" ? \"text-emerald-800\" : \"text-foreground\";\n\n return (\n <div className={cn(\"rounded-lg border px-3 py-2\", shell)}>\n <p className={cn(\"text-[11px] mb-0.5\", labelClass)}>{label}</p>\n <p className={cn(\"text-sm font-semibold tabular-nums\", valueClass)}>{value}</p>\n </div>\n );\n}\n\n/** Scrollable white region for tables / lists. Stay flush horizontally; table cells provide inset (same as Live space). */\nexport function PageListTableArea({ className, ...props }: React.ComponentProps<\"div\">) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const syncScrollState = () => {\n if (el.scrollLeft > 0) {\n el.dataset.scrolledX = \"true\";\n } else {\n delete el.dataset.scrolledX;\n }\n\n const atRightEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;\n if (!atRightEnd && el.scrollWidth > el.clientWidth) {\n el.dataset.scrolledXEnd = \"false\";\n } else {\n delete el.dataset.scrolledXEnd;\n }\n };\n\n syncScrollState();\n el.addEventListener(\"scroll\", syncScrollState, { passive: true });\n const resizeObserver = new ResizeObserver(syncScrollState);\n resizeObserver.observe(el);\n if (el.firstElementChild) {\n resizeObserver.observe(el.firstElementChild);\n }\n\n return () => {\n el.removeEventListener(\"scroll\", syncScrollState);\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"group/table-scroll flex-1 min-h-0 overflow-auto bg-card border-t border-border\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Search input styling shared with Live space. */\nexport function PageListSearchField({\n value,\n onChange,\n placeholder,\n className,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n className?: string;\n}) {\n return (\n <SearchField\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={className}\n />\n );\n}\n\n/** Sticky table header row (Live space). */\nexport function PageListStickyThead({ children }: { children: ReactNode }) {\n return (\n <thead className=\"sticky top-0 z-[2] bg-card shadow-[0_1px_0_0_var(--border)]\">\n {children}\n </thead>\n );\n}\n\n/** Non-sticky thead for embedded detail tables. */\nexport function PageListThead({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead className={cn(\"border-b border-border\", className)} {...props} />;\n}\n\n/** Standard `<table>` shell for list and detail tables. */\nexport function PageListTable({\n minWidth,\n fixedColumns = false,\n compact = false,\n className,\n style,\n ...props\n}: React.ComponentProps<\"table\"> & {\n minWidth?: number;\n fixedColumns?: boolean;\n compact?: boolean;\n}) {\n return (\n <table\n className={cn(\n \"w-full text-left text-sm\",\n fixedColumns ? pageListTableWithFixedColumnsClass : \"border-collapse\",\n compact && \"border-collapse\",\n className,\n )}\n style={minWidth != null ? { ...style, minWidth: `${minWidth}px` } : style}\n {...props}\n />\n );\n}\n\n/** Standard header row styling for column labels. */\nexport function PageListHeaderRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n className={cn(\"text-[10px] uppercase tracking-wide text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport type PageListTdTone = \"default\" | \"primary\" | \"muted\" | \"mono\";\nexport type PageListCellSize = \"default\" | \"comfortable\";\n\nconst pageListTdToneClass: Record<PageListTdTone, string> = {\n default: \"text-xs text-foreground\",\n primary: \"text-xs font-medium text-foreground\",\n muted: \"text-xs text-muted-foreground\",\n mono: \"text-xs font-mono text-muted-foreground\",\n};\n\nconst pageListTdSizeClass: Record<PageListCellSize, string> = {\n default: \"px-2 py-2.5 first:pl-5 last:pr-5\",\n comfortable: \"px-5 py-3.5 first:pl-5 last:pr-5\",\n};\n\n/** Standard data row — border, hover, optional click navigation. */\nexport function PageListTr({\n onClick,\n selected = false,\n className,\n onKeyDown,\n ...props\n}: React.ComponentProps<\"tr\"> & {\n onClick?: () => void;\n selected?: boolean;\n}) {\n const clickable = Boolean(onClick);\n\n return (\n <tr\n role={clickable ? \"link\" : undefined}\n tabIndex={clickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n clickable && onClick\n ? (e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : onKeyDown\n }\n className={cn(\n \"border-b border-border last:border-0 transition-colors\",\n clickable &&\n \"group cursor-pointer hover:bg-accent outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-inset\",\n selected && \"bg-accent/60\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport const pageListThClass =\n \"font-medium py-2.5 px-2 text-left text-[10px] uppercase tracking-wide text-muted-foreground first:pl-5 last:pr-5\";\n\nexport const pageListTdClass = pageListTdSizeClass.default;\n\nexport function PageListTh({\n children,\n columnFixed,\n align = \"left\",\n className,\n ...props\n}: React.ComponentProps<\"th\"> & {\n columnFixed?: PageListColumnFixed;\n align?: \"left\" | \"right\";\n}) {\n return (\n <th\n className={cn(\n pageListThClass,\n align === \"right\" && \"text-right\",\n columnFixed &&\n pageListStickyColumnClass({ side: columnFixed, layer: \"head\" }),\n className,\n )}\n {...props}\n >\n {children}\n </th>\n );\n}\n\nexport function PageListTd({\n children,\n columnFixed,\n align = \"left\",\n tone = \"default\",\n size = \"default\",\n className,\n ...props\n}: React.ComponentProps<\"td\"> & {\n columnFixed?: PageListColumnFixed;\n align?: \"left\" | \"right\";\n tone?: PageListTdTone;\n size?: PageListCellSize;\n}) {\n return (\n <td\n className={cn(\n pageListTdSizeClass[size],\n pageListTdToneClass[tone],\n tone === \"mono\" && align === \"right\" && \"font-medium text-foreground\",\n align === \"right\" && \"text-right\",\n columnFixed &&\n pageListStickyColumnClass({ side: columnFixed, layer: \"body\" }),\n className,\n )}\n {...props}\n >\n {children}\n </td>\n );\n}\n\nexport function PageListSortableTh<K extends string>({\n label,\n columnKey,\n sortKey,\n direction,\n onSort,\n align = \"left\",\n columnFixed,\n className,\n}: {\n label: ReactNode;\n columnKey: K;\n sortKey: K;\n direction: SortDirection;\n onSort: (key: K) => void;\n align?: \"left\" | \"right\";\n columnFixed?: PageListColumnFixed;\n className?: string;\n}) {\n const active = sortKey === columnKey;\n const ariaSort = active ? (direction === \"asc\" ? \"ascending\" : \"descending\") : undefined;\n const DirectionIcon = direction === \"asc\" ? ChevronUp : ChevronDown;\n\n return (\n <th\n className={cn(\n pageListThClass,\n align === \"right\" && \"text-right\",\n active &&\n \"text-blue-700 shadow-[inset_0_-2px_0_0_rgb(59,130,246)] dark:text-blue-300\",\n columnFixed &&\n pageListStickyColumnClass({\n side: columnFixed,\n layer: \"head\",\n sortActive: active,\n }),\n !columnFixed &&\n active &&\n \"bg-blue-50/80 dark:bg-blue-950/40\",\n className,\n )}\n aria-sort={ariaSort}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onSort(columnKey)}\n className={cn(\n \"group inline-flex h-auto w-full gap-1 rounded-none border-0 p-0 shadow-none\",\n \"text-[10px] font-medium uppercase tracking-wide\",\n \"hover:bg-transparent\",\n active\n ? \"text-blue-700 dark:text-blue-300\"\n : \"text-muted-foreground hover:text-foreground\",\n align === \"right\" ? \"justify-end\" : \"justify-start\",\n )}\n >\n <span>{label}</span>\n {active ? (\n <DirectionIcon\n size={12}\n strokeWidth={2}\n className=\"shrink-0 text-blue-600 dark:text-blue-400\"\n aria-hidden\n />\n ) : (\n <ChevronsUpDown\n size={12}\n strokeWidth={2}\n className=\"shrink-0 opacity-40 transition-opacity group-hover:opacity-70\"\n aria-hidden\n />\n )}\n </Button>\n </th>\n );\n}\n\nfunction getVisiblePages(page: number, totalPages: number): (number | \"ellipsis\")[] {\n if (totalPages <= 5) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages = new Set<number>([1, totalPages, page - 1, page, page + 1]);\n const sorted = [...pages].filter((p) => p >= 1 && p <= totalPages).sort((a, b) => a - b);\n\n const result: (number | \"ellipsis\")[] = [];\n for (let i = 0; i < sorted.length; i += 1) {\n const current = sorted[i]!;\n const prev = sorted[i - 1];\n if (prev !== undefined && current - prev > 1) {\n result.push(\"ellipsis\");\n }\n result.push(current);\n }\n return result;\n}\n\nfunction paginationLinkClick(page: number, setPage: (page: number) => void) {\n return (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n setPage(page);\n };\n}\n\nexport type PageListPaginationProps = Pick<\n UseClientPaginationResult<unknown>,\n | \"page\"\n | \"setPage\"\n | \"pageSize\"\n | \"setPageSize\"\n | \"pageSizeOptions\"\n | \"totalItems\"\n | \"totalPages\"\n | \"rangeStart\"\n | \"rangeEnd\"\n | \"canPrev\"\n | \"canNext\"\n>;\n\n/** Footer bar for paginated list tables — count, page-size selector, and page controls. */\nexport function PageListPagination({\n page,\n setPage,\n pageSize,\n setPageSize,\n pageSizeOptions,\n totalItems,\n totalPages,\n rangeStart,\n rangeEnd,\n canPrev,\n canNext,\n}: PageListPaginationProps) {\n if (totalItems === 0) return null;\n\n const visiblePages = getVisiblePages(page, totalPages);\n const showPageControls = totalPages > 1;\n\n return (\n <div\n className=\"shrink-0 flex flex-col gap-3 border-t border-border bg-card px-5 py-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <p className=\"text-sm text-muted-foreground tabular-nums\">\n Showing <span className=\"font-medium text-foreground\">{rangeStart}</span>\n {\"–\"}\n <span className=\"font-medium text-foreground\">{rangeEnd}</span> of{\" \"}\n <span className=\"font-medium text-foreground\">{totalItems}</span>\n </p>\n\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(value) => setPageSize(Number(value))}\n >\n <SelectTrigger className=\"h-8 w-[72px] rounded-lg border-border bg-card text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((option) => (\n <SelectItem key={option} value={String(option)}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {showPageControls ? (\n <Pagination className=\"mx-0 w-auto justify-end\">\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n aria-disabled={!canPrev}\n className={cn(!canPrev && \"pointer-events-none opacity-50\")}\n onClick={\n canPrev\n ? paginationLinkClick(page - 1, setPage)\n : (event) => event.preventDefault()\n }\n />\n </PaginationItem>\n {visiblePages.map((pageNum, index) =>\n pageNum === \"ellipsis\" ? (\n <PaginationItem key={`ellipsis-${index}`}>\n <PaginationEllipsis />\n </PaginationItem>\n ) : (\n <PaginationItem key={pageNum}>\n <PaginationLink\n href=\"#\"\n isActive={pageNum === page}\n onClick={paginationLinkClick(pageNum, setPage)}\n >\n {pageNum}\n </PaginationLink>\n </PaginationItem>\n ),\n )}\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n aria-disabled={!canNext}\n className={cn(!canNext && \"pointer-events-none opacity-50\")}\n onClick={\n canNext\n ? paginationLinkClick(page + 1, setPage)\n : (event) => event.preventDefault()\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n ) : null}\n </div>\n </div>\n );\n}\n\n/** Empty state for list pages inside PageListTableArea. */\nexport function PageListEmptyState({\n title,\n description,\n icon,\n action,\n variant = \"minimal\",\n className,\n}: {\n title: string;\n description?: string;\n icon?: ReactNode;\n action?: ReactNode;\n variant?: \"minimal\" | \"illustrated\";\n className?: string;\n}) {\n if (variant === \"minimal\") {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-24 gap-2\",\n className,\n )}\n >\n <span className=\"text-sm text-muted-foreground\">{title}</span>\n {description ? (\n <span className=\"text-xs text-muted-foreground\">{description}</span>\n ) : null}\n {action}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-20 gap-3 border-2 border-dashed border-border rounded-2xl bg-muted/50\",\n className,\n )}\n >\n {icon ? (\n <div className=\"w-10 h-10 rounded-2xl bg-muted flex items-center justify-center\">\n {icon}\n </div>\n ) : null}\n <div className=\"flex flex-col items-center gap-1 text-center px-4\">\n <p className=\"text-sm text-muted-foreground font-medium\">{title}</p>\n {description ? (\n <p className=\"text-xs text-muted-foreground max-w-sm\">{description}</p>\n ) : null}\n </div>\n {action}\n </div>\n );\n}\n\n/** Bordered scroll wrapper for embedded detail tables. */\nexport function DetailTableFrame({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"overflow-x-auto rounded-xl border border-border\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n/** Flat content section for detail pages — title + optional description + optional header action, separated by a thin divider. */\nexport function DetailSection({\n title,\n description,\n headerMeta,\n headerAction,\n children,\n}: {\n title: string;\n description?: string;\n /** Right-aligned non-interactive meta (counts, tax note). */\n headerMeta?: ReactNode;\n headerAction?: ReactNode;\n children: ReactNode;\n}) {\n return (\n <div className=\"border-b border-border px-6 py-6 last:border-0\">\n <div className=\"flex items-start justify-between gap-4 mb-4\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">{title}</h2>\n {description && <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n {headerAction ? (\n headerAction\n ) : headerMeta ? (\n <div className=\"shrink-0 text-xs text-muted-foreground\">{headerMeta}</div>\n ) : null}\n </div>\n {children}\n </div>\n );\n}\n"]}