@tonyarbor/components 0.2.0 → 0.2.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 (108) hide show
  1. package/dist/Banner.d.mts +59 -0
  2. package/dist/Banner.d.ts +59 -0
  3. package/dist/Banner.js +222 -0
  4. package/dist/Banner.js.map +1 -0
  5. package/dist/Banner.mjs +7 -0
  6. package/dist/Banner.mjs.map +1 -0
  7. package/dist/Checkbox.d.mts +4 -0
  8. package/dist/Checkbox.d.ts +4 -0
  9. package/dist/Checkbox.js +45 -16
  10. package/dist/Checkbox.js.map +1 -1
  11. package/dist/Checkbox.mjs +1 -1
  12. package/dist/DatePicker.d.mts +68 -0
  13. package/dist/DatePicker.d.ts +68 -0
  14. package/dist/DatePicker.js +490 -0
  15. package/dist/DatePicker.js.map +1 -0
  16. package/dist/DatePicker.mjs +7 -0
  17. package/dist/DatePicker.mjs.map +1 -0
  18. package/dist/Pagination.d.mts +36 -0
  19. package/dist/Pagination.d.ts +36 -0
  20. package/dist/Pagination.js +301 -0
  21. package/dist/Pagination.js.map +1 -0
  22. package/dist/Pagination.mjs +7 -0
  23. package/dist/Pagination.mjs.map +1 -0
  24. package/dist/Radio.js +32 -12
  25. package/dist/Radio.js.map +1 -1
  26. package/dist/Radio.mjs +1 -1
  27. package/dist/Table.d.mts +80 -0
  28. package/dist/Table.d.ts +80 -0
  29. package/dist/Table.js +347 -0
  30. package/dist/Table.js.map +1 -0
  31. package/dist/Table.mjs +8 -0
  32. package/dist/Table.mjs.map +1 -0
  33. package/dist/TableControls.d.mts +76 -0
  34. package/dist/TableControls.d.ts +76 -0
  35. package/dist/TableControls.js +461 -0
  36. package/dist/TableControls.js.map +1 -0
  37. package/dist/TableControls.mjs +7 -0
  38. package/dist/TableControls.mjs.map +1 -0
  39. package/dist/TableFooterPagination.d.mts +56 -0
  40. package/dist/TableFooterPagination.d.ts +56 -0
  41. package/dist/TableFooterPagination.js +499 -0
  42. package/dist/TableFooterPagination.js.map +1 -0
  43. package/dist/TableFooterPagination.mjs +7 -0
  44. package/dist/TableFooterPagination.mjs.map +1 -0
  45. package/dist/Tabs.d.mts +50 -0
  46. package/dist/Tabs.d.ts +50 -0
  47. package/dist/Tabs.js +187 -0
  48. package/dist/Tabs.js.map +1 -0
  49. package/dist/Tabs.mjs +7 -0
  50. package/dist/Tabs.mjs.map +1 -0
  51. package/dist/TextArea.d.mts +64 -0
  52. package/dist/TextArea.d.ts +64 -0
  53. package/dist/TextArea.js +171 -0
  54. package/dist/TextArea.js.map +1 -0
  55. package/dist/TextArea.mjs +7 -0
  56. package/dist/TextArea.mjs.map +1 -0
  57. package/dist/Toast.d.mts +48 -0
  58. package/dist/Toast.d.ts +48 -0
  59. package/dist/Toast.js +169 -0
  60. package/dist/Toast.js.map +1 -0
  61. package/dist/Toast.mjs +7 -0
  62. package/dist/Toast.mjs.map +1 -0
  63. package/dist/Toggle.d.mts +48 -0
  64. package/dist/Toggle.d.ts +48 -0
  65. package/dist/Toggle.js +291 -0
  66. package/dist/Toggle.js.map +1 -0
  67. package/dist/Toggle.mjs +7 -0
  68. package/dist/Toggle.mjs.map +1 -0
  69. package/dist/Tooltip.d.mts +32 -0
  70. package/dist/Tooltip.d.ts +32 -0
  71. package/dist/Tooltip.js +109 -0
  72. package/dist/Tooltip.js.map +1 -0
  73. package/dist/Tooltip.mjs +7 -0
  74. package/dist/Tooltip.mjs.map +1 -0
  75. package/dist/chunk-52TG3BFX.mjs +463 -0
  76. package/dist/chunk-52TG3BFX.mjs.map +1 -0
  77. package/dist/chunk-AI2U34CF.mjs +159 -0
  78. package/dist/chunk-AI2U34CF.mjs.map +1 -0
  79. package/dist/chunk-C25FFMRQ.mjs +255 -0
  80. package/dist/chunk-C25FFMRQ.mjs.map +1 -0
  81. package/dist/{chunk-BCYJIUQX.mjs → chunk-CUTYEIFE.mjs} +47 -18
  82. package/dist/chunk-CUTYEIFE.mjs.map +1 -0
  83. package/dist/chunk-DULH2KRW.mjs +133 -0
  84. package/dist/chunk-DULH2KRW.mjs.map +1 -0
  85. package/dist/chunk-G5NVKF2G.mjs +434 -0
  86. package/dist/chunk-G5NVKF2G.mjs.map +1 -0
  87. package/dist/{chunk-ARBHNHO7.mjs → chunk-M6DVBEEL.mjs} +33 -13
  88. package/dist/chunk-M6DVBEEL.mjs.map +1 -0
  89. package/dist/chunk-MBUMR2XJ.mjs +135 -0
  90. package/dist/chunk-MBUMR2XJ.mjs.map +1 -0
  91. package/dist/chunk-MNH2TGUX.mjs +73 -0
  92. package/dist/chunk-MNH2TGUX.mjs.map +1 -0
  93. package/dist/chunk-RRMG2SSZ.mjs +265 -0
  94. package/dist/chunk-RRMG2SSZ.mjs.map +1 -0
  95. package/dist/chunk-U4JXKZZG.mjs +186 -0
  96. package/dist/chunk-U4JXKZZG.mjs.map +1 -0
  97. package/dist/chunk-W55QJIAN.mjs +467 -0
  98. package/dist/chunk-W55QJIAN.mjs.map +1 -0
  99. package/dist/chunk-YV4OXFIM.mjs +151 -0
  100. package/dist/chunk-YV4OXFIM.mjs.map +1 -0
  101. package/dist/index.d.mts +11 -0
  102. package/dist/index.d.ts +11 -0
  103. package/dist/index.js +2752 -30
  104. package/dist/index.js.map +1 -1
  105. package/dist/index.mjs +47 -3
  106. package/package.json +58 -1
  107. package/dist/chunk-ARBHNHO7.mjs.map +0 -1
  108. package/dist/chunk-BCYJIUQX.mjs.map +0 -1
@@ -0,0 +1,80 @@
1
+ import * as React from 'react';
2
+
3
+ interface TableColumn {
4
+ /**
5
+ * Unique key for the column
6
+ */
7
+ key: string;
8
+ /**
9
+ * Column header label
10
+ */
11
+ label: string;
12
+ /**
13
+ * Whether to show the menu icon in the header
14
+ */
15
+ showMenu?: boolean;
16
+ /**
17
+ * Custom width for the column
18
+ */
19
+ width?: string;
20
+ }
21
+ interface TableRow {
22
+ /**
23
+ * Unique ID for the row
24
+ */
25
+ id: string;
26
+ /**
27
+ * Cell data keyed by column key
28
+ */
29
+ cells: Record<string, React.ReactNode>;
30
+ /**
31
+ * Whether the row is selected
32
+ */
33
+ selected?: boolean;
34
+ }
35
+ interface TableProps {
36
+ /**
37
+ * Table columns configuration
38
+ */
39
+ columns: TableColumn[];
40
+ /**
41
+ * Table rows data
42
+ */
43
+ rows: TableRow[];
44
+ /**
45
+ * Callback when row selection changes
46
+ */
47
+ onRowSelectionChange?: (rowId: string, selected: boolean) => void;
48
+ /**
49
+ * Callback when select all is toggled
50
+ */
51
+ onSelectAllChange?: (selected: boolean) => void;
52
+ /**
53
+ * Whether all rows are selected
54
+ */
55
+ allSelected?: boolean;
56
+ /**
57
+ * Whether some rows are selected (indeterminate state)
58
+ */
59
+ someSelected?: boolean;
60
+ /**
61
+ * Custom className
62
+ */
63
+ className?: string;
64
+ /**
65
+ * Custom style
66
+ */
67
+ style?: React.CSSProperties;
68
+ /**
69
+ * Test ID for testing
70
+ */
71
+ 'data-testid'?: string;
72
+ }
73
+ /**
74
+ * Table component - Arbor Design System
75
+ *
76
+ * A data table component with selectable rows and column headers.
77
+ */
78
+ declare const Table: React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>>;
79
+
80
+ export { Table, type TableColumn, type TableProps, type TableRow };
package/dist/Table.js ADDED
@@ -0,0 +1,347 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/Table/index.ts
31
+ var Table_exports = {};
32
+ __export(Table_exports, {
33
+ Table: () => Table
34
+ });
35
+ module.exports = __toCommonJS(Table_exports);
36
+
37
+ // src/Table/Table.tsx
38
+ var React2 = __toESM(require("react"));
39
+ var import_clsx2 = require("clsx");
40
+ var import_lucide_react2 = require("lucide-react");
41
+
42
+ // src/Checkbox/Checkbox.tsx
43
+ var React = __toESM(require("react"));
44
+ var import_clsx = require("clsx");
45
+ var import_lucide_react = require("lucide-react");
46
+ var import_jsx_runtime = require("react/jsx-runtime");
47
+ var checkboxStyles = {
48
+ width: "16px",
49
+ height: "16px",
50
+ border: "1px solid #7e7e7e",
51
+ // grey-500
52
+ borderRadius: "4px",
53
+ display: "flex",
54
+ alignItems: "center",
55
+ justifyContent: "center",
56
+ cursor: "pointer",
57
+ transition: "all 0.2s ease-in-out",
58
+ flexShrink: 0,
59
+ backgroundColor: "#ffffff"
60
+ };
61
+ var checkedStyles = {
62
+ backgroundColor: "#0e8a0e",
63
+ // brand-600
64
+ border: "1px solid #0e8a0e"
65
+ };
66
+ var checkedHoverStyles = {
67
+ backgroundColor: "#005700",
68
+ // brand-800
69
+ border: "1px solid #005700"
70
+ };
71
+ var uncheckedHoverStyles = {
72
+ border: "1px solid #474747"
73
+ // grey-700
74
+ };
75
+ var labelStyles = {
76
+ fontSize: "13px",
77
+ color: "#2f2f2f",
78
+ cursor: "pointer",
79
+ userSelect: "none",
80
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
81
+ };
82
+ var wrapperStyles = {
83
+ display: "flex",
84
+ alignItems: "center",
85
+ gap: "8px"
86
+ };
87
+ var Checkbox = React.forwardRef(
88
+ ({
89
+ label,
90
+ checked = false,
91
+ onChange,
92
+ disabled = false,
93
+ className,
94
+ style,
95
+ "data-testid": dataTestId,
96
+ name,
97
+ value,
98
+ indeterminate = false
99
+ }, ref) => {
100
+ const [isFocused, setIsFocused] = React.useState(false);
101
+ const [isHovered, setIsHovered] = React.useState(false);
102
+ const checkboxId = React.useId();
103
+ const innerRef = React.useRef(null);
104
+ React.useEffect(() => {
105
+ const node = innerRef.current;
106
+ if (node) {
107
+ node.indeterminate = indeterminate;
108
+ if (typeof ref === "function") {
109
+ ref(node);
110
+ } else if (ref) {
111
+ ref.current = node;
112
+ }
113
+ }
114
+ }, [indeterminate, ref]);
115
+ const handleChange = (e) => {
116
+ if (!disabled) {
117
+ onChange?.(e.target.checked);
118
+ }
119
+ };
120
+ const boxStyle = {
121
+ ...checkboxStyles,
122
+ ...(checked || indeterminate) && !disabled && checkedStyles,
123
+ ...isHovered && !disabled && !(checked || indeterminate) && uncheckedHoverStyles,
124
+ ...isHovered && !disabled && (checked || indeterminate) && checkedHoverStyles,
125
+ ...disabled && !checked && !indeterminate && { backgroundColor: "#efefef", border: "1px solid #b3b3b3" },
126
+ ...disabled && (checked || indeterminate) && { backgroundColor: "#b3b3b3", border: "1px solid #b3b3b3" },
127
+ ...isFocused && !disabled && {
128
+ boxShadow: "0px 0px 0px 3px #3cad51"
129
+ }
130
+ };
131
+ const checkmarkColor = "#ffffff";
132
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
133
+ "div",
134
+ {
135
+ className: (0, import_clsx.clsx)("arbor-checkbox-wrapper", className),
136
+ style: { ...wrapperStyles, ...style },
137
+ "data-testid": dataTestId,
138
+ children: [
139
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
140
+ "input",
141
+ {
142
+ ref: innerRef,
143
+ id: checkboxId,
144
+ type: "checkbox",
145
+ checked,
146
+ onChange: handleChange,
147
+ onFocus: () => setIsFocused(true),
148
+ onBlur: () => setIsFocused(false),
149
+ disabled,
150
+ name,
151
+ value,
152
+ style: {
153
+ position: "absolute",
154
+ opacity: 0,
155
+ width: 0,
156
+ height: 0
157
+ },
158
+ "aria-checked": indeterminate ? "mixed" : checked
159
+ }
160
+ ),
161
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
162
+ "label",
163
+ {
164
+ htmlFor: checkboxId,
165
+ onMouseEnter: () => !disabled && setIsHovered(true),
166
+ onMouseLeave: () => !disabled && setIsHovered(false),
167
+ style: {
168
+ display: "flex",
169
+ alignItems: "center",
170
+ gap: "8px",
171
+ cursor: disabled ? "not-allowed" : "pointer"
172
+ },
173
+ children: [
174
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: boxStyle, children: (checked || indeterminate) && (indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Minus, { size: 12, color: checkmarkColor, strokeWidth: 3 }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { size: 16, color: checkmarkColor, strokeWidth: 3 })) }),
175
+ label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
176
+ "span",
177
+ {
178
+ style: {
179
+ ...labelStyles,
180
+ color: disabled ? "#7e7e7e" : "#2f2f2f",
181
+ cursor: disabled ? "not-allowed" : "pointer"
182
+ },
183
+ children: label
184
+ }
185
+ )
186
+ ]
187
+ }
188
+ )
189
+ ]
190
+ }
191
+ );
192
+ }
193
+ );
194
+ Checkbox.displayName = "Checkbox";
195
+
196
+ // src/Table/Table.tsx
197
+ var import_jsx_runtime2 = require("react/jsx-runtime");
198
+ var tableStyles = {
199
+ width: "100%",
200
+ borderCollapse: "separate",
201
+ borderSpacing: 0,
202
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
203
+ };
204
+ var headerCellStyles = {
205
+ height: "44px",
206
+ paddingLeft: "16px",
207
+ paddingRight: "16px",
208
+ paddingTop: 0,
209
+ paddingBottom: 0,
210
+ backgroundColor: "#f8f8f8",
211
+ borderBottom: "1px solid #efefef",
212
+ fontSize: "13px",
213
+ fontWeight: 600,
214
+ color: "#2f2f2f",
215
+ textAlign: "left",
216
+ position: "relative"
217
+ };
218
+ var checkboxCellStyles = {
219
+ width: "48px",
220
+ paddingLeft: "16px",
221
+ paddingRight: "8px"
222
+ };
223
+ var bodyCellStyles = {
224
+ height: "41px",
225
+ paddingLeft: "16px",
226
+ paddingRight: "16px",
227
+ paddingTop: "8px",
228
+ paddingBottom: "8px",
229
+ borderBottom: "1px solid #efefef",
230
+ fontSize: "13px",
231
+ color: "#2f2f2f"
232
+ };
233
+ var menuButtonStyles = {
234
+ width: "24px",
235
+ height: "24px",
236
+ border: "none",
237
+ backgroundColor: "transparent",
238
+ cursor: "pointer",
239
+ display: "inline-flex",
240
+ alignItems: "center",
241
+ justifyContent: "center",
242
+ padding: 0,
243
+ marginLeft: "8px",
244
+ borderRadius: "4px",
245
+ transition: "background-color 0.2s ease-in-out"
246
+ };
247
+ var rowStyles = {
248
+ transition: "background-color 0.1s ease-in-out"
249
+ };
250
+ var Table = React2.forwardRef(
251
+ ({
252
+ columns,
253
+ rows,
254
+ onRowSelectionChange,
255
+ onSelectAllChange,
256
+ allSelected = false,
257
+ someSelected = false,
258
+ className,
259
+ style,
260
+ "data-testid": dataTestId
261
+ }, ref) => {
262
+ const [hoveredRow, setHoveredRow] = React2.useState(null);
263
+ const [hoveredMenuButton, setHoveredMenuButton] = React2.useState(null);
264
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
265
+ "table",
266
+ {
267
+ ref,
268
+ className: (0, import_clsx2.clsx)("arbor-table", className),
269
+ style: { ...tableStyles, ...style },
270
+ "data-testid": dataTestId,
271
+ children: [
272
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("tr", { children: [
273
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("th", { style: { ...headerCellStyles, ...checkboxCellStyles }, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
274
+ Checkbox,
275
+ {
276
+ checked: allSelected,
277
+ indeterminate: someSelected && !allSelected,
278
+ onChange: onSelectAllChange,
279
+ "aria-label": "Select all rows"
280
+ }
281
+ ) }),
282
+ columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
283
+ "th",
284
+ {
285
+ style: {
286
+ ...headerCellStyles,
287
+ ...column.width ? { width: column.width } : {}
288
+ },
289
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: { display: "flex", alignItems: "center" }, children: [
290
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: column.label }),
291
+ column.showMenu !== false && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
292
+ "button",
293
+ {
294
+ type: "button",
295
+ onMouseEnter: () => setHoveredMenuButton(`header-${column.key}`),
296
+ onMouseLeave: () => setHoveredMenuButton(null),
297
+ style: {
298
+ ...menuButtonStyles,
299
+ backgroundColor: hoveredMenuButton === `header-${column.key}` ? "#f5f5f5" : "transparent"
300
+ },
301
+ "aria-label": `${column.label} options`,
302
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react2.MoreVertical, { size: 16, color: "#595959" })
303
+ }
304
+ )
305
+ ] })
306
+ },
307
+ column.key
308
+ ))
309
+ ] }) }),
310
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("tbody", { children: rows.map((row, index) => {
311
+ const isOdd = index % 2 === 0;
312
+ const isHovered = hoveredRow === row.id;
313
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
314
+ "tr",
315
+ {
316
+ onMouseEnter: () => setHoveredRow(row.id),
317
+ onMouseLeave: () => setHoveredRow(null),
318
+ style: {
319
+ ...rowStyles,
320
+ backgroundColor: isHovered ? "#fafafa" : isOdd ? "white" : "#f8f8f8"
321
+ },
322
+ children: [
323
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("td", { style: { ...bodyCellStyles, ...checkboxCellStyles }, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
324
+ Checkbox,
325
+ {
326
+ checked: row.selected || false,
327
+ onChange: (checked) => onRowSelectionChange?.(row.id, checked),
328
+ "aria-label": `Select row ${row.id}`
329
+ }
330
+ ) }),
331
+ columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("td", { style: bodyCellStyles, children: row.cells[column.key] }, column.key))
332
+ ]
333
+ },
334
+ row.id
335
+ );
336
+ }) })
337
+ ]
338
+ }
339
+ );
340
+ }
341
+ );
342
+ Table.displayName = "Table";
343
+ // Annotate the CommonJS export names for ESM import in node:
344
+ 0 && (module.exports = {
345
+ Table
346
+ });
347
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Table/index.ts","../src/Table/Table.tsx","../src/Checkbox/Checkbox.tsx"],"sourcesContent":["export { Table } from './Table';\nexport type { TableProps, TableColumn, TableRow } from './Table';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { MoreVertical } from 'lucide-react';\nimport { Checkbox } from '../Checkbox';\n\nexport interface TableColumn {\n /**\n * Unique key for the column\n */\n key: string;\n /**\n * Column header label\n */\n label: string;\n /**\n * Whether to show the menu icon in the header\n */\n showMenu?: boolean;\n /**\n * Custom width for the column\n */\n width?: string;\n}\n\nexport interface TableRow {\n /**\n * Unique ID for the row\n */\n id: string;\n /**\n * Cell data keyed by column key\n */\n cells: Record<string, React.ReactNode>;\n /**\n * Whether the row is selected\n */\n selected?: boolean;\n}\n\nexport interface TableProps {\n /**\n * Table columns configuration\n */\n columns: TableColumn[];\n /**\n * Table rows data\n */\n rows: TableRow[];\n /**\n * Callback when row selection changes\n */\n onRowSelectionChange?: (rowId: string, selected: boolean) => void;\n /**\n * Callback when select all is toggled\n */\n onSelectAllChange?: (selected: boolean) => void;\n /**\n * Whether all rows are selected\n */\n allSelected?: boolean;\n /**\n * Whether some rows are selected (indeterminate state)\n */\n someSelected?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Test ID for testing\n */\n 'data-testid'?: string;\n}\n\nconst tableStyles: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'separate',\n borderSpacing: 0,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst headerCellStyles: React.CSSProperties = {\n height: '44px',\n paddingLeft: '16px',\n paddingRight: '16px',\n paddingTop: 0,\n paddingBottom: 0,\n backgroundColor: '#f8f8f8',\n borderBottom: '1px solid #efefef',\n fontSize: '13px',\n fontWeight: 600,\n color: '#2f2f2f',\n textAlign: 'left',\n position: 'relative',\n};\n\nconst checkboxCellStyles: React.CSSProperties = {\n width: '48px',\n paddingLeft: '16px',\n paddingRight: '8px',\n};\n\nconst bodyCellStyles: React.CSSProperties = {\n height: '41px',\n paddingLeft: '16px',\n paddingRight: '16px',\n paddingTop: '8px',\n paddingBottom: '8px',\n borderBottom: '1px solid #efefef',\n fontSize: '13px',\n color: '#2f2f2f',\n};\n\nconst menuButtonStyles: React.CSSProperties = {\n width: '24px',\n height: '24px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n marginLeft: '8px',\n borderRadius: '4px',\n transition: 'background-color 0.2s ease-in-out',\n};\n\nconst rowStyles: React.CSSProperties = {\n transition: 'background-color 0.1s ease-in-out',\n};\n\n/**\n * Table component - Arbor Design System\n *\n * A data table component with selectable rows and column headers.\n */\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\n (\n {\n columns,\n rows,\n onRowSelectionChange,\n onSelectAllChange,\n allSelected = false,\n someSelected = false,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [hoveredRow, setHoveredRow] = React.useState<string | null>(null);\n const [hoveredMenuButton, setHoveredMenuButton] = React.useState<string | null>(null);\n\n return (\n <table\n ref={ref}\n className={clsx('arbor-table', className)}\n style={{ ...tableStyles, ...style }}\n data-testid={dataTestId}\n >\n <thead>\n <tr>\n {/* Checkbox header cell */}\n <th style={{ ...headerCellStyles, ...checkboxCellStyles }}>\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={onSelectAllChange}\n aria-label=\"Select all rows\"\n />\n </th>\n\n {/* Column headers */}\n {columns.map((column) => (\n <th\n key={column.key}\n style={{\n ...headerCellStyles,\n ...(column.width ? { width: column.width } : {}),\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span>{column.label}</span>\n {column.showMenu !== false && (\n <button\n type=\"button\"\n onMouseEnter={() => setHoveredMenuButton(`header-${column.key}`)}\n onMouseLeave={() => setHoveredMenuButton(null)}\n style={{\n ...menuButtonStyles,\n backgroundColor:\n hoveredMenuButton === `header-${column.key}` ? '#f5f5f5' : 'transparent',\n }}\n aria-label={`${column.label} options`}\n >\n <MoreVertical size={16} color=\"#595959\" />\n </button>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rows.map((row, index) => {\n const isOdd = index % 2 === 0;\n const isHovered = hoveredRow === row.id;\n\n return (\n <tr\n key={row.id}\n onMouseEnter={() => setHoveredRow(row.id)}\n onMouseLeave={() => setHoveredRow(null)}\n style={{\n ...rowStyles,\n backgroundColor: isHovered\n ? '#fafafa'\n : isOdd\n ? 'white'\n : '#f8f8f8',\n }}\n >\n {/* Checkbox cell */}\n <td style={{ ...bodyCellStyles, ...checkboxCellStyles }}>\n <Checkbox\n checked={row.selected || false}\n onChange={(checked) => onRowSelectionChange?.(row.id, checked)}\n aria-label={`Select row ${row.id}`}\n />\n </td>\n\n {/* Data cells */}\n {columns.map((column) => (\n <td key={column.key} style={bodyCellStyles}>\n {row.cells[column.key]}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n }\n);\n\nTable.displayName = 'Table';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { Check, Minus } from 'lucide-react';\n\nexport interface CheckboxProps {\n /**\n * The label for the checkbox\n */\n label?: string;\n /**\n * Whether the checkbox is checked\n */\n checked?: boolean;\n /**\n * Callback when checked state changes\n */\n onChange?: (checked: boolean) => void;\n /**\n * Whether the checkbox is disabled\n */\n disabled?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Test ID for testing\n */\n 'data-testid'?: string;\n /**\n * Name attribute for form submission\n */\n name?: string;\n /**\n * Value attribute for form submission\n */\n value?: string;\n /**\n * Indeterminate state (shows minus icon)\n */\n indeterminate?: boolean;\n}\n\nconst checkboxStyles: React.CSSProperties = {\n width: '16px',\n height: '16px',\n border: '1px solid #7e7e7e', // grey-500\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n transition: 'all 0.2s ease-in-out',\n flexShrink: 0,\n backgroundColor: '#ffffff',\n};\n\nconst checkedStyles: React.CSSProperties = {\n backgroundColor: '#0e8a0e', // brand-600\n border: '1px solid #0e8a0e',\n};\n\nconst checkedHoverStyles: React.CSSProperties = {\n backgroundColor: '#005700', // brand-800\n border: '1px solid #005700',\n};\n\nconst uncheckedHoverStyles: React.CSSProperties = {\n border: '1px solid #474747', // grey-700\n};\n\nconst labelStyles: React.CSSProperties = {\n fontSize: '13px',\n color: '#2f2f2f',\n cursor: 'pointer',\n userSelect: 'none' as const,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst wrapperStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n};\n\n/**\n * Checkbox component - Arbor Design System\n *\n * A checkbox input with label support.\n */\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n checked = false,\n onChange,\n disabled = false,\n className,\n style,\n 'data-testid': dataTestId,\n name,\n value,\n indeterminate = false,\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const checkboxId = React.useId();\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n\n // Merge refs\n React.useEffect(() => {\n const node = innerRef.current;\n if (node) {\n // Set indeterminate property on the native input element\n node.indeterminate = indeterminate;\n\n // Forward to external ref if provided\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n }\n }, [indeterminate, ref]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled) {\n onChange?.(e.target.checked);\n }\n };\n\n const boxStyle: React.CSSProperties = {\n ...checkboxStyles,\n ...((checked || indeterminate) && !disabled && checkedStyles),\n ...(isHovered && !disabled && !(checked || indeterminate) && uncheckedHoverStyles),\n ...(isHovered && !disabled && (checked || indeterminate) && checkedHoverStyles),\n ...(disabled && !checked && !indeterminate && { backgroundColor: '#efefef', border: '1px solid #b3b3b3' }),\n ...(disabled && (checked || indeterminate) && { backgroundColor: '#b3b3b3', border: '1px solid #b3b3b3' }),\n ...(isFocused && !disabled && {\n boxShadow: '0px 0px 0px 3px #3cad51',\n }),\n };\n\n const checkmarkColor = '#ffffff';\n\n return (\n <div\n className={clsx('arbor-checkbox-wrapper', className)}\n style={{ ...wrapperStyles, ...style }}\n data-testid={dataTestId}\n >\n <input\n ref={innerRef}\n id={checkboxId}\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n name={name}\n value={value}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n }}\n aria-checked={indeterminate ? 'mixed' : checked}\n />\n <label\n htmlFor={checkboxId}\n onMouseEnter={() => !disabled && setIsHovered(true)}\n onMouseLeave={() => !disabled && setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <div style={boxStyle}>\n {(checked || indeterminate) && (\n indeterminate ? (\n <Minus size={12} color={checkmarkColor} strokeWidth={3} />\n ) : (\n <Check size={16} color={checkmarkColor} strokeWidth={3} />\n )\n )}\n </div>\n {label && (\n <span\n style={{\n ...labelStyles,\n color: disabled ? '#7e7e7e' : '#2f2f2f',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n {label}\n </span>\n )}\n </label>\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"mappings":"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","names":["React","import_clsx","import_lucide_react","import_jsx_runtime"]}
package/dist/Table.mjs ADDED
@@ -0,0 +1,8 @@
1
+ import {
2
+ Table
3
+ } from "./chunk-AI2U34CF.mjs";
4
+ import "./chunk-CUTYEIFE.mjs";
5
+ export {
6
+ Table
7
+ };
8
+ //# sourceMappingURL=Table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,76 @@
1
+ import * as React from 'react';
2
+
3
+ interface TableControlsProps {
4
+ /**
5
+ * Number of selected items for the Actions button
6
+ */
7
+ selectedCount?: number;
8
+ /**
9
+ * Callback when Actions dropdown is clicked
10
+ */
11
+ onActionsClick?: () => void;
12
+ /**
13
+ * Callback when Undo is clicked
14
+ */
15
+ onUndoClick?: () => void;
16
+ /**
17
+ * Callback when Redo is clicked
18
+ */
19
+ onRedoClick?: () => void;
20
+ /**
21
+ * Callback when Hide Columns is clicked
22
+ */
23
+ onHideColumnsClick?: () => void;
24
+ /**
25
+ * Callback when Search is clicked
26
+ */
27
+ onSearchClick?: () => void;
28
+ /**
29
+ * Callback when Download is clicked
30
+ */
31
+ onDownloadClick?: () => void;
32
+ /**
33
+ * Callback when Tooltips toggle is clicked
34
+ */
35
+ onTooltipsClick?: () => void;
36
+ /**
37
+ * Whether tooltips are enabled
38
+ */
39
+ tooltipsEnabled?: boolean;
40
+ /**
41
+ * Callback when Settings is clicked
42
+ */
43
+ onSettingsClick?: () => void;
44
+ /**
45
+ * Callback when Expand is clicked
46
+ */
47
+ onExpandClick?: () => void;
48
+ /**
49
+ * Whether undo is disabled
50
+ */
51
+ undoDisabled?: boolean;
52
+ /**
53
+ * Whether redo is disabled
54
+ */
55
+ redoDisabled?: boolean;
56
+ /**
57
+ * Custom className
58
+ */
59
+ className?: string;
60
+ /**
61
+ * Custom style
62
+ */
63
+ style?: React.CSSProperties;
64
+ /**
65
+ * Test ID for testing
66
+ */
67
+ 'data-testid'?: string;
68
+ }
69
+ /**
70
+ * TableControls component - Arbor Design System
71
+ *
72
+ * A toolbar component with action buttons and controls for tables.
73
+ */
74
+ declare const TableControls: React.ForwardRefExoticComponent<TableControlsProps & React.RefAttributes<HTMLDivElement>>;
75
+
76
+ export { TableControls, type TableControlsProps };
@@ -0,0 +1,76 @@
1
+ import * as React from 'react';
2
+
3
+ interface TableControlsProps {
4
+ /**
5
+ * Number of selected items for the Actions button
6
+ */
7
+ selectedCount?: number;
8
+ /**
9
+ * Callback when Actions dropdown is clicked
10
+ */
11
+ onActionsClick?: () => void;
12
+ /**
13
+ * Callback when Undo is clicked
14
+ */
15
+ onUndoClick?: () => void;
16
+ /**
17
+ * Callback when Redo is clicked
18
+ */
19
+ onRedoClick?: () => void;
20
+ /**
21
+ * Callback when Hide Columns is clicked
22
+ */
23
+ onHideColumnsClick?: () => void;
24
+ /**
25
+ * Callback when Search is clicked
26
+ */
27
+ onSearchClick?: () => void;
28
+ /**
29
+ * Callback when Download is clicked
30
+ */
31
+ onDownloadClick?: () => void;
32
+ /**
33
+ * Callback when Tooltips toggle is clicked
34
+ */
35
+ onTooltipsClick?: () => void;
36
+ /**
37
+ * Whether tooltips are enabled
38
+ */
39
+ tooltipsEnabled?: boolean;
40
+ /**
41
+ * Callback when Settings is clicked
42
+ */
43
+ onSettingsClick?: () => void;
44
+ /**
45
+ * Callback when Expand is clicked
46
+ */
47
+ onExpandClick?: () => void;
48
+ /**
49
+ * Whether undo is disabled
50
+ */
51
+ undoDisabled?: boolean;
52
+ /**
53
+ * Whether redo is disabled
54
+ */
55
+ redoDisabled?: boolean;
56
+ /**
57
+ * Custom className
58
+ */
59
+ className?: string;
60
+ /**
61
+ * Custom style
62
+ */
63
+ style?: React.CSSProperties;
64
+ /**
65
+ * Test ID for testing
66
+ */
67
+ 'data-testid'?: string;
68
+ }
69
+ /**
70
+ * TableControls component - Arbor Design System
71
+ *
72
+ * A toolbar component with action buttons and controls for tables.
73
+ */
74
+ declare const TableControls: React.ForwardRefExoticComponent<TableControlsProps & React.RefAttributes<HTMLDivElement>>;
75
+
76
+ export { TableControls, type TableControlsProps };