@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.
Files changed (116) hide show
  1. package/dist/authshell.css +1 -1
  2. package/dist/cjs/components/accordion/accordion.recipe.js +1 -1
  3. package/dist/cjs/components/barchart/barchart.recipe.js +1 -1
  4. package/dist/cjs/components/breadcrumb/breadcrumb.recipe.js +1 -1
  5. package/dist/cjs/components/bulkbar/bulkbar.recipe.js +1 -1
  6. package/dist/cjs/components/callout/callout.recipe.js +1 -1
  7. package/dist/cjs/components/checkbox/checkbox.recipe.js +1 -1
  8. package/dist/cjs/components/columncalc/columncalc.recipe.js +2 -2
  9. package/dist/cjs/components/datatable/datatable.recipe.js +5 -5
  10. package/dist/cjs/components/datepicker/datepicker.recipe.js +3 -3
  11. package/dist/cjs/components/datepickerfield/datepickerfield.recipe.js +2 -2
  12. package/dist/cjs/components/dialog/dialog.recipe.js +1 -1
  13. package/dist/cjs/components/donutchart/donutchart.recipe.js +1 -1
  14. package/dist/cjs/components/emptystate/emptystate.recipe.js +2 -2
  15. package/dist/cjs/components/fileupload/fileupload.recipe.js +6 -6
  16. package/dist/cjs/components/formfield/formfield.recipe.js +1 -1
  17. package/dist/cjs/components/input/input.recipe.js +1 -1
  18. package/dist/cjs/components/linechart/linechart.recipe.js +1 -1
  19. package/dist/cjs/components/menu/menu.recipe.js +2 -2
  20. package/dist/cjs/components/multiselect/multiselect.recipe.js +1 -1
  21. package/dist/cjs/components/progress/progress.recipe.js +1 -1
  22. package/dist/cjs/components/quantitypicker/quantitypicker.recipe.js +2 -2
  23. package/dist/cjs/components/radiogroup/radiogroup.recipe.js +1 -1
  24. package/dist/cjs/components/resizablepanel/resizablepanel.recipe.js +2 -2
  25. package/dist/cjs/components/segmented/segmented.recipe.js +1 -1
  26. package/dist/cjs/components/select/select.recipe.js +2 -2
  27. package/dist/cjs/components/slider/slider.recipe.js +2 -2
  28. package/dist/cjs/components/stagebar/stagebar.recipe.js +1 -1
  29. package/dist/cjs/components/statcard/statcard.recipe.js +2 -2
  30. package/dist/cjs/components/switch/switch.recipe.js +1 -1
  31. package/dist/cjs/components/table/table.recipe.js +1 -1
  32. package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +2 -2
  33. package/dist/cjs/components/tabletoolbar/tabletoolbar.recipe.js +1 -1
  34. package/dist/cjs/components/tabs/tabs.recipe.js +1 -1
  35. package/dist/cjs/components/textarea/textarea.recipe.js +1 -1
  36. package/dist/cjs/components/tooltip/tooltip.recipe.js +1 -1
  37. package/dist/cjs/product/appshell/appshell.recipe.js +1 -1
  38. package/dist/cjs/product/authshell/authshell.recipe.js +3 -3
  39. package/dist/cjs/product/board/board.recipe.js +1 -1
  40. package/dist/cjs/product/entitycard/entitycard.recipe.js +1 -1
  41. package/dist/cjs/product/flowcanvas/flowcanvas.recipe.js +1 -1
  42. package/dist/cjs/product/inbox/inbox.recipe.js +1 -1
  43. package/dist/cjs/product/listpage/listpage.recipe.js +1 -1
  44. package/dist/cjs/product/onboarding/onboarding.recipe.js +1 -1
  45. package/dist/cjs/product/recordpage/recordpage.recipe.js +2 -2
  46. package/dist/cjs/product/recordpanel/recordpanel.recipe.js +1 -1
  47. package/dist/cjs/product/recordstable/recordstable.recipe.js +2 -2
  48. package/dist/cjs/product/recordstable/recordstable.tag.js +1 -1
  49. package/dist/cjs/product/richtext/richtext.recipe.js +1 -1
  50. package/dist/cjs/product/settingssection/settingssection.recipe.js +1 -1
  51. package/dist/cjs/product/settingsshell/settingsshell.recipe.js +2 -2
  52. package/dist/cjs/product/tasklist/tasklist.recipe.js +1 -1
  53. package/dist/cjs/product/trialbanner/trialbanner.recipe.js +2 -2
  54. package/dist/cjs/product/viewtoggle/viewtoggle.recipe.js +1 -1
  55. package/dist/columncalc.css +1 -1
  56. package/dist/datatable.css +5 -5
  57. package/dist/esm/components/accordion/accordion.recipe.js +1 -1
  58. package/dist/esm/components/barchart/barchart.recipe.js +1 -1
  59. package/dist/esm/components/breadcrumb/breadcrumb.recipe.js +1 -1
  60. package/dist/esm/components/bulkbar/bulkbar.recipe.js +1 -1
  61. package/dist/esm/components/callout/callout.recipe.js +1 -1
  62. package/dist/esm/components/checkbox/checkbox.recipe.js +1 -1
  63. package/dist/esm/components/columncalc/columncalc.recipe.js +2 -2
  64. package/dist/esm/components/datatable/datatable.recipe.js +5 -5
  65. package/dist/esm/components/datepicker/datepicker.recipe.js +3 -3
  66. package/dist/esm/components/datepickerfield/datepickerfield.recipe.js +2 -2
  67. package/dist/esm/components/dialog/dialog.recipe.js +1 -1
  68. package/dist/esm/components/donutchart/donutchart.recipe.js +1 -1
  69. package/dist/esm/components/emptystate/emptystate.recipe.js +2 -2
  70. package/dist/esm/components/fileupload/fileupload.recipe.js +6 -6
  71. package/dist/esm/components/formfield/formfield.recipe.js +1 -1
  72. package/dist/esm/components/input/input.recipe.js +1 -1
  73. package/dist/esm/components/linechart/linechart.recipe.js +1 -1
  74. package/dist/esm/components/menu/menu.recipe.js +2 -2
  75. package/dist/esm/components/multiselect/multiselect.recipe.js +1 -1
  76. package/dist/esm/components/progress/progress.recipe.js +1 -1
  77. package/dist/esm/components/quantitypicker/quantitypicker.recipe.js +2 -2
  78. package/dist/esm/components/radiogroup/radiogroup.recipe.js +1 -1
  79. package/dist/esm/components/resizablepanel/resizablepanel.recipe.js +2 -2
  80. package/dist/esm/components/segmented/segmented.recipe.js +1 -1
  81. package/dist/esm/components/select/select.recipe.js +2 -2
  82. package/dist/esm/components/slider/slider.recipe.js +2 -2
  83. package/dist/esm/components/stagebar/stagebar.recipe.js +1 -1
  84. package/dist/esm/components/statcard/statcard.recipe.js +2 -2
  85. package/dist/esm/components/switch/switch.recipe.js +1 -1
  86. package/dist/esm/components/table/table.recipe.js +1 -1
  87. package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +2 -2
  88. package/dist/esm/components/tabletoolbar/tabletoolbar.recipe.js +1 -1
  89. package/dist/esm/components/tabs/tabs.recipe.js +1 -1
  90. package/dist/esm/components/textarea/textarea.recipe.js +1 -1
  91. package/dist/esm/components/tooltip/tooltip.recipe.js +1 -1
  92. package/dist/esm/product/appshell/appshell.recipe.js +1 -1
  93. package/dist/esm/product/authshell/authshell.recipe.js +3 -3
  94. package/dist/esm/product/board/board.recipe.js +1 -1
  95. package/dist/esm/product/entitycard/entitycard.recipe.js +1 -1
  96. package/dist/esm/product/flowcanvas/flowcanvas.recipe.js +1 -1
  97. package/dist/esm/product/inbox/inbox.recipe.js +1 -1
  98. package/dist/esm/product/listpage/listpage.recipe.js +1 -1
  99. package/dist/esm/product/onboarding/onboarding.recipe.js +1 -1
  100. package/dist/esm/product/recordpage/recordpage.recipe.js +2 -2
  101. package/dist/esm/product/recordpanel/recordpanel.recipe.js +1 -1
  102. package/dist/esm/product/recordstable/recordstable.recipe.js +2 -2
  103. package/dist/esm/product/recordstable/recordstable.tag.js +1 -1
  104. package/dist/esm/product/richtext/richtext.recipe.js +1 -1
  105. package/dist/esm/product/settingssection/settingssection.recipe.js +1 -1
  106. package/dist/esm/product/settingsshell/settingsshell.recipe.js +2 -2
  107. package/dist/esm/product/tasklist/tasklist.recipe.js +1 -1
  108. package/dist/esm/product/trialbanner/trialbanner.recipe.js +2 -2
  109. package/dist/esm/product/viewtoggle/viewtoggle.recipe.js +1 -1
  110. package/dist/fileupload.css +2 -2
  111. package/dist/recordpage.css +1 -1
  112. package/dist/recordstable.css +1 -1
  113. package/dist/settingsshell.css +1 -1
  114. package/dist/styles.css +12 -12
  115. package/dist/types/product/recordstable/recordstable.tag.d.ts +1 -1
  116. 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
- // Attio's table toolbar, measured: 28px controls, the Sort/Filter buttons and
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
- // Attio's record-view tabs: a row of segmented tab buttons over a 1px baseline.
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 Attio's settings "Personal context": an
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 — Attio's dark hint chip. Applied to the
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 how Attio's window works. The sidebar pane clips (never squishes)
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
- // Attio's welcome/auth surface (app.attio.com/welcome/*) — measured live,
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) — Attio drops the pane in JS somewhere between a
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
- /* Attio drops the preview pane in JS on narrow viewports (measured: two
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 Attio's Deals pipeline: horizontally scrolling
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 Attio's Notes grid: a bordered white card
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 Attio's Workflows editor:
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 Attio's notification flyout: a
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 Attio's Reports / Sequences / Tasks
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 Attio's floating "Getting started"
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 Attio opens when you click into a record —
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 in Attio; the left column's (Record Details / Lists) stay 12px. */
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 Attio opens a row. Positioned absolutely inside a
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
- // Attio's record grid, measured: 36px rows, 1px borderSubtle (#eeeff1) grid
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 from Attio:
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 from Attio: 22px tall, `padding: 0 4px`,
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 Attio's Notes editor: a large 32/36
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 Attio's Settings pages: a 16px/600 title
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 Attio's Settings: a 256px left nav with a
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 on Attio: a focused field's
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 Attio's Tasks page: optional group headers, then
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 Attio's sidebar footer: an
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 Attio's soft-glow outlined-button shadow.
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 Attio's list/grid switch: a 28px track
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({
@@ -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
- /* Attio: "No files" 16/20 weight 600 */
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
- /* Attio: the hint line, 14/20 weight 500 at 63% of the foreground */
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;
@@ -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 in Attio; the left column's (Record Details / Lists) stay 12px. */
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; }
@@ -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 from Attio:
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. */
@@ -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 on Attio: a focused field's
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
- /* Attio's hit target is the WHOLE summary cell -- measured 246x37 with
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
- /* Attio's header cell has no padding of its own -- the button owns the
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
- /* Attio's summary cell has NO padding of its own -- the calculation trigger
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 -- Attio groups a view under a subtle label with the
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 -- Attio's Settings > Objects > Attributes measures
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 Attio's own proprietary
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
- /* Attio: "No files" 16/20 weight 600 */
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
- /* Attio: the hint line, 14/20 weight 500 at 63% of the foreground */
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
- /* Attio drops the preview pane in JS on narrow viewports (measured: two
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 in Attio; the left column's (Record Details / Lists) stay 12px. */
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 from Attio:
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 on Attio: a focused field's
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); }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The record tag/chip, measured from Attio: 22px tall, `padding: 0 4px`,
2
+ * The record tag/chip, measured live: 22px tall, `padding: 0 4px`,
3
3
  * `border-radius: ${c.radius.chip}`, 14px/20px at weight 500, and a 1px inset ring in the
4
4
  * tone's colour.
5
5
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crisp-ui-kit/crisp",
3
- "version": "0.31.4",
3
+ "version": "0.31.5",
4
4
  "description": "A lean React design system, measured pixel-for-pixel from Attio.",
5
5
  "license": "MIT",
6
6
  "type": "module",