@ciridae/ui 1.0.2 → 1.0.4

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 (209) hide show
  1. package/dist/app/auth.d.ts +10 -0
  2. package/dist/app/auth.js +60 -0
  3. package/dist/app/error-boundary.d.ts +18 -0
  4. package/dist/app/error-boundary.js +45 -0
  5. package/dist/app/feedback.d.ts +12 -0
  6. package/dist/app/feedback.js +128 -0
  7. package/dist/app/index.d.ts +8 -0
  8. package/dist/app/index.js +8 -0
  9. package/dist/app/request-errors.d.ts +63 -0
  10. package/dist/app/request-errors.js +172 -0
  11. package/dist/app/sentry.d.ts +18 -0
  12. package/dist/app/sentry.js +52 -0
  13. package/dist/app/telemetry.d.ts +7 -0
  14. package/dist/app/telemetry.js +28 -0
  15. package/dist/app/trail.d.ts +9 -0
  16. package/dist/app/trail.js +18 -0
  17. package/dist/chat/chat-query-keys.d.ts +3 -3
  18. package/dist/chat/contract.d.ts +15 -15
  19. package/dist/chat/conversation-items-query-options.d.ts +114 -114
  20. package/dist/chat/conversation-source.d.ts +89 -0
  21. package/dist/chat/conversation-source.js +1 -0
  22. package/dist/chat/describe-tool-call.d.ts +3 -3
  23. package/dist/chat/describe-tool-call.js +3 -3
  24. package/dist/chat/message-text.d.ts +1 -1
  25. package/dist/chat/message-text.js +116 -48
  26. package/dist/chat/use-conversation-list.d.ts +6 -6
  27. package/dist/ciridae.css +16 -4
  28. package/dist/components/activity-feed.d.ts +3 -2
  29. package/dist/components/activity-feed.js +1 -0
  30. package/dist/components/agent-work.d.ts +3 -3
  31. package/dist/components/app-frame.d.ts +91 -0
  32. package/dist/components/app-frame.js +134 -0
  33. package/dist/components/app-navigation.d.ts +30 -3
  34. package/dist/components/app-navigation.js +105 -14
  35. package/dist/components/badge.d.ts +30 -5
  36. package/dist/components/badge.js +134 -15
  37. package/dist/components/brand-icons.d.ts +3 -3
  38. package/dist/components/bulk-action-bar.d.ts +1 -1
  39. package/dist/components/bulk-action-bar.js +3 -3
  40. package/dist/components/button.d.ts +12 -5
  41. package/dist/components/button.js +77 -44
  42. package/dist/components/calendar.d.ts +1 -1
  43. package/dist/components/calendar.js +44 -17
  44. package/dist/components/centered-page.d.ts +1 -1
  45. package/dist/components/centered-page.js +2 -2
  46. package/dist/components/chart.d.ts +22 -2
  47. package/dist/components/chart.js +251 -51
  48. package/dist/components/chat-client-source.d.ts +16 -0
  49. package/dist/components/chat-client-source.js +297 -0
  50. package/dist/components/chat-page.d.ts +9 -8
  51. package/dist/components/chat-page.js +7 -11
  52. package/dist/components/chat-sheet-controller.d.ts +11 -14
  53. package/dist/components/chat-sheet-controller.js +3 -3
  54. package/dist/components/chat-sheet.d.ts +18 -11
  55. package/dist/components/chat-sheet.js +188 -289
  56. package/dist/components/chat.d.ts +109 -19
  57. package/dist/components/chat.js +520 -124
  58. package/dist/components/checkbox-item.d.ts +6 -3
  59. package/dist/components/checkbox-item.js +9 -5
  60. package/dist/components/checkbox-list.d.ts +1 -1
  61. package/dist/components/chip.d.ts +6 -1
  62. package/dist/components/chip.js +27 -1
  63. package/dist/components/collapsible.d.ts +1 -1
  64. package/dist/components/color-theme.d.ts +1 -1
  65. package/dist/components/column-settings.d.ts +1 -1
  66. package/dist/components/column-settings.js +1 -1
  67. package/dist/components/command-menu.d.ts +5 -1
  68. package/dist/components/command-menu.js +98 -32
  69. package/dist/components/command-palette.d.ts +7 -3
  70. package/dist/components/command-palette.js +20 -11
  71. package/dist/components/copyable-id.d.ts +22 -5
  72. package/dist/components/copyable-id.js +46 -6
  73. package/dist/components/data-display.d.ts +39 -8
  74. package/dist/components/data-display.js +138 -19
  75. package/dist/components/data-grid.d.ts +23 -11
  76. package/dist/components/data-grid.js +61 -26
  77. package/dist/components/date-range-picker.d.ts +1 -1
  78. package/dist/components/date-range-picker.js +9 -20
  79. package/dist/components/date-time.d.ts +1 -1
  80. package/dist/components/dialog-height-context.d.ts +1 -1
  81. package/dist/components/document-viewer.d.ts +2 -2
  82. package/dist/components/drawer.d.ts +11 -6
  83. package/dist/components/drawer.js +91 -54
  84. package/dist/components/dropzone.d.ts +4 -4
  85. package/dist/components/editable-field.d.ts +12 -3
  86. package/dist/components/editable-field.js +57 -27
  87. package/dist/components/email-input.d.ts +1 -1
  88. package/dist/components/email-input.js +6 -5
  89. package/dist/components/environment-frame.d.ts +2 -2
  90. package/dist/components/environment-frame.js +37 -6
  91. package/dist/components/expandable-text.d.ts +1 -1
  92. package/dist/components/feedback-screenshot.d.ts +1 -1
  93. package/dist/components/feedback-sheet.d.ts +18 -3
  94. package/dist/components/feedback-sheet.js +216 -55
  95. package/dist/components/field-context.d.ts +1 -1
  96. package/dist/components/filter-bar.d.ts +3 -3
  97. package/dist/components/filter-bar.js +43 -29
  98. package/dist/components/form-controls.d.ts +12 -3
  99. package/dist/components/form-controls.js +46 -22
  100. package/dist/components/form-layout.d.ts +14 -10
  101. package/dist/components/form-layout.js +68 -23
  102. package/dist/components/glass-menu.d.ts +3 -0
  103. package/dist/components/glass-menu.js +63 -0
  104. package/dist/components/gradient-edge.d.ts +9 -0
  105. package/dist/components/gradient-edge.js +31 -0
  106. package/dist/components/hotkeys.d.ts +2 -2
  107. package/dist/components/icon.d.ts +1 -1
  108. package/dist/components/input.d.ts +7 -5
  109. package/dist/components/input.js +29 -17
  110. package/dist/components/keyboard-shortcuts.d.ts +2 -2
  111. package/dist/components/keycap.d.ts +10 -6
  112. package/dist/components/keycap.js +57 -19
  113. package/dist/components/layout.d.ts +13 -13
  114. package/dist/components/lightbox.d.ts +9 -3
  115. package/dist/components/lightbox.js +13 -9
  116. package/dist/components/link.d.ts +1 -1
  117. package/dist/components/locale.d.ts +42 -2
  118. package/dist/components/locale.js +43 -3
  119. package/dist/components/log-entry.d.ts +40 -0
  120. package/dist/components/log-entry.js +146 -0
  121. package/dist/components/log-list.d.ts +3 -3
  122. package/dist/components/mention-input.d.ts +2 -2
  123. package/dist/components/mention-input.js +4 -3
  124. package/dist/components/menu.d.ts +7 -3
  125. package/dist/components/menu.js +34 -37
  126. package/dist/components/meter.d.ts +10 -2
  127. package/dist/components/meter.js +64 -6
  128. package/dist/components/navigation.d.ts +21 -4
  129. package/dist/components/navigation.js +84 -19
  130. package/dist/components/notification-tray.d.ts +1 -1
  131. package/dist/components/notification-tray.js +5 -4
  132. package/dist/components/overlays.d.ts +6 -4
  133. package/dist/components/overlays.js +69 -40
  134. package/dist/components/page-frame.d.ts +4 -4
  135. package/dist/components/page-frame.js +1 -1
  136. package/dist/components/panel.d.ts +4 -4
  137. package/dist/components/panel.js +18 -12
  138. package/dist/components/profile-header.d.ts +1 -1
  139. package/dist/components/progress.d.ts +1 -1
  140. package/dist/components/project-avatar.d.ts +1 -1
  141. package/dist/components/radio-card.d.ts +2 -2
  142. package/dist/components/radio-card.js +10 -9
  143. package/dist/components/record.d.ts +29 -5
  144. package/dist/components/record.js +147 -18
  145. package/dist/components/resolved-file-url.d.ts +19 -0
  146. package/dist/components/resolved-file-url.js +49 -0
  147. package/dist/components/scroll-area.d.ts +1 -1
  148. package/dist/components/secret-dialog.d.ts +1 -1
  149. package/dist/components/segmented-bar.d.ts +4 -2
  150. package/dist/components/segmented-bar.js +16 -6
  151. package/dist/components/select.d.ts +9 -6
  152. package/dist/components/select.js +103 -127
  153. package/dist/components/settings.d.ts +4 -4
  154. package/dist/components/shell-skeleton.d.ts +1 -1
  155. package/dist/components/shell-skeleton.js +1 -1
  156. package/dist/components/shell.d.ts +21 -21
  157. package/dist/components/shell.js +43 -43
  158. package/dist/components/side-panel.d.ts +3 -3
  159. package/dist/components/sidebar.d.ts +13 -8
  160. package/dist/components/sidebar.js +55 -27
  161. package/dist/components/single-line-text.d.ts +2 -0
  162. package/dist/components/single-line-text.js +16 -0
  163. package/dist/components/site-banner.d.ts +5 -2
  164. package/dist/components/site-banner.js +17 -6
  165. package/dist/components/skeleton.d.ts +8 -7
  166. package/dist/components/skeleton.js +28 -16
  167. package/dist/components/skeletons.d.ts +17 -5
  168. package/dist/components/skeletons.js +71 -8
  169. package/dist/components/stages.d.ts +83 -11
  170. package/dist/components/stages.js +512 -156
  171. package/dist/components/stat-card.d.ts +12 -4
  172. package/dist/components/stat-card.js +92 -37
  173. package/dist/components/status-banner.d.ts +1 -1
  174. package/dist/components/status-banner.js +1 -1
  175. package/dist/components/status.d.ts +2 -2
  176. package/dist/components/steps.d.ts +1 -1
  177. package/dist/components/switch.d.ts +1 -1
  178. package/dist/components/tabs.d.ts +8 -8
  179. package/dist/components/tabs.js +26 -13
  180. package/dist/components/theme-customizer.d.ts +2 -2
  181. package/dist/components/theme-toggle.d.ts +4 -0
  182. package/dist/components/theme-toggle.js +67 -0
  183. package/dist/components/toast.d.ts +10 -3
  184. package/dist/components/toast.js +78 -29
  185. package/dist/components/use-new-version-available.d.ts +6 -0
  186. package/dist/components/use-new-version-available.js +29 -0
  187. package/dist/components/user-chip.d.ts +3 -3
  188. package/dist/components/wizard.d.ts +2 -2
  189. package/dist/feedback/contract.d.ts +136 -136
  190. package/dist/feedback/feedback-controller.d.ts +6 -6
  191. package/dist/feedback/generated/zod.gen.d.ts +28 -28
  192. package/dist/feedback/operator-contract.d.ts +11 -11
  193. package/dist/feedback/operator-controller.d.ts +32 -13
  194. package/dist/feedback/operator-controller.js +44 -11
  195. package/dist/preset.js +289 -33
  196. package/dist/styled-system/styles.css +3294 -1079
  197. package/dist/styled-system/tokens/index.mjs +598 -22
  198. package/dist/styled-system/tokens/tokens.d.ts +11 -11
  199. package/dist/styled-system/types/prop-type.d.ts +2 -2
  200. package/dist/styles.css +16 -4
  201. package/dist/theme/color.d.ts +3 -0
  202. package/dist/theme/color.js +5 -0
  203. package/dist/theme/derive.d.ts +9 -2
  204. package/dist/theme/derive.js +72 -12
  205. package/dist/theme/palettes.d.ts +49 -6
  206. package/dist/theme/palettes.js +84 -15
  207. package/dist/theme/tokens.d.ts +3 -3
  208. package/dist/theme/tokens.js +107 -32
  209. package/package.json +40 -3
package/dist/preset.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { definePreset } from "@pandacss/dev";
2
2
  import { breakpointQuery } from "./theme/breakpoints.js";
3
+ import { linearGradient } from "./theme/color.js";
4
+ import { noEdge, themedGradient } from "./theme/derive.js";
3
5
  import { deriveThemeTokens } from "./theme/tokens.js";
4
6
  export { breakpointQuery, breakpoints } from "./theme/breakpoints.js";
5
7
  export { PALETTE_NAMES } from "./theme/palettes.js";
@@ -16,6 +18,12 @@ const appBaseCss = {
16
18
  ":where(a)": { color: "inherit", textDecoration: "none" },
17
19
  "*": { scrollbarWidth: "thin", scrollbarColor: "token(colors.border.control) transparent" },
18
20
  };
21
+ /* The grey glass edge dark draws round a raised face, and round most of the hue glass. */
22
+ const darkGlassEdge = "linear-gradient(to bottom, rgba(137,136,135,.33), rgba(101,96,92,.33) 10%, rgba(43,41,39,.33) 90%, rgba(64,63,63,.33))";
23
+ /* An edge drawn as the grey glass in dark, and as a two-color gradient at .33 in light. */
24
+ function glassEdgeWithLightGradient(top, bottom) {
25
+ return { base: darkGlassEdge, _light: linearGradient("to bottom", [top, bottom], 0.33) };
26
+ }
19
27
  /** The kit's tokens under a theme. Anything left out takes the default, which is today's look. */
20
28
  export function createCiridaePreset({ appBase = false, ...theme } = {}) {
21
29
  const { colors, gradients, shadows, fonts } = deriveThemeTokens(theme);
@@ -87,10 +95,6 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
87
95
  },
88
96
  },
89
97
  keyframes: {
90
- skeletonShimmer: {
91
- from: { backgroundPosition: "150% 0" },
92
- to: { backgroundPosition: "-50% 0" },
93
- },
94
98
  spin: { from: { transform: "rotate(0deg)" }, to: { transform: "rotate(360deg)" } },
95
99
  livePulse: { "0%, 100%": { opacity: "1" }, "50%": { opacity: "0.35" } },
96
100
  wizardEnterForward: {
@@ -125,12 +129,16 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
125
129
  "control.largeInline": { value: "20px" },
126
130
  // Inline padding on the side of a trigger that ends in its caret.
127
131
  "control.iconInline": { value: "10px" },
132
+ // The assistant launcher's padding at its end, round the shortcut keycap.
133
+ "control.launcherInlineEnd": { value: "7px" },
128
134
  // The underline search field keeps its icon close to the text's left edge.
129
135
  "search.inline": { value: "4px" },
130
136
  "field.block": { value: "10px" },
131
137
  "layout.tightGap": { value: "4px" },
132
138
  // Between a sidebar's groups, and the sidebar's own inset from the window edge.
133
- "sidebar.groupGap": { value: "18px" },
139
+ "sidebar.groupGap": { value: "16px" },
140
+ // The least room between the sidebar's navigation and its footer.
141
+ "sidebar.footerGap": { value: "18px" },
134
142
  "sidebar.inline": { value: "10px" },
135
143
  "sidebar.block": { value: "14px" },
136
144
  // A pill tab's inline padding, a little wider than a compact control's.
@@ -138,22 +146,47 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
138
146
  "layout.controlGap": { value: "8px" },
139
147
  "layout.contentGap": { value: "12px" },
140
148
  "layout.clusterGap": { value: "16px" },
141
- "layout.pageGap": { value: "20px" },
149
+ "layout.pageGap": { value: "12px" },
142
150
  "layout.projectListOffset": { value: "28px" },
143
- "layout.sectionGap": { value: "24px" },
151
+ "layout.sectionGap": { value: "12px" },
152
+ // Between a centered card's title, body and actions, such as a sign-in card's. The design
153
+ // draws no centered card; one card alone on an empty page keeps more room than the
154
+ // sections of an app page.
155
+ "layout.centeredCardGap": { value: "24px" },
144
156
  "log.columnGap": { value: "10px" },
145
157
  "log.detailIndent": { value: "34px" },
146
158
  "log.detailIndentCompact": { value: "32px" },
147
159
  "log.rowBlock": { value: "3px" },
160
+ // A log entry's padding: in a feed, a compact feed, and a side panel.
161
+ "log.entryBlock": { value: "14px" },
162
+ "log.entryInline": { value: "20px" },
163
+ "log.entryCompactBlock": { value: "8px" },
164
+ "log.entryPanelBlock": { value: "10px" },
165
+ "log.entryPanelInline": { value: "12px" },
148
166
  "menu.inset": { value: "4px" },
149
167
  "menu.itemInline": { value: "8px" },
150
168
  // Between a sidebar row's avatar or mark and its label.
151
- "sidebar.markGap": { value: "10px" },
169
+ "sidebar.markGap": { value: "8px" },
152
170
  "panel.hairline": { value: "4px" },
153
171
  "panel.compact": { value: "8px" },
154
172
  "panel.default": { value: "12px" },
155
173
  "panel.comfortable": { value: "16px" },
156
174
  "panel.roomy": { value: "24px" },
175
+ // A card's padding, and a stat tile's.
176
+ "panel.card": { value: "20px" },
177
+ "tile.block": { value: "18px" },
178
+ "tile.inline": { value: "20px" },
179
+ // Between the bars of a stat tile's placeholder.
180
+ "skeleton.tileGap": { value: "10px" },
181
+ // An empty state's block padding on a page, and bare or in a compact spot.
182
+ "emptyState.pageBlock": { value: "56px" },
183
+ "emptyState.compactBlock": { value: "32px" },
184
+ // Between the stages on a stage strip.
185
+ "stage.connectorGap": { value: "10px" },
186
+ // Between a numbered list's number and its text, the kit's Numbered item.
187
+ "list.numberGap": { value: "10px" },
188
+ // Between a budget row's name and its meter, the kit's Budget row.
189
+ "meter.rowGap": { value: "36px" },
157
190
  "panel.sidebarBlock": { value: "14px" },
158
191
  "page.inline": { value: "12px" },
159
192
  "shell.leading": { value: "28px" },
@@ -170,6 +203,8 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
170
203
  "indicator.count": { value: "16px" },
171
204
  "log.caretColumn": { value: "12px" },
172
205
  "log.minimum": { value: "320px" },
206
+ // A log entry's time column.
207
+ "log.timeColumn": { value: "64px" },
173
208
  "log.rawMaximum": { value: "200px" },
174
209
  "assistant.orb": { value: "28px" },
175
210
  "widget.header": { value: "40px" },
@@ -177,11 +212,14 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
177
212
  "avatar.micro": { value: "12px" },
178
213
  "avatar.small": { value: "20px" },
179
214
  "avatar.menu": { value: "24px" },
180
- "avatar.row": { value: "26px" },
215
+ "avatar.agent": { value: "26px" },
216
+ "avatar.row": { value: "32px" },
217
+ // A record's owner, and the stand-in when there is none.
218
+ "avatar.owner": { value: "28px" },
181
219
  "avatar.large": { value: "44px" },
182
220
  // A mark set inline beside a name -- an icon, a provider logo, a project tile -- so
183
221
  // every kind lines up in one column and indents can count on its width.
184
- "mark.inline": { value: "{fontSizes.icon.medium}" },
222
+ "mark.inline": { value: "{fontSizes.icon.small}" },
185
223
  "progress.track": { value: "6px" },
186
224
  "progress.segment": { value: "3px" },
187
225
  "indicator.swatch": { value: "8px" },
@@ -193,7 +231,20 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
193
231
  "brand.logo": { value: "40px" },
194
232
  "indicator.radio": { value: "6px" },
195
233
  "skeleton.line": { value: "16px" },
234
+ // A skeleton's bar or pill, its small pill, and a caption line.
235
+ "skeleton.bar": { value: "20px" },
236
+ "skeleton.badge": { value: "16px" },
237
+ "skeleton.caption": { value: "8px" },
196
238
  "skeleton.short": { value: "64px" },
239
+ // A status chip's placeholder, and the design's fixed text bar; the small one is
240
+ // `skeleton.caption`.
241
+ "skeleton.pill": { value: "84px" },
242
+ "skeleton.textLine": { value: "10px" },
243
+ // A stat tile's height, which its placeholder and its empty stand-in hold; a card's
244
+ // placeholder, and the band its bars sit centred in.
245
+ "tile.minimum": { value: "96px" },
246
+ "skeleton.card": { value: "300px" },
247
+ "skeleton.cardBody": { value: "150px" },
197
248
  "skeleton.medium": { value: "120px" },
198
249
  "skeleton.long": { value: "200px" },
199
250
  // A chart's height, which its loading placeholder holds.
@@ -210,30 +261,61 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
210
261
  "control.clear": { value: "20px" },
211
262
  // A step chip or small badge in a row of text.
212
263
  "control.chip": { value: "22px" },
264
+ // A keycap that holds a word such as Esc rather than one glyph.
265
+ "control.wordKeycap": { value: "35px" },
266
+ // The composer's send button.
267
+ "control.send": { value: "26px" },
213
268
  "control.small": { value: "30px" },
269
+ // A tab at rest: 2px under the open one, which fills its 30px track.
270
+ "control.restingTab": { value: "28px" },
214
271
  "control.row": { value: "34px" },
272
+ // A round icon button in the top bar or a pager, and the smaller one that closes a sheet.
273
+ "control.round": { value: "34px" },
274
+ "control.roundSmall": { value: "28px" },
275
+ "control.sidebarSearch": { value: "36px" },
276
+ // The square tile an icon sits on beside a row's title.
277
+ // The disc a numbered list's number sits in.
278
+ "list.number": { value: "20px" },
279
+ "tile.icon": { value: "32px" },
280
+ // The parts rollup's line, in place of the stage strip.
281
+ "partsRollup.height": { value: "26px" },
282
+ // A stat tile's chart slot, and the line's plot at its foot, under the end point's room.
283
+ "sparkline.width": { value: "88px" },
284
+ "sparkline.height": { value: "32px" },
285
+ "sparkline.plotWidth": { value: "84px" },
286
+ "sparkline.plotHeight": { value: "25px" },
215
287
  "control.shortcut": { value: "24px" },
216
288
  "control.compact": { value: "32px" },
217
289
  "control.default": { value: "38px" },
218
290
  "control.search": { value: "40px" },
219
291
  // The widest a page's search field grows beside its filters.
220
292
  "control.searchField": { value: "420px" },
221
- "workspace.mark": { value: "24px" },
293
+ "workspace.mark": { value: "26px" },
222
294
  "workspace.avatar": { value: "34px" },
223
295
  "control.field": { value: "46px" },
224
296
  "sidebar.projectAction": { value: "48px" },
297
+ // The rule between the icon rail's sections.
298
+ "sidebar.railRule": { value: "24px" },
299
+ // A sidebar row shorter than a page's, such as the settings sidebar's Back to app.
300
+ "sidebar.shortRow": { value: "28px" },
225
301
  "toast.minimum": { value: "56px" },
226
302
  "chat.footer": { value: "60px" },
227
303
  "shell.header": { value: "54px" },
228
- "shell.collapsed": { value: "71px" },
304
+ "shell.collapsed": { value: "64px" },
229
305
  "table.scroll": { value: "min(70vh, 720px)" },
230
- "field.textarea": { value: "96px" },
306
+ "table.headRow": { value: "44px" },
307
+ // A textarea at rest: two lines of body text in its well; it grows as it is dragged.
308
+ "field.textarea": { value: "64px" },
309
+ // An input set inline in a row.
310
+ "field.inline": { value: "28px" },
231
311
  "chat.input": { value: "87px" },
232
312
  "chat.inputMobile": { value: "72px" },
233
313
  "chat.composerMinimum": { value: "149px" },
234
314
  "overlay.menu": { value: "200px" },
235
315
  // The tallest a select's or combobox's list grows before it scrolls.
236
316
  "overlay.menuList": { value: "320px" },
317
+ // A stuck step's "Not sure?" menu of ways forward.
318
+ "overlay.helpMenu": { value: "360px" },
237
319
  // The notification tray as a popover from the bell, and how much of its list shows.
238
320
  "overlay.tray": { value: "380px" },
239
321
  "overlay.trayList": { value: "min(60vh, 480px)" },
@@ -246,9 +328,14 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
246
328
  "emptyState.minimum": { value: "200px" },
247
329
  "search.regularPreview": { value: "250px" },
248
330
  "search.sidebarPreview": { value: "264px" },
249
- "calendar.width": { value: "268px" },
250
331
  "shell.sidebar": { value: "248px" },
251
- "overlay.dialog": { value: "500px" },
332
+ // A dialog's sheet, and the command palette's; the glass shell round each adds its padding.
333
+ "overlay.dialog": { value: "440px" },
334
+ "overlay.palette": { value: "640px" },
335
+ // The command palette's query row, a result row and its footer of key hints.
336
+ "commandPalette.query": { value: "56px" },
337
+ "commandPalette.row": { value: "40px" },
338
+ "commandPalette.footer": { value: "44px" },
252
339
  "overlay.dialogWide": { value: "720px" },
253
340
  // The floating drawer's sheet, inside its 8px shell.
254
341
  "overlay.sheet": { value: "480px" },
@@ -257,6 +344,9 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
257
344
  "overlay.sheetNarrow": { value: "400px" },
258
345
  "overlay.sheetDocked": { value: "clamp(400px, 29.7vw, 488px)" },
259
346
  "toast.width": { value: "440px" },
347
+ // A toast's progress track.
348
+ "toast.progressWidth": { value: "72px" },
349
+ "toast.progressHeight": { value: "4px" },
260
350
  "chat.thread": { value: "640px" },
261
351
  "chat.composer": { value: "640px" },
262
352
  // A user bubble in the agent sheet leaves room on its left, as a reply would.
@@ -272,13 +362,26 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
272
362
  "checklist.maximum": { value: "280px" },
273
363
  "page.maximum": { value: "1440px" },
274
364
  },
275
- opacity: { disabled: { value: ".5" } },
365
+ opacity: {
366
+ disabled: { value: ".5" },
367
+ // A locked step's dot, and a locked requirement's row, which keeps a little more.
368
+ "locked.step": { value: ".5" },
369
+ "locked.requirement": { value: ".55" },
370
+ // A round icon button fades further.
371
+ disabledRound: { value: ".25" },
372
+ // A ticked mark under the pointer, in dark: the face and its glyph fade a little.
373
+ checkedHover: { value: ".88" },
374
+ },
276
375
  fontWeights: {
277
376
  regular: { value: "400" },
278
377
  medium: { value: "500" },
279
378
  semibold: { value: "600" },
280
379
  },
281
- letterSpacings: { compact: { value: "-.01em" }, label: { value: ".04em" } },
380
+ letterSpacings: {
381
+ compact: { value: "-.01em" },
382
+ label: { value: ".04em" },
383
+ display: { value: "-.02em" },
384
+ },
282
385
  fonts: {
283
386
  display: { value: fonts.display },
284
387
  sans: { value: fonts.sans },
@@ -286,12 +389,15 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
286
389
  mono: { value: fonts.mono },
287
390
  },
288
391
  lineHeights: {
392
+ // A single line, its box the type's own height. Text that can wrap takes another.
289
393
  tight: { value: "1" },
290
394
  compact: { value: "1.25" },
291
395
  log: { value: "1.4" },
292
- body: { value: "1.5" },
396
+ body: { value: "1.4" },
293
397
  },
294
398
  fontSizes: {
399
+ // The largest figure on a page, set with `letterSpacings.display`.
400
+ display: { value: "36px" },
295
401
  body: { value: "14px" },
296
402
  caption: { value: "13px" },
297
403
  code: { value: "12px" },
@@ -333,12 +439,16 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
333
439
  },
334
440
  radii: {
335
441
  round: { value: "999px" },
442
+ // A sidebar nav item.
443
+ nav: { value: "3px" },
336
444
  keycap: { value: "6px" },
337
445
  // Round 2 fields -- inputs, selects, checkboxes -- are nearly square-cornered.
338
446
  control: { value: "4px" },
339
447
  action: { value: "8px" },
340
448
  field: { value: "12px" },
341
449
  inset: { value: "12px" },
450
+ // The glass shell round a modal or drawer, the active nav pill, and a parallel chip.
451
+ shell: { value: "16px" },
342
452
  card: { value: "24px" },
343
453
  pill: { value: "36px" },
344
454
  },
@@ -350,9 +460,13 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
350
460
  "bg.panel": { value: colors["bg.panel"] },
351
461
  "bg.card": { value: colors["bg.card"] },
352
462
  "bg.avatar": { value: colors["bg.avatar"] },
353
- "bg.backdrop": {
354
- value: { base: "rgba(0,0,0,.66)", _light: "rgba(0,0,0,.4)" },
355
- },
463
+ // The modal scrim, and the overlays' glass; see `deriveThemeTokens`.
464
+ "bg.backdrop": { value: colors["bg.backdrop"] },
465
+ "bg.popover": { value: colors["bg.popover"] },
466
+ "bg.modalShell": { value: colors["bg.modalShell"] },
467
+ "bg.modalSheet": { value: colors["bg.modalSheet"] },
468
+ "bg.drawerShell": { value: colors["bg.drawerShell"] },
469
+ "bg.drawerSheet": { value: colors["bg.drawerSheet"] },
356
470
  // The status hues as washes, drawn from the palette.
357
471
  "bg.infoSubtle": { value: colors["bg.infoSubtle"] },
358
472
  "bg.successSubtle": { value: colors["bg.successSubtle"] },
@@ -360,20 +474,27 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
360
474
  "bg.errorSubtle": { value: colors["bg.errorSubtle"] },
361
475
  "fg.archived": { value: colors["fg.archived"] },
362
476
  "border.subtle": { value: colors["border.subtle"] },
363
- // Round 2 focus is the brand accent in both themes.
477
+ // Focus is the palette's focus ring: Accent Blue in ciridae, the accent in the others.
364
478
  "border.focus": { value: colors["border.focus"] },
365
479
  // The greys, from the palette's ramp; see `deriveThemeTokens`.
366
480
  "fg.primary": { value: colors["fg.primary"] },
367
481
  "fg.muted": { value: colors["fg.muted"] },
368
482
  "fg.secondary": { value: colors["fg.secondary"] },
369
483
  "fg.subtle": { value: colors["fg.subtle"] },
484
+ "fg.quietGlyph": { value: colors["fg.quietGlyph"] },
485
+ "fg.label": { value: colors["fg.label"] },
370
486
  "border.control": { value: colors["border.control"] },
487
+ "border.canvas": { value: colors["border.canvas"] },
488
+ "border.divider": { value: colors["border.divider"] },
489
+ "border.menuHover": { value: colors["border.menuHover"] },
371
490
  "bg.field": { value: colors["bg.field"] },
491
+ "bg.formField": { value: colors["bg.formField"] },
492
+ "bg.openTrigger": { value: colors["bg.openTrigger"] },
372
493
  "bg.fieldDisabled": { value: colors["bg.fieldDisabled"] },
373
494
  "border.mark": { value: colors["border.mark"] },
374
- // A field's edge once invalid: the accent red in dark, a quieter dark red in light.
495
+ // A field's edge once invalid: the palette's red, at full strength in both themes.
375
496
  "border.error": { value: colors["border.error"] },
376
- // A hovered row is a grey wash; a selected row, tab, segment or card is the accent's.
497
+ // A hovered row is a grey wash; a selected row, tab, segment or card is a neutral wash too.
377
498
  "bg.rowHover": { value: colors["bg.rowHover"] },
378
499
  "bg.selected": { value: colors["bg.selected"] },
379
500
  "bg.selectedHover": { value: colors["bg.selectedHover"] },
@@ -383,13 +504,13 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
383
504
  "border.panel": { value: colors["border.panel"] },
384
505
  "border.card": { value: colors["border.card"] },
385
506
  "border.glass": { value: colors["border.glass"] },
386
- "border.toolbar": { value: colors["border.toolbar"] },
387
507
  "border.hairline": { value: colors["border.hairline"] },
388
508
  /*
389
- * The faces, all flat; see `deriveThemeTokens`. `bg.surface` lifts a dialog or drawer
390
- * off the card; `bg.control` is what a field or tab track wears; `bg.glass` and
391
- * `bg.raised` are the toolbar control and the button; `bg.hover` and `bg.fill` are
392
- * the grey washes.
509
+ * The flat faces; see `deriveThemeTokens`. `bg.surface` lifts a dialog or drawer off
510
+ * the card; `bg.control` is what a field or tab track wears; `bg.glass` and
511
+ * `bg.raised` are the toolbar control and the button; `bg.hover` and `bg.pressed` are
512
+ * the state layers and `bg.fill` the firmer grey fill. A face the design paints as a
513
+ * gradient has one under `gradients` too.
393
514
  */
394
515
  "bg.surface": { value: colors["bg.surface"] },
395
516
  "bg.control": { value: colors["bg.control"] },
@@ -400,6 +521,8 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
400
521
  "bg.raisedHover": { value: colors["bg.raisedHover"] },
401
522
  "bg.check": { value: colors["bg.check"] },
402
523
  "bg.hover": { value: colors["bg.hover"] },
524
+ "bg.controlHover": { value: colors["bg.controlHover"] },
525
+ "bg.pressed": { value: colors["bg.pressed"] },
403
526
  "bg.fill": { value: colors["bg.fill"] },
404
527
  /*
405
528
  * `primary` inverts: white on a dark panel, near-black on a light one. Light has no
@@ -411,14 +534,38 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
411
534
  "bg.tinted": { value: colors["bg.tinted"] },
412
535
  /* The destructive button's red. */
413
536
  "bg.danger": { value: { base: "#F67C6A", _light: "#F36B57" } },
414
- // Links and focus take the palette's accent; the four status hues keep their meaning.
537
+ /*
538
+ * The solid tint of an attention block or a highlighted field, the same in every
539
+ * palette as the destructive red is; `border.*Tint` under `gradients` edges a block.
540
+ * Yellow is the design's 5% wash in dark. Dark draws a green or red block as its hue's
541
+ * glass, which these flatten to its middle.
542
+ */
543
+ "bg.warningTint": { value: { base: "rgba(255,205,123,.05)", _light: "#F6F3ED" } },
544
+ "bg.successTint": { value: { base: "rgba(189,251,255,.1)", _light: "#DFEFEC" } },
545
+ "bg.errorTint": { value: { base: "rgba(249,211,205,.1)", _light: "#FFF2F2" } },
546
+ // Links take the palette's accent; the four status hues keep their meaning.
415
547
  "accent.brand": { value: colors["accent.brand"] },
416
548
  "accent.green": { value: colors["accent.green"] },
549
+ "accent.greenDark": { value: colors["accent.greenDark"] },
417
550
  "accent.red": { value: colors["accent.red"] },
551
+ "accent.redDark": { value: colors["accent.redDark"] },
418
552
  "accent.yellow": { value: colors["accent.yellow"] },
553
+ "accent.yellowIcon": { value: colors["accent.yellowIcon"] },
419
554
  "accent.blue": { value: colors["accent.blue"] },
420
555
  "accent.bronze": { value: colors["accent.bronze"] },
421
556
  "border.bronze": { value: colors["border.bronze"] },
557
+ // Data marks, never UI; see `derivePaletteTokens`.
558
+ "chart.bar": { value: colors["chart.bar"] },
559
+ "chart.trend": { value: colors["chart.trend"] },
560
+ "chart.category1": { value: colors["chart.category1"] },
561
+ "chart.category2": { value: colors["chart.category2"] },
562
+ "chart.category3": { value: colors["chart.category3"] },
563
+ "chart.category4": { value: colors["chart.category4"] },
564
+ "chart.barTrack": { value: colors["chart.barTrack"] },
565
+ "chart.progressTrack": { value: colors["chart.progressTrack"] },
566
+ "chart.atRiskTrack": { value: colors["chart.atRiskTrack"] },
567
+ "chart.neutral": { value: colors["chart.neutral"] },
568
+ "chart.notStarted": { value: colors["chart.notStarted"] },
422
569
  /*
423
570
  * Text sitting on a filled accent. Deliberately the same in both themes:
424
571
  * the accent it sits on stays saturated, so a value that followed the
@@ -433,10 +580,16 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
433
580
  _light: "inset 0 1px 1px rgba(255,255,255,.18), inset 0 -1px 1px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.08)",
434
581
  },
435
582
  },
436
- // The shadows cast in the palette's greys; see `deriveThemeTokens`.
583
+ // The shadows `deriveThemeTokens` sets, most cast in the palette's greys.
437
584
  search: { value: shadows.search },
438
585
  inset: { value: shadows.inset },
586
+ // A card's elevation, and the softer one of a sheet, toast or chip, or the segment that is on.
439
587
  card: { value: shadows.card },
588
+ soft: { value: shadows.soft },
589
+ // The faint glow round a drawer's glass shell; light only.
590
+ drawerShell: {
591
+ value: { base: "none", _light: "0 0 12px rgba(136,136,140,.08)" },
592
+ },
440
593
  focus: { value: shadows.focus },
441
594
  panel: {
442
595
  value: { base: "0 4px 124px rgba(0,0,0,.25)", _light: "0 4px 124px rgba(0,0,0,.12)" },
@@ -454,11 +607,114 @@ export function createCiridaePreset({ appBase = false, ...theme } = {}) {
454
607
  "control.pressed": { value: shadows["control.pressed"] },
455
608
  },
456
609
  gradients: {
457
- /* The only gradients: the skeleton's shimmer and the orb mark. Every face is flat. */
458
- skeleton: { value: gradients.skeleton },
610
+ // A loading placeholder's flat fill.
611
+ skeletonFill: { value: gradients.skeletonFill },
459
612
  orb: {
460
613
  value: "radial-gradient(circle at 70% 24%, rgba(232,224,195,.9) 0 9%, transparent 11%), linear-gradient(180deg, #E8E0C3, #46361D)",
461
614
  },
615
+ /*
616
+ * The faces the design paints as gradients, most with a flat `bg.*` sibling near its
617
+ * middle; see `deriveThemeTokens`. The destructive face is the same red in every palette,
618
+ * as `bg.danger` is.
619
+ */
620
+ canvas: { value: gradients.canvas },
621
+ panel: { value: gradients.panel },
622
+ card: { value: gradients.card },
623
+ raised: { value: gradients.raised },
624
+ raisedHover: { value: gradients.raisedHover },
625
+ selected: { value: gradients.selected },
626
+ rowHover: { value: gradients.rowHover },
627
+ primary: { value: gradients.primary },
628
+ tinted: { value: gradients.tinted },
629
+ danger: {
630
+ value: {
631
+ base: "linear-gradient(to bottom, #F69385, #F7644F)",
632
+ _light: "linear-gradient(to bottom, #F48272, #F2533C)",
633
+ },
634
+ },
635
+ /*
636
+ * The 1px edges a face draws as a gradient, through `[data-edge]`. Dark draws no edge
637
+ * on the primary or destructive face.
638
+ */
639
+ "border.raised": { value: glassEdgeWithLightGradient("#BCB6B6", "#9C9A9A") },
640
+ "border.primary": {
641
+ value: {
642
+ base: noEdge,
643
+ _light: "linear-gradient(to bottom, rgba(51,51,55,.33), rgba(74,70,66,.33) 10%, rgba(55,52,48,.33) 90%, rgba(51,51,55,.33))",
644
+ },
645
+ },
646
+ "border.danger": {
647
+ value: {
648
+ base: noEdge,
649
+ _light: "linear-gradient(to bottom, rgba(195,81,81,.33), rgba(142,61,61,.33))",
650
+ },
651
+ },
652
+ "border.tinted": { value: gradients["border.tinted"] },
653
+ // The edge of a workspace mark other than the current one: flat in dark.
654
+ "border.otherWorkspaceMark": {
655
+ value: {
656
+ base: linearGradient("to bottom", ["#3C3C3C", "#3C3C3C"], 0.66),
657
+ _light: linearGradient("to bottom", ["#D8D8D8", "#CCCBCB"], 0.66),
658
+ },
659
+ },
660
+ // The selected face's edge, round a user's chat bubble.
661
+ "border.selected": {
662
+ value: {
663
+ base: darkGlassEdge,
664
+ _light: linearGradient("to bottom", ["#D8D8D8", "#CCCBCB"], 0.66),
665
+ },
666
+ },
667
+ // A chart's area under its trend line, and a progress bar on track and at risk.
668
+ "chart.area": { value: gradients["chart.area"] },
669
+ "chart.progress": { value: gradients["chart.progress"] },
670
+ "chart.atRisk": { value: gradients["chart.atRisk"] },
671
+ /*
672
+ * The hue glass a badge, a step or the current stage wears, each with its edge: .66 in
673
+ * light and .10 in dark, the done step stronger in dark. Yellow's is `tinted`. The same
674
+ * in every palette, as the destructive red is.
675
+ */
676
+ infoGlass: {
677
+ value: themedGradient("to bottom", { base: ["#FFFFFF", "#A4D5F8"], _light: ["#F4F5F5", "#E2F2FF"] }, { base: 0.1, _light: 0.66 }),
678
+ },
679
+ successGlass: {
680
+ value: themedGradient("to bottom", { base: ["#FFFFFF", "#7BF6FF"], _light: ["#ECECEC", "#DFEFEC"] }, { base: 0.1, _light: 0.66 }),
681
+ },
682
+ dangerGlass: {
683
+ value: themedGradient("to bottom", { base: ["#FFFFFF", "#F3A69B"], _light: ["#FDFDFD", "#E8DAD9"] }, { base: 0.1, _light: 0.66 }),
684
+ },
685
+ stepDoneGlass: {
686
+ value: themedGradient("to bottom", { base: ["#BEE1DB", "#327A6E"], _light: ["#ECECEC", "#DFEFEC"] }, { base: 0.6, _light: 0.66 }),
687
+ },
688
+ currentStageGlass: {
689
+ value: themedGradient("to bottom", { base: ["#FFFFFF", "#FFCD7B"], _light: ["#F3F3F3", "#FDF4DF"] }, { base: 0.1, _light: 0.66 }),
690
+ },
691
+ "border.infoGlass": { value: glassEdgeWithLightGradient("#B9E4FF", "#88AFCC") },
692
+ "border.successGlass": { value: glassEdgeWithLightGradient("#AEF3E5", "#96BFB9") },
693
+ "border.dangerGlass": { value: glassEdgeWithLightGradient("#DABBBB", "#A68181") },
694
+ "border.stepDoneGlass": {
695
+ value: themedGradient("to bottom", { base: ["#BEE1DB", "#327A6E"], _light: ["#9FCCC3", "#589D92"] }, { base: 0.6, _light: 0.33 }),
696
+ },
697
+ "border.currentStageGlass": { value: glassEdgeWithLightGradient("#EEDFBA", "#E8C674") },
698
+ // The edge of an attention block on its `bg.*Tint`: your move, ready and stuck.
699
+ "border.warningTint": {
700
+ value: themedGradient("to bottom", { base: ["#FFF1C9", "#A47D28"], _light: ["#DBCAA9", "#987C38"] }, { base: 0.15, _light: 0.33 }),
701
+ },
702
+ "border.successTint": {
703
+ value: themedGradient("to bottom", { base: ["#BEE1DB", "#327A6E"], _light: ["#9FCCC3", "#589D92"] }, { base: 0.15, _light: 0.33 }),
704
+ },
705
+ "border.errorTint": {
706
+ value: themedGradient("to bottom", { base: ["#FCC9C1", "#B24839"], _light: ["#C35151", "#8E3D3D"] }, { base: 0.15, _light: 0.33 }),
707
+ },
708
+ },
709
+ /*
710
+ * The overlays' backdrop blur, by role: a popover or menu, a modal's glass shell and its
711
+ * sheet, a drawer's shell. Dark blurs a modal's shell; light blurs its sheet.
712
+ */
713
+ blurs: {
714
+ popover: { value: { base: "64px", _light: "128px" } },
715
+ modalShell: { value: { base: "64px", _light: "8px" } },
716
+ modalSheet: { value: { base: "0px", _light: "128px" } },
717
+ drawerShell: { value: "16px" },
462
718
  },
463
719
  },
464
720
  },