@keyfunc/keybricks-ds 2.6.0 → 2.7.0

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 (155) hide show
  1. package/DEPLOY.md +3 -3
  2. package/DESIGN.md +13 -4
  3. package/INTEGRATION.md +18 -3
  4. package/_adherence.oxlintrc.json +57 -11
  5. package/_ds_bundle.js +2137 -186
  6. package/_scripts/build-index.mjs +1 -1
  7. package/_src/icon-index.js +1 -1
  8. package/assets/icons/icon-index.json +1 -1
  9. package/changelog.js +11 -1
  10. package/components/_cards/accordion.card.html +1 -1
  11. package/components/_cards/action-chip.card.html +1 -1
  12. package/components/_cards/activity.card.html +1 -1
  13. package/components/_cards/alert.card.html +1 -1
  14. package/components/_cards/app-chrome.card.html +1 -1
  15. package/components/_cards/banner.card.html +1 -1
  16. package/components/_cards/breadcrumb.card.html +1 -1
  17. package/components/_cards/button-1-base.card.html +5 -2
  18. package/components/_cards/button-2-states.card.html +5 -5
  19. package/components/_cards/button-3-sizes-icons.card.html +2 -2
  20. package/components/_cards/button-4-group.card.html +2 -2
  21. package/components/_cards/button-5-ai.card.html +34 -0
  22. package/components/_cards/canvas-zoom-controls.card.html +1 -1
  23. package/components/_cards/cards-indicators.card.html +1 -1
  24. package/components/_cards/charts-1-sparkline.card.html +1 -1
  25. package/components/_cards/charts-10-gauge.card.html +1 -1
  26. package/components/_cards/charts-11-funnel.card.html +1 -1
  27. package/components/_cards/charts-12-treemap.card.html +1 -1
  28. package/components/_cards/charts-14-radar.card.html +1 -1
  29. package/components/_cards/charts-15-distribution.card.html +1 -1
  30. package/components/_cards/charts-16-pareto.card.html +1 -1
  31. package/components/_cards/charts-17-candlestick.card.html +1 -1
  32. package/components/_cards/charts-18-sankey.card.html +1 -1
  33. package/components/_cards/charts-19-chord.card.html +1 -1
  34. package/components/_cards/charts-2-line.card.html +1 -1
  35. package/components/_cards/charts-20-sunburst.card.html +1 -1
  36. package/components/_cards/charts-21-worldmap.card.html +1 -1
  37. package/components/_cards/charts-22-gantt.card.html +1 -1
  38. package/components/_cards/charts-23-bar3d.card.html +1 -1
  39. package/components/_cards/charts-24-pie3d.card.html +1 -1
  40. package/components/_cards/charts-25-surface3d.card.html +1 -1
  41. package/components/_cards/charts-26-scatter3d.card.html +1 -1
  42. package/components/_cards/charts-27-ribbon3d.card.html +1 -1
  43. package/components/_cards/charts-3-bar.card.html +1 -1
  44. package/components/_cards/charts-4-barlist.card.html +1 -1
  45. package/components/_cards/charts-5-donut.card.html +1 -1
  46. package/components/_cards/charts-6-scatter.card.html +1 -1
  47. package/components/_cards/charts-7-heatmap.card.html +1 -1
  48. package/components/_cards/charts-8-waterfall.card.html +1 -1
  49. package/components/_cards/charts-9-bullet.card.html +1 -1
  50. package/components/_cards/charts-99-fullpage.card.html +1 -1
  51. package/components/_cards/checkbox.card.html +1 -1
  52. package/components/_cards/codeblock.card.html +1 -1
  53. package/components/_cards/combobox.card.html +1 -1
  54. package/components/_cards/context-menu.card.html +1 -1
  55. package/components/_cards/date-picker.card.html +1 -1
  56. package/components/_cards/diffvalue.card.html +1 -1
  57. package/components/_cards/divider.card.html +1 -1
  58. package/components/_cards/drawer.card.html +1 -1
  59. package/components/_cards/dropdown-menu.card.html +1 -1
  60. package/components/_cards/dropzone.card.html +1 -1
  61. package/components/_cards/empty-state.card.html +1 -1
  62. package/components/_cards/filter-bar.card.html +1 -1
  63. package/components/_cards/icon-button.card.html +1 -1
  64. package/components/_cards/icons-0-usage.card.html +2 -2
  65. package/components/_cards/icons-1-core.card.html +1 -1
  66. package/components/_cards/icons-2-feather.card.html +1 -1
  67. package/components/_cards/icons-2b-lucide.card.html +1 -1
  68. package/components/_cards/icons-3-unicons.card.html +1 -1
  69. package/components/_cards/icons-4-datasource.card.html +1 -1
  70. package/components/_cards/input.card.html +1 -1
  71. package/components/_cards/kbd.card.html +5 -7
  72. package/components/_cards/keyvalue.card.html +1 -1
  73. package/components/_cards/listrow.card.html +1 -1
  74. package/components/_cards/loading.card.html +1 -1
  75. package/components/_cards/log-viewer.card.html +1 -1
  76. package/components/_cards/multi-select.card.html +1 -1
  77. package/components/_cards/number-stepper.card.html +1 -1
  78. package/components/_cards/pagination.card.html +1 -1
  79. package/components/_cards/people.card.html +1 -1
  80. package/components/_cards/pipeline-node.card.html +1 -1
  81. package/components/_cards/pipeline-palette.card.html +1 -1
  82. package/components/_cards/radio.card.html +1 -1
  83. package/components/_cards/relative-time-picker.card.html +1 -1
  84. package/components/_cards/search-global.card.html +72 -0
  85. package/components/_cards/search.card.html +1 -1
  86. package/components/_cards/segmented-control.card.html +1 -1
  87. package/components/_cards/select.card.html +1 -1
  88. package/components/_cards/slider.card.html +1 -1
  89. package/components/_cards/smart-table.card.html +1 -1
  90. package/components/_cards/spreadsheet.card.html +1 -1
  91. package/components/_cards/stepper.card.html +1 -1
  92. package/components/_cards/table.card.html +1 -1
  93. package/components/_cards/tabs.card.html +1 -1
  94. package/components/_cards/tag.card.html +1 -1
  95. package/components/_cards/textarea.card.html +1 -1
  96. package/components/_cards/timeline.card.html +1 -1
  97. package/components/_cards/toast.card.html +1 -1
  98. package/components/_cards/toggles.card.html +1 -1
  99. package/components/_cards/tooltip.card.html +1 -1
  100. package/components/_cards/tree.card.html +1 -1
  101. package/components/_vue/index.mjs +2 -0
  102. package/components/buttons/Button.d.ts +14 -5
  103. package/components/buttons/Button.jsx +45 -8
  104. package/components/buttons/Button.vue +40 -38
  105. package/components/buttons/Button.vue.d.ts +4 -1
  106. package/components/buttons/ai-button.js +54 -0
  107. package/components/buttons/buttons.prompt.md +7 -2
  108. package/components/display/Kbd.d.ts +3 -1
  109. package/components/display/Kbd.jsx +8 -3
  110. package/components/display/Kbd.vue +7 -3
  111. package/components/display/display.prompt.md +3 -1
  112. package/components/feedback/Modal.d.ts +7 -0
  113. package/components/feedback/Modal.jsx +9 -9
  114. package/components/feedback/Toast.vue +6 -6
  115. package/components/feedback/feedback.prompt.md +2 -0
  116. package/components/forms/GlobalSearch.d.ts +83 -0
  117. package/components/forms/GlobalSearch.jsx +172 -0
  118. package/components/forms/GlobalSearch.vue +161 -0
  119. package/components/forms/forms.prompt.md +7 -0
  120. package/components/forms/global-search.js +161 -0
  121. package/components/icons/Icon.d.ts +2 -0
  122. package/components/icons/Icon.jsx +14 -6
  123. package/components/icons/Icon.vue +11 -4
  124. package/components/icons/icon-paths.js +4 -2
  125. package/components/index.d.ts +1 -0
  126. package/components/index.js +1 -0
  127. package/components/navigation/TopBar.d.ts +9 -3
  128. package/components/navigation/TopBar.jsx +5 -7
  129. package/components/navigation/TopBar.vue +5 -6
  130. package/covers.js +4 -2
  131. package/gallery.html +1 -1
  132. package/guidelines/brand-logo.html +1 -1
  133. package/guidelines/colors-schemes.html +1 -1
  134. package/guidelines/colors-transparency.html +1 -1
  135. package/guidelines/foundations-borders.html +1 -1
  136. package/guidelines/foundations-chrome.html +1 -1
  137. package/guidelines/foundations-motion.html +1 -1
  138. package/guidelines/foundations-size-tiers.html +1 -1
  139. package/guidelines/foundations-spacing.html +1 -1
  140. package/guidelines/interaction-states.html +1 -1
  141. package/guidelines/type-extended.html +1 -1
  142. package/guidelines/type-mono.html +1 -1
  143. package/guidelines/type-scale.html +1 -1
  144. package/guidelines/type-weights.html +1 -1
  145. package/index.html +8 -8
  146. package/package.json +2 -2
  147. package/readme.md +4 -4
  148. package/readme.zh-CN.md +4 -4
  149. package/site-nav.js +1 -1
  150. package/styles.css +1 -0
  151. package/tokens/ai.css +17 -0
  152. package/tokens/colors.css +1 -1
  153. package/tokens/tokens.d.ts +28 -0
  154. package/tokens/tokens.js +47 -5
  155. package/tokens/tokens.json +123 -5
package/DEPLOY.md CHANGED
@@ -55,11 +55,11 @@ deploys the documentation site. Watch it under *Build → Pipelines*.
55
55
  **5. Cut the first release.**
56
56
 
57
57
  ```bash
58
- git tag v2.6.0 && git push --tags
58
+ git tag v2.7.0 && git push --tags
59
59
  ```
60
60
 
61
61
  That tag runs `generated:check` → `version:check` → `npm publish`. Confirm under *Deploy →
62
- Package Registry*: `@keyfunc/keybricks-ds` 2.6.0.
62
+ Package Registry*: `@keyfunc/keybricks-ds` 2.7.0.
63
63
 
64
64
  **6. Hand developers two things:** the Pages URL, and the `.npmrc` snippet in §4 below.
65
65
 
@@ -187,7 +187,7 @@ GitLab injects `CI_JOB_TOKEN` — use that instead and no secret is stored anywh
187
187
  **Install — straight from git** (no registry, no publish; works today)
188
188
 
189
189
  ```json
190
- "@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v2.6.0"
190
+ "@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v2.7.0"
191
191
  ```
192
192
 
193
193
  Because the package has no build step, a git dependency needs no `prepare` script — npm
package/DESIGN.md CHANGED
@@ -68,7 +68,7 @@ order (`app` → `surface` → `raised`) and depth reads correctly in both theme
68
68
  | `--action-primary-hover` | `#1447e6` | Hover |
69
69
  | `--action-primary-active` | `#1039c4` | Press |
70
70
  | `--soft-bg` | `#eff6ff` | Tinted button surface |
71
- | `--action-dark` | `#171717` | Dark pill (AI actions) |
71
+ | `--action-dark` | `#171717` | Dark pill (brand-level actions) — Prophet AI entries use `Button variant="ai"` |
72
72
 
73
73
  ### Feedback — always a trio (solid / tint / text-on-tint)
74
74
  | Meaning | Solid | Tint bg | Text on tint |
@@ -160,10 +160,17 @@ collapsed), with a 56px brand head without a rule, a 2px-gap list of 36px items
160
160
  it at 240px, in the **same tone**. Tones: `recessed` (default — grey rail, the active item is a white tile
161
161
  with a hairline ring), `flush` (white rail), `contrast` (rail scoped to the dark theme) and `custom`
162
162
  (dark scope on one of ten `SIDEBAR_COLORS`). Pick one tone per product and pass it to both
163
- `Sidebar` and `SidePanel`. The top bar holds the bare search on the left and, on the right, the dark
164
- AI Assistant button, notifications, help and the user trigger, which opens `UserMenu` (identity,
163
+ `Sidebar` and `SidePanel`. The top bar holds `GlobalSearch` on the left (⌘K / Ctrl K opens a 720px card over the bar; its AI rows and
164
+ `Button variant="ai"` hand the question to the Prophet AI panel) and, on the right, notifications, help and the user trigger, which opens `UserMenu` (identity,
165
165
  appearance switch, rows).
166
166
 
167
+ ### Global Search field — a sanctioned exception
168
+
169
+ The collapsed `GlobalSearch` field uses `SearchInput`'s box at rest (`--bg-surface`, 1px `--border-control`, `--radius-md`, muted
170
+ search glyph, standard `Kbd`), with two differences that apply to `GlobalSearch` only: the placeholder is `--text-secondary`
171
+ (not `--text-muted`), because it is the whole platform's entry prompt and must read at 4.5:1; and hover fills `--bg-inset` as
172
+ well as darkening the border to `--border-strong`. A plain `SearchInput` keeps its muted placeholder and border-only hover.
173
+
167
174
  ### Menus: action vs single choice
168
175
 
169
176
  `ContextMenu` and `Menu` serve two kinds of list, and the row spacing says which one it is.
@@ -395,6 +402,8 @@ transition: var(--t-hover); /* background, border-color, color */
395
402
  Nothing bounces. Nothing slides more than a few pixels. Keyframes available:
396
403
  `kb-fade-in`, `kb-rise`, `kb-toast-in`, `kb-spin`, `kb-pulse`, `kb-slide-in`.
397
404
 
405
+ `kb-ai-spin` is reserved for Prophet AI entry points: the second continuous animation after `kb-spin`, and the only one that changes speed (5s per turn at rest, 1.2s on hover, eased through `playbackRate` so the angle never jumps). Use it only through `Button variant="ai"`.
406
+
398
407
  ---
399
408
 
400
409
  ## Interaction states — you get these for free
@@ -457,7 +466,7 @@ The list that prevents the most rework. These are absolute.
457
466
  `lineHeight`, where a bare number is a multiplier.)
458
467
  - **Do not reference a palette step** (`--neutral-500`, `--blue-600`) in component code.
459
468
  - **Do not use any font other than Inter and Menlo.** No Roboto, no Arial, no system-ui stack.
460
- - **Do not use gradients.** The only exception in the entire system is the chart area fill.
469
+ - **Do not use gradients.** Two exceptions only: the chart area fill, and Prophet AI (方知) entry points — `Button variant="ai"` and AI suggestion tiles, through the `--ai-*` tokens. Never build an AI gradient by hand.
461
470
  - **Do not add drop shadows to content cards.** Cards use a 1px `--border-card` hairline.
462
471
  - **Do not round the odd numbers.** `--card-pad` 21px and `--card-pad-sm` 17px are from the source
463
472
  file; the 11px of `--text-2xs` is deliberate.
package/INTEGRATION.md CHANGED
@@ -31,7 +31,7 @@ Not using a registry yet? A git dependency works with no publishing at all — t
31
31
  has no build step, so npm can use the checkout as-is:
32
32
 
33
33
  ```json
34
- "@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v2.6.0"
34
+ "@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v2.7.0"
35
35
  ```
36
36
 
37
37
  **Source-only package.** `.jsx` and `.vue` files are published as authored, so your
@@ -163,7 +163,7 @@ Text, weight and tracking follow the tier through `--control-text` / `--control-
163
163
  weight becomes 600 and all tracking is 0 — nothing to configure. `DESIGN.md` has the full token
164
164
  table and the rules behind it.
165
165
 
166
- ## Component index (121 components)
166
+ ## Component index (122 components)
167
167
  Import path is `@keyfunc/keybricks-ds/components/<group>/<Name>.jsx` (React) or `.vue` (Vue 3).
168
168
  Every component has a sibling `.d.ts` with its full props contract, and each group has a
169
169
  `.prompt.md` with usage notes.
@@ -214,6 +214,7 @@ import Textarea from '@keyfunc/keybricks-ds/components/forms/Textarea.vue'
214
214
  | `Combobox` | Type-to-filter single select, with keyboard nav and a no-results row. |
215
215
  | `MultiSelect` | Checkbox dropdown; picks render as removable tags with `+n` overflow. |
216
216
  | `SearchInput` | Search field with a leading glyph and a clear button. |
217
+ | `GlobalSearch` | The TopBar search: a quiet field with a ⌘K / Ctrl K hint that opens a 720px card — scopes, grouped results, Deep Search, and pinned rows that hand the question to the Prophet AI panel (`onAsk`). `GLOBAL_SEARCH_LABELS.en` / `.zh` hold the copy. |
217
218
  | `Checkbox` | A 14 / 16 / 16px box by tier, plus an indeterminate state for parent rows. |
218
219
  | `Radio` / `RadioGroup` | Single choice from 2–5 visible options (past five, use `Select`). `description` adds a muted second line; `row` lays out horizontally; `variant="cards"` renders bordered selectable cards for choices a user must weigh. Arrow keys move the selection. Vue: `v-model`. |
219
220
  | `Switch` | Immediate on/off setting (no Save button). Track 28×16 at sm, 32×18 at md and lg — a switch has two sizes. A knob glyph (`knobIcon` / `knobText`, one character) needs md; the sm knob is too small. `insideOn`/`insideOff` for text in the pill, `labelOn`/`labelOff` for captions beside it (or `label` for a single settings caption). `tone="semantic"` is danger-off → success-on — reserve it for states with real consequence. `beforeChange(next)` returns a promise; the knob spins until it settles. Vue: `v-model:checked`. |
@@ -522,7 +523,20 @@ Pin a minor range and update deliberately:
522
523
  - **Tokens outside CSS.** `tokens.json` / `tokens.js` / `tokens.d.ts` gained the tier tokens
523
524
  (`--control-*`, `--bar-h`, `--group-gap`, …) — 352 light tokens in all (2.0.2 adds `--danger-soft-hover`).
524
525
 
525
- ### 2.6.0(未发布)
526
+ ### 2.7.0
527
+
528
+ No API removed. Vue merges the 2.6.0 Button / Toast work above; React gets the same props.
529
+
530
+ - **`Button variant="ai"`** — for Prophet AI (方知) entry points only: 1px animated gradient ring, gradient tint and glow on hover; icon defaults to the new `prophet-sparkle` glyph. Tokens in `tokens/ai.css` (`--ai-gradient-*`, `--ai-tint*`, `--ai-spin-*`). `variant="dark"` stays for non-AI emphasis.
531
+ - **`GlobalSearch`** (new, forms/) — the TopBar search: a field with a ⌘K / Ctrl K hint that opens a 720px card (scopes, grouped results, Deep Search, pinned Ask Prophet AI row). It never shows AI answers; AI entries call `onAsk(question)`. Copy in `GLOBAL_SEARCH_LABELS.en` / `.zh`. Its collapsed field is a documented exception to `SearchInput` (`--text-secondary` placeholder, hover fill).
532
+ - **`TopBar`** renders `GlobalSearch` and no longer shows the black "AI Assistant" pill. `onAi` now receives the question; new `search` prop passes props to `GlobalSearch`. Old props keep working.
533
+ - **`Kbd`** — `"mod"`, `"alt"`, `"shift"`, `"enter"` follow the user's OS: ⌘ ⌥ ⇧ ↵ on macOS, Ctrl Alt Shift Enter elsewhere.
534
+ - **`Toast`** — tinted by tone (tone wash, solid tone border, tone-coloured text) so it reads against any page. React `Toast` gains `icon`, `children` and `closeLabel` (the Vue slots / prop from 2.6.0).
535
+ - **React `Button`** gains the 2.6.0 Vue props: `trailingIcon`, `nativeType`, `text`, element icons, `aria-busy`; `onClick` receives the event.
536
+ - **Icons:** new `prophet-sparkle`; the AI sparkle glyphs are redrawn.
537
+ - Docs site: every example card is sized to its content, so the page no longer jumps while cards load.
538
+
539
+ ### 2.6.0
526
540
 
527
541
  - Vue Button 支持原生点击事件、组件 / VNode 图标、图标及加载插槽、独立尾部图标、后备文本和原生按钮类型;旧 actnplanBtn 的适配方式见 [按钮适配说明](components/buttons/BUTTON_MIGRATION.md)。Vue 专用声明位于 `Button.vue.d.ts`,React 接口保持原样。
528
542
  - Vue 新增 `@keyfunc/keybricks-ds/vue/message` 和 `@keyfunc/keybricks-ds/vue/message-box` 命令式服务入口;提供消息堆叠与分组,以及 alert / confirm / prompt、输入校验、关闭拦截、应用上下文和可配置默认文案。
@@ -530,6 +544,7 @@ Pin a minor range and update deliberately:
530
544
  - 与 Element Plus 的 API 对照、接入示例和兼容边界见 [消息服务迁移说明](components/feedback/MESSAGE_SERVICES.md)。不承诺所有 Element Plus 功能及样式完全兼容。
531
545
  - 本次仅修改源码及发布元数据;未执行测试、类型检查、构建、生成脚本或浏览器验证,发布前需同步生成产物中的版本元数据。
532
546
 
547
+
533
548
  ### 2.5.1
534
549
 
535
550
  Fixes only — no API removed.
@@ -24,6 +24,7 @@
24
24
  "components/data/**",
25
25
  "components/display/**",
26
26
  "components/feedback/**",
27
+ "components/feedback/_internal/**",
27
28
  "components/forms/**",
28
29
  "components/icons/**",
29
30
  "components/navigation/**",
@@ -125,12 +126,12 @@
125
126
  "message": "<BulletRow> doesn't accept that prop. Declared props: label, value, target, max, ranges."
126
127
  },
127
128
  {
128
- "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|icon|iconSize|iconPosition|medium|disabled|loading|fullWidth|iconOnly|label|pressed|focused|onClick|children|style|key|ref|className|style|children)$/]",
129
- "message": "<Button> doesn't accept that prop. Declared props: variant, size, icon, iconSize, iconPosition, medium, disabled, loading, fullWidth, iconOnly, label, pressed, focused, onClick, children, style."
129
+ "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|icon|trailingIcon|iconSize|iconPosition|medium|disabled|loading|fullWidth|iconOnly|label|text|nativeType|hovered|pressed|focused|onClick|children|style|key|ref|className|style|children)$/]",
130
+ "message": "<Button> doesn't accept that prop. Declared props: variant, size, icon, trailingIcon, iconSize, iconPosition, medium, disabled, loading, fullWidth, iconOnly, label, text, nativeType, hovered, pressed, focused, onClick, children, style."
130
131
  },
131
132
  {
132
- "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|dark|outline|ghost|primary-soft|danger|danger-soft|text)$/]",
133
- "message": "<Button> variant must be one of 'primary' | 'dark' | 'outline' | 'ghost' | 'primary-soft' | 'danger' | 'danger-soft' | 'text'."
133
+ "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|dark|outline|ghost|primary-soft|danger|danger-soft|text|ai)$/]",
134
+ "message": "<Button> variant must be one of 'primary' | 'dark' | 'outline' | 'ghost' | 'primary-soft' | 'danger' | 'danger-soft' | 'text' | 'ai'."
134
135
  },
135
136
  {
136
137
  "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
@@ -140,6 +141,10 @@
140
141
  "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='iconPosition'] > Literal[value!=/^(?:left|right)$/]",
141
142
  "message": "<Button> iconPosition must be one of 'left' | 'right'."
142
143
  },
144
+ {
145
+ "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='nativeType'] > Literal[value!=/^(?:button|submit|reset)$/]",
146
+ "message": "<Button> nativeType must be one of 'button' | 'submit' | 'reset'."
147
+ },
143
148
  {
144
149
  "selector": "JSXOpeningElement[name.name='Candle'] > JSXAttribute > JSXIdentifier[name!=/^(?:t|o|h|l|c|v|key|ref|className|style|children)$/]",
145
150
  "message": "<Candle> doesn't accept that prop. Declared props: t, o, h, l, c, v."
@@ -276,6 +281,18 @@
276
281
  "selector": "JSXOpeningElement[name.name='GaugeBand'] > JSXAttribute > JSXIdentifier[name!=/^(?:upTo|color|key|ref|className|style|children)$/]",
277
282
  "message": "<GaugeBand> doesn't accept that prop. Declared props: upTo, color."
278
283
  },
284
+ {
285
+ "selector": "JSXOpeningElement[name.name='GlobalSearchItem'] > JSXAttribute > JSXIdentifier[name!=/^(?:kind|title|sub|meta|icon|tone|keywords|onSelect|key|ref|className|style|children)$/]",
286
+ "message": "<GlobalSearchItem> doesn't accept that prop. Declared props: kind, title, sub, meta, icon, tone, keywords, onSelect."
287
+ },
288
+ {
289
+ "selector": "JSXOpeningElement[name.name='GlobalSearchItem'] > JSXAttribute[name.name='kind'] > Literal[value!=/^(?:feature|document|member|action)$/]",
290
+ "message": "<GlobalSearchItem> kind must be one of 'feature' | 'document' | 'member' | 'action'."
291
+ },
292
+ {
293
+ "selector": "JSXOpeningElement[name.name='GlobalSearchItem'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:source|join|transform|merge|output)$/]",
294
+ "message": "<GlobalSearchItem> tone must be one of 'source' | 'join' | 'transform' | 'merge' | 'output'."
295
+ },
279
296
  {
280
297
  "selector": "JSXOpeningElement[name.name='HeatmapChart'] > JSXAttribute > JSXIdentifier[name!=/^(?:xLabels|yLabels|values|width|cellHeight|gap|scale|showValues|valueFormat|interactive|style|key|ref|className|style|children)$/]",
281
298
  "message": "<HeatmapChart> doesn't accept that prop. Declared props: xLabels, yLabels, values, width, cellHeight, gap, scale, showValues, valueFormat, interactive, style."
@@ -289,8 +306,8 @@
289
306
  "message": "<HistogramBucket> doesn't accept that prop. Declared props: from, to, n."
290
307
  },
291
308
  {
292
- "selector": "JSXOpeningElement[name.name='Icon'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|size|strokeWidth|color|style|className|key|ref|className|style|children)$/]",
293
- "message": "<Icon> doesn't accept that prop. Declared props: name, size, strokeWidth, color, style, className."
309
+ "selector": "JSXOpeningElement[name.name='Icon'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|size|strokeWidth|color|gradient|style|className|key|ref|className|style|children)$/]",
310
+ "message": "<Icon> doesn't accept that prop. Declared props: name, size, strokeWidth, color, gradient, style, className."
294
311
  },
295
312
  {
296
313
  "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|size|active|muted|danger|disabled|loading|label|pressed|focused|onClick|style|key|ref|className|style|children)$/]",
@@ -309,8 +326,12 @@
309
326
  "message": "<Input> size must be one of 'sm' | 'md' | 'lg'."
310
327
  },
311
328
  {
312
- "selector": "JSXOpeningElement[name.name='Kbd'] > JSXAttribute > JSXIdentifier[name!=/^(?:keys|style|key|ref|className|style|children)$/]",
313
- "message": "<Kbd> doesn't accept that prop. Declared props: keys, style."
329
+ "selector": "JSXOpeningElement[name.name='Kbd'] > JSXAttribute > JSXIdentifier[name!=/^(?:keys|platform|style|key|ref|className|style|children)$/]",
330
+ "message": "<Kbd> doesn't accept that prop. Declared props: keys, platform, style."
331
+ },
332
+ {
333
+ "selector": "JSXOpeningElement[name.name='Kbd'] > JSXAttribute[name.name='platform'] > Literal[value!=/^(?:auto|mac|win)$/]",
334
+ "message": "<Kbd> platform must be one of 'auto' | 'mac' | 'win'."
314
335
  },
315
336
  {
316
337
  "selector": "JSXOpeningElement[name.name='KeyValue'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|value|mono|style|key|ref|className|style|children)$/]",
@@ -565,8 +586,8 @@
565
586
  "message": "<TimelineItem> tone must be one of 'success' | 'danger' | 'warning' | 'info' | 'neutral'."
566
587
  },
567
588
  {
568
- "selector": "JSXOpeningElement[name.name='TopBar'] > JSXAttribute > JSXIdentifier[name!=/^(?:placeholder|onSearch|actions|aiLabel|onAi|onNotifications|onHelp|notificationsLabel|helpLabel|user|userMenu|style|key|ref|className|style|children)$/]",
569
- "message": "<TopBar> doesn't accept that prop. Declared props: placeholder, onSearch, actions, aiLabel, onAi, onNotifications, onHelp, notificationsLabel, helpLabel, user, userMenu, style."
589
+ "selector": "JSXOpeningElement[name.name='TopBar'] > JSXAttribute > JSXIdentifier[name!=/^(?:placeholder|onSearch|search|actions|aiLabel|onAi|onNotifications|onHelp|notificationsLabel|helpLabel|user|userMenu|style|key|ref|className|style|children)$/]",
590
+ "message": "<TopBar> doesn't accept that prop. Declared props: placeholder, onSearch, search, actions, aiLabel, onAi, onNotifications, onHelp, notificationsLabel, helpLabel, user, userMenu, style."
570
591
  },
571
592
  {
572
593
  "selector": "JSXOpeningElement[name.name='TreeItem'] > JSXAttribute > JSXIdentifier[name!=/^(?:key|title|label|icon|hue|count|tag|children|disabled|disableCheckbox|selectable|checkable|isLeaf|key|ref|className|style|children)$/]",
@@ -734,6 +755,9 @@
734
755
  "GaugeBand": {
735
756
  "replaces": []
736
757
  },
758
+ "GlobalSearchItem": {
759
+ "replaces": []
760
+ },
737
761
  "HeatmapChart": {
738
762
  "replaces": []
739
763
  },
@@ -902,6 +926,17 @@
902
926
  "--action-primary",
903
927
  "--action-primary-active",
904
928
  "--action-primary-hover",
929
+ "--ai-glow-blur",
930
+ "--ai-glow-opacity",
931
+ "--ai-gradient-end",
932
+ "--ai-gradient-start",
933
+ "--ai-gradient-stops",
934
+ "--ai-ring-rest-track",
935
+ "--ai-ring-width",
936
+ "--ai-spin-hover",
937
+ "--ai-spin-rest",
938
+ "--ai-tint",
939
+ "--ai-tint-press",
905
940
  "--amber-100",
906
941
  "--amber-200",
907
942
  "--amber-300",
@@ -1630,7 +1665,18 @@
1630
1665
  "--chart-heat-5": "color",
1631
1666
  "--chart-heat-ink": "color",
1632
1667
  "--press-filter": "other",
1633
- "--press-filter-strong": "other"
1668
+ "--press-filter-strong": "other",
1669
+ "--ai-gradient-start": "color",
1670
+ "--ai-gradient-end": "color",
1671
+ "--ai-gradient-stops": "color",
1672
+ "--ai-ring-rest-track": "color",
1673
+ "--ai-ring-width": "spacing",
1674
+ "--ai-tint": "other",
1675
+ "--ai-tint-press": "other",
1676
+ "--ai-glow-blur": "spacing",
1677
+ "--ai-glow-opacity": "other",
1678
+ "--ai-spin-rest": "other",
1679
+ "--ai-spin-hover": "other"
1634
1680
  },
1635
1681
  "fontFamilies": [
1636
1682
  "Inter"