@crisp-ui-kit/crisp 0.7.3 → 0.7.5
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.
- package/dist/cjs/components/avatar/avatar.recipe.js +0 -7
- package/dist/cjs/components/badge/badge.recipe.js +0 -8
- package/dist/cjs/components/button/button.recipe.js +0 -10
- package/dist/cjs/components/checkbox/checkbox.recipe.js +0 -6
- package/dist/cjs/components/datatable/datatable.js +28 -7
- package/dist/cjs/components/input/input.recipe.js +0 -1
- package/dist/cjs/components/kbd/kbd.recipe.js +0 -7
- package/dist/cjs/components/switch/switch.recipe.js +0 -1
- package/dist/cjs/components/wheelpicker/wheelpicker.recipe.js +0 -1
- package/dist/cjs/product/appshell/appshell.recipe.js +0 -1
- package/dist/cjs/product/command/command.recipe.js +0 -6
- package/dist/cjs/product/navitem/navitem.recipe.js +0 -8
- package/dist/cjs/product/recordpanel/recordpanel.recipe.js +0 -1
- package/dist/cjs/product/recordstable/recordstable.recipe.js +12 -8
- package/dist/cjs/product/sidebar/sidebar.recipe.js +0 -5
- package/dist/esm/components/avatar/avatar.recipe.js +0 -7
- package/dist/esm/components/badge/badge.recipe.js +0 -8
- package/dist/esm/components/button/button.recipe.js +0 -10
- package/dist/esm/components/checkbox/checkbox.recipe.js +0 -6
- package/dist/esm/components/datatable/datatable.js +28 -7
- package/dist/esm/components/input/input.recipe.js +0 -1
- package/dist/esm/components/kbd/kbd.recipe.js +0 -7
- package/dist/esm/components/switch/switch.recipe.js +0 -1
- package/dist/esm/components/wheelpicker/wheelpicker.recipe.js +0 -1
- package/dist/esm/product/appshell/appshell.recipe.js +0 -1
- package/dist/esm/product/command/command.recipe.js +0 -6
- package/dist/esm/product/navitem/navitem.recipe.js +0 -8
- package/dist/esm/product/recordpanel/recordpanel.recipe.js +0 -1
- package/dist/esm/product/recordstable/recordstable.recipe.js +12 -8
- package/dist/esm/product/sidebar/sidebar.recipe.js +0 -5
- package/dist/recordstable.css +12 -2
- package/dist/styles.css +1639 -1629
- package/dist/types/components/avatar/avatar.d.ts +0 -7
- package/dist/types/components/avatar/avatar.recipe.d.ts +0 -7
- package/dist/types/components/badge/badge.d.ts +0 -8
- package/dist/types/components/badge/badge.recipe.d.ts +0 -8
- package/dist/types/components/button/button.d.ts +0 -10
- package/dist/types/components/button/button.recipe.d.ts +0 -10
- package/dist/types/components/checkbox/checkbox.recipe.d.ts +0 -6
- package/dist/types/components/datatable/datatable.d.ts +3 -1
- package/dist/types/components/input/input.d.ts +0 -7
- package/dist/types/components/input/input.recipe.d.ts +0 -7
- package/dist/types/components/kbd/kbd.recipe.d.ts +0 -7
- package/dist/types/components/switch/switch.recipe.d.ts +0 -9
- package/dist/types/components/wheelpicker/wheelpicker.recipe.d.ts +0 -6
- package/dist/types/product/appshell/appshell.recipe.d.ts +0 -5
- package/dist/types/product/command/command.recipe.d.ts +0 -6
- package/dist/types/product/navitem/navitem.recipe.d.ts +0 -8
- package/dist/types/product/recordpanel/recordpanel.recipe.d.ts +0 -5
- package/dist/types/product/recordstable/recordstable.recipe.d.ts +0 -6
- package/dist/types/product/sidebar/sidebar.recipe.d.ts +0 -5
- package/package.json +12 -1
|
@@ -31,12 +31,5 @@ const config = (0, core_1.defineRecipe)({
|
|
|
31
31
|
});
|
|
32
32
|
exports.avatarRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
33
33
|
config,
|
|
34
|
-
meta: {
|
|
35
|
-
lg: {
|
|
36
|
-
height: "24px",
|
|
37
|
-
fontSize: "12px",
|
|
38
|
-
fontWeight: "600",
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
34
|
});
|
|
42
35
|
exports.default = config;
|
|
@@ -56,13 +56,5 @@ const config = (0, core_1.defineRecipe)({
|
|
|
56
56
|
});
|
|
57
57
|
exports.badgeRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
58
58
|
config,
|
|
59
|
-
meta: {
|
|
60
|
-
medium: {
|
|
61
|
-
height: "20px",
|
|
62
|
-
borderRadius: "6px",
|
|
63
|
-
fontSize: "12px",
|
|
64
|
-
fontWeight: "500",
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
59
|
});
|
|
68
60
|
exports.default = config;
|
|
@@ -44,15 +44,5 @@ const config = (0, core_1.defineRecipe)({
|
|
|
44
44
|
});
|
|
45
45
|
exports.buttonRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
46
46
|
config,
|
|
47
|
-
meta: {
|
|
48
|
-
primary: {
|
|
49
|
-
height: "28px",
|
|
50
|
-
borderRadius: "8px",
|
|
51
|
-
fontWeight: "500",
|
|
52
|
-
fontSize: "14px",
|
|
53
|
-
background: "rgb(38, 109, 240)",
|
|
54
|
-
color: "rgb(255, 255, 255)",
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
47
|
});
|
|
58
48
|
exports.default = config;
|
|
@@ -107,16 +107,30 @@ function formatCell(type, v, symbol) {
|
|
|
107
107
|
return asText(v);
|
|
108
108
|
}
|
|
109
109
|
/** Built-in typed-cell renderer (used when a column has no custom `render`). */
|
|
110
|
-
|
|
110
|
+
// `value` is always the RAW cell value and `display` the caller's `format`
|
|
111
|
+
// output, if any. They are separate arguments on purpose: the entity and tags
|
|
112
|
+
// branches inspect the value's SHAPE (object / array), so handing them a
|
|
113
|
+
// formatted string used to make them fall through to their empty state and
|
|
114
|
+
// silently drop the cell's data. Each branch decides for itself where a
|
|
115
|
+
// display string belongs -- as an entity's name, a status' label -- while the
|
|
116
|
+
// raw value keeps driving structure and tone.
|
|
117
|
+
function renderTyped(col, value, avatarTone, display) {
|
|
111
118
|
const empty = (0, jsx_runtime_1.jsx)("span", { className: "datatable-muted", children: "\u2014" });
|
|
112
119
|
switch (col.type) {
|
|
113
120
|
case "entity": {
|
|
114
|
-
const
|
|
121
|
+
const raw = (typeof value === "object" && value ? value : { name: asText(value) });
|
|
122
|
+
// a formatted string relabels the entity; its avatar and its hashed tone
|
|
123
|
+
// still come from the real value
|
|
124
|
+
const e = display ? { ...raw, name: display } : raw;
|
|
115
125
|
if (!e.name)
|
|
116
126
|
return empty;
|
|
117
|
-
return ((0, jsx_runtime_1.jsxs)("span", { className: "datatable-entity", children: [(0, jsx_runtime_1.jsx)("span", { className: "datatable-avatar", "data-tone": avatarTone === "hashed" ? toneFor(
|
|
127
|
+
return ((0, jsx_runtime_1.jsxs)("span", { className: "datatable-entity", children: [(0, jsx_runtime_1.jsx)("span", { className: "datatable-avatar", "data-tone": avatarTone === "hashed" ? toneFor(raw.name) : undefined, children: e.avatar ? ((0, jsx_runtime_1.jsx)("img", { src: e.avatar, alt: "" })) : (initials(e.name).slice(0, 2)) }), (0, jsx_runtime_1.jsx)("span", { className: "datatable-entity-name", children: e.name })] }));
|
|
118
128
|
}
|
|
119
129
|
case "tags": {
|
|
130
|
+
// asking for a format on a tag column means "render it your way" -- show
|
|
131
|
+
// that string rather than trying to split it back into chips
|
|
132
|
+
if (display)
|
|
133
|
+
return display;
|
|
120
134
|
const tags = Array.isArray(value) ? value : [];
|
|
121
135
|
if (!tags.length)
|
|
122
136
|
return empty;
|
|
@@ -126,10 +140,12 @@ function renderTyped(col, value, avatarTone) {
|
|
|
126
140
|
const s = asText(value);
|
|
127
141
|
if (!s)
|
|
128
142
|
return empty;
|
|
129
|
-
|
|
143
|
+
// tone is looked up by the RAW status, so formatting the label (casing,
|
|
144
|
+
// translation) can never silently repaint the chip
|
|
145
|
+
return ((0, jsx_runtime_1.jsx)("span", { className: "datatable-tag", "data-tone": col.tones?.[s] ?? toneFor(s), children: display || s }));
|
|
130
146
|
}
|
|
131
147
|
default: {
|
|
132
|
-
const text = formatCell(col.type, value, col.symbol);
|
|
148
|
+
const text = display || formatCell(col.type, value, col.symbol);
|
|
133
149
|
const isNum = col.type === "number" || col.type === "currency";
|
|
134
150
|
if (!text)
|
|
135
151
|
return empty;
|
|
@@ -324,7 +340,8 @@ function DataTable({ columns: columnsProp, data, selectable = false, selectedIds
|
|
|
324
340
|
}
|
|
325
341
|
/**
|
|
326
342
|
* Spreadsheet keyboard model, ported from RecordsTable: arrows move the
|
|
327
|
-
* selected cell, Enter opens its editor,
|
|
343
|
+
* selected cell, Enter opens its editor (or, on a non-editable cell,
|
|
344
|
+
* activates the row via `onRowClick`), Escape clears, and Cmd/Ctrl+C
|
|
328
345
|
* copies the cell's RENDERED text (what the user sees, not the raw value).
|
|
329
346
|
*/
|
|
330
347
|
function onGridKeyDown(e) {
|
|
@@ -361,6 +378,10 @@ function DataTable({ columns: columnsProp, data, selectable = false, selectedIds
|
|
|
361
378
|
e.preventDefault();
|
|
362
379
|
setEditing({ id: selCell.id, key: selCell.key });
|
|
363
380
|
}
|
|
381
|
+
else if (onRowClick) {
|
|
382
|
+
e.preventDefault();
|
|
383
|
+
onRowClick(rows[r]);
|
|
384
|
+
}
|
|
364
385
|
return;
|
|
365
386
|
}
|
|
366
387
|
else
|
|
@@ -502,7 +523,7 @@ function DataTable({ columns: columnsProp, data, selectable = false, selectedIds
|
|
|
502
523
|
}
|
|
503
524
|
}, children: col.render
|
|
504
525
|
? col.render(value, row)
|
|
505
|
-
: renderTyped(col,
|
|
526
|
+
: renderTyped(col, value, avatarTone, col.format?.(value, row)) }, col.key));
|
|
506
527
|
})] }, row.id)))] }, group ?? "__ungrouped")))) }), (hasSummary || onAddRow) && ((0, jsx_runtime_1.jsxs)(table_1.TableFooter, { children: [hasSummary && ((0, jsx_runtime_1.jsxs)(table_1.TableRow, { children: [showGrip && (0, jsx_runtime_1.jsx)(table_1.TableCell, { ...stickyCol(-2) }), selectable && (0, jsx_runtime_1.jsx)(table_1.TableCell, { ...stickyCol(-1) }), columns.map((col, i) => ((0, jsx_runtime_1.jsx)(table_1.TableCell, { align: alignFor(col), ...stickyCol(i), children: col.summary ? col.summary(rows) : null }, col.key)))] })), onAddRow && ((0, jsx_runtime_1.jsx)(table_1.TableRow, { children: (0, jsx_runtime_1.jsx)(table_1.TableCell, { className: "datatable-addcell", colSpan: totalCols, children: (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "datatable-addrow", onClick: onAddRow, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75, "aria-hidden": "true" }), addRowLabel] }) }) }))] }))] })] }));
|
|
507
528
|
}
|
|
508
529
|
DataTable.displayName = "DataTable";
|
|
@@ -12,12 +12,5 @@ const config = (0, core_1.defineRecipe)({
|
|
|
12
12
|
});
|
|
13
13
|
exports.kbdRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
14
14
|
config,
|
|
15
|
-
meta: {
|
|
16
|
-
chip: {
|
|
17
|
-
height: "20px",
|
|
18
|
-
borderRadius: "6px",
|
|
19
|
-
fontSize: "11px",
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
15
|
});
|
|
23
16
|
exports.default = config;
|
|
@@ -37,11 +37,5 @@ const config = (0, core_1.defineRecipe)({
|
|
|
37
37
|
});
|
|
38
38
|
exports.commandRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
39
39
|
config,
|
|
40
|
-
meta: {
|
|
41
|
-
content: {
|
|
42
|
-
maxWidth: "720px",
|
|
43
|
-
borderRadius: "16px",
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
40
|
});
|
|
47
41
|
exports.default = config;
|
|
@@ -24,13 +24,5 @@ const config = (0, core_1.defineRecipe)({
|
|
|
24
24
|
});
|
|
25
25
|
exports.navitemRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
26
26
|
config,
|
|
27
|
-
meta: {
|
|
28
|
-
row: {
|
|
29
|
-
height: "28px",
|
|
30
|
-
borderRadius: "9px",
|
|
31
|
-
fontSize: "14px",
|
|
32
|
-
fontWeight: "500",
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
27
|
});
|
|
36
28
|
exports.default = config;
|
|
@@ -97,11 +97,21 @@ ${(0, tabletoolbar_chrome_1.toolbarChromeBody)("recordstable")}
|
|
|
97
97
|
& .recordstable-col-check { width: 40px; min-width: 40px; padding: 0; }
|
|
98
98
|
& .recordstable-check-inner { display: flex; align-items: center; justify-content: center; height: 100%; }
|
|
99
99
|
& .recordstable-col-check, & .recordstable-col-entity { position: sticky; z-index: 3; background: ${tokens_1.contract.bgSurface}; }
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
/* The sticky pin is a LOGICAL offset: with physical \`left\` these columns
|
|
101
|
+
were not pinned at all under RTL -- scrolled, they left the viewport
|
|
102
|
+
entirely (measured: viewport 13..773, check column at x=1333). Nothing in
|
|
103
|
+
JS measures these, so converting them is safe; the two properties below
|
|
104
|
+
that have no logical form get an explicit RTL rule rather than being
|
|
105
|
+
left to point the wrong way. */
|
|
106
|
+
& .recordstable-col-check { inset-inline-start: 0; }
|
|
107
|
+
& .recordstable-col-entity { inset-inline-start: 40px; clip-path: inset(0 -38px 0 0); transition: box-shadow .2s ease; }
|
|
108
|
+
[dir="rtl"] & .recordstable-col-entity { clip-path: inset(0 0 0 -38px); }
|
|
102
109
|
& thead .recordstable-col-check, & thead .recordstable-col-entity { z-index: 4; }
|
|
103
110
|
/* soft shadow on the sticky column edge once the grid is scrolled horizontally */
|
|
104
111
|
& .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
112
|
+
/* box-shadow has no logical form either: the bleed follows the scrolled
|
|
113
|
+
content, which is the opposite side under RTL. */
|
|
114
|
+
[dir="rtl"] & .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
105
115
|
/* AI-enriched values carry a purple wash. Measured from Attio:
|
|
106
116
|
a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
|
|
107
117
|
whatever row-state background the cell already has, which is why it
|
|
@@ -142,11 +152,5 @@ ${(0, tabletoolbar_chrome_1.toolbarChromeBody)("recordstable")}
|
|
|
142
152
|
});
|
|
143
153
|
exports.recordstableRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
144
154
|
config,
|
|
145
|
-
meta: {
|
|
146
|
-
row: {
|
|
147
|
-
height: "36px",
|
|
148
|
-
gridLine: "1px",
|
|
149
|
-
},
|
|
150
|
-
},
|
|
151
155
|
});
|
|
152
156
|
exports.default = config;
|
|
@@ -53,13 +53,5 @@ const config = defineRecipe({
|
|
|
53
53
|
});
|
|
54
54
|
export const badgeRecipe = Object.assign(resolveRecipe(config), {
|
|
55
55
|
config,
|
|
56
|
-
meta: {
|
|
57
|
-
medium: {
|
|
58
|
-
height: "20px",
|
|
59
|
-
borderRadius: "6px",
|
|
60
|
-
fontSize: "12px",
|
|
61
|
-
fontWeight: "500",
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
56
|
});
|
|
65
57
|
export default config;
|
|
@@ -41,15 +41,5 @@ const config = defineRecipe({
|
|
|
41
41
|
});
|
|
42
42
|
export const buttonRecipe = Object.assign(resolveRecipe(config), {
|
|
43
43
|
config,
|
|
44
|
-
meta: {
|
|
45
|
-
primary: {
|
|
46
|
-
height: "28px",
|
|
47
|
-
borderRadius: "8px",
|
|
48
|
-
fontWeight: "500",
|
|
49
|
-
fontSize: "14px",
|
|
50
|
-
background: "rgb(38, 109, 240)",
|
|
51
|
-
color: "rgb(255, 255, 255)",
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
44
|
});
|
|
55
45
|
export default config;
|
|
@@ -71,16 +71,30 @@ function formatCell(type, v, symbol) {
|
|
|
71
71
|
return asText(v);
|
|
72
72
|
}
|
|
73
73
|
/** Built-in typed-cell renderer (used when a column has no custom `render`). */
|
|
74
|
-
|
|
74
|
+
// `value` is always the RAW cell value and `display` the caller's `format`
|
|
75
|
+
// output, if any. They are separate arguments on purpose: the entity and tags
|
|
76
|
+
// branches inspect the value's SHAPE (object / array), so handing them a
|
|
77
|
+
// formatted string used to make them fall through to their empty state and
|
|
78
|
+
// silently drop the cell's data. Each branch decides for itself where a
|
|
79
|
+
// display string belongs -- as an entity's name, a status' label -- while the
|
|
80
|
+
// raw value keeps driving structure and tone.
|
|
81
|
+
function renderTyped(col, value, avatarTone, display) {
|
|
75
82
|
const empty = _jsx("span", { className: "datatable-muted", children: "\u2014" });
|
|
76
83
|
switch (col.type) {
|
|
77
84
|
case "entity": {
|
|
78
|
-
const
|
|
85
|
+
const raw = (typeof value === "object" && value ? value : { name: asText(value) });
|
|
86
|
+
// a formatted string relabels the entity; its avatar and its hashed tone
|
|
87
|
+
// still come from the real value
|
|
88
|
+
const e = display ? { ...raw, name: display } : raw;
|
|
79
89
|
if (!e.name)
|
|
80
90
|
return empty;
|
|
81
|
-
return (_jsxs("span", { className: "datatable-entity", children: [_jsx("span", { className: "datatable-avatar", "data-tone": avatarTone === "hashed" ? toneFor(
|
|
91
|
+
return (_jsxs("span", { className: "datatable-entity", children: [_jsx("span", { className: "datatable-avatar", "data-tone": avatarTone === "hashed" ? toneFor(raw.name) : undefined, children: e.avatar ? (_jsx("img", { src: e.avatar, alt: "" })) : (initials(e.name).slice(0, 2)) }), _jsx("span", { className: "datatable-entity-name", children: e.name })] }));
|
|
82
92
|
}
|
|
83
93
|
case "tags": {
|
|
94
|
+
// asking for a format on a tag column means "render it your way" -- show
|
|
95
|
+
// that string rather than trying to split it back into chips
|
|
96
|
+
if (display)
|
|
97
|
+
return display;
|
|
84
98
|
const tags = Array.isArray(value) ? value : [];
|
|
85
99
|
if (!tags.length)
|
|
86
100
|
return empty;
|
|
@@ -90,10 +104,12 @@ function renderTyped(col, value, avatarTone) {
|
|
|
90
104
|
const s = asText(value);
|
|
91
105
|
if (!s)
|
|
92
106
|
return empty;
|
|
93
|
-
|
|
107
|
+
// tone is looked up by the RAW status, so formatting the label (casing,
|
|
108
|
+
// translation) can never silently repaint the chip
|
|
109
|
+
return (_jsx("span", { className: "datatable-tag", "data-tone": col.tones?.[s] ?? toneFor(s), children: display || s }));
|
|
94
110
|
}
|
|
95
111
|
default: {
|
|
96
|
-
const text = formatCell(col.type, value, col.symbol);
|
|
112
|
+
const text = display || formatCell(col.type, value, col.symbol);
|
|
97
113
|
const isNum = col.type === "number" || col.type === "currency";
|
|
98
114
|
if (!text)
|
|
99
115
|
return empty;
|
|
@@ -288,7 +304,8 @@ export function DataTable({ columns: columnsProp, data, selectable = false, sele
|
|
|
288
304
|
}
|
|
289
305
|
/**
|
|
290
306
|
* Spreadsheet keyboard model, ported from RecordsTable: arrows move the
|
|
291
|
-
* selected cell, Enter opens its editor,
|
|
307
|
+
* selected cell, Enter opens its editor (or, on a non-editable cell,
|
|
308
|
+
* activates the row via `onRowClick`), Escape clears, and Cmd/Ctrl+C
|
|
292
309
|
* copies the cell's RENDERED text (what the user sees, not the raw value).
|
|
293
310
|
*/
|
|
294
311
|
function onGridKeyDown(e) {
|
|
@@ -325,6 +342,10 @@ export function DataTable({ columns: columnsProp, data, selectable = false, sele
|
|
|
325
342
|
e.preventDefault();
|
|
326
343
|
setEditing({ id: selCell.id, key: selCell.key });
|
|
327
344
|
}
|
|
345
|
+
else if (onRowClick) {
|
|
346
|
+
e.preventDefault();
|
|
347
|
+
onRowClick(rows[r]);
|
|
348
|
+
}
|
|
328
349
|
return;
|
|
329
350
|
}
|
|
330
351
|
else
|
|
@@ -466,7 +487,7 @@ export function DataTable({ columns: columnsProp, data, selectable = false, sele
|
|
|
466
487
|
}
|
|
467
488
|
}, children: col.render
|
|
468
489
|
? col.render(value, row)
|
|
469
|
-
: renderTyped(col,
|
|
490
|
+
: renderTyped(col, value, avatarTone, col.format?.(value, row)) }, col.key));
|
|
470
491
|
})] }, row.id)))] }, group ?? "__ungrouped")))) }), (hasSummary || onAddRow) && (_jsxs(TableFooter, { children: [hasSummary && (_jsxs(TableRow, { children: [showGrip && _jsx(TableCell, { ...stickyCol(-2) }), selectable && _jsx(TableCell, { ...stickyCol(-1) }), columns.map((col, i) => (_jsx(TableCell, { align: alignFor(col), ...stickyCol(i), children: col.summary ? col.summary(rows) : null }, col.key)))] })), onAddRow && (_jsx(TableRow, { children: _jsx(TableCell, { className: "datatable-addcell", colSpan: totalCols, children: _jsxs("button", { type: "button", className: "datatable-addrow", onClick: onAddRow, children: [_jsx(Plus, { size: 15, strokeWidth: 1.75, "aria-hidden": "true" }), addRowLabel] }) }) }))] }))] })] }));
|
|
471
492
|
}
|
|
472
493
|
DataTable.displayName = "DataTable";
|
|
@@ -21,13 +21,5 @@ const config = defineRecipe({
|
|
|
21
21
|
});
|
|
22
22
|
export const navitemRecipe = Object.assign(resolveRecipe(config), {
|
|
23
23
|
config,
|
|
24
|
-
meta: {
|
|
25
|
-
row: {
|
|
26
|
-
height: "28px",
|
|
27
|
-
borderRadius: "9px",
|
|
28
|
-
fontSize: "14px",
|
|
29
|
-
fontWeight: "500",
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
24
|
});
|
|
33
25
|
export default config;
|
|
@@ -94,11 +94,21 @@ ${toolbarChromeBody("recordstable")}
|
|
|
94
94
|
& .recordstable-col-check { width: 40px; min-width: 40px; padding: 0; }
|
|
95
95
|
& .recordstable-check-inner { display: flex; align-items: center; justify-content: center; height: 100%; }
|
|
96
96
|
& .recordstable-col-check, & .recordstable-col-entity { position: sticky; z-index: 3; background: ${c.bgSurface}; }
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
/* The sticky pin is a LOGICAL offset: with physical \`left\` these columns
|
|
98
|
+
were not pinned at all under RTL -- scrolled, they left the viewport
|
|
99
|
+
entirely (measured: viewport 13..773, check column at x=1333). Nothing in
|
|
100
|
+
JS measures these, so converting them is safe; the two properties below
|
|
101
|
+
that have no logical form get an explicit RTL rule rather than being
|
|
102
|
+
left to point the wrong way. */
|
|
103
|
+
& .recordstable-col-check { inset-inline-start: 0; }
|
|
104
|
+
& .recordstable-col-entity { inset-inline-start: 40px; clip-path: inset(0 -38px 0 0); transition: box-shadow .2s ease; }
|
|
105
|
+
[dir="rtl"] & .recordstable-col-entity { clip-path: inset(0 0 0 -38px); }
|
|
99
106
|
& thead .recordstable-col-check, & thead .recordstable-col-entity { z-index: 4; }
|
|
100
107
|
/* soft shadow on the sticky column edge once the grid is scrolled horizontally */
|
|
101
108
|
& .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
109
|
+
/* box-shadow has no logical form either: the bleed follows the scrolled
|
|
110
|
+
content, which is the opposite side under RTL. */
|
|
111
|
+
[dir="rtl"] & .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
102
112
|
/* AI-enriched values carry a purple wash. Measured from Attio:
|
|
103
113
|
a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
|
|
104
114
|
whatever row-state background the cell already has, which is why it
|
|
@@ -139,11 +149,5 @@ ${toolbarChromeBody("recordstable")}
|
|
|
139
149
|
});
|
|
140
150
|
export const recordstableRecipe = Object.assign(resolveRecipe(config), {
|
|
141
151
|
config,
|
|
142
|
-
meta: {
|
|
143
|
-
row: {
|
|
144
|
-
height: "36px",
|
|
145
|
-
gridLine: "1px",
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
152
|
});
|
|
149
153
|
export default config;
|
package/dist/recordstable.css
CHANGED
|
@@ -149,11 +149,21 @@
|
|
|
149
149
|
& .recordstable-col-check { width: 40px; min-width: 40px; padding: 0; }
|
|
150
150
|
& .recordstable-check-inner { display: flex; align-items: center; justify-content: center; height: 100%; }
|
|
151
151
|
& .recordstable-col-check, & .recordstable-col-entity { position: sticky; z-index: 3; background: var(--bg-surface); }
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
/* The sticky pin is a LOGICAL offset: with physical `left` these columns
|
|
153
|
+
were not pinned at all under RTL -- scrolled, they left the viewport
|
|
154
|
+
entirely (measured: viewport 13..773, check column at x=1333). Nothing in
|
|
155
|
+
JS measures these, so converting them is safe; the two properties below
|
|
156
|
+
that have no logical form get an explicit RTL rule rather than being
|
|
157
|
+
left to point the wrong way. */
|
|
158
|
+
& .recordstable-col-check { inset-inline-start: 0; }
|
|
159
|
+
& .recordstable-col-entity { inset-inline-start: 40px; clip-path: inset(0 -38px 0 0); transition: box-shadow .2s ease; }
|
|
160
|
+
[dir="rtl"] & .recordstable-col-entity { clip-path: inset(0 0 0 -38px); }
|
|
154
161
|
& thead .recordstable-col-check, & thead .recordstable-col-entity { z-index: 4; }
|
|
155
162
|
/* soft shadow on the sticky column edge once the grid is scrolled horizontally */
|
|
156
163
|
& .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
164
|
+
/* box-shadow has no logical form either: the bleed follows the scrolled
|
|
165
|
+
content, which is the opposite side under RTL. */
|
|
166
|
+
[dir="rtl"] & .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
157
167
|
/* AI-enriched values carry a purple wash. Measured from Attio:
|
|
158
168
|
a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
|
|
159
169
|
whatever row-state background the cell already has, which is why it
|