@crisp-ui-kit/crisp 0.54.0 → 0.54.2
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/activityfeed.css +12 -0
- package/dist/activityfeed.d.ts +7 -0
- package/dist/activityfeed.layered.css +14 -0
- package/dist/badge.css +3 -0
- package/dist/badge.d.ts +2 -2
- package/dist/badge.layered.css +3 -0
- package/dist/cjs/components/badge/badge.recipe.js +10 -0
- package/dist/cjs/components/datatable/datatable.js +2 -1
- package/dist/cjs/components/datatable/datatable.recipe.js +4 -0
- package/dist/cjs/components/mentionchip/index.js +7 -0
- package/dist/cjs/components/mentionchip/mentionchip.js +57 -0
- package/dist/cjs/components/mentionchip/mentionchip.recipe.js +38 -0
- package/dist/cjs/components/table/table.recipe.js +15 -3
- package/dist/cjs/core/floating-stack.js +18 -0
- package/dist/cjs/core/index.js +2 -1
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/product/activityfeed/activityfeed.js +38 -0
- package/dist/cjs/product/activityfeed/activityfeed.recipe.js +35 -0
- package/dist/cjs/product/activityfeed/index.js +10 -0
- package/dist/cjs/product/formdialog/formdialog.js +171 -0
- package/dist/cjs/product/formdialog/formdialog.recipe.js +26 -0
- package/dist/cjs/product/formdialog/index.js +8 -0
- package/dist/cjs/product/importdialog/importdialog.js +134 -0
- package/dist/cjs/product/importdialog/importdialog.recipe.js +92 -0
- package/dist/cjs/product/importdialog/index.js +18 -0
- package/dist/cjs/product/richtext/richtext.js +43 -0
- package/dist/cjs/product/savedviews/index.js +7 -0
- package/dist/cjs/product/savedviews/savedviews.js +207 -0
- package/dist/cjs/product/savedviews/savedviews.recipe.js +103 -0
- package/dist/cjs/product/taskstable/index.js +7 -0
- package/dist/cjs/product/taskstable/taskstable.js +27 -0
- package/dist/cjs/product/taskstable/taskstable.recipe.js +47 -0
- package/dist/cjs/product/themepicker/index.js +17 -0
- package/dist/cjs/product/themepicker/themepicker.js +32 -0
- package/dist/cjs/product/themepicker/themepicker.recipe.js +98 -0
- package/dist/cjs/tokens/palette.js +31 -0
- package/dist/cjs/tokens/semantic.js +11 -0
- package/dist/datatable.css +20 -21
- package/dist/datatable.layered.css +20 -21
- package/dist/esm/components/badge/badge.recipe.js +10 -0
- package/dist/esm/components/datatable/datatable.js +2 -1
- package/dist/esm/components/datatable/datatable.recipe.js +4 -0
- package/dist/esm/components/mentionchip/index.js +2 -0
- package/dist/esm/components/mentionchip/mentionchip.js +21 -0
- package/dist/esm/components/mentionchip/mentionchip.recipe.js +35 -0
- package/dist/esm/components/table/table.recipe.js +15 -3
- package/dist/esm/core/floating-stack.js +17 -0
- package/dist/esm/core/index.js +1 -1
- package/dist/esm/index.js +7 -0
- package/dist/esm/product/activityfeed/activityfeed.js +32 -0
- package/dist/esm/product/activityfeed/activityfeed.recipe.js +32 -0
- package/dist/esm/product/activityfeed/index.js +2 -0
- package/dist/esm/product/formdialog/formdialog.js +134 -0
- package/dist/esm/product/formdialog/formdialog.recipe.js +23 -0
- package/dist/esm/product/formdialog/index.js +2 -0
- package/dist/esm/product/importdialog/importdialog.js +97 -0
- package/dist/esm/product/importdialog/importdialog.recipe.js +89 -0
- package/dist/esm/product/importdialog/index.js +2 -0
- package/dist/esm/product/richtext/richtext.js +43 -0
- package/dist/esm/product/savedviews/index.js +2 -0
- package/dist/esm/product/savedviews/savedviews.js +171 -0
- package/dist/esm/product/savedviews/savedviews.recipe.js +100 -0
- package/dist/esm/product/taskstable/index.js +2 -0
- package/dist/esm/product/taskstable/taskstable.js +24 -0
- package/dist/esm/product/taskstable/taskstable.recipe.js +44 -0
- package/dist/esm/product/themepicker/index.js +1 -0
- package/dist/esm/product/themepicker/themepicker.js +29 -0
- package/dist/esm/product/themepicker/themepicker.recipe.js +95 -0
- package/dist/esm/tokens/palette.js +31 -0
- package/dist/esm/tokens/semantic.js +11 -0
- package/dist/formdialog.css +6 -0
- package/dist/formdialog.d.ts +7 -0
- package/dist/formdialog.layered.css +8 -0
- package/dist/importdialog.css +38 -0
- package/dist/importdialog.d.ts +7 -0
- package/dist/importdialog.layered.css +40 -0
- package/dist/mentionchip.css +3 -0
- package/dist/mentionchip.d.ts +7 -0
- package/dist/mentionchip.layered.css +5 -0
- package/dist/native/tokens.d.ts +1 -1
- package/dist/native/tokens.js +24 -4
- package/dist/savedviews.css +78 -0
- package/dist/savedviews.d.ts +7 -0
- package/dist/savedviews.layered.css +80 -0
- package/dist/styles.css +242 -27
- package/dist/styles.layered.css +242 -27
- package/dist/table.css +15 -6
- package/dist/table.layered.css +15 -6
- package/dist/taskstable.css +23 -0
- package/dist/taskstable.d.ts +7 -0
- package/dist/taskstable.layered.css +25 -0
- package/dist/themepicker.css +27 -0
- package/dist/themepicker.d.ts +7 -0
- package/dist/themepicker.layered.css +29 -0
- package/dist/tokens.css +10 -0
- package/dist/tokens.json +24 -4
- package/dist/types/components/badge/badge.d.ts +2 -0
- package/dist/types/components/badge/badge.recipe.d.ts +8 -0
- package/dist/types/components/datatable/datatable.d.ts +12 -1
- package/dist/types/components/mentionchip/index.d.ts +2 -0
- package/dist/types/components/mentionchip/mentionchip.d.ts +20 -0
- package/dist/types/components/mentionchip/mentionchip.recipe.d.ts +18 -0
- package/dist/types/core/floating-stack.d.ts +14 -0
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/product/activityfeed/activityfeed.d.ts +57 -0
- package/dist/types/product/activityfeed/activityfeed.recipe.d.ts +3 -0
- package/dist/types/product/activityfeed/index.d.ts +2 -0
- package/dist/types/product/formdialog/formdialog.d.ts +57 -0
- package/dist/types/product/formdialog/formdialog.recipe.d.ts +3 -0
- package/dist/types/product/formdialog/index.d.ts +2 -0
- package/dist/types/product/importdialog/importdialog.d.ts +86 -0
- package/dist/types/product/importdialog/importdialog.recipe.d.ts +3 -0
- package/dist/types/product/importdialog/index.d.ts +2 -0
- package/dist/types/product/savedviews/index.d.ts +2 -0
- package/dist/types/product/savedviews/savedviews.d.ts +55 -0
- package/dist/types/product/savedviews/savedviews.recipe.d.ts +3 -0
- package/dist/types/product/taskstable/index.d.ts +2 -0
- package/dist/types/product/taskstable/taskstable.d.ts +54 -0
- package/dist/types/product/taskstable/taskstable.recipe.d.ts +3 -0
- package/dist/types/product/themepicker/index.d.ts +1 -0
- package/dist/types/product/themepicker/themepicker.d.ts +21 -0
- package/dist/types/product/themepicker/themepicker.recipe.d.ts +3 -0
- package/dist/types/tokens/contract.d.ts +5 -0
- package/dist/types/tokens/palette.d.ts +20 -0
- package/dist/types/tokens/semantic.d.ts +11 -0
- package/package.json +36 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
.crisp-activityfeed {
|
|
2
|
+
box-sizing: border-box; max-width: 767px; margin-inline: auto; padding: var(--crisp-space-6); display: flex; flex-direction: column; gap: var(--crisp-space-4);
|
|
3
|
+
& .crisp-activityfeed-row { display: flex; flex-direction: column; gap: var(--crisp-space-2); padding-bottom: var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); }
|
|
4
|
+
& .crisp-activityfeed-row:last-of-type { border-bottom: none; padding-bottom: 0; }
|
|
5
|
+
& .crisp-activityfeed-row-head { display: flex; align-items: center; gap: var(--crisp-space-2); }
|
|
6
|
+
& .crisp-activityfeed-row-spacer { flex: 1; }
|
|
7
|
+
& .crisp-activityfeed-row-when { font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); white-space: nowrap; }
|
|
8
|
+
& .crisp-activityfeed-diff { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--crisp-space-1); }
|
|
9
|
+
& .crisp-activityfeed-diff-item { padding-inline-start: var(--crisp-space-8); font-size: var(--crisp-text-md); }
|
|
10
|
+
& .crisp-activityfeed-diff-field { color: var(--crisp-fg-muted); }
|
|
11
|
+
& .crisp-activityfeed-diff-before { color: var(--crisp-fg-muted); text-decoration: line-through; }
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@layer crisp-components {
|
|
2
|
+
.crisp-activityfeed {
|
|
3
|
+
box-sizing: border-box; max-width: 767px; margin-inline: auto; padding: var(--crisp-space-6); display: flex; flex-direction: column; gap: var(--crisp-space-4);
|
|
4
|
+
& .crisp-activityfeed-row { display: flex; flex-direction: column; gap: var(--crisp-space-2); padding-bottom: var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); }
|
|
5
|
+
& .crisp-activityfeed-row:last-of-type { border-bottom: none; padding-bottom: 0; }
|
|
6
|
+
& .crisp-activityfeed-row-head { display: flex; align-items: center; gap: var(--crisp-space-2); }
|
|
7
|
+
& .crisp-activityfeed-row-spacer { flex: 1; }
|
|
8
|
+
& .crisp-activityfeed-row-when { font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); white-space: nowrap; }
|
|
9
|
+
& .crisp-activityfeed-diff { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--crisp-space-1); }
|
|
10
|
+
& .crisp-activityfeed-diff-item { padding-inline-start: var(--crisp-space-8); font-size: var(--crisp-text-md); }
|
|
11
|
+
& .crisp-activityfeed-diff-field { color: var(--crisp-fg-muted); }
|
|
12
|
+
& .crisp-activityfeed-diff-before { color: var(--crisp-fg-muted); text-decoration: line-through; }
|
|
13
|
+
}
|
|
14
|
+
}
|
package/dist/badge.css
CHANGED
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
.crisp-badge--tone_danger {
|
|
18
18
|
background: color-mix(in srgb, var(--crisp-bg-danger) 14%, transparent); color: var(--crisp-fg-danger-soft); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-danger) 30%, transparent);
|
|
19
19
|
}
|
|
20
|
+
.crisp-badge--tone_purple {
|
|
21
|
+
background: var(--crisp-bg-purple-soft); color: var(--crisp-fg-purple-soft); box-shadow: inset 0 0 0 1px var(--crisp-ring-purple-soft);
|
|
22
|
+
}
|
|
20
23
|
.crisp-badge--size_small {
|
|
21
24
|
height: 16px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-xs); border-radius: var(--crisp-radius-sm);
|
|
22
25
|
}
|
package/dist/badge.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { RecipeFn } from "../core/types";
|
|
2
2
|
|
|
3
3
|
export interface BadgeVariants {
|
|
4
|
-
tone?: "neutral" | "brand" | "success" | "warning" | "danger";
|
|
4
|
+
tone?: "neutral" | "brand" | "success" | "warning" | "danger" | "purple";
|
|
5
5
|
size?: "small" | "medium" | "large";
|
|
6
6
|
variant?: "soft" | "solid";
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export declare const badgeRecipe: RecipeFn<{ tone: { neutral: string; brand: string; success: string; warning: string; danger: string }; size: { small: string; medium: string; large: string }; variant: { soft: string; solid: string } }>;
|
|
9
|
+
export declare const badgeRecipe: RecipeFn<{ tone: { neutral: string; brand: string; success: string; warning: string; danger: string; purple: string }; size: { small: string; medium: string; large: string }; variant: { soft: string; solid: string } }>;
|
package/dist/badge.layered.css
CHANGED
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
.crisp-badge--tone_danger {
|
|
19
19
|
background: color-mix(in srgb, var(--crisp-bg-danger) 14%, transparent); color: var(--crisp-fg-danger-soft); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-danger) 30%, transparent);
|
|
20
20
|
}
|
|
21
|
+
.crisp-badge--tone_purple {
|
|
22
|
+
background: var(--crisp-bg-purple-soft); color: var(--crisp-fg-purple-soft); box-shadow: inset 0 0 0 1px var(--crisp-ring-purple-soft);
|
|
23
|
+
}
|
|
21
24
|
.crisp-badge--size_small {
|
|
22
25
|
height: 16px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-xs); border-radius: var(--crisp-radius-sm);
|
|
23
26
|
}
|
|
@@ -63,6 +63,16 @@ const spec = (0, core_1.defineSpec)({
|
|
|
63
63
|
color: tokens_1.contract.fgDangerSoft,
|
|
64
64
|
boxShadow: ring(tokens_1.contract.bgDanger, 30),
|
|
65
65
|
},
|
|
66
|
+
// crisp#506: a distinct purple used for role-style labels (Attio's own
|
|
67
|
+
// "Admin" role pill), not a status/severity colour -- the other five
|
|
68
|
+
// tones don't cover this hue. Unlike those, these are the measured
|
|
69
|
+
// *solid* values directly (not a color-mix tint of a base accent):
|
|
70
|
+
// Attio's own pill background reads a flat, opaque rgb(), no alpha.
|
|
71
|
+
purple: {
|
|
72
|
+
background: tokens_1.contract.bgPurpleSoft,
|
|
73
|
+
color: tokens_1.contract.fgPurpleSoft,
|
|
74
|
+
boxShadow: `inset 0 0 0 1px ${tokens_1.contract.ringPurpleSoft}`,
|
|
75
|
+
},
|
|
66
76
|
},
|
|
67
77
|
size: {
|
|
68
78
|
small: {
|
|
@@ -337,7 +337,7 @@ function DataReferenceEditor({ col, value, isPending, onCommit, onCancel, }) {
|
|
|
337
337
|
onCommit(v);
|
|
338
338
|
} }) }));
|
|
339
339
|
}
|
|
340
|
-
function DataTable({ columns: columnsProp, data, selectable = false, selectedIds, onSelectionChange, selectAllLabel: selectAllLabelProp, selectRowLabel = (row) => `Select row ${row.id}`, selectionAnnouncement, columnMenu = false, onColumnsChange, groupBy, onRowsReorder, error, sort: sortProp, defaultSort, onSortChange, filterable = false, searchPlaceholder: searchPlaceholderProp, searchLabel: searchLabelProp, onEdit, stickyFirst = true, stickyLast = false, locale: localeProp, avatarTone = "brand", surface, interactive = false, onRowClick, onAddRow, addRowLabel: addRowLabelProp, empty: emptyProp, showCount = true, countLabel, toolbar, className, reorderRowLabel: reorderRowLabelProp, sortAscendingLabel: sortAscendingLabelProp, sortDescendingLabel: sortDescendingLabelProp, moveColumnLeftLabel: moveColumnLeftLabelProp, moveColumnRightLabel: moveColumnRightLabelProp, editColumnLabel: editColumnLabelProp, hideColumnLabel: hideColumnLabelProp, renameColumnLabel: renameColumnLabelProp, viewSettingsLabel: viewSettingsLabelProp, columnsGroupLabel: columnsGroupLabelProp, ...rest }) {
|
|
340
|
+
function DataTable({ columns: columnsProp, data, selectable = false, selectedIds, onSelectionChange, selectAllLabel: selectAllLabelProp, selectRowLabel = (row) => `Select row ${row.id}`, selectionAnnouncement, columnMenu = false, onColumnsChange, groupBy, onRowsReorder, error, sort: sortProp, defaultSort, onSortChange, filterable = false, searchPlaceholder: searchPlaceholderProp, searchLabel: searchLabelProp, onEdit, stickyFirst = true, stickyLast = false, scrollProps, locale: localeProp, avatarTone = "brand", surface, interactive = false, onRowClick, onAddRow, addRowLabel: addRowLabelProp, empty: emptyProp, showCount = true, countLabel, toolbar, className, reorderRowLabel: reorderRowLabelProp, sortAscendingLabel: sortAscendingLabelProp, sortDescendingLabel: sortDescendingLabelProp, moveColumnLeftLabel: moveColumnLeftLabelProp, moveColumnRightLabel: moveColumnRightLabelProp, editColumnLabel: editColumnLabelProp, hideColumnLabel: hideColumnLabelProp, renameColumnLabel: renameColumnLabelProp, viewSettingsLabel: viewSettingsLabelProp, columnsGroupLabel: columnsGroupLabelProp, ...rest }) {
|
|
341
341
|
// crisp/#471: same resolution order as TableToolbar's own — an explicit
|
|
342
342
|
// prop wins, then the provider's translation of the built-in English
|
|
343
343
|
// default, then that default itself with no provider in the tree.
|
|
@@ -818,6 +818,7 @@ function DataTable({ columns: columnsProp, data, selectable = false, selectedIds
|
|
|
818
818
|
return ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronsUpDown, { className: "crisp-datatable-chevron", size: 13, strokeWidth: 2 }));
|
|
819
819
|
}
|
|
820
820
|
return ((0, jsx_runtime_1.jsxs)("div", { ref: gridRef, className: (0, datatable_recipe_1.datatableRecipe)({ className }), tabIndex: -1, onKeyDown: onGridKeyDown, ...rest, children: [(0, jsx_runtime_1.jsx)("div", { className: "crisp-datatable-live", role: "status", "aria-live": "polite", children: selectionText }), (filterable || showCount || toolbar || columnMenu) && ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-datatable-toolbar", children: [columnMenu && ((0, jsx_runtime_1.jsxs)(menu_1.Menu, { align: "start", trigger: (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-datatable-viewsettings", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.SlidersHorizontal, { size: 14, strokeWidth: 1.75 }), viewSettingsLabel] }), children: [(0, jsx_runtime_1.jsx)("div", { className: "crisp-datatable-group-label", children: columnsGroupLabel }), allColumns.map((c) => ((0, jsx_runtime_1.jsxs)(menu_1.MenuItem, { onSelect: () => c.hidden ? showColumn(c.key) : hideColumn(c.key), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 14, strokeWidth: 2, style: { opacity: c.hidden ? 0 : 1 } }), typeof c.header === "string" ? c.header : c.key] }, c.key)))] })), filterable && ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-datatable-search", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Search, { size: 15, strokeWidth: 1.75, "aria-hidden": "true" }), (0, jsx_runtime_1.jsx)("input", { type: "search", placeholder: searchPlaceholder, value: query, onChange: (e) => setQuery(e.target.value), "aria-label": searchLabel })] })), showCount && ((0, jsx_runtime_1.jsx)("span", { className: "crisp-datatable-count", children: resolvedCountLabel(rows.length, data.length) })), toolbar] })), (0, jsx_runtime_1.jsxs)(table_1.Table, { interactive: interactive, surface: surface, style: { minWidth }, scrollProps: {
|
|
821
|
+
...scrollProps,
|
|
821
822
|
ref: scrollRef,
|
|
822
823
|
onScroll: (e) => {
|
|
823
824
|
const el = e.currentTarget;
|
|
@@ -69,6 +69,10 @@ const config = (0, core_1.defineRecipe)({
|
|
|
69
69
|
/* sticky first column(s) + horizontal scroll shadow — RecordsTable's feel */
|
|
70
70
|
& th[data-sticky], & td[data-sticky] { position: sticky; z-index: 1; background: ${tokens_1.contract.bgSurface}; }
|
|
71
71
|
& th[data-sticky] { z-index: 3; }
|
|
72
|
+
/* #554: a footer sticky-column cell sits in the bottom-sticky row (table.recipe.ts's
|
|
73
|
+
\`tfoot td { z-index: 2 }\`), which \`td[data-sticky]\`'s own higher-specificity
|
|
74
|
+
\`z-index: 1\` would otherwise undercut -- keep it level with the row it's in. */
|
|
75
|
+
& tfoot td[data-sticky] { z-index: 2; }
|
|
72
76
|
& tbody tr[data-selected] td[data-sticky] { background: color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 10%, ${tokens_1.contract.bgSurface}); }
|
|
73
77
|
& tbody tr:hover td[data-sticky] { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 4%, ${tokens_1.contract.bgSurface}); }
|
|
74
78
|
& .crisp-table-scroll[data-scrolled-x] [data-sticky-edge] { clip-path: inset(0 -38px 0 0); box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mentionChipRecipe = exports.MentionChip = void 0;
|
|
4
|
+
var mentionchip_1 = require("./mentionchip");
|
|
5
|
+
Object.defineProperty(exports, "MentionChip", { enumerable: true, get: function () { return mentionchip_1.MentionChip; } });
|
|
6
|
+
var mentionchip_recipe_1 = require("./mentionchip.recipe");
|
|
7
|
+
Object.defineProperty(exports, "mentionChipRecipe", { enumerable: true, get: function () { return mentionchip_recipe_1.mentionChipRecipe; } });
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MentionChip = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
const core_1 = require("../../core");
|
|
40
|
+
const mentionchip_recipe_1 = require("./mentionchip.recipe");
|
|
41
|
+
/**
|
|
42
|
+
* A standalone "@mention" chip — the same look `RichTextEditor` draws
|
|
43
|
+
* inline while an editor is live (`.crisp-rte-mention`), exported on its
|
|
44
|
+
* own for a consumer rendering a mention OUTSIDE a mounted editor: a
|
|
45
|
+
* comment thread, a note's collapsed preview, anywhere a stored
|
|
46
|
+
* `@[Name](actor:id)`-shaped token needs to read as a person, not literal
|
|
47
|
+
* markup. Renders whatever `children` is given (the trigger character
|
|
48
|
+
* included, if the caller wants one, matching how `RichTextEditor`'s own
|
|
49
|
+
* chip includes it) rather than assuming an `@` prefix itself — plain text,
|
|
50
|
+
* no built-in click/remove behaviour (none was asked for; add one once a
|
|
51
|
+
* real interaction is measured, the same reasoning `Chip`'s own doc gives
|
|
52
|
+
* for not guessing a remove affordance).
|
|
53
|
+
*/
|
|
54
|
+
exports.MentionChip = React.forwardRef(({ className, asChild, ...props }, ref) => {
|
|
55
|
+
return ((0, jsx_runtime_1.jsx)(core_1.Primitive.span, { ref: ref, asChild: asChild, className: (0, mentionchip_recipe_1.mentionChipRecipe)({ className }), ...props }));
|
|
56
|
+
});
|
|
57
|
+
exports.MentionChip.displayName = "MentionChip";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.spec = exports.mentionChipRecipe = void 0;
|
|
4
|
+
const core_1 = require("../../core");
|
|
5
|
+
const tokens_1 = require("../../tokens");
|
|
6
|
+
// The exact same values `product/richtext`'s own inline "@mention" span
|
|
7
|
+
// uses (`.crisp-rte-mention`, richtext.recipe.ts) — not re-measured against
|
|
8
|
+
// Attio independently (#428's own doc: no live @mention was reachable to
|
|
9
|
+
// read computed styles from, and typing one to create one is off-limits),
|
|
10
|
+
// reused verbatim from the one measured "brand" tag/chip this repo already
|
|
11
|
+
// has (Chip's own `tone="brand"`). Pulled out to its own top-level recipe,
|
|
12
|
+
// rather than importing richtext's, because `.crisp-rte-mention`'s CSS is
|
|
13
|
+
// nested under richtext's own root selector (`&`, i.e. native CSS
|
|
14
|
+
// nesting) — it only resolves inside a mounted `RichTextEditor`. A
|
|
15
|
+
// standalone consumer rendering a mention OUTSIDE an editor (a comment
|
|
16
|
+
// thread, a note preview list) needs the same look with no such ancestor,
|
|
17
|
+
// which is what this recipe is for. Kept deliberately un-pill-shaped (no
|
|
18
|
+
// fixed height, no ring) unlike Chip's own `brand` tone: this reads as
|
|
19
|
+
// tinted text flowing inside a sentence, the same as a live mention does
|
|
20
|
+
// mid-edit, not a standalone tag sitting in its own table cell.
|
|
21
|
+
const spec = (0, core_1.defineSpec)({
|
|
22
|
+
name: "mention-chip",
|
|
23
|
+
base: {
|
|
24
|
+
display: "inline",
|
|
25
|
+
borderRadius: tokens_1.contract.radius.chip,
|
|
26
|
+
paddingInline: tokens_1.contract.space["1"],
|
|
27
|
+
background: `color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 14%, transparent)`,
|
|
28
|
+
color: `color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 82%, ${tokens_1.contract.fgPrimary})`,
|
|
29
|
+
fontWeight: tokens_1.contract.weight.medium,
|
|
30
|
+
cursor: "default",
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
exports.spec = spec;
|
|
34
|
+
const config = (0, core_1.specToRecipe)(spec);
|
|
35
|
+
exports.mentionChipRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
|
|
36
|
+
config,
|
|
37
|
+
});
|
|
38
|
+
exports.default = config;
|
|
@@ -11,18 +11,30 @@ const tokens_1 = require("../../tokens");
|
|
|
11
11
|
const config = (0, core_1.defineRecipe)({
|
|
12
12
|
name: "table",
|
|
13
13
|
base: `display: block; box-sizing: border-box; background: ${tokens_1.contract.bgSurface};
|
|
14
|
-
|
|
14
|
+
/* #554: both axes -- a consumer bounds the height via \`scrollProps\`
|
|
15
|
+
(style/className on this element), and the header/footer below pin
|
|
16
|
+
inside it exactly the way Attio's own grid does ("Both the header and
|
|
17
|
+
the summary row are sticky, on the scroll container rather than the
|
|
18
|
+
cells" -- docs/study/attio-table.md). Unbounded, \`overflow: auto\`
|
|
19
|
+
shows no vertical scrollbar and nothing sticks, so this is a no-op
|
|
20
|
+
for every existing consumer that never set a height. */
|
|
21
|
+
& .crisp-table-scroll { overflow: auto; }
|
|
15
22
|
& table { width: 100%; border-collapse: separate; border-spacing: 0; font-family: ${tokens_1.contract.font.sans}; font-size: ${tokens_1.contract.text.lg}; color: ${tokens_1.contract.fgPrimary}; }
|
|
16
23
|
/* #465: 12px, not crisp's old 8px -- measured on a live header cell
|
|
17
24
|
(padding: 0 12px) and independently on a body cell's text inset
|
|
18
25
|
(getBoundingClientRect delta from the cell edge). Matches
|
|
19
26
|
ColumnCalc's own already-correct 12px trigger inset. */
|
|
20
27
|
& th, & td { position: relative; height: ${tokens_1.contract.size.tableRow}; padding: 0 ${tokens_1.contract.space["3"]}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; border-inline-end: 1px solid ${tokens_1.contract.borderSubtle}; text-align: start; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
21
|
-
|
|
28
|
+
/* #554: sticky on the vertical axis, mirroring RecordsTable's own
|
|
29
|
+
\`.crisp-recordstable-th\`. z-index 2 sits above a plain body cell (auto)
|
|
30
|
+
and below a sticky-column corner cell (DataTable's \`th[data-sticky]\`,
|
|
31
|
+
z-index 3), so the corner always wins. */
|
|
32
|
+
& th { position: sticky; top: 0; z-index: 2; height: ${tokens_1.contract.size.tableHeader}; background: ${tokens_1.contract.bgSurface}; border-top: 1px solid ${tokens_1.contract.borderSubtle}; font-size: ${tokens_1.contract.text.lg}; font-weight: ${tokens_1.contract.weight.medium}; letter-spacing: -0.14px; color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 63%, transparent); user-select: none; }
|
|
22
33
|
& td { color: ${tokens_1.contract.fgPrimary}; background: ${tokens_1.contract.bgSurface}; }
|
|
23
34
|
& th:last-child, & td:last-child { border-inline-end: none; }
|
|
24
35
|
& tbody tr:last-child td { border-bottom: none; }
|
|
25
|
-
|
|
36
|
+
/* #554: sticky to the bottom, mirroring \`.crisp-recordstable-sum\`. */
|
|
37
|
+
& tfoot td { position: sticky; bottom: 0; z-index: 2; border-top: 1px solid ${tokens_1.contract.borderSubtle}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; font-weight: ${tokens_1.contract.weight.medium}; color: ${tokens_1.contract.fgMuted}; }
|
|
26
38
|
& caption { padding: ${tokens_1.contract.space["2"]} ${tokens_1.contract.space["2"]}; text-align: start; font-size: ${tokens_1.contract.text.sm}; color: ${tokens_1.contract.fgMuted}; caption-side: bottom; }
|
|
27
39
|
& td[data-align="right"], & th[data-align="right"] { text-align: end; }
|
|
28
40
|
& td[data-align="center"], & th[data-align="center"] { text-align: center; }`,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerFloatingLayer = registerFloatingLayer;
|
|
4
4
|
exports.isInsideLaterFloatingLayer = isInsideLaterFloatingLayer;
|
|
5
|
+
exports.hasNestedFloatingLayer = hasNestedFloatingLayer;
|
|
5
6
|
exports.hasOpenFloatingLayer = hasOpenFloatingLayer;
|
|
6
7
|
/**
|
|
7
8
|
* Tracks every currently-open `FloatingPortal` layer, in open order, so a
|
|
@@ -53,6 +54,23 @@ function isInsideLaterFloatingLayer(target, self) {
|
|
|
53
54
|
}
|
|
54
55
|
return false;
|
|
55
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* True when a layer is registered strictly after `self` — i.e. `self` has
|
|
59
|
+
* spawned a still-open nested layer of its own (a row's kebab `Menu` inside
|
|
60
|
+
* `SavedViews`' own panel, e.g.).
|
|
61
|
+
*
|
|
62
|
+
* This is `hasOpenFloatingLayer`'s sibling for a caller that DOES register
|
|
63
|
+
* itself on this stack: `hasOpenFloatingLayer` reads "is the stack
|
|
64
|
+
* non-empty", which is always true for such a caller once its own layer is
|
|
65
|
+
* open — checking that before closing on Escape would defer to itself
|
|
66
|
+
* forever and Escape would never close it. `self`'s own position on the
|
|
67
|
+
* stack has to be excluded from the count, which `hasOpenFloatingLayer`
|
|
68
|
+
* cannot do since it takes no argument.
|
|
69
|
+
*/
|
|
70
|
+
function hasNestedFloatingLayer(self) {
|
|
71
|
+
const selfIndex = self ? stack.indexOf(self) : -1;
|
|
72
|
+
return selfIndex + 1 < stack.length;
|
|
73
|
+
}
|
|
56
74
|
/**
|
|
57
75
|
* True when at least one `Select`/`MultiSelect`/`Menu`/`Popover`/
|
|
58
76
|
* `ContextMenu` is currently open, anywhere (#361).
|
package/dist/cjs/core/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.usePrefersReducedMotion = exports.useMentionTrigger = exports.useLabelAssociation = exports.useFormReset = exports.useFocusAfterRemoval = exports.specToRecipe = exports.defineSpec = exports.resolveRecipe = exports.Primitive = exports.placeFloating = exports.matchMentionTrigger = exports.useCrispMessages = exports.useCrispMessage = exports.useCrispComponentDefaults = exports.CrispMessagesProvider = exports.formValueStyle = exports.registerFloatingLayer = exports.isInsideLaterFloatingLayer = exports.hasOpenFloatingLayer = exports.FloatingPortal = exports.isRtlElement = exports.withDescribedBy = exports.defineRecipe = exports.cx = exports.parseCellDate = exports.formatCellDate = exports.cellDatePrecision = exports.caretRectInField = void 0;
|
|
17
|
+
exports.usePrefersReducedMotion = exports.useMentionTrigger = exports.useLabelAssociation = exports.useFormReset = exports.useFocusAfterRemoval = exports.specToRecipe = exports.defineSpec = exports.resolveRecipe = exports.Primitive = exports.placeFloating = exports.matchMentionTrigger = exports.useCrispMessages = exports.useCrispMessage = exports.useCrispComponentDefaults = exports.CrispMessagesProvider = exports.formValueStyle = exports.registerFloatingLayer = exports.isInsideLaterFloatingLayer = exports.hasOpenFloatingLayer = exports.hasNestedFloatingLayer = exports.FloatingPortal = exports.isRtlElement = exports.withDescribedBy = exports.defineRecipe = exports.cx = exports.parseCellDate = exports.formatCellDate = exports.cellDatePrecision = exports.caretRectInField = void 0;
|
|
18
18
|
var caret_rect_1 = require("./caret-rect");
|
|
19
19
|
Object.defineProperty(exports, "caretRectInField", { enumerable: true, get: function () { return caret_rect_1.caretRectInField; } });
|
|
20
20
|
var cell_date_1 = require("./cell-date");
|
|
@@ -32,6 +32,7 @@ Object.defineProperty(exports, "isRtlElement", { enumerable: true, get: function
|
|
|
32
32
|
var floating_portal_1 = require("./floating-portal");
|
|
33
33
|
Object.defineProperty(exports, "FloatingPortal", { enumerable: true, get: function () { return floating_portal_1.FloatingPortal; } });
|
|
34
34
|
var floating_stack_1 = require("./floating-stack");
|
|
35
|
+
Object.defineProperty(exports, "hasNestedFloatingLayer", { enumerable: true, get: function () { return floating_stack_1.hasNestedFloatingLayer; } });
|
|
35
36
|
Object.defineProperty(exports, "hasOpenFloatingLayer", { enumerable: true, get: function () { return floating_stack_1.hasOpenFloatingLayer; } });
|
|
36
37
|
Object.defineProperty(exports, "isInsideLaterFloatingLayer", { enumerable: true, get: function () { return floating_stack_1.isInsideLaterFloatingLayer; } });
|
|
37
38
|
Object.defineProperty(exports, "registerFloatingLayer", { enumerable: true, get: function () { return floating_stack_1.registerFloatingLayer; } });
|
package/dist/cjs/index.js
CHANGED
|
@@ -49,6 +49,7 @@ __exportStar(require("./components/heatmapchart"), exports);
|
|
|
49
49
|
__exportStar(require("./components/input"), exports);
|
|
50
50
|
__exportStar(require("./components/kbd"), exports);
|
|
51
51
|
__exportStar(require("./components/linechart"), exports);
|
|
52
|
+
__exportStar(require("./components/mentionchip"), exports);
|
|
52
53
|
__exportStar(require("./components/menu"), exports);
|
|
53
54
|
__exportStar(require("./components/middletruncate"), exports);
|
|
54
55
|
__exportStar(require("./components/multiselect"), exports);
|
|
@@ -81,13 +82,16 @@ __exportStar(require("./core"), exports);
|
|
|
81
82
|
// product screens (Sidebar, RecordsTable, RecordPage, Inbox, …). Use them as-is
|
|
82
83
|
// or as composition references for your own data; `components/` above holds
|
|
83
84
|
// the generic primitives (Table, DataTable, Button, …) to build your own UI from.
|
|
85
|
+
__exportStar(require("./product/activityfeed"), exports);
|
|
84
86
|
__exportStar(require("./product/appshell"), exports);
|
|
85
87
|
__exportStar(require("./product/authshell"), exports);
|
|
86
88
|
__exportStar(require("./product/board"), exports);
|
|
87
89
|
__exportStar(require("./product/command"), exports);
|
|
88
90
|
__exportStar(require("./product/entitycard"), exports);
|
|
89
91
|
__exportStar(require("./product/flowcanvas"), exports);
|
|
92
|
+
__exportStar(require("./product/formdialog"), exports);
|
|
90
93
|
__exportStar(require("./product/headerbar"), exports);
|
|
94
|
+
__exportStar(require("./product/importdialog"), exports);
|
|
91
95
|
__exportStar(require("./product/inbox"), exports);
|
|
92
96
|
__exportStar(require("./product/listpage"), exports);
|
|
93
97
|
__exportStar(require("./product/navitem"), exports);
|
|
@@ -96,11 +100,14 @@ __exportStar(require("./product/recordpage"), exports);
|
|
|
96
100
|
__exportStar(require("./product/recordpanel"), exports);
|
|
97
101
|
__exportStar(require("./product/recordstable"), exports);
|
|
98
102
|
__exportStar(require("./product/richtext"), exports);
|
|
103
|
+
__exportStar(require("./product/savedviews"), exports);
|
|
99
104
|
__exportStar(require("./product/settingssection"), exports);
|
|
100
105
|
__exportStar(require("./product/settingsshell"), exports);
|
|
101
106
|
__exportStar(require("./product/sidebar"), exports);
|
|
102
107
|
__exportStar(require("./product/statlist"), exports);
|
|
103
108
|
__exportStar(require("./product/tasklist"), exports);
|
|
109
|
+
__exportStar(require("./product/taskstable"), exports);
|
|
110
|
+
__exportStar(require("./product/themepicker"), exports);
|
|
104
111
|
__exportStar(require("./product/trialbanner"), exports);
|
|
105
112
|
__exportStar(require("./product/viewtoggle"), exports);
|
|
106
113
|
// design tokens + recipe core (for building custom components)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActivityFeed = ActivityFeed;
|
|
4
|
+
exports.ActivityFeedRow = ActivityFeedRow;
|
|
5
|
+
exports.ActivityFeedDiffItem = ActivityFeedDiffItem;
|
|
6
|
+
exports.ActivityFeedDiffList = ActivityFeedDiffList;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const activityfeed_recipe_1 = require("./activityfeed.recipe");
|
|
9
|
+
/**
|
|
10
|
+
* A record's own event timeline — a vertically stacked, bordered list of
|
|
11
|
+
* `ActivityFeedRow`s, capped at a readable content width. Built for
|
|
12
|
+
* internal/grc's per-record "Activity" tab (crisp#462 SHELL/forms gap): it
|
|
13
|
+
* replaces a hand-rolled `<div className="mx-auto max-w-3xl space-y-4
|
|
14
|
+
* p-6">`. No live Attio re-measurement behind its own chrome this pass (the
|
|
15
|
+
* CDP bridge was unreachable when this was built) — see the recipe's own
|
|
16
|
+
* doc comment for which already-measured crisp values it reuses instead of
|
|
17
|
+
* a new guess.
|
|
18
|
+
*/
|
|
19
|
+
function ActivityFeed({ className, children, ...rest }) {
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: (0, activityfeed_recipe_1.activityfeedRecipe)({ className }), ...rest, children: children }));
|
|
21
|
+
}
|
|
22
|
+
ActivityFeed.displayName = "ActivityFeed";
|
|
23
|
+
/** One event row: actor + action + timestamp, with an optional diff list
|
|
24
|
+
* underneath. The last row in an `ActivityFeed` draws no divider. */
|
|
25
|
+
function ActivityFeedRow({ actor, action, when, children, }) {
|
|
26
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-activityfeed-row", children: [(0, jsx_runtime_1.jsxs)("div", { className: "crisp-activityfeed-row-head", children: [actor, action, (0, jsx_runtime_1.jsx)("span", { className: "crisp-activityfeed-row-spacer" }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-activityfeed-row-when", children: when })] }), children] }));
|
|
27
|
+
}
|
|
28
|
+
ActivityFeedRow.displayName = "ActivityFeedRow";
|
|
29
|
+
/** One changed-field line under an `ActivityFeedRow` — "Field: before →
|
|
30
|
+
* after", or "Field: set to after" when there is no known prior value. */
|
|
31
|
+
function ActivityFeedDiffItem({ field, before, after, }) {
|
|
32
|
+
return ((0, jsx_runtime_1.jsxs)("li", { className: "crisp-activityfeed-diff-item", children: [(0, jsx_runtime_1.jsx)("span", { className: "crisp-activityfeed-diff-field", children: field }), " ", before !== undefined ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "crisp-activityfeed-diff-before", children: before }), " ", (0, jsx_runtime_1.jsx)("span", { "aria-hidden": "true", children: "\u2192" }), " ", (0, jsx_runtime_1.jsx)("span", { children: after })] })) : ((0, jsx_runtime_1.jsx)("span", { children: after }))] }));
|
|
33
|
+
}
|
|
34
|
+
ActivityFeedDiffItem.displayName = "ActivityFeedDiffItem";
|
|
35
|
+
function ActivityFeedDiffList({ children, }) {
|
|
36
|
+
return (0, jsx_runtime_1.jsx)("ul", { className: "crisp-activityfeed-diff", children: children });
|
|
37
|
+
}
|
|
38
|
+
ActivityFeedDiffList.displayName = "ActivityFeedDiffList";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.activityfeedRecipe = void 0;
|
|
4
|
+
const core_1 = require("../../core");
|
|
5
|
+
const tokens_1 = require("../../tokens");
|
|
6
|
+
// A record's own event timeline (crisp#462 gap: internal/grc's ActivityTab
|
|
7
|
+
// hand-rolled this as a bare `<div className="mx-auto max-w-3xl space-y-4
|
|
8
|
+
// p-6">` list of bordered rows). No live Attio re-measurement behind these
|
|
9
|
+
// values this pass -- the CDP bridge to the owner's Vivaldi was unreachable
|
|
10
|
+
// when this was built (documented in the component's own doc comment) --
|
|
11
|
+
// so this reuses already-measured crisp values throughout rather than a new
|
|
12
|
+
// guess: `space["6"]` (24px) padding is RecordPanel's own content padding,
|
|
13
|
+
// the row's bottom border reuses `borderSubtle` (the same divider every
|
|
14
|
+
// other bordered row in this codebase draws with), and the 767px content
|
|
15
|
+
// cap matches SettingsSection's own measured content width.
|
|
16
|
+
const config = (0, core_1.defineRecipe)({
|
|
17
|
+
name: "activityfeed",
|
|
18
|
+
base: `box-sizing: border-box; max-width: 767px; margin-inline: auto; padding: ${tokens_1.contract.space["6"]};
|
|
19
|
+
display: flex; flex-direction: column; gap: ${tokens_1.contract.space["4"]};
|
|
20
|
+
& .crisp-activityfeed-row { display: flex; flex-direction: column; gap: ${tokens_1.contract.space["2"]}; padding-bottom: ${tokens_1.contract.space["4"]}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; }
|
|
21
|
+
& .crisp-activityfeed-row:last-of-type { border-bottom: none; padding-bottom: 0; }
|
|
22
|
+
& .crisp-activityfeed-row-head { display: flex; align-items: center; gap: ${tokens_1.contract.space["2"]}; }
|
|
23
|
+
& .crisp-activityfeed-row-spacer { flex: 1; }
|
|
24
|
+
& .crisp-activityfeed-row-when { font-size: ${tokens_1.contract.text.xs}; color: ${tokens_1.contract.fgMuted}; white-space: nowrap; }
|
|
25
|
+
& .crisp-activityfeed-diff { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: ${tokens_1.contract.space["1"]}; }
|
|
26
|
+
& .crisp-activityfeed-diff-item { padding-inline-start: ${tokens_1.contract.space["8"]}; font-size: ${tokens_1.contract.text.md}; }
|
|
27
|
+
& .crisp-activityfeed-diff-field { color: ${tokens_1.contract.fgMuted}; }
|
|
28
|
+
& .crisp-activityfeed-diff-before { color: ${tokens_1.contract.fgMuted}; text-decoration: line-through; }
|
|
29
|
+
`,
|
|
30
|
+
variants: {},
|
|
31
|
+
defaultVariants: {},
|
|
32
|
+
compoundVariants: [],
|
|
33
|
+
});
|
|
34
|
+
exports.activityfeedRecipe = (0, core_1.resolveRecipe)(config);
|
|
35
|
+
exports.default = config;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.activityfeedRecipe = exports.ActivityFeedRow = exports.ActivityFeedDiffList = exports.ActivityFeedDiffItem = exports.ActivityFeed = void 0;
|
|
4
|
+
var activityfeed_1 = require("./activityfeed");
|
|
5
|
+
Object.defineProperty(exports, "ActivityFeed", { enumerable: true, get: function () { return activityfeed_1.ActivityFeed; } });
|
|
6
|
+
Object.defineProperty(exports, "ActivityFeedDiffItem", { enumerable: true, get: function () { return activityfeed_1.ActivityFeedDiffItem; } });
|
|
7
|
+
Object.defineProperty(exports, "ActivityFeedDiffList", { enumerable: true, get: function () { return activityfeed_1.ActivityFeedDiffList; } });
|
|
8
|
+
Object.defineProperty(exports, "ActivityFeedRow", { enumerable: true, get: function () { return activityfeed_1.ActivityFeedRow; } });
|
|
9
|
+
var activityfeed_recipe_1 = require("./activityfeed.recipe");
|
|
10
|
+
Object.defineProperty(exports, "activityfeedRecipe", { enumerable: true, get: function () { return activityfeed_recipe_1.activityfeedRecipe; } });
|