banhaten 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +21 -9
  2. package/package.json +8 -2
  3. package/registry/components/accordion.tsx +37 -1
  4. package/registry/components/alert.tsx +14 -28
  5. package/registry/components/attribute.tsx +6 -10
  6. package/registry/components/autocomplete.tsx +637 -0
  7. package/registry/components/avatar.tsx +259 -24
  8. package/registry/components/badge.tsx +97 -35
  9. package/registry/components/button-group.tsx +1 -1
  10. package/registry/components/card.tsx +1 -1
  11. package/registry/components/checkbox.tsx +19 -16
  12. package/registry/components/date-picker-state.ts +253 -0
  13. package/registry/components/date-picker.tsx +115 -158
  14. package/registry/components/expanded/ActivityFeed.tsx +37 -23
  15. package/registry/components/expanded/Banner.tsx +54 -19
  16. package/registry/components/expanded/Breadcrumbs.tsx +10 -38
  17. package/registry/components/expanded/CatalogComponentsShowcase.tsx +11 -16
  18. package/registry/components/expanded/CatalogTag.tsx +4 -11
  19. package/registry/components/expanded/CommandBar.tsx +33 -53
  20. package/registry/components/expanded/EmptyState.tsx +155 -0
  21. package/registry/components/expanded/FileUpload.tsx +362 -59
  22. package/registry/components/expanded/OnboardingStepListItem.tsx +6 -10
  23. package/registry/components/expanded/PageHeader.tsx +2 -11
  24. package/registry/components/expanded/Slideout.tsx +12 -23
  25. package/registry/components/expanded/Steps.tsx +6 -8
  26. package/registry/components/expanded/Table.tsx +18 -40
  27. package/registry/components/expanded/Timeline.tsx +5 -24
  28. package/registry/components/expanded/activityFeed.css +10 -54
  29. package/registry/components/expanded/banner.css +8 -75
  30. package/registry/components/expanded/breadcrumbs.css +1 -1
  31. package/registry/components/expanded/commandBar.css +23 -26
  32. package/registry/components/expanded/divider.css +1 -1
  33. package/registry/components/expanded/emptyState.css +111 -0
  34. package/registry/components/expanded/fileUpload.css +304 -75
  35. package/registry/components/expanded/pageHeader.css +1 -1
  36. package/registry/components/expanded/slideout.css +1 -0
  37. package/registry/components/expanded/steps.css +15 -51
  38. package/registry/components/expanded/table.css +6 -1
  39. package/registry/components/expanded/timeline.css +18 -15
  40. package/registry/components/input-otp.tsx +574 -0
  41. package/registry/components/input.tsx +140 -59
  42. package/registry/components/menu.tsx +470 -80
  43. package/registry/components/pagination.tsx +6 -18
  44. package/registry/components/popover.tsx +840 -0
  45. package/registry/components/radio-card.tsx +25 -31
  46. package/registry/components/select-content.tsx +28 -123
  47. package/registry/components/select.tsx +13 -9
  48. package/registry/components/skeleton.css +57 -0
  49. package/registry/components/skeleton.tsx +482 -0
  50. package/registry/components/social-button.tsx +24 -90
  51. package/registry/components/spinner.tsx +91 -7
  52. package/registry/components/textarea.tsx +21 -36
  53. package/registry/components/toggle.tsx +7 -23
  54. package/registry/components/tooltip.tsx +8 -4
  55. package/registry/examples/attribute-demo.tsx +2 -2
  56. package/registry/examples/autocomplete-demo.tsx +109 -0
  57. package/registry/examples/avatar-demo.tsx +102 -47
  58. package/registry/examples/badge-demo.tsx +16 -0
  59. package/registry/examples/checkbox-demo.tsx +3 -8
  60. package/registry/examples/date-picker-demo.tsx +75 -22
  61. package/registry/examples/expanded/banner-demo.tsx +31 -6
  62. package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -0
  63. package/registry/examples/expanded/command-bar-demo.tsx +236 -0
  64. package/registry/examples/expanded/empty-state-demo.tsx +39 -0
  65. package/registry/examples/expanded/file-upload-demo.tsx +60 -0
  66. package/registry/examples/expanded/steps-demo.tsx +11 -0
  67. package/registry/examples/expanded/table-demo.tsx +142 -0
  68. package/registry/examples/input-demo.tsx +1 -1
  69. package/registry/examples/input-otp-demo.tsx +72 -0
  70. package/registry/examples/menu-demo.tsx +101 -88
  71. package/registry/examples/popover-demo.tsx +546 -0
  72. package/registry/examples/progress-demo.tsx +2 -2
  73. package/registry/examples/select-demo.tsx +32 -18
  74. package/registry/examples/skeleton-demo.tsx +56 -0
  75. package/registry/examples/social-button-demo.tsx +33 -33
  76. package/registry/examples/spinner-demo.tsx +59 -0
  77. package/registry/examples/tag-demo.tsx +1 -1
  78. package/registry/examples/textarea-demo.tsx +1 -1
  79. package/registry/index.json +266 -20
  80. package/registry/styles/globals.css +93 -3
  81. package/src/cli/index.js +997 -62
@@ -1,4 +1,11 @@
1
1
  import type { ReactNode } from "react";
2
+ import {
3
+ CheckIcon as LucideCheckIcon,
4
+ ChevronDownIcon as LucideChevronDownIcon,
5
+ PaperclipIcon as LucidePaperclipIcon,
6
+ UploadCloudIcon as LucideUploadCloudIcon,
7
+ XIcon,
8
+ } from "lucide-react";
2
9
  import "./slideout.css";
3
10
 
4
11
  export type SlideoutSize = "small" | "medium" | "large";
@@ -474,41 +481,23 @@ function Divider() {
474
481
  }
475
482
 
476
483
  function CloseIcon() {
477
- return (
478
- <svg aria-hidden="true" fill="none" height="20" viewBox="0 0 20 20" width="20">
479
- <path d="m5.25 5.25 9.5 9.5m0-9.5-9.5 9.5" stroke="currentColor" strokeLinecap="round" strokeWidth="1.8" />
480
- </svg>
481
- );
484
+ return <XIcon aria-hidden="true" height="20" strokeWidth={2.2} width="20" />;
482
485
  }
483
486
 
484
487
  function CheckIcon({ className = "" }: { className?: string }) {
485
488
  return (
486
- <svg aria-hidden="true" className={className} fill="none" height="14" viewBox="0 0 14 14" width="14">
487
- <path d="m3 7.1 2.4 2.4L10.6 4.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.8" />
488
- </svg>
489
+ <LucideCheckIcon aria-hidden="true" className={className} height="14" strokeWidth={2.6} width="14" />
489
490
  );
490
491
  }
491
492
 
492
493
  function ChevronDownIcon() {
493
- return (
494
- <svg aria-hidden="true" fill="none" height="20" viewBox="0 0 20 20" width="20">
495
- <path d="m5.5 7.5 4.5 4.5 4.5-4.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" />
496
- </svg>
497
- );
494
+ return <LucideChevronDownIcon aria-hidden="true" height="20" strokeWidth={2} width="20" />;
498
495
  }
499
496
 
500
497
  function PaperclipIcon() {
501
- return (
502
- <svg aria-hidden="true" fill="none" height="20" viewBox="0 0 20 20" width="20">
503
- <path d="m7.4 10.9 4.5-4.5a2.6 2.6 0 1 1 3.7 3.7l-6.2 6.2a4 4 0 0 1-5.7-5.7l6.3-6.3" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.6" />
504
- </svg>
505
- );
498
+ return <LucidePaperclipIcon aria-hidden="true" height="20" strokeWidth={1.8} width="20" />;
506
499
  }
507
500
 
508
501
  function UploadCloudIcon() {
509
- return (
510
- <svg aria-hidden="true" fill="none" height="20" viewBox="0 0 20 20" width="20">
511
- <path d="M7 13.5H5.8a3.3 3.3 0 0 1-.6-6.5 4.6 4.6 0 0 1 8.6-1.8 3.7 3.7 0 0 1 .6 7.3H13M10 8v7m0-7-2.4 2.4M10 8l2.4 2.4" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" />
512
- </svg>
513
- );
502
+ return <LucideUploadCloudIcon aria-hidden="true" height="20" strokeWidth={1.8} width="20" />;
514
503
  }
@@ -1,4 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
+ import { CheckIcon } from "lucide-react";
2
3
  import "./steps.css";
3
4
 
4
5
  export type StepIndicator = "icon" | "number";
@@ -135,7 +136,7 @@ export function HorizontalStepItem({
135
136
  showTrailingLine = true,
136
137
  }: HorizontalStepItemProps) {
137
138
  const rtl = dir === "rtl";
138
- const linePlacement = getHorizontalLinePlacement(alignment, rtl, showLeadingLine, showTrailingLine);
139
+ const linePlacement = getHorizontalLinePlacement(alignment, showLeadingLine, showTrailingLine);
139
140
  const text = (
140
141
  <div className="ds-horizontal-step-item__text">
141
142
  {label && <div className="ds-horizontal-step-item__label">{label}</div>}
@@ -195,7 +196,7 @@ export function VerticalStepItem({
195
196
  {showLine && <span className="ds-step-line ds-step-line--vertical" />}
196
197
  </div>
197
198
  );
198
- const markerFirst = (alignment === "leading" && !rtl) || (alignment === "trailing" && rtl);
199
+ const markerFirst = alignment === "leading";
199
200
  const renderedActions = actions ?? children;
200
201
  const renderedSlot = slotContent;
201
202
 
@@ -241,16 +242,13 @@ function StepMarker({ indicator, number }: { indicator: StepIndicator; number: R
241
242
 
242
243
  return (
243
244
  <span className="ds-step-marker ds-step-marker--icon">
244
- <svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
245
- <path d="m10.6 15.3-3.3-3.3 1.4-1.4 1.9 1.9 4.7-4.7 1.4 1.4-6.1 6.1Z" />
246
- </svg>
245
+ <CheckIcon aria-hidden="true" focusable="false" strokeWidth={3} />
247
246
  </span>
248
247
  );
249
248
  }
250
249
 
251
250
  function getHorizontalLinePlacement(
252
251
  alignment: StepAlignment,
253
- rtl: boolean,
254
252
  showLeadingLine: boolean,
255
253
  showTrailingLine: boolean,
256
254
  ) {
@@ -259,8 +257,8 @@ function getHorizontalLinePlacement(
259
257
  }
260
258
 
261
259
  if (alignment === "leading") {
262
- return rtl ? { before: showTrailingLine, after: false } : { before: false, after: showTrailingLine };
260
+ return { before: false, after: showTrailingLine };
263
261
  }
264
262
 
265
- return rtl ? { before: false, after: showLeadingLine } : { before: showLeadingLine, after: false };
263
+ return { before: showLeadingLine, after: false };
266
264
  }
@@ -1,4 +1,14 @@
1
1
  import { useEffect, useMemo, useRef, useState, type CSSProperties, type ReactNode } from "react";
2
+ import {
3
+ ArrowUpDownIcon,
4
+ CheckIcon as LucideCheckIcon,
5
+ EditIcon as LucideEditIcon,
6
+ EllipsisIcon,
7
+ EyeIcon,
8
+ FileIcon as LucideFileIcon,
9
+ MinusIcon,
10
+ Trash2Icon,
11
+ } from "lucide-react";
2
12
  import { Pagination, type PaginationPage, type PaginationProps } from "@/components/ui/pagination";
3
13
  import { Spinner } from "@/components/ui/spinner";
4
14
  import {
@@ -940,69 +950,37 @@ function renderActionIcon(icon: TableAction["icon"]) {
940
950
  }
941
951
 
942
952
  function CheckIcon() {
943
- return (
944
- <svg viewBox="0 0 16 16">
945
- <path d="m3.5 8 3 3 6-6.4" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.8" />
946
- </svg>
947
- );
953
+ return <LucideCheckIcon strokeWidth={2.6} />;
948
954
  }
949
955
 
950
956
  function IndeterminateIcon() {
951
- return (
952
- <svg viewBox="0 0 16 16">
953
- <path d="M4 8h8" fill="none" stroke="currentColor" strokeLinecap="round" strokeWidth="1.8" />
954
- </svg>
955
- );
957
+ return <MinusIcon strokeWidth={2.6} />;
956
958
  }
957
959
 
958
960
  function SortIcon({ direction }: { direction?: TableSortDirection }) {
959
961
  return (
960
- <svg aria-hidden="true" data-direction={direction ?? "none"} viewBox="0 0 16 16">
961
- <path d="m5 6 3-3 3 3M11 10l-3 3-3-3" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" />
962
- </svg>
962
+ <ArrowUpDownIcon aria-hidden="true" data-direction={direction ?? "none"} strokeWidth={1.9} />
963
963
  );
964
964
  }
965
965
 
966
966
  function MoreIcon() {
967
- return (
968
- <svg aria-hidden="true" viewBox="0 0 20 20">
969
- <path d="M5 10h.1M10 10h.1M15 10h.1" fill="none" stroke="currentColor" strokeLinecap="round" strokeWidth="2.4" />
970
- </svg>
971
- );
967
+ return <EllipsisIcon aria-hidden="true" strokeWidth={2.25} />;
972
968
  }
973
969
 
974
970
  function ViewIcon() {
975
- return (
976
- <svg aria-hidden="true" viewBox="0 0 20 20">
977
- <path d="M2.5 10s2.7-5 7.5-5 7.5 5 7.5 5-2.7 5-7.5 5-7.5-5-7.5-5Z" fill="none" stroke="currentColor" strokeLinejoin="round" strokeWidth="1.5" />
978
- <circle cx="10" cy="10" r="2.2" fill="none" stroke="currentColor" strokeWidth="1.5" />
979
- </svg>
980
- );
971
+ return <EyeIcon aria-hidden="true" strokeWidth={1.9} />;
981
972
  }
982
973
 
983
974
  function EditIcon() {
984
- return (
985
- <svg aria-hidden="true" viewBox="0 0 20 20">
986
- <path d="m4 14.6-.5 2 2-.5L15 6.6 13.5 5 4 14.6Z" fill="none" stroke="currentColor" strokeLinejoin="round" strokeWidth="1.5" />
987
- <path d="m12.4 6.1 1.5 1.5" fill="none" stroke="currentColor" strokeLinecap="round" strokeWidth="1.5" />
988
- </svg>
989
- );
975
+ return <LucideEditIcon aria-hidden="true" strokeWidth={1.9} />;
990
976
  }
991
977
 
992
978
  function DeleteIcon() {
993
- return (
994
- <svg aria-hidden="true" viewBox="0 0 20 20">
995
- <path d="M4 6h12M8 6V4h4v2m-6 0 .7 10h6.6L14 6" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" />
996
- </svg>
997
- );
979
+ return <Trash2Icon aria-hidden="true" strokeWidth={1.9} />;
998
980
  }
999
981
 
1000
982
  function FileIcon() {
1001
- return (
1002
- <svg viewBox="0 0 20 20">
1003
- <path d="M6 3h5.3L15 6.7V17H6V3Z" fill="none" stroke="currentColor" strokeLinejoin="round" strokeWidth="1.5" />
1004
- </svg>
1005
- );
983
+ return <LucideFileIcon strokeWidth={1.9} />;
1006
984
  }
1007
985
 
1008
986
  function BrandIcon() {
@@ -1,4 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
+ import { CheckIcon as LucideCheckIcon } from "lucide-react";
2
3
  import "./timeline.css";
3
4
 
4
5
  export type TimelineOrientation = "vertical" | "horizontal";
@@ -164,25 +165,9 @@ export function TimelineItem({
164
165
  dir={dir}
165
166
  role="listitem"
166
167
  >
167
- {orientation === "vertical" && rtl ? (
168
- <>
169
- {body}
170
- {indicator}
171
- {leadingDate}
172
- </>
173
- ) : orientation === "vertical" ? (
174
- <>
175
- {leadingDate}
176
- {indicator}
177
- {body}
178
- </>
179
- ) : (
180
- <>
181
- {leadingDate}
182
- {indicator}
183
- {body}
184
- </>
185
- )}
168
+ {leadingDate}
169
+ {indicator}
170
+ {body}
186
171
  </div>
187
172
  );
188
173
  }
@@ -227,9 +212,5 @@ export function Timeline({
227
212
  }
228
213
 
229
214
  function CheckIcon() {
230
- return (
231
- <svg aria-hidden="true" className="ds-timeline__check" fill="none" viewBox="0 0 18 18">
232
- <path d="m6.98 11.5 5.1-5.1 1.06 1.06-6.16 6.16-3.3-3.3 1.06-1.06 2.24 2.24Z" fill="currentColor" />
233
- </svg>
234
- );
215
+ return <LucideCheckIcon aria-hidden="true" className="ds-timeline__check" strokeWidth={3} />;
235
216
  }
@@ -39,17 +39,13 @@
39
39
  box-sizing: border-box;
40
40
  }
41
41
 
42
- .ds-activity-feed button,
43
- .ds-activity-feed a {
44
- font: inherit;
45
- }
46
-
47
42
  .ds-activity-feed a {
48
43
  text-decoration: none;
49
44
  }
50
45
 
51
46
  .ds-activity-feed--rtl {
52
47
  font-family: var(--bh-font-family);
48
+ margin-inline-end: auto;
53
49
  }
54
50
 
55
51
  .ds-activity-feed-item {
@@ -107,7 +103,7 @@
107
103
  }
108
104
 
109
105
  .ds-activity-feed-item--rtl .ds-activity-feed-item__content {
110
- align-items: flex-end;
106
+ align-items: flex-start;
111
107
  }
112
108
 
113
109
  .ds-activity-feed-item__container {
@@ -126,7 +122,7 @@
126
122
  }
127
123
 
128
124
  .ds-activity-feed-item--rtl .ds-activity-feed-item__topline {
129
- justify-content: flex-end;
125
+ justify-content: flex-start;
130
126
  }
131
127
 
132
128
  .ds-activity-feed-item__text {
@@ -144,7 +140,7 @@
144
140
  }
145
141
 
146
142
  .ds-activity-feed-item--rtl .ds-activity-feed-item__text {
147
- justify-content: flex-end;
143
+ justify-content: flex-start;
148
144
  text-align: right;
149
145
  }
150
146
 
@@ -204,7 +200,7 @@
204
200
  }
205
201
 
206
202
  .ds-activity-feed-item--rtl .ds-activity-feed-item__caption {
207
- justify-content: flex-end;
203
+ justify-content: flex-start;
208
204
  text-align: right;
209
205
  }
210
206
 
@@ -220,6 +216,11 @@
220
216
  line-height: var(--bh-text-body-sm-regular-line-height);
221
217
  }
222
218
 
219
+ .ds-activity-feed-item--rtl .ds-activity-feed-item__slot {
220
+ place-items: center start;
221
+ text-align: right;
222
+ }
223
+
223
224
  .ds-activity-feed-item__timestamp {
224
225
  width: 100%;
225
226
  min-width: 0;
@@ -240,51 +241,6 @@
240
241
  padding-top: var(--activity-feed-space-md);
241
242
  }
242
243
 
243
- .ds-activity-feed-item__button {
244
- position: relative;
245
- min-width: 0;
246
- height: calc(var(--bh-space-6xl-32) + var(--bh-space-xs-4));
247
- border: var(--bh-space-xxxs-1) solid transparent;
248
- border-radius: var(--activity-feed-control-radius);
249
- display: inline-flex;
250
- align-items: center;
251
- justify-content: center;
252
- padding: 0 var(--activity-feed-space-xl);
253
- box-shadow: var(--shadow-button-raised);
254
- cursor: pointer;
255
- font-size: var(--bh-text-body-md-font-size);
256
- font-weight: var(--bh-font-weight-medium);
257
- line-height: var(--bh-text-body-md-line-height);
258
- white-space: nowrap;
259
- }
260
-
261
- .ds-activity-feed-item__button--primary {
262
- border-color: var(--activity-feed-interactive-brand);
263
- background: var(--activity-feed-interactive-brand);
264
- box-shadow: var(--activity-feed-shadow-color-button);
265
- color: var(--activity-feed-content-on-brand);
266
- }
267
-
268
- .ds-activity-feed-item__button--secondary {
269
- border-color: var(--activity-feed-border-default);
270
- background: var(--activity-feed-interactive-secondary);
271
- color: var(--activity-feed-content-default);
272
- }
273
-
274
- .ds-activity-feed-item__button:hover {
275
- filter: brightness(var(--bh-activity-feed-completed-brightness));
276
- }
277
-
278
- .ds-activity-feed-item__button:disabled {
279
- cursor: not-allowed;
280
- opacity: var(--bh-opacity-muted);
281
- }
282
-
283
- .ds-activity-feed-item__button:focus-visible {
284
- outline: var(--bh-space-xxs-2) solid var(--activity-feed-content-link);
285
- outline-offset: var(--bh-space-xxs-2);
286
- }
287
-
288
244
  .ds-activity-feed-item__bottom-space {
289
245
  width: 100%;
290
246
  height: calc(var(--bh-space-4xl-20) + var(--bh-space-xxs-2));
@@ -2,14 +2,10 @@
2
2
  --banner-bg-brand: var(--bh-bg-brand-default);
3
3
  --banner-bg-brand-soft: var(--bh-bg-brand-soft);
4
4
  --banner-bg-muted: var(--bh-bg-muted);
5
- --banner-bg-white: var(--bh-bg-always-white);
6
5
  --banner-border-subtle: var(--bh-border-subtle);
7
- --banner-border-input: var(--bh-border-input);
8
6
  --banner-content-default: var(--bh-content-default);
9
- --banner-content-muted: var(--bh-content-muted);
10
7
  --banner-content-inverse: var(--bh-content-inverse);
11
8
  --banner-content-link: var(--bh-content-link);
12
- --banner-radius-control: var(--bh-control-default);
13
9
  --banner-radius-floating: var(--bh-radius-xl-10);
14
10
  --banner-space-xxs: var(--bh-space-xxs-2);
15
11
  --banner-space-xs: var(--bh-space-xs-4);
@@ -20,10 +16,8 @@
20
16
  --banner-height-slim: var(--bh-space-8xl-48);
21
17
  --banner-height-default: calc(var(--bh-space-8xl-48) + var(--bh-space-xl-12));
22
18
  --banner-height-title: calc(var(--bh-space-8xl-48) + var(--bh-space-xs-4));
23
- --banner-control-height: calc(var(--bh-space-6xl-32) + var(--bh-space-xs-4));
24
19
  --banner-input-width: var(--bh-input-width);
25
20
  --banner-shadow-floating: var(--shadow-component-default);
26
- --banner-shadow-control: var(--shadow-button-raised);
27
21
 
28
22
  box-sizing: border-box;
29
23
  position: relative;
@@ -74,8 +68,6 @@
74
68
  .ds-banner--brand {
75
69
  --banner-bg: var(--banner-bg-brand);
76
70
  --banner-fg: var(--banner-content-inverse);
77
- --banner-action-bg: var(--banner-bg-white);
78
- --banner-action-fg: var(--banner-content-default);
79
71
  --banner-link-fg: var(--banner-content-inverse);
80
72
  --banner-icon-fg: var(--banner-content-inverse);
81
73
  }
@@ -83,8 +75,6 @@
83
75
  .ds-banner--grey {
84
76
  --banner-bg: var(--banner-bg-muted);
85
77
  --banner-fg: var(--banner-content-default);
86
- --banner-action-bg: var(--banner-bg-white);
87
- --banner-action-fg: var(--banner-content-default);
88
78
  --banner-link-fg: var(--banner-content-link);
89
79
  --banner-icon-fg: var(--bh-content-subtle);
90
80
  border-color: var(--banner-border-subtle);
@@ -93,8 +83,6 @@
93
83
  .ds-banner--brand-light {
94
84
  --banner-bg: var(--banner-bg-brand-soft);
95
85
  --banner-fg: var(--banner-content-default);
96
- --banner-action-bg: var(--banner-bg-brand);
97
- --banner-action-fg: var(--banner-content-inverse);
98
86
  --banner-link-fg: var(--banner-content-link);
99
87
  --banner-icon-fg: var(--banner-content-link);
100
88
  }
@@ -167,10 +155,7 @@
167
155
  .ds-banner__message,
168
156
  .ds-banner__title,
169
157
  .ds-banner__separator,
170
- .ds-banner__description,
171
- .ds-banner__link,
172
- .ds-banner__action,
173
- .ds-banner__input {
158
+ .ds-banner__description {
174
159
  letter-spacing: var(--bh-text-body-md-medium-letter-spacing);
175
160
  white-space: nowrap;
176
161
  word-break: break-word;
@@ -201,51 +186,23 @@
201
186
  font-weight: var(--bh-font-weight-regular);
202
187
  }
203
188
 
204
- .ds-banner__link,
205
189
  .ds-banner__action,
206
190
  .ds-banner__close {
207
- appearance: none;
208
- margin: 0;
209
- border: 0;
210
- cursor: pointer;
211
- font-family: inherit;
212
- font-size: var(--bh-text-body-md-medium-font-size);
213
- font-weight: var(--bh-text-body-md-medium-font-weight);
214
- line-height: var(--bh-text-body-md-medium-line-height);
191
+ flex: 0 0 auto;
215
192
  }
216
193
 
217
194
  .ds-banner__link {
218
- padding: 0;
219
- background: transparent;
220
- color: var(--banner-link-fg);
221
- }
222
-
223
- .ds-banner--single-action-inline .ds-banner__link,
224
- .ds-banner__action {
225
- display: inline-flex;
226
- align-items: center;
227
- justify-content: center;
228
- min-width: 0;
229
- height: var(--banner-control-height);
230
- padding: var(--banner-space-md) var(--banner-space-xl);
231
- border-radius: var(--banner-radius-control);
232
- background: var(--banner-action-bg);
233
- color: var(--banner-action-fg);
234
- box-shadow: var(--banner-shadow-control);
195
+ flex: 0 0 auto;
235
196
  }
236
197
 
237
- .ds-banner--single-action-inline .ds-banner__link {
238
- padding-inline: var(--banner-space-xl);
198
+ .ds-banner--slim .ds-banner__link {
199
+ background: transparent;
200
+ color: var(--banner-link-fg);
201
+ box-shadow: none;
239
202
  }
240
203
 
241
204
  .ds-banner__close {
242
- width: var(--banner-space-3xl);
243
- height: var(--banner-space-3xl);
244
- padding: 0;
245
- border-radius: var(--bh-radius-full);
246
- background: transparent;
247
205
  color: var(--banner-icon-fg);
248
- box-shadow: none;
249
206
  }
250
207
 
251
208
  .ds-banner__close-icon {
@@ -262,32 +219,8 @@
262
219
  }
263
220
 
264
221
  .ds-banner__input {
222
+ flex: 0 1 var(--banner-input-width);
265
223
  width: var(--banner-input-width);
266
- height: var(--banner-control-height);
267
- min-width: 0;
268
- border: var(--bh-space-xxxs-1) solid var(--banner-border-input);
269
- border-radius: var(--banner-radius-control);
270
- background: var(--banner-bg-white);
271
- color: var(--banner-content-default);
272
- padding: 0 var(--banner-space-lg);
273
- font-family: inherit;
274
- font-size: var(--bh-text-body-md-regular-font-size);
275
- font-weight: var(--bh-text-body-md-regular-font-weight);
276
- line-height: var(--bh-text-body-md-regular-line-height);
277
- box-shadow: var(--shadow-input);
278
- }
279
-
280
- .ds-banner__input::placeholder {
281
- color: var(--banner-content-muted);
282
- opacity: var(--bh-opacity-100);
283
- }
284
-
285
- .ds-banner__link:focus-visible,
286
- .ds-banner__action:focus-visible,
287
- .ds-banner__close:focus-visible,
288
- .ds-banner__input:focus-visible {
289
- outline: var(--banner-space-xxs) solid var(--banner-content-link);
290
- outline-offset: var(--banner-space-xxs);
291
224
  }
292
225
 
293
226
  .ds-banner--rtl {
@@ -64,7 +64,7 @@
64
64
 
65
65
  .ds-breadcrumbs a:focus-visible {
66
66
  border-radius: var(--bh-radius-sm-4);
67
- outline: var(--bh-space-xxs-2) solid var(--bh-border-focus);
67
+ outline: var(--bh-focus-ring-width) solid var(--bh-border-focus);
68
68
  outline-offset: var(--bh-space-xxs-2);
69
69
  }
70
70
 
@@ -11,7 +11,6 @@
11
11
  --command-control-default: var(--bh-control-default);
12
12
  --command-input-default: var(--bh-interactive-input-default);
13
13
  --command-interactive-hover: var(--bh-interactive-ghost-hover);
14
- --command-interactive-secondary: var(--bh-interactive-secondary-default);
15
14
  --command-interactive-soft: var(--bh-interactive-soft-default);
16
15
  --command-radius-3xl: var(--bh-radius-3xl-16);
17
16
  --command-radius-full: var(--bh-radius-full);
@@ -38,8 +37,9 @@
38
37
  --command-item-height: calc(var(--bh-space-8xl-48) + var(--bh-space-md-8));
39
38
  --command-icon-size: var(--bh-space-6xl-32);
40
39
  --command-close-size: var(--bh-space-5xl-24);
41
- --command-shortcut-min-width: calc(var(--bh-space-5xl-24) + var(--bh-space-xs-4));
42
- --command-tag-height: calc(var(--bh-space-6xl-32) + var(--bh-space-xs-4));
40
+ --command-shortcut-height: var(--bh-space-5xl-24);
41
+ --command-shortcut-icon-size: var(--bh-space-3xl-16);
42
+ --command-shortcut-min-width: var(--bh-space-7xl-40);
43
43
  --command-empty-mobile-padding: calc(var(--bh-space-13xl-160) + var(--bh-space-5xl-24));
44
44
  --command-shadow-surface: var(--shadow-component-default);
45
45
 
@@ -181,6 +181,7 @@
181
181
  }
182
182
 
183
183
  .ds-command-bar__shortcut {
184
+ height: var(--command-shortcut-height);
184
185
  min-width: var(--command-shortcut-min-width);
185
186
  border: var(--bh-space-xxxs-1) solid var(--command-border-default);
186
187
  border-radius: var(--command-radius-md);
@@ -188,14 +189,26 @@
188
189
  flex: 0 0 auto;
189
190
  align-items: center;
190
191
  justify-content: center;
192
+ gap: var(--bh-space-xxs-2);
191
193
  background: var(--command-interactive-soft);
192
194
  color: var(--command-content-subtle);
193
- font-family: inherit;
194
- font-size: var(--bh-text-body-md-regular-font-size);
195
+ font-family: var(--bh-font-family);
196
+ font-size: var(--bh-text-body-sm-medium-font-size);
195
197
  font-style: normal;
196
- font-weight: var(--bh-text-body-md-regular-font-weight);
197
- line-height: var(--bh-text-body-md-regular-line-height);
198
- padding: var(--bh-space-xxs-2) var(--command-space-sm);
198
+ font-weight: var(--bh-text-body-sm-medium-font-weight);
199
+ line-height: 1;
200
+ padding: 0 var(--command-space-sm);
201
+ }
202
+
203
+ .ds-command-bar__shortcut-icon {
204
+ width: var(--command-shortcut-icon-size);
205
+ height: var(--command-shortcut-icon-size);
206
+ stroke-width: 1.8;
207
+ }
208
+
209
+ .ds-command-bar__shortcut-key {
210
+ display: block;
211
+ line-height: 1;
199
212
  }
200
213
 
201
214
  .ds-command-bar__close {
@@ -215,9 +228,8 @@
215
228
 
216
229
  .ds-command-bar__close:focus-visible,
217
230
  .ds-command-bar__search:focus-visible,
218
- .ds-command-bar__item:focus-visible,
219
- .ds-command-bar__tag:focus-visible {
220
- outline: var(--bh-space-xxs-2) solid var(--bh-border-focus);
231
+ .ds-command-bar__item:focus-visible {
232
+ outline: var(--bh-focus-ring-width) solid var(--bh-border-focus);
221
233
  outline-offset: var(--bh-space-xxs-2);
222
234
  }
223
235
 
@@ -386,22 +398,7 @@
386
398
  }
387
399
 
388
400
  .ds-command-bar__tag {
389
- appearance: none;
390
- height: var(--command-tag-height);
391
- border: var(--bh-space-xxxs-1) solid var(--command-border-default);
392
- border-radius: var(--command-control-default);
393
- display: inline-flex;
394
401
  flex: 0 0 auto;
395
- align-items: center;
396
- justify-content: center;
397
- background: var(--command-interactive-secondary);
398
- color: var(--command-content-default);
399
- cursor: pointer;
400
- font-size: var(--bh-text-body-md-medium-font-size);
401
- font-weight: var(--bh-text-body-md-medium-font-weight);
402
- line-height: var(--bh-text-body-md-medium-line-height);
403
- padding-inline: var(--command-space-xl);
404
- text-align: center;
405
402
  white-space: nowrap;
406
403
  }
407
404
 
@@ -70,6 +70,6 @@
70
70
  }
71
71
 
72
72
  .ds-content-divider__button:focus-visible {
73
- outline: var(--bh-space-xxs-2) solid var(--bh-border-focus);
73
+ outline: var(--bh-focus-ring-width) solid var(--bh-border-focus);
74
74
  outline-offset: var(--bh-space-xxs-2);
75
75
  }