@nori-ui/core 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/Table.shared-BymRgTnY.d.cts +54 -0
  2. package/dist/Table.shared-BymRgTnY.d.ts +54 -0
  3. package/dist/{chunk-HZKXPN6B.js → chunk-2HMQDJ22.js} +4 -4
  4. package/dist/{chunk-HZKXPN6B.js.map → chunk-2HMQDJ22.js.map} +1 -1
  5. package/dist/{chunk-KCLWPSV5.js → chunk-2RL6WCFC.js} +4 -4
  6. package/dist/{chunk-KCLWPSV5.js.map → chunk-2RL6WCFC.js.map} +1 -1
  7. package/dist/{chunk-FDBQOQMW.js → chunk-3BDDPFCI.js} +3 -3
  8. package/dist/{chunk-FDBQOQMW.js.map → chunk-3BDDPFCI.js.map} +1 -1
  9. package/dist/{chunk-WOF67PKT.js → chunk-3CEJ5TB4.js} +3 -3
  10. package/dist/{chunk-WOF67PKT.js.map → chunk-3CEJ5TB4.js.map} +1 -1
  11. package/dist/{chunk-BNDUQNG7.js → chunk-3OIWAS2P.js} +3 -3
  12. package/dist/{chunk-BNDUQNG7.js.map → chunk-3OIWAS2P.js.map} +1 -1
  13. package/dist/{chunk-6JVUVBZH.js → chunk-4PUPKWEP.js} +5 -5
  14. package/dist/{chunk-6JVUVBZH.js.map → chunk-4PUPKWEP.js.map} +1 -1
  15. package/dist/{chunk-6PO2IWB3.js → chunk-4UFAZLSZ.js} +5 -3
  16. package/dist/chunk-4UFAZLSZ.js.map +1 -0
  17. package/dist/{chunk-V2AWSDDZ.js → chunk-5PSC5HT4.js} +8 -125
  18. package/dist/chunk-5PSC5HT4.js.map +1 -0
  19. package/dist/{chunk-LWQZ257T.js → chunk-5XEGZFG5.js} +3 -3
  20. package/dist/{chunk-LWQZ257T.js.map → chunk-5XEGZFG5.js.map} +1 -1
  21. package/dist/{chunk-WAKKQROH.js → chunk-6AD6KCVB.js} +3 -3
  22. package/dist/{chunk-WAKKQROH.js.map → chunk-6AD6KCVB.js.map} +1 -1
  23. package/dist/chunk-73CUV7MW.js +125 -0
  24. package/dist/chunk-73CUV7MW.js.map +1 -0
  25. package/dist/{chunk-GRDVE3IR.js → chunk-BZLT6R62.js} +3 -3
  26. package/dist/{chunk-GRDVE3IR.js.map → chunk-BZLT6R62.js.map} +1 -1
  27. package/dist/{chunk-Y4ZRSW35.js → chunk-CCUXO2HN.js} +3 -3
  28. package/dist/{chunk-Y4ZRSW35.js.map → chunk-CCUXO2HN.js.map} +1 -1
  29. package/dist/{chunk-2UXKXUX2.js → chunk-CPIKN4BX.js} +3 -3
  30. package/dist/{chunk-2UXKXUX2.js.map → chunk-CPIKN4BX.js.map} +1 -1
  31. package/dist/{chunk-46OT4PA6.js → chunk-DDGMLLS3.js} +3 -3
  32. package/dist/{chunk-46OT4PA6.js.map → chunk-DDGMLLS3.js.map} +1 -1
  33. package/dist/{chunk-XP55RZ3D.js → chunk-FEPTH5RV.js} +3 -3
  34. package/dist/{chunk-XP55RZ3D.js.map → chunk-FEPTH5RV.js.map} +1 -1
  35. package/dist/{chunk-MJ4AGXS7.js → chunk-GJMHNEQ3.js} +3 -3
  36. package/dist/{chunk-MJ4AGXS7.js.map → chunk-GJMHNEQ3.js.map} +1 -1
  37. package/dist/{chunk-VCJF75T2.js → chunk-JQQ3FBN7.js} +3 -3
  38. package/dist/{chunk-VCJF75T2.js.map → chunk-JQQ3FBN7.js.map} +1 -1
  39. package/dist/chunk-JXLEMBDB.js +11 -0
  40. package/dist/chunk-JXLEMBDB.js.map +1 -0
  41. package/dist/{chunk-W3HMOOON.js → chunk-JZ774T7U.js} +3 -3
  42. package/dist/{chunk-W3HMOOON.js.map → chunk-JZ774T7U.js.map} +1 -1
  43. package/dist/{chunk-SINLREQV.js → chunk-MKSDYRWQ.js} +3 -3
  44. package/dist/{chunk-SINLREQV.js.map → chunk-MKSDYRWQ.js.map} +1 -1
  45. package/dist/{chunk-AFQIK6JI.js → chunk-MRJWPRCX.js} +3 -3
  46. package/dist/{chunk-AFQIK6JI.js.map → chunk-MRJWPRCX.js.map} +1 -1
  47. package/dist/{chunk-EFK7726V.js → chunk-NF7XG2FG.js} +3 -3
  48. package/dist/{chunk-EFK7726V.js.map → chunk-NF7XG2FG.js.map} +1 -1
  49. package/dist/{chunk-WTNDPO2V.js → chunk-NNFJKRXZ.js} +3 -3
  50. package/dist/{chunk-WTNDPO2V.js.map → chunk-NNFJKRXZ.js.map} +1 -1
  51. package/dist/{chunk-CGQIVFCN.js → chunk-NRYWNOG5.js} +3 -3
  52. package/dist/{chunk-CGQIVFCN.js.map → chunk-NRYWNOG5.js.map} +1 -1
  53. package/dist/{chunk-HTF6FDB6.js → chunk-OMU4R4Y5.js} +3 -3
  54. package/dist/{chunk-HTF6FDB6.js.map → chunk-OMU4R4Y5.js.map} +1 -1
  55. package/dist/{chunk-C6TRLHMW.js → chunk-PABG3IJ6.js} +3 -3
  56. package/dist/{chunk-C6TRLHMW.js.map → chunk-PABG3IJ6.js.map} +1 -1
  57. package/dist/{chunk-RM5TSXVE.js → chunk-PNP7L4TA.js} +3 -3
  58. package/dist/{chunk-RM5TSXVE.js.map → chunk-PNP7L4TA.js.map} +1 -1
  59. package/dist/{chunk-L5X4SYJ4.js → chunk-PZS4A4VQ.js} +3 -3
  60. package/dist/{chunk-L5X4SYJ4.js.map → chunk-PZS4A4VQ.js.map} +1 -1
  61. package/dist/{chunk-4I37QSEM.js → chunk-QJVS2VXS.js} +5 -5
  62. package/dist/{chunk-4I37QSEM.js.map → chunk-QJVS2VXS.js.map} +1 -1
  63. package/dist/{chunk-H7MFAFV4.js → chunk-RUWD35UI.js} +4 -4
  64. package/dist/{chunk-H7MFAFV4.js.map → chunk-RUWD35UI.js.map} +1 -1
  65. package/dist/{chunk-5BM6H2CD.js → chunk-SFNDR6DI.js} +3 -3
  66. package/dist/{chunk-5BM6H2CD.js.map → chunk-SFNDR6DI.js.map} +1 -1
  67. package/dist/{chunk-UF5OENHV.js → chunk-TLS54G6Y.js} +3 -3
  68. package/dist/{chunk-UF5OENHV.js.map → chunk-TLS54G6Y.js.map} +1 -1
  69. package/dist/{chunk-UUXWRDWW.js → chunk-UJWCEGQY.js} +3 -3
  70. package/dist/{chunk-UUXWRDWW.js.map → chunk-UJWCEGQY.js.map} +1 -1
  71. package/dist/{chunk-UJ5KFRDE.js → chunk-UZD77M3J.js} +3 -3
  72. package/dist/{chunk-UJ5KFRDE.js.map → chunk-UZD77M3J.js.map} +1 -1
  73. package/dist/chunk-VP7DRJUZ.js +3 -0
  74. package/dist/chunk-VP7DRJUZ.js.map +1 -0
  75. package/dist/{chunk-UPVNZPFV.js → chunk-VYRJ7OE5.js} +3 -3
  76. package/dist/{chunk-UPVNZPFV.js.map → chunk-VYRJ7OE5.js.map} +1 -1
  77. package/dist/{chunk-IGLMPAWE.js → chunk-WGT345SV.js} +3 -3
  78. package/dist/{chunk-IGLMPAWE.js.map → chunk-WGT345SV.js.map} +1 -1
  79. package/dist/{chunk-XXBN6CIK.js → chunk-WP2Z2ATO.js} +5 -5
  80. package/dist/{chunk-XXBN6CIK.js.map → chunk-WP2Z2ATO.js.map} +1 -1
  81. package/dist/chunk-WYPGQVDV.js +145 -0
  82. package/dist/chunk-WYPGQVDV.js.map +1 -0
  83. package/dist/{chunk-GELLSU64.js → chunk-XALU6LOT.js} +3 -3
  84. package/dist/{chunk-GELLSU64.js.map → chunk-XALU6LOT.js.map} +1 -1
  85. package/dist/{chunk-VMAGFYHG.js → chunk-Y5TJ7CAX.js} +3 -3
  86. package/dist/{chunk-VMAGFYHG.js.map → chunk-Y5TJ7CAX.js.map} +1 -1
  87. package/dist/chunk-YZ27OS2R.js +202 -0
  88. package/dist/chunk-YZ27OS2R.js.map +1 -0
  89. package/dist/client.cjs +453 -119
  90. package/dist/client.cjs.map +1 -1
  91. package/dist/client.d.cts +4 -0
  92. package/dist/client.d.ts +4 -0
  93. package/dist/client.js +50 -45
  94. package/dist/client.js.map +1 -1
  95. package/dist/components/Accordion/index.js +2 -2
  96. package/dist/components/Alert/index.js +2 -2
  97. package/dist/components/AlertDialog/index.js +2 -2
  98. package/dist/components/Avatar/index.js +2 -2
  99. package/dist/components/Badge/index.js +2 -2
  100. package/dist/components/Box/index.js +4 -4
  101. package/dist/components/Breadcrumb/index.cjs +3 -1
  102. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  103. package/dist/components/Breadcrumb/index.js +5 -5
  104. package/dist/components/Button/index.js +2 -2
  105. package/dist/components/Calendar/index.cjs +3 -1
  106. package/dist/components/Calendar/index.cjs.map +1 -1
  107. package/dist/components/Calendar/index.js +5 -5
  108. package/dist/components/Card/index.js +2 -2
  109. package/dist/components/Checkbox/index.js +2 -2
  110. package/dist/components/Combobox/index.cjs +1374 -0
  111. package/dist/components/Combobox/index.cjs.map +1 -0
  112. package/dist/components/Combobox/index.d.cts +17 -0
  113. package/dist/components/Combobox/index.d.ts +17 -0
  114. package/dist/components/Combobox/index.js +9 -0
  115. package/dist/components/Combobox/index.js.map +1 -0
  116. package/dist/components/ContextMenu/index.js +4 -4
  117. package/dist/components/DataTable/index.cjs +770 -0
  118. package/dist/components/DataTable/index.cjs.map +1 -0
  119. package/dist/components/DataTable/index.d.cts +53 -0
  120. package/dist/components/DataTable/index.d.ts +53 -0
  121. package/dist/components/DataTable/index.js +8 -0
  122. package/dist/components/DataTable/index.js.map +1 -0
  123. package/dist/components/DatePicker/index.cjs +3 -1
  124. package/dist/components/DatePicker/index.cjs.map +1 -1
  125. package/dist/components/DatePicker/index.js +7 -7
  126. package/dist/components/Dialog/index.js +2 -2
  127. package/dist/components/DropdownMenu/index.js +3 -3
  128. package/dist/components/Field/index.cjs +3 -1
  129. package/dist/components/Field/index.cjs.map +1 -1
  130. package/dist/components/Field/index.d.cts +2 -2
  131. package/dist/components/Field/index.d.ts +2 -2
  132. package/dist/components/Field/index.js +3 -3
  133. package/dist/components/FloatButton/index.cjs +3 -1
  134. package/dist/components/FloatButton/index.cjs.map +1 -1
  135. package/dist/components/FloatButton/index.js +5 -5
  136. package/dist/components/HStack/index.js +4 -4
  137. package/dist/components/InputGroup/index.js +2 -2
  138. package/dist/components/Label/index.cjs +3 -1
  139. package/dist/components/Label/index.cjs.map +1 -1
  140. package/dist/components/Label/index.js +3 -3
  141. package/dist/components/Pagination/index.cjs +3 -1
  142. package/dist/components/Pagination/index.cjs.map +1 -1
  143. package/dist/components/Pagination/index.js +6 -5
  144. package/dist/components/Popover/index.js +2 -2
  145. package/dist/components/Progress/index.js +2 -2
  146. package/dist/components/Radio/index.js +2 -2
  147. package/dist/components/SegmentedControl/index.js +2 -2
  148. package/dist/components/Select/index.js +2 -2
  149. package/dist/components/Sheet/index.js +2 -2
  150. package/dist/components/Switch/index.js +2 -2
  151. package/dist/components/Table/index.cjs +461 -0
  152. package/dist/components/Table/index.cjs.map +1 -0
  153. package/dist/components/Table/index.d.cts +16 -0
  154. package/dist/components/Table/index.d.ts +16 -0
  155. package/dist/components/Table/index.js +7 -0
  156. package/dist/components/Table/index.js.map +1 -0
  157. package/dist/components/Tabs/index.js +2 -2
  158. package/dist/components/Text/index.js +2 -2
  159. package/dist/components/TextArea/index.js +3 -3
  160. package/dist/components/TextInput/index.js +2 -2
  161. package/dist/components/Toggle/index.js +2 -2
  162. package/dist/components/Tooltip/index.js +2 -2
  163. package/dist/components/VStack/index.js +4 -4
  164. package/dist/i18n/index.cjs +3 -1
  165. package/dist/i18n/index.cjs.map +1 -1
  166. package/dist/i18n/index.js +1 -1
  167. package/dist/index.cjs +453 -119
  168. package/dist/index.cjs.map +1 -1
  169. package/dist/index.d.cts +4 -0
  170. package/dist/index.d.ts +4 -0
  171. package/dist/index.js +47 -42
  172. package/dist/slot/index.d.cts +2 -2
  173. package/dist/slot/index.d.ts +2 -2
  174. package/package.json +1 -1
  175. package/dist/chunk-6PO2IWB3.js.map +0 -1
  176. package/dist/chunk-V2AWSDDZ.js.map +0 -1
package/dist/client.cjs CHANGED
@@ -88,7 +88,9 @@ var defaultDictionary = {
88
88
  "switch.off": "Off",
89
89
  // field
90
90
  "field.requiredIndicator": "*",
91
- "field.requiredLabel": "required"
91
+ "field.requiredLabel": "required",
92
+ // table / dataTable
93
+ "table.empty": "No data"
92
94
  };
93
95
 
94
96
  // src/i18n/resolve.ts
@@ -6611,6 +6613,9 @@ var Checkbox = /* @__PURE__ */ __name(({
6611
6613
  }
6612
6614
  );
6613
6615
  }, "Checkbox");
6616
+ var Combobox = /* @__PURE__ */ __name((props) => {
6617
+ return /* @__PURE__ */ jsxRuntime.jsx(Select, { searchable: true, ...props });
6618
+ }, "Combobox");
6614
6619
  var MenuContext = React.createContext(null);
6615
6620
  var MenuContextProvider = /* @__PURE__ */ __name(({
6616
6621
  open,
@@ -7022,6 +7027,450 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
7022
7027
  Separator: MenuSeparator,
7023
7028
  Label: MenuLabel
7024
7029
  });
7030
+ var range = /* @__PURE__ */ __name((from, to) => {
7031
+ if (to < from) {
7032
+ return [];
7033
+ }
7034
+ const out = new Array(to - from + 1);
7035
+ for (let i = 0; i < out.length; i += 1) {
7036
+ out[i] = from + i;
7037
+ }
7038
+ return out;
7039
+ }, "range");
7040
+ function usePagination(args) {
7041
+ const {
7042
+ page: controlledPage,
7043
+ defaultPage = 1,
7044
+ pageCount,
7045
+ siblingCount = 1,
7046
+ boundaryCount = 1,
7047
+ showFirstLast = false,
7048
+ showPrevNext = true,
7049
+ onPageChange
7050
+ } = args;
7051
+ const isControlled = controlledPage !== void 0;
7052
+ const [uncontrolledPage, setUncontrolledPage] = React.useState(defaultPage);
7053
+ const onChangeRef = React.useRef(onPageChange);
7054
+ onChangeRef.current = onPageChange;
7055
+ const safePageCount = Math.max(1, Math.floor(pageCount));
7056
+ const rawPage = isControlled ? controlledPage : uncontrolledPage;
7057
+ const currentPage = Math.min(Math.max(1, Math.floor(rawPage)), safePageCount);
7058
+ const goToPage = React.useCallback(
7059
+ (next2) => {
7060
+ const clamped = Math.min(Math.max(1, Math.floor(next2)), Math.max(1, Math.floor(pageCount)));
7061
+ if (!isControlled) {
7062
+ setUncontrolledPage(clamped);
7063
+ }
7064
+ onChangeRef.current?.(clamped);
7065
+ },
7066
+ [isControlled, pageCount]
7067
+ );
7068
+ const prev = React.useCallback(() => goToPage(currentPage - 1), [goToPage, currentPage]);
7069
+ const next = React.useCallback(() => goToPage(currentPage + 1), [goToPage, currentPage]);
7070
+ const first = React.useCallback(() => goToPage(1), [goToPage]);
7071
+ const last = React.useCallback(() => goToPage(safePageCount), [goToPage, safePageCount]);
7072
+ const pages = React.useMemo(() => {
7073
+ const items = [];
7074
+ const safeSibling = Math.max(0, Math.floor(siblingCount));
7075
+ const safeBoundary = Math.max(0, Math.floor(boundaryCount));
7076
+ if (showFirstLast) {
7077
+ items.push({ type: "first", disabled: currentPage <= 1 });
7078
+ }
7079
+ if (showPrevNext) {
7080
+ items.push({ type: "prev", disabled: currentPage <= 1 });
7081
+ }
7082
+ const startPages = range(1, Math.min(safeBoundary, safePageCount));
7083
+ const endPages = range(Math.max(safePageCount - safeBoundary + 1, safeBoundary + 1), safePageCount);
7084
+ const siblingsStart = Math.max(
7085
+ Math.min(currentPage - safeSibling, safePageCount - safeBoundary - safeSibling * 2 - 1),
7086
+ safeBoundary + 2
7087
+ );
7088
+ const siblingsEnd = Math.min(
7089
+ Math.max(currentPage + safeSibling, safeBoundary + safeSibling * 2 + 2),
7090
+ endPages.length > 0 ? endPages[0] - 2 : safePageCount - 1
7091
+ );
7092
+ const middle = [];
7093
+ if (siblingsStart > safeBoundary + 2) {
7094
+ middle.push("ellipsis");
7095
+ } else if (safeBoundary + 1 < safePageCount - safeBoundary) {
7096
+ middle.push(safeBoundary + 1);
7097
+ }
7098
+ for (const p of range(siblingsStart, siblingsEnd)) {
7099
+ middle.push(p);
7100
+ }
7101
+ if (siblingsEnd < safePageCount - safeBoundary - 1) {
7102
+ middle.push("ellipsis");
7103
+ } else if (safePageCount - safeBoundary > safeBoundary) {
7104
+ middle.push(safePageCount - safeBoundary);
7105
+ }
7106
+ const seen = /* @__PURE__ */ new Set();
7107
+ const pushPage = /* @__PURE__ */ __name((n) => {
7108
+ if (n < 1 || n > safePageCount || seen.has(n)) {
7109
+ return;
7110
+ }
7111
+ seen.add(n);
7112
+ items.push({ type: "page", page: n, selected: n === currentPage });
7113
+ }, "pushPage");
7114
+ for (const n of startPages) {
7115
+ pushPage(n);
7116
+ }
7117
+ for (const m of middle) {
7118
+ if (m === "ellipsis") {
7119
+ items.push({ type: "ellipsis" });
7120
+ } else {
7121
+ pushPage(m);
7122
+ }
7123
+ }
7124
+ for (const n of endPages) {
7125
+ pushPage(n);
7126
+ }
7127
+ if (showPrevNext) {
7128
+ items.push({ type: "next", disabled: currentPage >= safePageCount });
7129
+ }
7130
+ if (showFirstLast) {
7131
+ items.push({ type: "last", disabled: currentPage >= safePageCount });
7132
+ }
7133
+ return items;
7134
+ }, [currentPage, safePageCount, siblingCount, boundaryCount, showFirstLast, showPrevNext]);
7135
+ return {
7136
+ page: currentPage,
7137
+ pages,
7138
+ canPrev: currentPage > 1,
7139
+ canNext: currentPage < safePageCount,
7140
+ goToPage,
7141
+ prev,
7142
+ next,
7143
+ first,
7144
+ last
7145
+ };
7146
+ }
7147
+ __name(usePagination, "usePagination");
7148
+ var TableContext = React.createContext({
7149
+ striped: false,
7150
+ compact: false,
7151
+ bordered: false,
7152
+ rowIndex: 0,
7153
+ setRowIndex: /* @__PURE__ */ __name(() => {
7154
+ }, "setRowIndex")
7155
+ });
7156
+ function buildTableCompound(parts) {
7157
+ return Object.assign(parts.Root, {
7158
+ Header: parts.Header,
7159
+ Body: parts.Body,
7160
+ Footer: parts.Footer,
7161
+ Row: parts.Row,
7162
+ HeaderCell: parts.HeaderCell,
7163
+ Cell: parts.Cell,
7164
+ Caption: parts.Caption
7165
+ });
7166
+ }
7167
+ __name(buildTableCompound, "buildTableCompound");
7168
+ var TableRoot = /* @__PURE__ */ __name(({ striped = false, compact = false, bordered = false, children, className, testID }) => {
7169
+ const [rowIndex, setRowIndex] = React.useState(0);
7170
+ const ctxValue = {
7171
+ striped,
7172
+ compact,
7173
+ bordered,
7174
+ rowIndex,
7175
+ setRowIndex
7176
+ };
7177
+ return /* @__PURE__ */ jsxRuntime.jsx(TableContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full overflow-auto", className), children: /* @__PURE__ */ jsxRuntime.jsx(
7178
+ "table",
7179
+ {
7180
+ className: cn(
7181
+ "w-full caption-bottom text-sm",
7182
+ bordered && "border border-semantic-border-default",
7183
+ className
7184
+ ),
7185
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7186
+ children
7187
+ }
7188
+ ) }) });
7189
+ }, "TableRoot");
7190
+ var TableHeader = /* @__PURE__ */ __name(({ children, className, testID }) => /* @__PURE__ */ jsxRuntime.jsx(
7191
+ "thead",
7192
+ {
7193
+ className: cn("[&_tr]:border-b [&_tr]:border-semantic-border-default", className),
7194
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7195
+ children
7196
+ }
7197
+ ), "TableHeader");
7198
+ var TableBody = /* @__PURE__ */ __name(({ children, className, testID }) => /* @__PURE__ */ jsxRuntime.jsx(
7199
+ "tbody",
7200
+ {
7201
+ className: cn("[&_tr:last-child]:border-0", className),
7202
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7203
+ children
7204
+ }
7205
+ ), "TableBody");
7206
+ var TableFooter = /* @__PURE__ */ __name(({ children, className, testID }) => /* @__PURE__ */ jsxRuntime.jsx(
7207
+ "tfoot",
7208
+ {
7209
+ className: cn("border-t border-semantic-border-default font-medium", className),
7210
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7211
+ children
7212
+ }
7213
+ ), "TableFooter");
7214
+ var TableRow = /* @__PURE__ */ __name(({ selected = false, onPress, children, className, testID }) => {
7215
+ const colors = useThemeColors();
7216
+ const handleClick = React.useCallback(() => {
7217
+ onPress?.();
7218
+ }, [onPress]);
7219
+ return /* @__PURE__ */ jsxRuntime.jsx(
7220
+ "tr",
7221
+ {
7222
+ className: cn(
7223
+ "border-b border-semantic-border-default transition-colors",
7224
+ onPress && "cursor-pointer hover:bg-semantic-background-subtle",
7225
+ selected && "bg-semantic-background-subtle",
7226
+ className
7227
+ ),
7228
+ style: selected ? { backgroundColor: colors.semantic.background.subtle } : void 0,
7229
+ onClick: onPress ? handleClick : void 0,
7230
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7231
+ children
7232
+ }
7233
+ );
7234
+ }, "TableRow");
7235
+ var TableHeaderCell = /* @__PURE__ */ __name(({ align = "left", colSpan, children, className, testID }) => /* @__PURE__ */ jsxRuntime.jsx(
7236
+ "th",
7237
+ {
7238
+ className: cn(
7239
+ "h-10 px-4 font-medium text-semantic-text-secondary",
7240
+ align === "right" && "text-right",
7241
+ align === "center" && "text-center",
7242
+ align === "left" && "text-left",
7243
+ className
7244
+ ),
7245
+ colSpan,
7246
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7247
+ children
7248
+ }
7249
+ ), "TableHeaderCell");
7250
+ var TableCell = /* @__PURE__ */ __name(({ align = "left", colSpan, children, className, testID }) => /* @__PURE__ */ jsxRuntime.jsx(
7251
+ "td",
7252
+ {
7253
+ className: cn(
7254
+ "p-4 align-middle",
7255
+ align === "right" && "text-right",
7256
+ align === "center" && "text-center",
7257
+ align === "left" && "text-left",
7258
+ className
7259
+ ),
7260
+ colSpan,
7261
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7262
+ children
7263
+ }
7264
+ ), "TableCell");
7265
+ var TableCaption = /* @__PURE__ */ __name(({ children, className, testID }) => /* @__PURE__ */ jsxRuntime.jsx(
7266
+ "caption",
7267
+ {
7268
+ className: cn("mt-4 text-sm text-semantic-text-secondary", className),
7269
+ ...testID !== void 0 ? { "data-testid": testID } : {},
7270
+ children
7271
+ }
7272
+ ), "TableCaption");
7273
+ var Table = buildTableCompound({
7274
+ Root: TableRoot,
7275
+ Header: TableHeader,
7276
+ Body: TableBody,
7277
+ Footer: TableFooter,
7278
+ Row: TableRow,
7279
+ HeaderCell: TableHeaderCell,
7280
+ Cell: TableCell,
7281
+ Caption: TableCaption
7282
+ });
7283
+ function sortData(data, sort) {
7284
+ if (!sort) {
7285
+ return data;
7286
+ }
7287
+ const key = sort.id;
7288
+ return [...data].sort((a, b) => {
7289
+ const av = a[key];
7290
+ const bv = b[key];
7291
+ if (av == null && bv == null) {
7292
+ return 0;
7293
+ }
7294
+ if (av == null) {
7295
+ return 1;
7296
+ }
7297
+ if (bv == null) {
7298
+ return -1;
7299
+ }
7300
+ const cmp2 = av < bv ? -1 : av > bv ? 1 : 0;
7301
+ return sort.direction === "asc" ? cmp2 : -cmp2;
7302
+ });
7303
+ }
7304
+ __name(sortData, "sortData");
7305
+ function SortIndicator({ direction }) {
7306
+ if (direction === void 0) {
7307
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { marginLeft: 4, opacity: 0.3 }, children: "\u21C5" });
7308
+ }
7309
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { marginLeft: 4 }, children: direction === "asc" ? "\u2191" : "\u2193" });
7310
+ }
7311
+ __name(SortIndicator, "SortIndicator");
7312
+ function DataTable({
7313
+ data,
7314
+ columns,
7315
+ pageSize = 10,
7316
+ defaultSort,
7317
+ onRowPress,
7318
+ emptyState,
7319
+ striped,
7320
+ compact,
7321
+ bordered,
7322
+ testID,
7323
+ className
7324
+ }) {
7325
+ const [sort, setSort] = React.useState(defaultSort ?? null);
7326
+ const sorted = React.useMemo(() => sortData(data, sort), [data, sort]);
7327
+ const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));
7328
+ const { page, goToPage, canPrev, canNext } = usePagination({ pageCount, defaultPage: 1 });
7329
+ const pageSlice = React.useMemo(() => {
7330
+ const start = (page - 1) * pageSize;
7331
+ return sorted.slice(start, start + pageSize);
7332
+ }, [sorted, page, pageSize]);
7333
+ const handleSort = /* @__PURE__ */ __name((colId) => {
7334
+ setSort((prev) => {
7335
+ if (prev?.id !== colId) {
7336
+ goToPage(1);
7337
+ return { id: colId, direction: "asc" };
7338
+ }
7339
+ if (prev.direction === "asc") {
7340
+ return { id: colId, direction: "desc" };
7341
+ }
7342
+ goToPage(1);
7343
+ return null;
7344
+ });
7345
+ }, "handleSort");
7346
+ const tableProps = {};
7347
+ if (striped !== void 0) {
7348
+ tableProps.striped = striped;
7349
+ }
7350
+ if (compact !== void 0) {
7351
+ tableProps.compact = compact;
7352
+ }
7353
+ if (bordered !== void 0) {
7354
+ tableProps.bordered = bordered;
7355
+ }
7356
+ if (testID !== void 0) {
7357
+ tableProps.testID = testID;
7358
+ }
7359
+ if (className !== void 0) {
7360
+ tableProps.className = className;
7361
+ }
7362
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: { width: "100%" }, children: [
7363
+ /* @__PURE__ */ jsxRuntime.jsxs(Table, { ...tableProps, children: [
7364
+ /* @__PURE__ */ jsxRuntime.jsx(Table.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(Table.Row, { children: columns.map((col) => {
7365
+ const align = col.align;
7366
+ return /* @__PURE__ */ jsxRuntime.jsx(Table.HeaderCell, { ...align !== void 0 ? { align } : {}, children: col.sortable ? /* @__PURE__ */ jsxRuntime.jsxs(
7367
+ reactNative.Pressable,
7368
+ {
7369
+ accessibilityRole: "button",
7370
+ accessibilityLabel: `Sort by ${col.id}`,
7371
+ "aria-label": `Sort by ${col.id}`,
7372
+ onPress: () => handleSort(col.id),
7373
+ style: { flexDirection: "row", alignItems: "center" },
7374
+ children: [
7375
+ typeof col.header === "string" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: col.header }) : col.header,
7376
+ /* @__PURE__ */ jsxRuntime.jsx(
7377
+ SortIndicator,
7378
+ {
7379
+ ...sort?.id === col.id ? { direction: sort.direction } : {}
7380
+ }
7381
+ )
7382
+ ]
7383
+ }
7384
+ ) : col.header }, col.id);
7385
+ }) }) }),
7386
+ /* @__PURE__ */ jsxRuntime.jsx(Table.Body, { children: pageSlice.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(Table.Row, { children: /* @__PURE__ */ jsxRuntime.jsx(Table.Cell, { colSpan: columns.length, children: /* @__PURE__ */ jsxRuntime.jsx(EmptyState, { children: emptyState ?? "No data" }) }) }) : pageSlice.map((row, i) => /* @__PURE__ */ jsxRuntime.jsx(
7387
+ Table.Row,
7388
+ {
7389
+ ...onRowPress !== void 0 ? { onPress: /* @__PURE__ */ __name(() => onRowPress(row), "onPress") } : {},
7390
+ children: columns.map((col) => {
7391
+ const colAlign = col.align;
7392
+ return /* @__PURE__ */ jsxRuntime.jsx(
7393
+ Table.Cell,
7394
+ {
7395
+ ...colAlign !== void 0 ? { align: colAlign } : {},
7396
+ children: col.cell(row)
7397
+ },
7398
+ col.id
7399
+ );
7400
+ })
7401
+ },
7402
+ i
7403
+ )) })
7404
+ ] }),
7405
+ pageCount > 1 && /* @__PURE__ */ jsxRuntime.jsx(
7406
+ PaginationControls,
7407
+ {
7408
+ page,
7409
+ pageCount,
7410
+ canPrev,
7411
+ canNext,
7412
+ goToPage
7413
+ }
7414
+ )
7415
+ ] });
7416
+ }
7417
+ __name(DataTable, "DataTable");
7418
+ function EmptyState({ children }) {
7419
+ return /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: { paddingVertical: 32, alignItems: "center" }, children: typeof children === "string" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: "#888", fontSize: 14 }, children }) : children });
7420
+ }
7421
+ __name(EmptyState, "EmptyState");
7422
+ function PaginationControls({
7423
+ page,
7424
+ pageCount,
7425
+ canPrev,
7426
+ canNext,
7427
+ goToPage
7428
+ }) {
7429
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7430
+ reactNative.View,
7431
+ {
7432
+ style: {
7433
+ flexDirection: "row",
7434
+ justifyContent: "flex-end",
7435
+ alignItems: "center",
7436
+ paddingVertical: 8,
7437
+ gap: 8
7438
+ },
7439
+ children: [
7440
+ /* @__PURE__ */ jsxRuntime.jsx(
7441
+ reactNative.Pressable,
7442
+ {
7443
+ onPress: canPrev ? () => goToPage(page - 1) : void 0,
7444
+ accessibilityRole: "button",
7445
+ accessibilityLabel: "Previous page",
7446
+ "aria-label": "Previous page",
7447
+ "aria-disabled": !canPrev,
7448
+ style: { opacity: canPrev ? 1 : 0.4, paddingHorizontal: 8 },
7449
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { fontSize: 14 }, children: "\u2039 Prev" })
7450
+ }
7451
+ ),
7452
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.Text, { style: { fontSize: 14 }, "aria-live": "polite", children: [
7453
+ page,
7454
+ " / ",
7455
+ pageCount
7456
+ ] }),
7457
+ /* @__PURE__ */ jsxRuntime.jsx(
7458
+ reactNative.Pressable,
7459
+ {
7460
+ onPress: canNext ? () => goToPage(page + 1) : void 0,
7461
+ accessibilityRole: "button",
7462
+ accessibilityLabel: "Next page",
7463
+ "aria-label": "Next page",
7464
+ "aria-disabled": !canNext,
7465
+ style: { opacity: canNext ? 1 : 0.4, paddingHorizontal: 8 },
7466
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { fontSize: 14 }, children: "Next \u203A" })
7467
+ }
7468
+ )
7469
+ ]
7470
+ }
7471
+ );
7472
+ }
7473
+ __name(PaginationControls, "PaginationControls");
7025
7474
  function formatDate(date$1, locale) {
7026
7475
  try {
7027
7476
  return new Intl.DateTimeFormat(locale, { dateStyle: "medium" }).format(date$1.toDate(date.getLocalTimeZone()));
@@ -9094,124 +9543,6 @@ var Label = /* @__PURE__ */ __name(({ htmlFor, required = false, disabled = fals
9094
9543
  }
9095
9544
  );
9096
9545
  }, "Label");
9097
- var range = /* @__PURE__ */ __name((from, to) => {
9098
- if (to < from) {
9099
- return [];
9100
- }
9101
- const out = new Array(to - from + 1);
9102
- for (let i = 0; i < out.length; i += 1) {
9103
- out[i] = from + i;
9104
- }
9105
- return out;
9106
- }, "range");
9107
- function usePagination(args) {
9108
- const {
9109
- page: controlledPage,
9110
- defaultPage = 1,
9111
- pageCount,
9112
- siblingCount = 1,
9113
- boundaryCount = 1,
9114
- showFirstLast = false,
9115
- showPrevNext = true,
9116
- onPageChange
9117
- } = args;
9118
- const isControlled = controlledPage !== void 0;
9119
- const [uncontrolledPage, setUncontrolledPage] = React.useState(defaultPage);
9120
- const onChangeRef = React.useRef(onPageChange);
9121
- onChangeRef.current = onPageChange;
9122
- const safePageCount = Math.max(1, Math.floor(pageCount));
9123
- const rawPage = isControlled ? controlledPage : uncontrolledPage;
9124
- const currentPage = Math.min(Math.max(1, Math.floor(rawPage)), safePageCount);
9125
- const goToPage = React.useCallback(
9126
- (next2) => {
9127
- const clamped = Math.min(Math.max(1, Math.floor(next2)), Math.max(1, Math.floor(pageCount)));
9128
- if (!isControlled) {
9129
- setUncontrolledPage(clamped);
9130
- }
9131
- onChangeRef.current?.(clamped);
9132
- },
9133
- [isControlled, pageCount]
9134
- );
9135
- const prev = React.useCallback(() => goToPage(currentPage - 1), [goToPage, currentPage]);
9136
- const next = React.useCallback(() => goToPage(currentPage + 1), [goToPage, currentPage]);
9137
- const first = React.useCallback(() => goToPage(1), [goToPage]);
9138
- const last = React.useCallback(() => goToPage(safePageCount), [goToPage, safePageCount]);
9139
- const pages = React.useMemo(() => {
9140
- const items = [];
9141
- const safeSibling = Math.max(0, Math.floor(siblingCount));
9142
- const safeBoundary = Math.max(0, Math.floor(boundaryCount));
9143
- if (showFirstLast) {
9144
- items.push({ type: "first", disabled: currentPage <= 1 });
9145
- }
9146
- if (showPrevNext) {
9147
- items.push({ type: "prev", disabled: currentPage <= 1 });
9148
- }
9149
- const startPages = range(1, Math.min(safeBoundary, safePageCount));
9150
- const endPages = range(Math.max(safePageCount - safeBoundary + 1, safeBoundary + 1), safePageCount);
9151
- const siblingsStart = Math.max(
9152
- Math.min(currentPage - safeSibling, safePageCount - safeBoundary - safeSibling * 2 - 1),
9153
- safeBoundary + 2
9154
- );
9155
- const siblingsEnd = Math.min(
9156
- Math.max(currentPage + safeSibling, safeBoundary + safeSibling * 2 + 2),
9157
- endPages.length > 0 ? endPages[0] - 2 : safePageCount - 1
9158
- );
9159
- const middle = [];
9160
- if (siblingsStart > safeBoundary + 2) {
9161
- middle.push("ellipsis");
9162
- } else if (safeBoundary + 1 < safePageCount - safeBoundary) {
9163
- middle.push(safeBoundary + 1);
9164
- }
9165
- for (const p of range(siblingsStart, siblingsEnd)) {
9166
- middle.push(p);
9167
- }
9168
- if (siblingsEnd < safePageCount - safeBoundary - 1) {
9169
- middle.push("ellipsis");
9170
- } else if (safePageCount - safeBoundary > safeBoundary) {
9171
- middle.push(safePageCount - safeBoundary);
9172
- }
9173
- const seen = /* @__PURE__ */ new Set();
9174
- const pushPage = /* @__PURE__ */ __name((n) => {
9175
- if (n < 1 || n > safePageCount || seen.has(n)) {
9176
- return;
9177
- }
9178
- seen.add(n);
9179
- items.push({ type: "page", page: n, selected: n === currentPage });
9180
- }, "pushPage");
9181
- for (const n of startPages) {
9182
- pushPage(n);
9183
- }
9184
- for (const m of middle) {
9185
- if (m === "ellipsis") {
9186
- items.push({ type: "ellipsis" });
9187
- } else {
9188
- pushPage(m);
9189
- }
9190
- }
9191
- for (const n of endPages) {
9192
- pushPage(n);
9193
- }
9194
- if (showPrevNext) {
9195
- items.push({ type: "next", disabled: currentPage >= safePageCount });
9196
- }
9197
- if (showFirstLast) {
9198
- items.push({ type: "last", disabled: currentPage >= safePageCount });
9199
- }
9200
- return items;
9201
- }, [currentPage, safePageCount, siblingCount, boundaryCount, showFirstLast, showPrevNext]);
9202
- return {
9203
- page: currentPage,
9204
- pages,
9205
- canPrev: currentPage > 1,
9206
- canNext: currentPage < safePageCount,
9207
- goToPage,
9208
- prev,
9209
- next,
9210
- first,
9211
- last
9212
- };
9213
- }
9214
- __name(usePagination, "usePagination");
9215
9546
  var PAGINATION_COMPACT_BREAKPOINT = 480;
9216
9547
  var PaginationContext = React.createContext(null);
9217
9548
  var usePaginationContext = /* @__PURE__ */ __name((label) => {
@@ -13460,7 +13791,9 @@ exports.Button = Button;
13460
13791
  exports.Calendar = Calendar;
13461
13792
  exports.Card = Card;
13462
13793
  exports.Checkbox = Checkbox;
13794
+ exports.Combobox = Combobox;
13463
13795
  exports.ContextMenu = ContextMenu;
13796
+ exports.DataTable = DataTable;
13464
13797
  exports.DatePicker = DatePicker;
13465
13798
  exports.Dialog = Dialog;
13466
13799
  exports.Drawer = Drawer;
@@ -13502,6 +13835,7 @@ exports.SliderGestureProvider = SliderGestureProvider;
13502
13835
  exports.Slot = Slot;
13503
13836
  exports.Spinner = Spinner;
13504
13837
  exports.Switch = Switch;
13838
+ exports.Table = Table;
13505
13839
  exports.Tabs = Tabs;
13506
13840
  exports.Text = Text;
13507
13841
  exports.TextArea = TextArea;