@fragments-sdk/ui 0.9.4 → 0.9.6

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 (126) hide show
  1. package/dist/assets/ui.css +443 -247
  2. package/dist/blocks/components/index.d.ts +0 -2
  3. package/dist/blocks/components/index.d.ts.map +1 -1
  4. package/dist/codeblock.cjs +187 -184
  5. package/dist/codeblock.cjs.map +1 -1
  6. package/dist/codeblock.js +183 -180
  7. package/dist/codeblock.js.map +1 -1
  8. package/dist/components/Box/Box.module.scss.cjs +73 -0
  9. package/dist/components/Box/Box.module.scss.cjs.map +1 -1
  10. package/dist/components/Box/Box.module.scss.js +73 -0
  11. package/dist/components/Box/Box.module.scss.js.map +1 -1
  12. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +6 -0
  13. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs.map +1 -1
  14. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +6 -0
  15. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js.map +1 -1
  16. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -23
  17. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs.map +1 -1
  18. package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -23
  19. package/dist/components/CodeBlock/CodeBlock.module.scss.js.map +1 -1
  20. package/dist/components/CodeBlock/index.d.ts +11 -7
  21. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  22. package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
  23. package/dist/components/Combobox/Combobox.module.scss.js +15 -15
  24. package/dist/components/DataTable/DataTable.module.scss.cjs +84 -0
  25. package/dist/components/DataTable/DataTable.module.scss.cjs.map +1 -0
  26. package/dist/components/DataTable/DataTable.module.scss.js +84 -0
  27. package/dist/components/DataTable/DataTable.module.scss.js.map +1 -0
  28. package/dist/components/DataTable/index.cjs +383 -0
  29. package/dist/components/DataTable/index.cjs.map +1 -0
  30. package/dist/components/DataTable/index.d.ts +78 -0
  31. package/dist/components/DataTable/index.d.ts.map +1 -0
  32. package/dist/components/DataTable/index.js +366 -0
  33. package/dist/components/DataTable/index.js.map +1 -0
  34. package/dist/components/Drawer/Drawer.module.scss.cjs +9 -0
  35. package/dist/components/Drawer/Drawer.module.scss.cjs.map +1 -1
  36. package/dist/components/Drawer/Drawer.module.scss.js +9 -0
  37. package/dist/components/Drawer/Drawer.module.scss.js.map +1 -1
  38. package/dist/components/Image/Image.module.scss.cjs +12 -0
  39. package/dist/components/Image/Image.module.scss.cjs.map +1 -1
  40. package/dist/components/Image/Image.module.scss.js +12 -0
  41. package/dist/components/Image/Image.module.scss.js.map +1 -1
  42. package/dist/components/Link/Link.module.scss.cjs +3 -0
  43. package/dist/components/Link/Link.module.scss.cjs.map +1 -1
  44. package/dist/components/Link/Link.module.scss.js +3 -0
  45. package/dist/components/Link/Link.module.scss.js.map +1 -1
  46. package/dist/components/List/List.module.scss.cjs +5 -0
  47. package/dist/components/List/List.module.scss.cjs.map +1 -1
  48. package/dist/components/List/List.module.scss.js +5 -0
  49. package/dist/components/List/List.module.scss.js.map +1 -1
  50. package/dist/components/Loading/Loading.module.scss.cjs +5 -0
  51. package/dist/components/Loading/Loading.module.scss.cjs.map +1 -1
  52. package/dist/components/Loading/Loading.module.scss.js +5 -0
  53. package/dist/components/Loading/Loading.module.scss.js.map +1 -1
  54. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  55. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  56. package/dist/components/Message/Message.module.scss.cjs +22 -16
  57. package/dist/components/Message/Message.module.scss.cjs.map +1 -1
  58. package/dist/components/Message/Message.module.scss.js +22 -16
  59. package/dist/components/Message/Message.module.scss.js.map +1 -1
  60. package/dist/components/Message/index.cjs +5 -3
  61. package/dist/components/Message/index.cjs.map +1 -1
  62. package/dist/components/Message/index.d.ts +5 -1
  63. package/dist/components/Message/index.d.ts.map +1 -1
  64. package/dist/components/Message/index.js +5 -3
  65. package/dist/components/Message/index.js.map +1 -1
  66. package/dist/components/Skeleton/Skeleton.module.scss.cjs +14 -0
  67. package/dist/components/Skeleton/Skeleton.module.scss.cjs.map +1 -1
  68. package/dist/components/Skeleton/Skeleton.module.scss.js +14 -0
  69. package/dist/components/Skeleton/Skeleton.module.scss.js.map +1 -1
  70. package/dist/components/Stack/Stack.module.scss.cjs +14 -0
  71. package/dist/components/Stack/Stack.module.scss.cjs.map +1 -1
  72. package/dist/components/Stack/Stack.module.scss.js +14 -0
  73. package/dist/components/Stack/Stack.module.scss.js.map +1 -1
  74. package/dist/components/Table/Table.module.scss.cjs +21 -36
  75. package/dist/components/Table/Table.module.scss.cjs.map +1 -1
  76. package/dist/components/Table/Table.module.scss.js +21 -36
  77. package/dist/components/Table/Table.module.scss.js.map +1 -1
  78. package/dist/components/Table/index.d.ts +35 -55
  79. package/dist/components/Table/index.d.ts.map +1 -1
  80. package/dist/components/Text/Text.module.scss.cjs +14 -0
  81. package/dist/components/Text/Text.module.scss.cjs.map +1 -1
  82. package/dist/components/Text/Text.module.scss.js +14 -0
  83. package/dist/components/Text/Text.module.scss.js.map +1 -1
  84. package/dist/components/Textarea/Textarea.module.scss.cjs +4 -0
  85. package/dist/components/Textarea/Textarea.module.scss.cjs.map +1 -1
  86. package/dist/components/Textarea/Textarea.module.scss.js +4 -0
  87. package/dist/components/Textarea/Textarea.module.scss.js.map +1 -1
  88. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +5 -0
  89. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs.map +1 -1
  90. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +5 -0
  91. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js.map +1 -1
  92. package/dist/index.cjs +119 -117
  93. package/dist/index.cjs.map +1 -1
  94. package/dist/index.d.ts +2 -1
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +3 -1
  97. package/dist/index.js.map +1 -1
  98. package/dist/table.cjs +44 -262
  99. package/dist/table.cjs.map +1 -1
  100. package/dist/table.js +47 -248
  101. package/dist/table.js.map +1 -1
  102. package/fragments.json +1 -1
  103. package/package.json +110 -118
  104. package/src/blocks/components/index.ts +0 -3
  105. package/src/components/CodeBlock/CodeBlock.module.scss +16 -34
  106. package/src/components/CodeBlock/index.tsx +351 -345
  107. package/src/components/Combobox/Combobox.module.scss +13 -9
  108. package/src/components/ConversationList/ConversationList.fragment.tsx +96 -129
  109. package/src/components/DataTable/DataTable.fragment.tsx +754 -0
  110. package/src/components/DataTable/DataTable.module.scss +300 -0
  111. package/src/components/DataTable/DataTable.test.tsx +224 -0
  112. package/src/components/DataTable/index.tsx +533 -0
  113. package/src/components/Message/Message.fragment.tsx +34 -0
  114. package/src/components/Message/Message.module.scss +11 -0
  115. package/src/components/Message/index.tsx +12 -3
  116. package/src/components/Table/Table.fragment.tsx +190 -175
  117. package/src/components/Table/Table.module.scss +15 -88
  118. package/src/components/Table/Table.test.tsx +184 -94
  119. package/src/components/Table/index.tsx +105 -374
  120. package/src/index.ts +15 -4
  121. package/src/tokens/_computed.scss +7 -6
  122. package/src/tokens/_density.scss +87 -47
  123. package/src/tokens/_variables.scss +46 -31
  124. package/dist/blocks/components/DataTable.d.ts +0 -19
  125. package/dist/blocks/components/DataTable.d.ts.map +0 -1
  126. package/src/blocks/components/DataTable.tsx +0 -124
@@ -0,0 +1,78 @@
1
+ import * as React from 'react';
2
+ import '../../styles/globals.scss';
3
+ /** Column definition compatible with @tanstack/react-table */
4
+ export type ColumnDef<TData = unknown, TValue = unknown> = {
5
+ id?: string;
6
+ accessorKey?: string;
7
+ accessorFn?: (row: TData) => TValue;
8
+ header?: string | ((context: any) => React.ReactNode);
9
+ cell?: string | ((context: any) => React.ReactNode);
10
+ size?: number;
11
+ minSize?: number;
12
+ maxSize?: number;
13
+ enableSorting?: boolean;
14
+ [key: string]: unknown;
15
+ };
16
+ export type SortingState = Array<{
17
+ id: string;
18
+ desc: boolean;
19
+ }>;
20
+ export type RowSelectionState = Record<string, boolean>;
21
+ export type ExpandedState = true | Record<string, boolean>;
22
+ type OnChangeFn<T> = ((updaterOrValue: T | ((prev: T) => T)) => void);
23
+ export type DataTableColumn<T> = ColumnDef<T, unknown>;
24
+ export interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onClick'> {
25
+ /** Column definitions */
26
+ columns: DataTableColumn<T>[];
27
+ /** Data array */
28
+ data: T[];
29
+ /** Unique key extractor for each row */
30
+ getRowId?: (row: T) => string;
31
+ /** Enable sorting */
32
+ sortable?: boolean;
33
+ /** Controlled sorting state */
34
+ sorting?: SortingState;
35
+ /** Sorting change handler */
36
+ onSortingChange?: OnChangeFn<SortingState>;
37
+ /** Enable row selection */
38
+ selectable?: boolean;
39
+ /** Show checkbox column for row selection */
40
+ showCheckbox?: boolean;
41
+ /** Controlled selection state */
42
+ rowSelection?: RowSelectionState;
43
+ /** Selection change handler */
44
+ onRowSelectionChange?: OnChangeFn<RowSelectionState>;
45
+ /** Row click handler */
46
+ onRowClick?: (row: T) => void;
47
+ /** Extract sub-rows from a row for expandable tree tables */
48
+ getSubRows?: (row: T) => T[] | undefined;
49
+ /** Controlled expanded state */
50
+ expanded?: ExpandedState;
51
+ /** Expanded state change handler */
52
+ onExpandedChange?: OnChangeFn<ExpandedState>;
53
+ /** Empty state message */
54
+ emptyMessage?: string;
55
+ /** Size variant */
56
+ size?: 'sm' | 'md';
57
+ /** Visible caption for the table (recommended for accessibility) */
58
+ caption?: string;
59
+ /** Hide the caption visually but keep it for screen readers */
60
+ captionHidden?: boolean;
61
+ /** Show alternating row backgrounds */
62
+ striped?: boolean;
63
+ /** Wrap table in a bordered container */
64
+ bordered?: boolean;
65
+ }
66
+ declare function DataTableRoot<T>({ columns: userColumns, data, getRowId, sortable, sorting: controlledSorting, onSortingChange, selectable, showCheckbox, rowSelection: controlledRowSelection, onRowSelectionChange, onRowClick, getSubRows, expanded: controlledExpanded, onExpandedChange, emptyMessage, size, className, caption, captionHidden, striped, bordered, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy, ...htmlProps }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element | null;
67
+ export declare function createColumns<T>(columns: Array<{
68
+ key: string;
69
+ header: string;
70
+ width?: number;
71
+ cell?: (row: T) => React.ReactNode;
72
+ }>): DataTableColumn<T>[];
73
+ export declare const DataTable: typeof DataTableRoot & {
74
+ Root: typeof DataTableRoot;
75
+ Columns: typeof createColumns;
76
+ };
77
+ export {};
78
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,366 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ /* empty css */
4
+ import styles from "./DataTable.module.scss.js";
5
+ import { Checkbox } from "../Checkbox/index.js";
6
+ let _useReactTable = null;
7
+ let _getCoreRowModel = null;
8
+ let _getSortedRowModel = null;
9
+ let _getExpandedRowModel = null;
10
+ let _flexRender = null;
11
+ let _tableLoaded = false;
12
+ let _tableFailed = false;
13
+ function loadTableDeps() {
14
+ if (_tableLoaded) return;
15
+ _tableLoaded = true;
16
+ try {
17
+ const rt = require("@tanstack/react-table");
18
+ _useReactTable = rt.useReactTable;
19
+ _getCoreRowModel = rt.getCoreRowModel;
20
+ _getSortedRowModel = rt.getSortedRowModel;
21
+ _getExpandedRowModel = rt.getExpandedRowModel;
22
+ _flexRender = rt.flexRender;
23
+ } catch {
24
+ _tableFailed = true;
25
+ }
26
+ }
27
+ function DataTableRoot({
28
+ columns: userColumns,
29
+ data,
30
+ getRowId,
31
+ sortable = false,
32
+ sorting: controlledSorting,
33
+ onSortingChange,
34
+ selectable = false,
35
+ showCheckbox = false,
36
+ rowSelection: controlledRowSelection,
37
+ onRowSelectionChange,
38
+ onRowClick,
39
+ getSubRows,
40
+ expanded: controlledExpanded,
41
+ onExpandedChange,
42
+ emptyMessage = "No data available",
43
+ size = "md",
44
+ className,
45
+ caption,
46
+ captionHidden = false,
47
+ striped = false,
48
+ bordered = false,
49
+ "aria-label": ariaLabel,
50
+ "aria-describedby": ariaDescribedBy,
51
+ ...htmlProps
52
+ }) {
53
+ loadTableDeps();
54
+ const [internalSorting, setInternalSorting] = React.useState([]);
55
+ const sorting = controlledSorting ?? internalSorting;
56
+ const handleSortingChange = onSortingChange ?? setInternalSorting;
57
+ const [internalRowSelection, setInternalRowSelection] = React.useState({});
58
+ const rowSelection = controlledRowSelection ?? internalRowSelection;
59
+ const handleRowSelectionChange = onRowSelectionChange ?? setInternalRowSelection;
60
+ const [internalExpanded, setInternalExpanded] = React.useState({});
61
+ const expanded = controlledExpanded ?? internalExpanded;
62
+ const handleExpandedChange = onExpandedChange ?? setInternalExpanded;
63
+ const columns = React.useMemo(() => {
64
+ if (!showCheckbox || !selectable) return userColumns;
65
+ const checkboxColumn = {
66
+ id: "__checkbox",
67
+ size: 40,
68
+ minSize: 40,
69
+ maxSize: 40,
70
+ enableSorting: false,
71
+ header: ({ table: table2 }) => /* @__PURE__ */ jsx(
72
+ Checkbox,
73
+ {
74
+ size: "sm",
75
+ checked: table2.getIsAllRowsSelected(),
76
+ indeterminate: table2.getIsSomeRowsSelected(),
77
+ onCheckedChange: () => table2.toggleAllRowsSelected(),
78
+ "aria-label": "Select all rows"
79
+ }
80
+ ),
81
+ cell: ({ row }) => /* @__PURE__ */ jsx(
82
+ Checkbox,
83
+ {
84
+ size: "sm",
85
+ checked: row.getIsSelected(),
86
+ disabled: !row.getCanSelect(),
87
+ onCheckedChange: () => row.toggleSelected(),
88
+ "aria-label": `Select row ${row.id}`
89
+ }
90
+ )
91
+ };
92
+ return [checkboxColumn, ...userColumns];
93
+ }, [userColumns, showCheckbox, selectable]);
94
+ if (_tableFailed || !_useReactTable) {
95
+ if (_tableFailed && process.env.NODE_ENV === "development") {
96
+ console.warn(
97
+ "[@fragments-sdk/ui] DataTable: @tanstack/react-table is not installed. Install it with: npm install @tanstack/react-table"
98
+ );
99
+ }
100
+ return null;
101
+ }
102
+ const hasSubRows = !!getSubRows;
103
+ const table = _useReactTable({
104
+ data,
105
+ columns,
106
+ getRowId,
107
+ getSubRows,
108
+ getCoreRowModel: _getCoreRowModel(),
109
+ getSortedRowModel: sortable ? _getSortedRowModel() : void 0,
110
+ getExpandedRowModel: hasSubRows && _getExpandedRowModel ? _getExpandedRowModel() : void 0,
111
+ state: {
112
+ sorting: sortable ? sorting : void 0,
113
+ rowSelection: selectable ? rowSelection : void 0,
114
+ expanded: hasSubRows ? expanded : void 0
115
+ },
116
+ onSortingChange: sortable ? handleSortingChange : void 0,
117
+ onRowSelectionChange: selectable ? handleRowSelectionChange : void 0,
118
+ onExpandedChange: hasSubRows ? handleExpandedChange : void 0,
119
+ enableRowSelection: selectable,
120
+ enableSorting: sortable,
121
+ enableExpanding: hasSubRows
122
+ });
123
+ const isEmpty = data.length === 0;
124
+ const hasExplicitColumnSizing = React.useMemo(
125
+ () => columns.some(
126
+ (column) => column.size !== void 0 || column.minSize !== void 0 || column.maxSize !== void 0
127
+ ),
128
+ [columns]
129
+ );
130
+ const rootClasses = [
131
+ styles.table,
132
+ hasExplicitColumnSizing && styles.fixedLayout,
133
+ styles[size],
134
+ striped && styles.striped,
135
+ className
136
+ ].filter(Boolean).join(" ");
137
+ const getColumnSizeStyle = (column) => {
138
+ const { size: size2, minSize, maxSize } = column.columnDef;
139
+ const hasExplicitSize = size2 !== void 0 || minSize !== void 0 || maxSize !== void 0;
140
+ if (!hasExplicitSize) {
141
+ return void 0;
142
+ }
143
+ const resolvedSize = column.getSize();
144
+ return {
145
+ width: resolvedSize,
146
+ minWidth: minSize ?? resolvedSize,
147
+ maxWidth: maxSize ?? resolvedSize
148
+ };
149
+ };
150
+ if (isEmpty) {
151
+ return /* @__PURE__ */ jsx("div", { className: styles.emptyState, children: /* @__PURE__ */ jsx("span", { className: styles.emptyMessage, children: emptyMessage }) });
152
+ }
153
+ const isInteractiveTarget = (target, currentTarget) => {
154
+ if (!(target instanceof Element)) return false;
155
+ const interactiveElement = target.closest(
156
+ 'button, a, input, select, textarea, [role="button"], [role="link"], [role="checkbox"], [role="switch"]'
157
+ );
158
+ return Boolean(interactiveElement && currentTarget.contains(interactiveElement));
159
+ };
160
+ return /* @__PURE__ */ jsx("div", { className: [styles.wrapper, bordered && styles.bordered].filter(Boolean).join(" "), children: /* @__PURE__ */ jsxs(
161
+ "table",
162
+ {
163
+ ...htmlProps,
164
+ className: rootClasses,
165
+ "aria-label": ariaLabel,
166
+ "aria-describedby": ariaDescribedBy,
167
+ children: [
168
+ caption && /* @__PURE__ */ jsx("caption", { className: captionHidden ? styles.captionHidden : styles.caption, children: caption }),
169
+ /* @__PURE__ */ jsx("thead", { className: styles.thead, children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx("tr", { className: styles.headerRow, children: headerGroup.headers.map((header) => {
170
+ const canSort = sortable && header.column.getCanSort();
171
+ const sortDirection = header.column.getIsSorted();
172
+ const toggleSorting = canSort ? header.column.getToggleSortingHandler() : void 0;
173
+ return /* @__PURE__ */ jsx(
174
+ "th",
175
+ {
176
+ className: [styles.th, canSort && styles.thSortable].filter(Boolean).join(" "),
177
+ style: getColumnSizeStyle(header.column),
178
+ scope: "col",
179
+ "aria-sort": sortDirection ? sortDirection === "asc" ? "ascending" : "descending" : canSort ? "none" : void 0,
180
+ children: canSort ? /* @__PURE__ */ jsxs(
181
+ "button",
182
+ {
183
+ type: "button",
184
+ className: styles.sortButton,
185
+ onClick: toggleSorting,
186
+ children: [
187
+ /* @__PURE__ */ jsx("span", { className: styles.headerContent, children: header.isPlaceholder ? null : _flexRender(
188
+ header.column.columnDef.header,
189
+ header.getContext()
190
+ ) }),
191
+ /* @__PURE__ */ jsx("span", { className: styles.sortIndicator, "aria-hidden": "true", children: sortDirection === "asc" ? /* @__PURE__ */ jsx(SortAscIcon, {}) : sortDirection === "desc" ? /* @__PURE__ */ jsx(SortDescIcon, {}) : /* @__PURE__ */ jsx(SortIcon, {}) })
192
+ ]
193
+ }
194
+ ) : /* @__PURE__ */ jsx("div", { className: styles.headerContent, children: header.isPlaceholder ? null : _flexRender(
195
+ header.column.columnDef.header,
196
+ header.getContext()
197
+ ) })
198
+ },
199
+ header.id
200
+ );
201
+ }) }, headerGroup.id)) }),
202
+ /* @__PURE__ */ jsx("tbody", { className: styles.tbody, children: table.getRowModel().rows.map((row) => {
203
+ const isClickable = !!onRowClick;
204
+ const isSelected = selectable ? row.getIsSelected() : false;
205
+ const depth = row.depth ?? 0;
206
+ const canExpand = hasSubRows && row.getCanExpand();
207
+ const handleRowClick = (event) => {
208
+ if (!onRowClick) return;
209
+ if (isInteractiveTarget(event.target, event.currentTarget)) return;
210
+ onRowClick(row.original);
211
+ };
212
+ const handleRowKeyDown = (event) => {
213
+ if (!onRowClick) return;
214
+ if (isInteractiveTarget(event.target, event.currentTarget)) return;
215
+ if (event.key === "Enter" || event.key === " ") {
216
+ event.preventDefault();
217
+ onRowClick(row.original);
218
+ }
219
+ };
220
+ return /* @__PURE__ */ jsx(
221
+ "tr",
222
+ {
223
+ className: [
224
+ styles.row,
225
+ isClickable && styles.clickable,
226
+ isSelected && styles.selected,
227
+ depth > 0 && styles.subRow
228
+ ].filter(Boolean).join(" "),
229
+ onClick: isClickable ? handleRowClick : void 0,
230
+ onKeyDown: isClickable ? handleRowKeyDown : void 0,
231
+ tabIndex: isClickable ? 0 : void 0,
232
+ "data-selected": isSelected || void 0,
233
+ "data-depth": depth > 0 ? depth : void 0,
234
+ children: row.getVisibleCells().map((cell, cellIndex) => {
235
+ const isFirstDataCell = hasSubRows && cellIndex === (showCheckbox && selectable ? 1 : 0);
236
+ return /* @__PURE__ */ jsx(
237
+ "td",
238
+ {
239
+ className: styles.td,
240
+ style: {
241
+ ...getColumnSizeStyle(cell.column),
242
+ ...isFirstDataCell && depth > 0 ? { paddingLeft: `${depth * 24 + 12}px` } : void 0
243
+ },
244
+ children: isFirstDataCell && canExpand ? /* @__PURE__ */ jsxs("span", { className: styles.expandCell, children: [
245
+ /* @__PURE__ */ jsx(
246
+ "button",
247
+ {
248
+ type: "button",
249
+ className: styles.expandButton,
250
+ onClick: row.getToggleExpandedHandler(),
251
+ "aria-label": row.getIsExpanded() ? "Collapse row" : "Expand row",
252
+ "aria-expanded": row.getIsExpanded(),
253
+ children: /* @__PURE__ */ jsx(ExpandIcon, { expanded: row.getIsExpanded() })
254
+ }
255
+ ),
256
+ _flexRender(cell.column.columnDef.cell, cell.getContext())
257
+ ] }) : _flexRender(cell.column.columnDef.cell, cell.getContext())
258
+ },
259
+ cell.id
260
+ );
261
+ })
262
+ },
263
+ row.id
264
+ );
265
+ }) })
266
+ ]
267
+ }
268
+ ) });
269
+ }
270
+ function ExpandIcon({ expanded }) {
271
+ return /* @__PURE__ */ jsx(
272
+ "svg",
273
+ {
274
+ width: "12",
275
+ height: "12",
276
+ viewBox: "0 0 12 12",
277
+ fill: "none",
278
+ xmlns: "http://www.w3.org/2000/svg",
279
+ "aria-hidden": "true",
280
+ style: {
281
+ transform: expanded ? "rotate(90deg)" : void 0,
282
+ transition: "transform 150ms ease"
283
+ },
284
+ children: /* @__PURE__ */ jsx("path", { d: "M4.5 2.5L8 6L4.5 9.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })
285
+ }
286
+ );
287
+ }
288
+ function SortIcon() {
289
+ return /* @__PURE__ */ jsxs(
290
+ "svg",
291
+ {
292
+ width: "12",
293
+ height: "12",
294
+ viewBox: "0 0 12 12",
295
+ fill: "none",
296
+ xmlns: "http://www.w3.org/2000/svg",
297
+ "aria-hidden": "true",
298
+ children: [
299
+ /* @__PURE__ */ jsx(
300
+ "path",
301
+ {
302
+ d: "M6 2L8.5 5H3.5L6 2Z",
303
+ fill: "currentColor",
304
+ opacity: "0.3"
305
+ }
306
+ ),
307
+ /* @__PURE__ */ jsx(
308
+ "path",
309
+ {
310
+ d: "M6 10L3.5 7H8.5L6 10Z",
311
+ fill: "currentColor",
312
+ opacity: "0.3"
313
+ }
314
+ )
315
+ ]
316
+ }
317
+ );
318
+ }
319
+ function SortAscIcon() {
320
+ return /* @__PURE__ */ jsx(
321
+ "svg",
322
+ {
323
+ width: "12",
324
+ height: "12",
325
+ viewBox: "0 0 12 12",
326
+ fill: "none",
327
+ xmlns: "http://www.w3.org/2000/svg",
328
+ "aria-hidden": "true",
329
+ children: /* @__PURE__ */ jsx("path", { d: "M6 2L8.5 5H3.5L6 2Z", fill: "currentColor" })
330
+ }
331
+ );
332
+ }
333
+ function SortDescIcon() {
334
+ return /* @__PURE__ */ jsx(
335
+ "svg",
336
+ {
337
+ width: "12",
338
+ height: "12",
339
+ viewBox: "0 0 12 12",
340
+ fill: "none",
341
+ xmlns: "http://www.w3.org/2000/svg",
342
+ "aria-hidden": "true",
343
+ children: /* @__PURE__ */ jsx("path", { d: "M6 10L3.5 7H8.5L6 10Z", fill: "currentColor" })
344
+ }
345
+ );
346
+ }
347
+ function createColumns(columns) {
348
+ return columns.map((col) => ({
349
+ id: col.key,
350
+ accessorKey: col.key,
351
+ header: col.header,
352
+ size: col.width,
353
+ minSize: col.width,
354
+ maxSize: col.width,
355
+ cell: col.cell ? ({ row }) => col.cell(row.original) : ({ getValue }) => getValue() ?? "--"
356
+ }));
357
+ }
358
+ const DataTable = Object.assign(DataTableRoot, {
359
+ Root: DataTableRoot,
360
+ Columns: createColumns
361
+ });
362
+ export {
363
+ DataTable,
364
+ createColumns
365
+ };
366
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/DataTable/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n// Import globals to ensure CSS variables are defined\nimport '../../styles/globals.scss';\nimport styles from './DataTable.module.scss';\nimport { Checkbox } from '../Checkbox';\n\n// ============================================\n// Types (self-owned — no external dependency for types)\n// ============================================\n\n/** Column definition compatible with @tanstack/react-table */\nexport type ColumnDef<TData = unknown, TValue = unknown> = {\n id?: string;\n accessorKey?: string;\n accessorFn?: (row: TData) => TValue;\n header?: string | ((context: any) => React.ReactNode);\n cell?: string | ((context: any) => React.ReactNode);\n size?: number;\n minSize?: number;\n maxSize?: number;\n enableSorting?: boolean;\n [key: string]: unknown;\n};\n\nexport type SortingState = Array<{ id: string; desc: boolean }>;\nexport type RowSelectionState = Record<string, boolean>;\nexport type ExpandedState = true | Record<string, boolean>;\ntype OnChangeFn<T> = ((updaterOrValue: T | ((prev: T) => T)) => void);\n\nexport type DataTableColumn<T> = ColumnDef<T, unknown>;\n\n// ============================================\n// Lazy-loaded dependency (@tanstack/react-table)\n// ============================================\n\nlet _useReactTable: any = null;\nlet _getCoreRowModel: any = null;\nlet _getSortedRowModel: any = null;\nlet _getExpandedRowModel: any = null;\nlet _flexRender: any = null;\nlet _tableLoaded = false;\nlet _tableFailed = false;\n\nfunction loadTableDeps() {\n if (_tableLoaded) return;\n _tableLoaded = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rt = require('@tanstack/react-table');\n _useReactTable = rt.useReactTable;\n _getCoreRowModel = rt.getCoreRowModel;\n _getSortedRowModel = rt.getSortedRowModel;\n _getExpandedRowModel = rt.getExpandedRowModel;\n _flexRender = rt.flexRender;\n } catch {\n _tableFailed = true;\n }\n}\n\nexport interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onClick'> {\n /** Column definitions */\n columns: DataTableColumn<T>[];\n /** Data array */\n data: T[];\n /** Unique key extractor for each row */\n getRowId?: (row: T) => string;\n /** Enable sorting */\n sortable?: boolean;\n /** Controlled sorting state */\n sorting?: SortingState;\n /** Sorting change handler */\n onSortingChange?: OnChangeFn<SortingState>;\n /** Enable row selection */\n selectable?: boolean;\n /** Show checkbox column for row selection */\n showCheckbox?: boolean;\n /** Controlled selection state */\n rowSelection?: RowSelectionState;\n /** Selection change handler */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /** Row click handler */\n onRowClick?: (row: T) => void;\n /** Extract sub-rows from a row for expandable tree tables */\n getSubRows?: (row: T) => T[] | undefined;\n /** Controlled expanded state */\n expanded?: ExpandedState;\n /** Expanded state change handler */\n onExpandedChange?: OnChangeFn<ExpandedState>;\n /** Empty state message */\n emptyMessage?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Visible caption for the table (recommended for accessibility) */\n caption?: string;\n /** Hide the caption visually but keep it for screen readers */\n captionHidden?: boolean;\n /** Show alternating row backgrounds */\n striped?: boolean;\n /** Wrap table in a bordered container */\n bordered?: boolean;\n}\n\nfunction DataTableRoot<T>({\n columns: userColumns,\n data,\n getRowId,\n sortable = false,\n sorting: controlledSorting,\n onSortingChange,\n selectable = false,\n showCheckbox = false,\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n onRowClick,\n getSubRows,\n expanded: controlledExpanded,\n onExpandedChange,\n emptyMessage = 'No data available',\n size = 'md',\n className,\n caption,\n captionHidden = false,\n striped = false,\n bordered = false,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...htmlProps\n}: DataTableProps<T>) {\n loadTableDeps();\n\n // Internal sorting state when uncontrolled\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const sorting = controlledSorting ?? internalSorting;\n const handleSortingChange = onSortingChange ?? setInternalSorting;\n\n // Internal selection state when uncontrolled\n const [internalRowSelection, setInternalRowSelection] = React.useState<RowSelectionState>({});\n const rowSelection = controlledRowSelection ?? internalRowSelection;\n const handleRowSelectionChange = onRowSelectionChange ?? setInternalRowSelection;\n\n // Internal expanded state when uncontrolled\n const [internalExpanded, setInternalExpanded] = React.useState<ExpandedState>({});\n const expanded = controlledExpanded ?? internalExpanded;\n const handleExpandedChange = onExpandedChange ?? setInternalExpanded;\n\n // Build columns with optional checkbox prepended\n const columns = React.useMemo(() => {\n if (!showCheckbox || !selectable) return userColumns;\n\n const checkboxColumn: DataTableColumn<T> = {\n id: '__checkbox',\n size: 40,\n minSize: 40,\n maxSize: 40,\n enableSorting: false,\n header: ({ table }: any) => (\n <Checkbox\n size=\"sm\"\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onCheckedChange={() => table.toggleAllRowsSelected()}\n aria-label=\"Select all rows\"\n />\n ),\n cell: ({ row }: any) => (\n <Checkbox\n size=\"sm\"\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onCheckedChange={() => row.toggleSelected()}\n aria-label={`Select row ${row.id}`}\n />\n ),\n };\n\n return [checkboxColumn, ...userColumns];\n }, [userColumns, showCheckbox, selectable]);\n\n if (_tableFailed || !_useReactTable) {\n if (_tableFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] DataTable: @tanstack/react-table is not installed. ' +\n 'Install it with: npm install @tanstack/react-table'\n );\n }\n return null;\n }\n\n const hasSubRows = !!getSubRows;\n\n const table = _useReactTable({\n data,\n columns,\n getRowId,\n getSubRows: getSubRows as any,\n getCoreRowModel: _getCoreRowModel(),\n getSortedRowModel: sortable ? _getSortedRowModel() : undefined,\n getExpandedRowModel: hasSubRows && _getExpandedRowModel ? _getExpandedRowModel() : undefined,\n state: {\n sorting: sortable ? sorting : undefined,\n rowSelection: selectable ? rowSelection : undefined,\n expanded: hasSubRows ? expanded : undefined,\n },\n onSortingChange: sortable ? handleSortingChange : undefined,\n onRowSelectionChange: selectable ? handleRowSelectionChange : undefined,\n onExpandedChange: hasSubRows ? handleExpandedChange : undefined,\n enableRowSelection: selectable,\n enableSorting: sortable,\n enableExpanding: hasSubRows,\n });\n\n const isEmpty = data.length === 0;\n\n const hasExplicitColumnSizing = React.useMemo(\n () =>\n columns.some((column) =>\n column.size !== undefined ||\n column.minSize !== undefined ||\n column.maxSize !== undefined\n ),\n [columns]\n );\n\n const rootClasses = [\n styles.table,\n hasExplicitColumnSizing && styles.fixedLayout,\n styles[size],\n striped && styles.striped,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const getColumnSizeStyle = (\n column: {\n getSize: () => number;\n columnDef: { size?: number; minSize?: number; maxSize?: number };\n }\n ): React.CSSProperties | undefined => {\n const { size, minSize, maxSize } = column.columnDef;\n const hasExplicitSize = size !== undefined || minSize !== undefined || maxSize !== undefined;\n\n if (!hasExplicitSize) {\n return undefined;\n }\n\n const resolvedSize = column.getSize();\n\n return {\n width: resolvedSize,\n minWidth: minSize ?? resolvedSize,\n maxWidth: maxSize ?? resolvedSize,\n };\n };\n\n if (isEmpty) {\n return (\n <div className={styles.emptyState}>\n <span className={styles.emptyMessage}>{emptyMessage}</span>\n </div>\n );\n }\n\n const isInteractiveTarget = (\n target: EventTarget | null,\n currentTarget: HTMLTableRowElement\n ) => {\n if (!(target instanceof Element)) return false;\n\n const interactiveElement = target.closest(\n 'button, a, input, select, textarea, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"]'\n );\n\n return Boolean(interactiveElement && currentTarget.contains(interactiveElement));\n };\n\n return (\n <div className={[styles.wrapper, bordered && styles.bordered].filter(Boolean).join(' ')}>\n <table\n {...htmlProps}\n className={rootClasses}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n >\n {caption && (\n <caption className={captionHidden ? styles.captionHidden : styles.caption}>\n {caption}\n </caption>\n )}\n <thead className={styles.thead}>\n {table.getHeaderGroups().map((headerGroup: any) => (\n <tr key={headerGroup.id} className={styles.headerRow}>\n {headerGroup.headers.map((header: any) => {\n const canSort = sortable && header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const toggleSorting = canSort ? header.column.getToggleSortingHandler() : undefined;\n\n return (\n <th\n key={header.id}\n className={[styles.th, canSort && styles.thSortable].filter(Boolean).join(' ')}\n style={getColumnSizeStyle(header.column)}\n scope=\"col\"\n aria-sort={\n sortDirection\n ? sortDirection === 'asc'\n ? 'ascending'\n : 'descending'\n : canSort\n ? 'none'\n : undefined\n }\n >\n {canSort ? (\n <button\n type=\"button\"\n className={styles.sortButton}\n onClick={toggleSorting}\n >\n <span className={styles.headerContent}>\n {header.isPlaceholder\n ? null\n : _flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </span>\n <span className={styles.sortIndicator} aria-hidden=\"true\">\n {sortDirection === 'asc' ? (\n <SortAscIcon />\n ) : sortDirection === 'desc' ? (\n <SortDescIcon />\n ) : (\n <SortIcon />\n )}\n </span>\n </button>\n ) : (\n <div className={styles.headerContent}>\n {header.isPlaceholder\n ? null\n : _flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody className={styles.tbody}>\n {table.getRowModel().rows.map((row: any) => {\n const isClickable = !!onRowClick;\n const isSelected = selectable ? row.getIsSelected() : false;\n const depth: number = row.depth ?? 0;\n const canExpand = hasSubRows && row.getCanExpand();\n const handleRowClick = (event: React.MouseEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return;\n if (isInteractiveTarget(event.target, event.currentTarget)) return;\n onRowClick(row.original);\n };\n\n const handleRowKeyDown = (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return;\n if (isInteractiveTarget(event.target, event.currentTarget)) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick(row.original);\n }\n };\n\n return (\n <tr\n key={row.id}\n className={[\n styles.row,\n isClickable && styles.clickable,\n isSelected && styles.selected,\n depth > 0 && styles.subRow,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={isClickable ? handleRowClick : undefined}\n onKeyDown={isClickable ? handleRowKeyDown : undefined}\n tabIndex={isClickable ? 0 : undefined}\n data-selected={isSelected || undefined}\n data-depth={depth > 0 ? depth : undefined}\n >\n {row.getVisibleCells().map((cell: any, cellIndex: number) => {\n const isFirstDataCell = hasSubRows && cellIndex === (showCheckbox && selectable ? 1 : 0);\n return (\n <td\n key={cell.id}\n className={styles.td}\n style={{\n ...getColumnSizeStyle(cell.column),\n ...(isFirstDataCell && depth > 0 ? { paddingLeft: `${depth * 24 + 12}px` } : undefined),\n }}\n >\n {isFirstDataCell && canExpand ? (\n <span className={styles.expandCell}>\n <button\n type=\"button\"\n className={styles.expandButton}\n onClick={row.getToggleExpandedHandler()}\n aria-label={row.getIsExpanded() ? 'Collapse row' : 'Expand row'}\n aria-expanded={row.getIsExpanded()}\n >\n <ExpandIcon expanded={row.getIsExpanded()} />\n </button>\n {_flexRender(cell.column.columnDef.cell, cell.getContext())}\n </span>\n ) : (\n _flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n// Expand/collapse icon for sub-rows\nfunction ExpandIcon({ expanded }: { expanded: boolean }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n style={{\n transform: expanded ? 'rotate(90deg)' : undefined,\n transition: 'transform 150ms ease',\n }}\n >\n <path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n// Sort icons - minimal and functional\nfunction SortIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 2L8.5 5H3.5L6 2Z\"\n fill=\"currentColor\"\n opacity=\"0.3\"\n />\n <path\n d=\"M6 10L3.5 7H8.5L6 10Z\"\n fill=\"currentColor\"\n opacity=\"0.3\"\n />\n </svg>\n );\n}\n\nfunction SortAscIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 2L8.5 5H3.5L6 2Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction SortDescIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 10L3.5 7H8.5L6 10Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\n// Helper to create simple columns without TanStack's createColumnHelper\nexport function createColumns<T>(\n columns: Array<{\n key: string;\n header: string;\n width?: number;\n cell?: (row: T) => React.ReactNode;\n }>\n): DataTableColumn<T>[] {\n return columns.map((col) => ({\n id: col.key,\n accessorKey: col.key,\n header: col.header,\n size: col.width,\n minSize: col.width,\n maxSize: col.width,\n cell: col.cell\n ? ({ row }) => col.cell!(row.original)\n : ({ getValue }) => getValue() ?? '--',\n }));\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Root: DataTableRoot,\n Columns: createColumns,\n});\n"],"names":["table","size"],"mappings":"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"}
@@ -20,14 +20,23 @@ const close = "_close_bh12s_157";
20
20
  const styles = {
21
21
  backdrop,
22
22
  popup,
23
+ "side-right": "_side-right_bh12s_40",
23
24
  sideRight,
25
+ "side-left": "_side-left_bh12s_50",
24
26
  sideLeft,
27
+ "side-top": "_side-top_bh12s_60",
25
28
  sideTop,
29
+ "side-bottom": "_side-bottom_bh12s_70",
26
30
  sideBottom,
31
+ "size-sm": "_size-sm_bh12s_80",
27
32
  sizeSm,
33
+ "size-md": "_size-md_bh12s_84",
28
34
  sizeMd,
35
+ "size-lg": "_size-lg_bh12s_88",
29
36
  sizeLg,
37
+ "size-xl": "_size-xl_bh12s_92",
30
38
  sizeXl,
39
+ "size-full": "_size-full_bh12s_96",
31
40
  sizeFull,
32
41
  header,
33
42
  title,
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Drawer.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -18,14 +18,23 @@ const close = "_close_bh12s_157";
18
18
  const styles = {
19
19
  backdrop,
20
20
  popup,
21
+ "side-right": "_side-right_bh12s_40",
21
22
  sideRight,
23
+ "side-left": "_side-left_bh12s_50",
22
24
  sideLeft,
25
+ "side-top": "_side-top_bh12s_60",
23
26
  sideTop,
27
+ "side-bottom": "_side-bottom_bh12s_70",
24
28
  sideBottom,
29
+ "size-sm": "_size-sm_bh12s_80",
25
30
  sizeSm,
31
+ "size-md": "_size-md_bh12s_84",
26
32
  sizeMd,
33
+ "size-lg": "_size-lg_bh12s_88",
27
34
  sizeLg,
35
+ "size-xl": "_size-xl_bh12s_92",
28
36
  sizeXl,
37
+ "size-full": "_size-full_bh12s_96",
29
38
  sizeFull,
30
39
  header,
31
40
  title,
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Drawer.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -18,17 +18,29 @@ const fallback = "_fallback_jaiqu_63";
18
18
  const styles = {
19
19
  imageContainer,
20
20
  image,
21
+ "fit-cover": "_fit-cover_jaiqu_15",
21
22
  fitCover,
23
+ "fit-contain": "_fit-contain_jaiqu_19",
22
24
  fitContain,
25
+ "fit-fill": "_fit-fill_jaiqu_23",
23
26
  fitFill,
27
+ "fit-none": "_fit-none_jaiqu_27",
24
28
  fitNone,
29
+ "aspect-1-1": "_aspect-1-1_jaiqu_31",
25
30
  aspect11,
31
+ "aspect-4-3": "_aspect-4-3_jaiqu_35",
26
32
  aspect43,
33
+ "aspect-16-9": "_aspect-16-9_jaiqu_39",
27
34
  aspect169,
35
+ "aspect-21-9": "_aspect-21-9_jaiqu_43",
28
36
  aspect219,
37
+ "rounded-sm": "_rounded-sm_jaiqu_47",
29
38
  roundedSm,
39
+ "rounded-md": "_rounded-md_jaiqu_51",
30
40
  roundedMd,
41
+ "rounded-lg": "_rounded-lg_jaiqu_55",
31
42
  roundedLg,
43
+ "rounded-full": "_rounded-full_jaiqu_59",
32
44
  roundedFull,
33
45
  fallback
34
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Image.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Image.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -16,17 +16,29 @@ const fallback = "_fallback_jaiqu_63";
16
16
  const styles = {
17
17
  imageContainer,
18
18
  image,
19
+ "fit-cover": "_fit-cover_jaiqu_15",
19
20
  fitCover,
21
+ "fit-contain": "_fit-contain_jaiqu_19",
20
22
  fitContain,
23
+ "fit-fill": "_fit-fill_jaiqu_23",
21
24
  fitFill,
25
+ "fit-none": "_fit-none_jaiqu_27",
22
26
  fitNone,
27
+ "aspect-1-1": "_aspect-1-1_jaiqu_31",
23
28
  aspect11,
29
+ "aspect-4-3": "_aspect-4-3_jaiqu_35",
24
30
  aspect43,
31
+ "aspect-16-9": "_aspect-16-9_jaiqu_39",
25
32
  aspect169,
33
+ "aspect-21-9": "_aspect-21-9_jaiqu_43",
26
34
  aspect219,
35
+ "rounded-sm": "_rounded-sm_jaiqu_47",
27
36
  roundedSm,
37
+ "rounded-md": "_rounded-md_jaiqu_51",
28
38
  roundedMd,
39
+ "rounded-lg": "_rounded-lg_jaiqu_55",
29
40
  roundedLg,
41
+ "rounded-full": "_rounded-full_jaiqu_59",
30
42
  roundedFull,
31
43
  fallback
32
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Image.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Image.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -11,8 +11,11 @@ const styles = {
11
11
  "default": "_default_77ogl_27",
12
12
  subtle,
13
13
  muted,
14
+ "underline-always": "_underline-always_77ogl_48",
14
15
  underlineAlways,
16
+ "underline-hover": "_underline-hover_77ogl_53",
15
17
  underlineHover,
18
+ "underline-none": "_underline-none_77ogl_61",
16
19
  underlineNone
17
20
  };
18
21
  exports.default = styles;
@@ -1 +1 @@
1
- {"version":3,"file":"Link.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Link.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}