@crisp-ui-kit/crisp 0.31.4 → 0.31.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/authshell.css +1 -1
- package/dist/cjs/components/accordion/accordion.recipe.js +1 -1
- package/dist/cjs/components/barchart/barchart.recipe.js +1 -1
- package/dist/cjs/components/breadcrumb/breadcrumb.recipe.js +1 -1
- package/dist/cjs/components/bulkbar/bulkbar.recipe.js +1 -1
- package/dist/cjs/components/callout/callout.recipe.js +1 -1
- package/dist/cjs/components/checkbox/checkbox.recipe.js +1 -1
- package/dist/cjs/components/columncalc/columncalc.recipe.js +2 -2
- package/dist/cjs/components/datatable/datatable.recipe.js +5 -5
- package/dist/cjs/components/datepicker/datepicker.recipe.js +3 -3
- package/dist/cjs/components/datepickerfield/datepickerfield.recipe.js +2 -2
- package/dist/cjs/components/dialog/dialog.recipe.js +1 -1
- package/dist/cjs/components/donutchart/donutchart.recipe.js +1 -1
- package/dist/cjs/components/emptystate/emptystate.recipe.js +2 -2
- package/dist/cjs/components/fileupload/fileupload.recipe.js +6 -6
- package/dist/cjs/components/formfield/formfield.recipe.js +1 -1
- package/dist/cjs/components/input/input.recipe.js +1 -1
- package/dist/cjs/components/linechart/linechart.recipe.js +1 -1
- package/dist/cjs/components/menu/menu.recipe.js +2 -2
- package/dist/cjs/components/multiselect/multiselect.recipe.js +1 -1
- package/dist/cjs/components/progress/progress.recipe.js +1 -1
- package/dist/cjs/components/quantitypicker/quantitypicker.recipe.js +2 -2
- package/dist/cjs/components/radiogroup/radiogroup.recipe.js +1 -1
- package/dist/cjs/components/resizablepanel/resizablepanel.recipe.js +2 -2
- package/dist/cjs/components/segmented/segmented.recipe.js +1 -1
- package/dist/cjs/components/select/select.recipe.js +2 -2
- package/dist/cjs/components/slider/slider.recipe.js +2 -2
- package/dist/cjs/components/stagebar/stagebar.recipe.js +1 -1
- package/dist/cjs/components/statcard/statcard.recipe.js +2 -2
- package/dist/cjs/components/switch/switch.recipe.js +1 -1
- package/dist/cjs/components/table/table.recipe.js +1 -1
- package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +2 -2
- package/dist/cjs/components/tabletoolbar/tabletoolbar.recipe.js +1 -1
- package/dist/cjs/components/tabs/tabs.recipe.js +1 -1
- package/dist/cjs/components/textarea/textarea.recipe.js +1 -1
- package/dist/cjs/components/tooltip/tooltip.recipe.js +1 -1
- package/dist/cjs/product/appshell/appshell.recipe.js +1 -1
- package/dist/cjs/product/authshell/authshell.recipe.js +3 -3
- package/dist/cjs/product/board/board.recipe.js +1 -1
- package/dist/cjs/product/entitycard/entitycard.recipe.js +1 -1
- package/dist/cjs/product/flowcanvas/flowcanvas.recipe.js +1 -1
- package/dist/cjs/product/inbox/inbox.recipe.js +1 -1
- package/dist/cjs/product/listpage/listpage.recipe.js +1 -1
- package/dist/cjs/product/onboarding/onboarding.recipe.js +1 -1
- package/dist/cjs/product/recordpage/recordpage.recipe.js +2 -2
- package/dist/cjs/product/recordpanel/recordpanel.recipe.js +1 -1
- package/dist/cjs/product/recordstable/recordstable.recipe.js +2 -2
- package/dist/cjs/product/recordstable/recordstable.tag.js +1 -1
- package/dist/cjs/product/richtext/richtext.recipe.js +1 -1
- package/dist/cjs/product/settingssection/settingssection.recipe.js +1 -1
- package/dist/cjs/product/settingsshell/settingsshell.recipe.js +2 -2
- package/dist/cjs/product/tasklist/tasklist.recipe.js +1 -1
- package/dist/cjs/product/trialbanner/trialbanner.recipe.js +2 -2
- package/dist/cjs/product/viewtoggle/viewtoggle.recipe.js +1 -1
- package/dist/columncalc.css +1 -1
- package/dist/datatable.css +5 -5
- package/dist/esm/components/accordion/accordion.recipe.js +1 -1
- package/dist/esm/components/barchart/barchart.recipe.js +1 -1
- package/dist/esm/components/breadcrumb/breadcrumb.recipe.js +1 -1
- package/dist/esm/components/bulkbar/bulkbar.recipe.js +1 -1
- package/dist/esm/components/callout/callout.recipe.js +1 -1
- package/dist/esm/components/checkbox/checkbox.recipe.js +1 -1
- package/dist/esm/components/columncalc/columncalc.recipe.js +2 -2
- package/dist/esm/components/datatable/datatable.recipe.js +5 -5
- package/dist/esm/components/datepicker/datepicker.recipe.js +3 -3
- package/dist/esm/components/datepickerfield/datepickerfield.recipe.js +2 -2
- package/dist/esm/components/dialog/dialog.recipe.js +1 -1
- package/dist/esm/components/donutchart/donutchart.recipe.js +1 -1
- package/dist/esm/components/emptystate/emptystate.recipe.js +2 -2
- package/dist/esm/components/fileupload/fileupload.recipe.js +6 -6
- package/dist/esm/components/formfield/formfield.recipe.js +1 -1
- package/dist/esm/components/input/input.recipe.js +1 -1
- package/dist/esm/components/linechart/linechart.recipe.js +1 -1
- package/dist/esm/components/menu/menu.recipe.js +2 -2
- package/dist/esm/components/multiselect/multiselect.recipe.js +1 -1
- package/dist/esm/components/progress/progress.recipe.js +1 -1
- package/dist/esm/components/quantitypicker/quantitypicker.recipe.js +2 -2
- package/dist/esm/components/radiogroup/radiogroup.recipe.js +1 -1
- package/dist/esm/components/resizablepanel/resizablepanel.recipe.js +2 -2
- package/dist/esm/components/segmented/segmented.recipe.js +1 -1
- package/dist/esm/components/select/select.recipe.js +2 -2
- package/dist/esm/components/slider/slider.recipe.js +2 -2
- package/dist/esm/components/stagebar/stagebar.recipe.js +1 -1
- package/dist/esm/components/statcard/statcard.recipe.js +2 -2
- package/dist/esm/components/switch/switch.recipe.js +1 -1
- package/dist/esm/components/table/table.recipe.js +1 -1
- package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +2 -2
- package/dist/esm/components/tabletoolbar/tabletoolbar.recipe.js +1 -1
- package/dist/esm/components/tabs/tabs.recipe.js +1 -1
- package/dist/esm/components/textarea/textarea.recipe.js +1 -1
- package/dist/esm/components/tooltip/tooltip.recipe.js +1 -1
- package/dist/esm/product/appshell/appshell.recipe.js +1 -1
- package/dist/esm/product/authshell/authshell.recipe.js +3 -3
- package/dist/esm/product/board/board.recipe.js +1 -1
- package/dist/esm/product/entitycard/entitycard.recipe.js +1 -1
- package/dist/esm/product/flowcanvas/flowcanvas.recipe.js +1 -1
- package/dist/esm/product/inbox/inbox.recipe.js +1 -1
- package/dist/esm/product/listpage/listpage.recipe.js +1 -1
- package/dist/esm/product/onboarding/onboarding.recipe.js +1 -1
- package/dist/esm/product/recordpage/recordpage.recipe.js +2 -2
- package/dist/esm/product/recordpanel/recordpanel.recipe.js +1 -1
- package/dist/esm/product/recordstable/recordstable.recipe.js +2 -2
- package/dist/esm/product/recordstable/recordstable.tag.js +1 -1
- package/dist/esm/product/richtext/richtext.recipe.js +1 -1
- package/dist/esm/product/settingssection/settingssection.recipe.js +1 -1
- package/dist/esm/product/settingsshell/settingsshell.recipe.js +2 -2
- package/dist/esm/product/tasklist/tasklist.recipe.js +1 -1
- package/dist/esm/product/trialbanner/trialbanner.recipe.js +2 -2
- package/dist/esm/product/viewtoggle/viewtoggle.recipe.js +1 -1
- package/dist/fileupload.css +2 -2
- package/dist/recordpage.css +1 -1
- package/dist/recordstable.css +1 -1
- package/dist/settingsshell.css +1 -1
- package/dist/styles.css +12 -12
- package/dist/types/product/recordstable/recordstable.tag.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
3
|
import { toolbarChromeBody, toolbarChromeHead } from "./tabletoolbar.chrome.js";
|
|
4
|
-
//
|
|
4
|
+
// The table toolbar, measured: 28px controls, the Sort/Filter buttons and
|
|
5
5
|
// the menus they open, sort-condition rows, and the filter chips. The chrome
|
|
6
6
|
// itself lives in ./tabletoolbar.chrome.ts because RecordsTable renders the
|
|
7
7
|
// same measured surface under its own class prefix — one source, two prefixes,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
//
|
|
3
|
+
// Record-view tabs: a row of segmented tab buttons over a 1px baseline.
|
|
4
4
|
// The active tab is a light pill — bg #fbfbfb + inset ring borderSubtle, r8 —
|
|
5
5
|
// with a 2px ink underline that slides along the baseline; inactive tabs are
|
|
6
6
|
// muted and fill to a subtle pill on hover. Each tab carries a 16px leading icon
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c, elevation as e } from "../../tokens/index.js";
|
|
3
|
-
// A multiline text field, measured from
|
|
3
|
+
// A multiline text field, measured from a settings "Personal context" field: an
|
|
4
4
|
// inset 1px ring (radius 8), 14px text, 6/10 padding, and an optional character
|
|
5
5
|
// counter pinned bottom-right (12px, muted). Focus rings the field brand.
|
|
6
6
|
const config = defineRecipe({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// The floating bubble for a Tooltip —
|
|
3
|
+
// The floating bubble for a Tooltip — a dark hint chip. Applied to the
|
|
4
4
|
// portaled bubble itself (not a wrapper), so its styles survive the portal.
|
|
5
5
|
const config = defineRecipe({
|
|
6
6
|
name: "tooltip",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe, rtlFlipCss } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
3
|
// App-shell layout: a collapsible + resizable sidebar pane next to a main pane,
|
|
4
|
-
// mirroring
|
|
4
|
+
// mirroring a familiar app-window layout. The sidebar pane clips (never squishes)
|
|
5
5
|
// when collapsing, and a drag handle on its edge resizes it.
|
|
6
6
|
const config = defineRecipe({
|
|
7
7
|
name: "appshell",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
//
|
|
3
|
+
// A welcome/auth surface — measured live,
|
|
4
4
|
// 2026-09-15. A centered page frame holding a two-pane card: the form on the
|
|
5
5
|
// left, an optional product preview on the right, with an optional top
|
|
6
6
|
// progress bar and a footer under the card. Every value below is measured
|
|
7
7
|
// from the live app, EXCEPT the 1200px preview-hiding breakpoint (called out
|
|
8
|
-
// at the container query below) —
|
|
8
|
+
// at the container query below) — the pane drops out in JS somewhere between a
|
|
9
9
|
// measured 954px and 1393px viewport width, so 1200px is chosen, not measured.
|
|
10
10
|
const config = defineRecipe({
|
|
11
11
|
name: "authshell",
|
|
@@ -48,7 +48,7 @@ const config = defineRecipe({
|
|
|
48
48
|
& .authshell-body .button { height: 36px; padding-inline: ${c.space["3"]}; border-radius: 10px; }
|
|
49
49
|
& .authshell-body .button--intent_primary { box-shadow: inset 0 0 0 1px rgba(0,0,0,0.06), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08); }
|
|
50
50
|
|
|
51
|
-
/*
|
|
51
|
+
/* The preview pane drops out in JS on narrow viewports (measured: two
|
|
52
52
|
panes at 1393px, one at 954px), so 1200px is a chosen threshold inside
|
|
53
53
|
that bracket, not a measured value. A CONTAINER query, not a media
|
|
54
54
|
query: the shell is embedded in the docs inside an ~800px column, where
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A kanban board — measured from
|
|
3
|
+
// A kanban board — measured from a Deals pipeline: horizontally scrolling
|
|
4
4
|
// columns (dot + title + count header, a "New" button, a stack of draggable
|
|
5
5
|
// cards), with the hovered drop column highlighted.
|
|
6
6
|
const config = defineRecipe({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A note / entity card — measured from
|
|
3
|
+
// A note / entity card — measured from a Notes grid: a bordered white card
|
|
4
4
|
// with an author row (avatar + name) at the top, a title, a clamped excerpt,
|
|
5
5
|
// and a footer row (avatar + name … date). The whole card is clickable.
|
|
6
6
|
const config = defineRecipe({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A pannable, zoomable node canvas — measured from
|
|
3
|
+
// A pannable, zoomable node canvas — measured from a Workflows editor:
|
|
4
4
|
// a dotted-grid background, draggable node cards, and connecting edges with dots.
|
|
5
5
|
const config = defineRecipe({
|
|
6
6
|
name: "flowcanvas",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A notifications inbox panel — measured from
|
|
3
|
+
// A notifications inbox panel — measured from a notification flyout: a
|
|
4
4
|
// ~380px rounded panel with a title, "Notifications / Requests" tabs (with
|
|
5
5
|
// counts), then notification rows (avatar + message + time + unread dot) or a
|
|
6
6
|
// centred empty state. Drop it in a Popover for the flyout, or use standalone.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// The entity-list page shell — measured from
|
|
3
|
+
// The entity-list page shell — measured from Reports / Sequences / Tasks
|
|
4
4
|
// / Notes list views: a view-bar toolbar (leading Sort/Filter, trailing view
|
|
5
5
|
// toggle / settings / New, and a record count), an optional dashed "Favorites"
|
|
6
6
|
// region, then a list with column headers and time-grouped 52px rows.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// An onboarding checklist card — measured from
|
|
3
|
+
// An onboarding checklist card — measured from a floating "Getting started"
|
|
4
4
|
// widget: a title + menu/minimize header, a "N/total steps" subtitle, a
|
|
5
5
|
// segmented progress bar (filled pills brand, rest 4% ink), then step rows with
|
|
6
6
|
// an icon + label; completed rows strike through and show a brand check.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c, elevation as e } from "../../tokens/index.js";
|
|
3
|
-
// The full-page company record view
|
|
3
|
+
// The full-page company record view opened when you click into a record —
|
|
4
4
|
// measured from the live app. A slim top bar (breadcrumb · logo · name 16/600 ·
|
|
5
5
|
// actions), then a two-column body: a 320px left "Record Details" attribute
|
|
6
6
|
// column (transparent, border-right) and a flexible main area whose tab bar
|
|
@@ -50,7 +50,7 @@ const config = defineRecipe({
|
|
|
50
50
|
& .recordpage-section { padding-top: ${c.space["2"]}; }
|
|
51
51
|
& .recordpage-section-title { font-size: ${c.text.sm}; font-weight: ${c.weight.medium}; letter-spacing: -0.12px; color: color-mix(in srgb, ${c.fgPrimary} 63%, transparent); padding: ${c.space["1"]}; }
|
|
52
52
|
/* main-area section headers (Highlights / Activity / Emails / Notes / Tasks)
|
|
53
|
-
are 14px
|
|
53
|
+
are 14px; the left column's (Record Details / Lists) stay 12px. */
|
|
54
54
|
& .recordpage-main .recordpage-section-title { font-size: ${c.text.lg}; }
|
|
55
55
|
& .recordpage-detailhead { display: flex; align-items: center; gap: ${c.space["0.5"]}; margin-bottom: ${c.space["3"]}; padding-inline-end: ${c.space["0.5"]}; }
|
|
56
56
|
& .recordpage-collapse { display: inline-flex; align-items: center; gap: 2px; flex: 1; min-width: 0; margin: 0; border: none; background: none; padding: ${c.space["1"]}; border-radius: ${c.radius.md}; font-family: inherit; font-size: ${c.text.sm}; font-weight: ${c.weight.medium}; letter-spacing: -0.12px; color: ${c.fgMuted}; cursor: pointer; text-align: start; }
|
|
@@ -2,7 +2,7 @@ import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
|
2
2
|
import { contract as c, elevation as e } from "../../tokens/index.js";
|
|
3
3
|
import { recordTagCss } from "../recordstable/recordstable.tag.js";
|
|
4
4
|
// A right-side record peek panel — slides in over the main content to show one
|
|
5
|
-
// record's fields, the way
|
|
5
|
+
// record's fields, the way a row peek panel opens. Positioned absolutely inside a
|
|
6
6
|
// relative container (the app main area); slides in via @starting-style.
|
|
7
7
|
const config = defineRecipe({
|
|
8
8
|
name: "recordpanel",
|
|
@@ -2,7 +2,7 @@ import { toolbarChromeBody, toolbarChromeHead, } from "../../components/tabletoo
|
|
|
2
2
|
import { defineRecipe, resolveRecipe, rtlFlipCss } from "../../core/index.js";
|
|
3
3
|
import { contract as c } from "../../tokens/index.js";
|
|
4
4
|
import { recordTagCss } from "./recordstable.tag.js";
|
|
5
|
-
//
|
|
5
|
+
// A record grid, measured: 36px rows, 1px borderSubtle (#eeeff1) grid
|
|
6
6
|
// lines on BOTH axes, sticky checkbox + entity (first) columns, entity = 16px
|
|
7
7
|
// avatar + 14px/500 name, 28px toolbar controls, a floating bulk-action bar.
|
|
8
8
|
//
|
|
@@ -112,7 +112,7 @@ ${toolbarChromeBody("recordstable")}
|
|
|
112
112
|
/* box-shadow has no logical form either: the bleed follows the scrolled
|
|
113
113
|
content, which is the opposite side under RTL. */
|
|
114
114
|
[dir="rtl"] & .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
115
|
-
/* AI-enriched values carry a purple wash. Measured
|
|
115
|
+
/* AI-enriched values carry a purple wash. Measured live:
|
|
116
116
|
a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
|
|
117
117
|
whatever row-state background the cell already has, which is why it
|
|
118
118
|
is an ::after and not a background. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { contract as c } from "../../tokens/index.js";
|
|
2
2
|
/**
|
|
3
|
-
* The record tag/chip, measured
|
|
3
|
+
* The record tag/chip, measured live: 22px tall, `padding: 0 4px`,
|
|
4
4
|
* `border-radius: ${c.radius.chip}`, 14px/20px at weight 500, and a 1px inset ring in the
|
|
5
5
|
* tone's colour.
|
|
6
6
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A block rich-text editor — measured from
|
|
3
|
+
// A block rich-text editor — measured from a Notes editor: a large 32/36
|
|
4
4
|
// title, a 14/20 prose body (headings, lists, quote, code, marks, links), and a
|
|
5
5
|
// floating selection toolbar. Built on contentEditable so it stays dependency-
|
|
6
6
|
// free. Placeholders show via [data-empty]::before.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A settings section — measured from
|
|
3
|
+
// A settings section — measured from Settings pages: a 16px/600 title
|
|
4
4
|
// with an optional subtitle, then a stack of rows (form fields, toggles…). Rows
|
|
5
5
|
// gap evenly; an optional trailing action sits on the title row.
|
|
6
6
|
const config = defineRecipe({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe, rtlFlipCss } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// The Settings layout — measured from
|
|
3
|
+
// The Settings layout — measured from a Settings screen: a 256px left nav with a
|
|
4
4
|
// back header, a search field, and grouped nav items (active row raised), beside
|
|
5
5
|
// a scrolling content pane. Sits inside whatever height its container gives it.
|
|
6
6
|
const config = defineRecipe({
|
|
@@ -15,7 +15,7 @@ const config = defineRecipe({
|
|
|
15
15
|
|
|
16
16
|
& .settingsshell-search { display: flex; align-items: center; gap: ${c.space["2"]}; height: 32px; margin-bottom: ${c.space["2"]}; padding: 0 ${c.space["2.5"]}; border-radius: ${c.radius.md}; background: ${c.bgSurface}; box-shadow: inset 0 0 0 1px ${c.borderDefault}; color: ${c.fgMuted}; }
|
|
17
17
|
/* The field box owns the ring, so focus has to move it -- the inner
|
|
18
|
-
input kills its own outline. Measured
|
|
18
|
+
input kills its own outline. Measured live: a focused field's
|
|
19
19
|
input carries box-shadow: none while its wrapper carries
|
|
20
20
|
inset 0 0 0 1px #266df0. */
|
|
21
21
|
& .settingsshell-search:focus-within { box-shadow: inset 0 0 0 1px ${c.bgBrandSolid}; }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A task list — measured from
|
|
3
|
+
// A task list — measured from a Tasks page: optional group headers, then
|
|
4
4
|
// rows of a round complete-checkbox + title + trailing meta (due date, record,
|
|
5
5
|
// assignee). Completed rows strike through; overdue due-dates go red.
|
|
6
6
|
const config = defineRecipe({
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c, elevation as e } from "../../tokens/index.js";
|
|
3
|
-
// A compact trial / upgrade banner — measured from
|
|
3
|
+
// A compact trial / upgrade banner — measured from a sidebar footer: an
|
|
4
4
|
// icon + a message on the left and a small action pill on the right, in a 28px
|
|
5
|
-
// row. The action uses
|
|
5
|
+
// row. The action uses the measured soft-glow outlined-button shadow.
|
|
6
6
|
const config = defineRecipe({
|
|
7
7
|
name: "trialbanner",
|
|
8
8
|
base: `display: flex; align-items: center; gap: ${c.space["1.5"]}; box-sizing: border-box; min-height: 28px;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineRecipe, resolveRecipe } from "../../core/index.js";
|
|
2
2
|
import { contract as c } from "../../tokens/index.js";
|
|
3
|
-
// A compact icon toggle — measured from
|
|
3
|
+
// A compact icon toggle — measured from a list/grid switch: a 28px track
|
|
4
4
|
// (radius 10, ~5% ink) padded 2px, holding 24px icon tiles (radius 8). The
|
|
5
5
|
// selected tile gets a raised surface with a soft shadow.
|
|
6
6
|
const config = defineRecipe({
|
package/dist/fileupload.css
CHANGED
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
& .fileupload-zone[data-disabled] { opacity: .5; cursor: not-allowed; }
|
|
24
24
|
& .fileupload-zone[data-invalid] { border-color: var(--bg-danger); }
|
|
25
25
|
|
|
26
|
-
/*
|
|
26
|
+
/* "No files" 16/20 weight 600 */
|
|
27
27
|
& .fileupload-title {
|
|
28
28
|
color: var(--fg-primary); font-size: var(--text-xl); line-height: 20px;
|
|
29
29
|
font-weight: var(--weight-semibold);
|
|
30
30
|
}
|
|
31
|
-
/*
|
|
31
|
+
/* The hint line, 14/20 weight 500 at 63% of the foreground */
|
|
32
32
|
& .fileupload-hint {
|
|
33
33
|
color: color-mix(in srgb, var(--fg-primary) 63%, transparent);
|
|
34
34
|
font-size: var(--text-lg); line-height: 20px;
|
package/dist/recordpage.css
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
& .recordpage-section { padding-top: var(--space-2); }
|
|
42
42
|
& .recordpage-section-title { font-size: var(--text-sm); font-weight: var(--weight-medium); letter-spacing: -0.12px; color: color-mix(in srgb, var(--fg-primary) 63%, transparent); padding: var(--space-1); }
|
|
43
43
|
/* main-area section headers (Highlights / Activity / Emails / Notes / Tasks)
|
|
44
|
-
are 14px
|
|
44
|
+
are 14px; the left column's (Record Details / Lists) stay 12px. */
|
|
45
45
|
& .recordpage-main .recordpage-section-title { font-size: var(--text-lg); }
|
|
46
46
|
& .recordpage-detailhead { display: flex; align-items: center; gap: var(--space-0-5); margin-bottom: var(--space-3); padding-inline-end: var(--space-0-5); }
|
|
47
47
|
& .recordpage-collapse { display: inline-flex; align-items: center; gap: 2px; flex: 1; min-width: 0; margin: 0; border: none; background: none; padding: var(--space-1); border-radius: var(--radius-md); font-family: inherit; font-size: var(--text-sm); font-weight: var(--weight-medium); letter-spacing: -0.12px; color: var(--fg-muted); cursor: pointer; text-align: start; }
|
package/dist/recordstable.css
CHANGED
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
/* box-shadow has no logical form either: the bleed follows the scrolled
|
|
168
168
|
content, which is the opposite side under RTL. */
|
|
169
169
|
[dir="rtl"] & .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
170
|
-
/* AI-enriched values carry a purple wash. Measured
|
|
170
|
+
/* AI-enriched values carry a purple wash. Measured live:
|
|
171
171
|
a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
|
|
172
172
|
whatever row-state background the cell already has, which is why it
|
|
173
173
|
is an ::after and not a background. */
|
package/dist/settingsshell.css
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
& .settingsshell-search { display: flex; align-items: center; gap: var(--space-2); height: 32px; margin-bottom: var(--space-2); padding: 0 var(--space-2-5); border-radius: var(--radius-md); background: var(--bg-surface); box-shadow: inset 0 0 0 1px var(--border-default); color: var(--fg-muted); }
|
|
11
11
|
/* The field box owns the ring, so focus has to move it -- the inner
|
|
12
|
-
input kills its own outline. Measured
|
|
12
|
+
input kills its own outline. Measured live: a focused field's
|
|
13
13
|
input carries box-shadow: none while its wrapper carries
|
|
14
14
|
inset 0 0 0 1px #266df0. */
|
|
15
15
|
& .settingsshell-search:focus-within { box-shadow: inset 0 0 0 1px var(--bg-brand-solid); }
|
package/dist/styles.css
CHANGED
|
@@ -415,7 +415,7 @@
|
|
|
415
415
|
shrink the button back to its text. Make the wrapper fill too, so the
|
|
416
416
|
whole cell stays clickable. */
|
|
417
417
|
& .menu { width: 100%; height: 100%; }
|
|
418
|
-
/*
|
|
418
|
+
/* The hit target is the WHOLE summary cell -- measured 246x37 with
|
|
419
419
|
padding 0 12px, not a content-sized chip. Clicking anywhere in the cell
|
|
420
420
|
opens the aggregation menu. */
|
|
421
421
|
& .columncalc-trigger { display: flex; align-items: center; gap: var(--space-1); width: 100%; height: 100%; min-height: var(--size-tableRow); margin: 0; padding: 0 var(--space-3); border: none; border-radius: var(--radius-md); background: transparent; color: var(--fg-muted); font-family: inherit; font-size: var(--text-md); font-weight: var(--weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
|
|
@@ -466,7 +466,7 @@
|
|
|
466
466
|
& .datatable-search input::placeholder { color: var(--fg-muted); }
|
|
467
467
|
& .datatable-search input:focus { box-shadow: inset 0 0 0 1px var(--bg-brand-solid); }
|
|
468
468
|
& .datatable-count { margin-inline-start: auto; font-size: var(--text-md); color: var(--fg-muted); }
|
|
469
|
-
/*
|
|
469
|
+
/* The header cell has no padding of its own -- the button owns the
|
|
470
470
|
full cell so the whole header is clickable (its own inset is 12px).
|
|
471
471
|
Mirrors the summary-row fix. */
|
|
472
472
|
& th { padding: 0; }
|
|
@@ -480,11 +480,11 @@
|
|
|
480
480
|
& th .menu { width: 100%; height: 100%; }
|
|
481
481
|
& .datatable-th-inner { display: inline-flex; align-items: center; gap: var(--space-1-5); width: 100%; min-width: 0; height: 100%; }
|
|
482
482
|
& .datatable-th-inner > svg { flex-shrink: 0; color: var(--fg-muted); }
|
|
483
|
-
/*
|
|
483
|
+
/* The summary cell has NO padding of its own -- the calculation trigger
|
|
484
484
|
owns the whole 246x37 area so a click anywhere in the cell opens the
|
|
485
485
|
menu. Zero the cell's inset and let ColumnCalc supply the 12px. */
|
|
486
486
|
& tfoot td { padding: 0; }
|
|
487
|
-
/* Group heading row --
|
|
487
|
+
/* Group heading row -- a view is grouped under a subtle label with the
|
|
488
488
|
bucket's count beside it. */
|
|
489
489
|
& .datatable-viewsettings { display: inline-flex; align-items: center; gap: var(--space-1-5); height: var(--size-row); margin: 0; padding: 0 var(--space-2); border: none; border-radius: var(--radius-md); background: transparent; color: var(--fg-muted); font-family: inherit; font-size: var(--text-md); font-weight: var(--weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
|
|
490
490
|
& .datatable-viewsettings:hover { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); color: var(--fg-primary); }
|
|
@@ -542,13 +542,13 @@
|
|
|
542
542
|
& .datatable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--bg-orange) 16%, transparent); color: color-mix(in srgb, var(--bg-orange) 82%, var(--fg-primary)); }
|
|
543
543
|
& .datatable-num { font-variant-numeric: tabular-nums; }
|
|
544
544
|
& .datatable-muted { color: var(--fg-muted); }
|
|
545
|
-
/* row drag-to-reorder --
|
|
545
|
+
/* row drag-to-reorder -- a Settings > Objects > Attributes screen measures
|
|
546
546
|
a leading 20px grip column, a 16px grip icon, and the row's own
|
|
547
547
|
hairline doubling as the drop indicator (it tints toward the brand
|
|
548
548
|
colour as the active drop target). The affordance + geometry are
|
|
549
549
|
measured; the drag MECHANISM is crisp's existing house idiom -- HTML5
|
|
550
550
|
draggable + dataTransfer, the same one column reorder already uses
|
|
551
|
-
(RecordsTable's reorderColumn) -- not
|
|
551
|
+
(RecordsTable's reorderColumn) -- not a proprietary
|
|
552
552
|
pointer-events implementation. */
|
|
553
553
|
& .datatable-col-grip { width: 20px; padding: 0; text-align: center; }
|
|
554
554
|
& .datatable-grip { display: inline-flex; align-items: center; justify-content: center; width: 100%; height: 100%; margin: 0; border: none; border-radius: 0; background: none; font-family: inherit; color: var(--fg-muted); cursor: grab; }
|
|
@@ -901,12 +901,12 @@
|
|
|
901
901
|
& .fileupload-zone[data-disabled] { opacity: .5; cursor: not-allowed; }
|
|
902
902
|
& .fileupload-zone[data-invalid] { border-color: var(--bg-danger); }
|
|
903
903
|
|
|
904
|
-
/*
|
|
904
|
+
/* "No files" 16/20 weight 600 */
|
|
905
905
|
& .fileupload-title {
|
|
906
906
|
color: var(--fg-primary); font-size: var(--text-xl); line-height: 20px;
|
|
907
907
|
font-weight: var(--weight-semibold);
|
|
908
908
|
}
|
|
909
|
-
/*
|
|
909
|
+
/* The hint line, 14/20 weight 500 at 63% of the foreground */
|
|
910
910
|
& .fileupload-hint {
|
|
911
911
|
color: color-mix(in srgb, var(--fg-primary) 63%, transparent);
|
|
912
912
|
font-size: var(--text-lg); line-height: 20px;
|
|
@@ -1926,7 +1926,7 @@
|
|
|
1926
1926
|
& .authshell-body .button { height: 36px; padding-inline: var(--space-3); border-radius: 10px; }
|
|
1927
1927
|
& .authshell-body .button--intent_primary { box-shadow: inset 0 0 0 1px rgba(0,0,0,0.06), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08); }
|
|
1928
1928
|
|
|
1929
|
-
/*
|
|
1929
|
+
/* The preview pane drops out in JS on narrow viewports (measured: two
|
|
1930
1930
|
panes at 1393px, one at 954px), so 1200px is a chosen threshold inside
|
|
1931
1931
|
that bracket, not a measured value. A CONTAINER query, not a media
|
|
1932
1932
|
query: the shell is embedded in the docs inside an ~800px column, where
|
|
@@ -2248,7 +2248,7 @@
|
|
|
2248
2248
|
& .recordpage-section { padding-top: var(--space-2); }
|
|
2249
2249
|
& .recordpage-section-title { font-size: var(--text-sm); font-weight: var(--weight-medium); letter-spacing: -0.12px; color: color-mix(in srgb, var(--fg-primary) 63%, transparent); padding: var(--space-1); }
|
|
2250
2250
|
/* main-area section headers (Highlights / Activity / Emails / Notes / Tasks)
|
|
2251
|
-
are 14px
|
|
2251
|
+
are 14px; the left column's (Record Details / Lists) stay 12px. */
|
|
2252
2252
|
& .recordpage-main .recordpage-section-title { font-size: var(--text-lg); }
|
|
2253
2253
|
& .recordpage-detailhead { display: flex; align-items: center; gap: var(--space-0-5); margin-bottom: var(--space-3); padding-inline-end: var(--space-0-5); }
|
|
2254
2254
|
& .recordpage-collapse { display: inline-flex; align-items: center; gap: 2px; flex: 1; min-width: 0; margin: 0; border: none; background: none; padding: var(--space-1); border-radius: var(--radius-md); font-family: inherit; font-size: var(--text-sm); font-weight: var(--weight-medium); letter-spacing: -0.12px; color: var(--fg-muted); cursor: pointer; text-align: start; }
|
|
@@ -2575,7 +2575,7 @@
|
|
|
2575
2575
|
/* box-shadow has no logical form either: the bleed follows the scrolled
|
|
2576
2576
|
content, which is the opposite side under RTL. */
|
|
2577
2577
|
[dir="rtl"] & .recordstable-scroll[data-scrolled] .recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
|
|
2578
|
-
/* AI-enriched values carry a purple wash. Measured
|
|
2578
|
+
/* AI-enriched values carry a purple wash. Measured live:
|
|
2579
2579
|
a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
|
|
2580
2580
|
whatever row-state background the cell already has, which is why it
|
|
2581
2581
|
is an ::after and not a background. */
|
|
@@ -2685,7 +2685,7 @@
|
|
|
2685
2685
|
|
|
2686
2686
|
& .settingsshell-search { display: flex; align-items: center; gap: var(--space-2); height: 32px; margin-bottom: var(--space-2); padding: 0 var(--space-2-5); border-radius: var(--radius-md); background: var(--bg-surface); box-shadow: inset 0 0 0 1px var(--border-default); color: var(--fg-muted); }
|
|
2687
2687
|
/* The field box owns the ring, so focus has to move it -- the inner
|
|
2688
|
-
input kills its own outline. Measured
|
|
2688
|
+
input kills its own outline. Measured live: a focused field's
|
|
2689
2689
|
input carries box-shadow: none while its wrapper carries
|
|
2690
2690
|
inset 0 0 0 1px #266df0. */
|
|
2691
2691
|
& .settingsshell-search:focus-within { box-shadow: inset 0 0 0 1px var(--bg-brand-solid); }
|