@borisj74/bv-ds 0.1.2 → 0.1.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 (46) hide show
  1. package/dist/index.cjs +266 -69
  2. package/dist/index.d.cts +128 -49
  3. package/dist/index.d.ts +128 -49
  4. package/dist/index.js +266 -70
  5. package/package.json +11 -9
  6. package/src/components/Button/Button.tsx +1 -1
  7. package/src/components/ButtonDestructive/ButtonDestructive.tsx +2 -2
  8. package/src/components/CalendarCell/CalendarCell.tsx +63 -10
  9. package/src/components/CalendarCell/index.ts +5 -1
  10. package/src/components/CalendarCellDayWeekView/CalendarCellDayWeekView.tsx +28 -2
  11. package/src/components/CalendarCellDayWeekView/index.ts +5 -1
  12. package/src/components/CalendarColumnHeader/CalendarColumnHeader.tsx +21 -5
  13. package/src/components/CalendarColumnHeader/index.ts +2 -0
  14. package/src/components/CalendarEvent/CalendarEvent.tsx +69 -14
  15. package/src/components/CalendarEvent/index.ts +6 -1
  16. package/src/components/CalendarHeader/CalendarHeader.tsx +5 -1
  17. package/src/components/CalendarRowLabel/CalendarRowLabel.tsx +5 -3
  18. package/src/components/CalendarTimemarker/CalendarTimemarker.tsx +8 -2
  19. package/src/components/CalendarTimemarker/index.ts +1 -0
  20. package/src/components/CalendarViewDropdown/CalendarViewDropdown.tsx +19 -3
  21. package/src/components/ChartTooltip/ChartTooltip.tsx +1 -1
  22. package/src/components/Checkbox/checkboxBase.tsx +1 -1
  23. package/src/components/ContentFeatureText/ContentFeatureText.tsx +3 -2
  24. package/src/components/ContextMenu/ContextMenu.tsx +1 -1
  25. package/src/components/FeaturedIcon/FeaturedIcon.tsx +146 -0
  26. package/src/components/FeaturedIcon/index.ts +7 -0
  27. package/src/components/MessageAction/MessageAction.tsx +1 -1
  28. package/src/components/NavAccountCard/NavAccountCard.tsx +1 -1
  29. package/src/components/NavAccountCardMenuItem/NavAccountCardMenuItem.tsx +1 -1
  30. package/src/components/NavButton/NavButton.tsx +1 -1
  31. package/src/components/NavFeaturedCard/NavFeaturedCard.tsx +1 -1
  32. package/src/components/NavItemBase/NavItemBase.tsx +1 -1
  33. package/src/components/NavItemDropdownBase/NavItemDropdownBase.tsx +1 -1
  34. package/src/components/PageHeader/PageHeader.tsx +1 -1
  35. package/src/components/PaginationDotIndicator/PaginationDotIndicator.tsx +1 -1
  36. package/src/components/ProgressBar/ProgressBar.tsx +1 -1
  37. package/src/components/RadioGroupItem/RadioGroupItem.tsx +1 -1
  38. package/src/components/SelectMenuItem/SelectMenuItem.tsx +2 -2
  39. package/src/components/SidebarNavigation/SidebarNavigation.tsx +1 -1
  40. package/src/components/SocialButton/SocialButton.tsx +2 -2
  41. package/src/components/TableHeaderLabel/TableHeaderLabel.tsx +1 -1
  42. package/src/components/Toggle/Toggle.tsx +1 -1
  43. package/src/components/Tooltip/Tooltip.tsx +1 -1
  44. package/src/components/TreeViewItem/TreeViewItem.tsx +1 -1
  45. package/src/components/VerificationCodeInput/VerificationCodeInput.tsx +1 -1
  46. package/src/index.ts +1 -0
package/dist/index.js CHANGED
@@ -5073,7 +5073,7 @@ function AdvancedFilterBar({
5073
5073
  }
5074
5074
  var hierarchyClasses = {
5075
5075
  Primary: "bg-bg-brand-solid text-text-white border-2 border-white/[0.12] shadow-skeuomorphic hover:bg-bg-brand-solid-hover",
5076
- Secondary: "bg-bg-primary text-text-secondary border border-border-border-primary shadow-skeuomorphic hover:bg-bg-primary-hover",
5076
+ Secondary: "bg-bg-primary text-text-secondary border border-border-primary shadow-skeuomorphic hover:bg-bg-primary-hover",
5077
5077
  Tertiary: "bg-transparent text-text-tertiary border-0 hover:bg-bg-secondary",
5078
5078
  "Link color": "bg-transparent text-text-brand-secondary border-0 p-0 hover:text-text-brand-secondary-hover",
5079
5079
  "Link gray": "bg-transparent text-text-tertiary border-0 p-0 hover:text-text-tertiary-hover"
@@ -5961,7 +5961,7 @@ function ButtonCloseX({
5961
5961
  }
5962
5962
  var hierarchyClasses2 = {
5963
5963
  Primary: "bg-bg-error-solid text-text-white border-2 border-white/[0.12] shadow-skeuomorphic hover:bg-bg-error-solid-hover",
5964
- Secondary: "bg-bg-primary text-text-error-primary border border-border-border-error-subtle shadow-skeuomorphic hover:bg-bg-error-primary",
5964
+ Secondary: "bg-bg-primary text-text-error-primary border border-border-error-subtle shadow-skeuomorphic hover:bg-bg-error-primary",
5965
5965
  Tertiary: "bg-transparent text-text-error-primary border-0 hover:bg-bg-error-primary",
5966
5966
  Link: "bg-transparent text-text-error-primary border-0 p-0 hover:text-text-error-primary"
5967
5967
  };
@@ -6096,6 +6096,97 @@ function ButtonUtility({
6096
6096
  ) : null
6097
6097
  ] });
6098
6098
  }
6099
+ var dotClasses = {
6100
+ neutral: "bg-utility-neutral-500",
6101
+ brand: "bg-utility-brand-500",
6102
+ emerald: "bg-utility-emerald-500",
6103
+ blue: "bg-utility-blue-500",
6104
+ indigo: "bg-utility-indigo-500",
6105
+ purple: "bg-utility-purple-500",
6106
+ pink: "bg-utility-pink-500",
6107
+ orange: "bg-utility-orange-500",
6108
+ amber: "bg-utility-amber-500"
6109
+ };
6110
+ var filledClasses = {
6111
+ neutral: "bg-utility-neutral-50 border-utility-neutral-200 text-utility-neutral-700",
6112
+ brand: "bg-utility-brand-50 border-utility-brand-200 text-utility-brand-700",
6113
+ emerald: "bg-utility-emerald-50 border-utility-emerald-200 text-utility-emerald-700",
6114
+ blue: "bg-utility-blue-50 border-utility-blue-200 text-utility-blue-700",
6115
+ indigo: "bg-utility-indigo-50 border-utility-indigo-200 text-utility-indigo-700",
6116
+ purple: "bg-utility-purple-50 border-utility-purple-200 text-utility-purple-700",
6117
+ pink: "bg-utility-pink-50 border-utility-pink-200 text-utility-pink-700",
6118
+ orange: "bg-utility-orange-50 border-utility-orange-200 text-utility-orange-700",
6119
+ amber: "bg-utility-amber-50 border-utility-amber-200 text-utility-amber-700"
6120
+ };
6121
+ var filledHoverClasses = {
6122
+ neutral: "bg-utility-neutral-100",
6123
+ brand: "bg-utility-brand-100",
6124
+ emerald: "bg-utility-emerald-100",
6125
+ blue: "bg-utility-blue-100",
6126
+ indigo: "bg-utility-indigo-100",
6127
+ purple: "bg-utility-purple-100",
6128
+ pink: "bg-utility-pink-100",
6129
+ orange: "bg-utility-orange-100",
6130
+ amber: "bg-utility-amber-100"
6131
+ };
6132
+ var timeClasses = {
6133
+ neutral: "text-utility-neutral-600",
6134
+ brand: "text-utility-brand-600",
6135
+ emerald: "text-utility-emerald-600",
6136
+ blue: "text-utility-blue-600",
6137
+ indigo: "text-utility-indigo-600",
6138
+ purple: "text-utility-purple-600",
6139
+ pink: "text-utility-pink-600",
6140
+ orange: "text-utility-orange-600",
6141
+ amber: "text-utility-amber-600"
6142
+ };
6143
+ function CalendarEvent({
6144
+ title,
6145
+ time: time2,
6146
+ color: color2 = "neutral",
6147
+ filled = false,
6148
+ breakpoint = "desktop",
6149
+ state = "default",
6150
+ className
6151
+ }) {
6152
+ if (breakpoint === "mobile") {
6153
+ return /* @__PURE__ */ jsx(
6154
+ "span",
6155
+ {
6156
+ className: clsx_default("inline-block size-2 rounded-full", dotClasses[color2], className),
6157
+ role: "img",
6158
+ "aria-label": time2 ? `${title}, ${time2}` : title
6159
+ }
6160
+ );
6161
+ }
6162
+ return /* @__PURE__ */ jsxs(
6163
+ "div",
6164
+ {
6165
+ className: clsx_default(
6166
+ "flex w-full items-center gap-md rounded-sm border px-md py-xs font-body text-xs",
6167
+ filled ? clsx_default(filledClasses[color2], state === "hover" && filledHoverClasses[color2]) : clsx_default(
6168
+ "border-border-secondary bg-bg-primary text-text-secondary",
6169
+ state === "hover" && "bg-bg-primary-hover"
6170
+ ),
6171
+ className
6172
+ ),
6173
+ children: [
6174
+ /* @__PURE__ */ jsx("span", { className: clsx_default("size-2 shrink-0 rounded-full", dotClasses[color2]), "aria-hidden": true }),
6175
+ /* @__PURE__ */ jsx("span", { className: "truncate font-semibold", children: title }),
6176
+ time2 ? /* @__PURE__ */ jsx(
6177
+ "span",
6178
+ {
6179
+ className: clsx_default(
6180
+ "ml-auto shrink-0 font-normal",
6181
+ filled ? timeClasses[color2] : "text-text-tertiary"
6182
+ ),
6183
+ children: time2
6184
+ }
6185
+ ) : null
6186
+ ]
6187
+ }
6188
+ );
6189
+ }
6099
6190
  function PlusIcon2() {
6100
6191
  return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-4", "aria-hidden": true, children: /* @__PURE__ */ jsx(
6101
6192
  "path",
@@ -6110,19 +6201,26 @@ function PlusIcon2() {
6110
6201
  }
6111
6202
  function CalendarCell({
6112
6203
  date: date2,
6204
+ events,
6113
6205
  children,
6114
6206
  moreCount,
6115
- muted = false,
6207
+ isToday,
6208
+ isSelected = false,
6209
+ isDisabled,
6116
6210
  current = false,
6211
+ muted = false,
6212
+ breakpoint = "desktop",
6117
6213
  onAdd,
6118
6214
  className
6119
6215
  }) {
6216
+ const today = isToday ?? current;
6217
+ const disabled = isDisabled ?? muted;
6120
6218
  return /* @__PURE__ */ jsxs(
6121
6219
  "div",
6122
6220
  {
6123
6221
  className: clsx_default(
6124
6222
  "group relative flex min-h-[120px] flex-col gap-xs bg-bg-primary p-md font-body",
6125
- muted && "bg-bg-secondary",
6223
+ disabled && "bg-bg-secondary",
6126
6224
  className
6127
6225
  ),
6128
6226
  children: [
@@ -6130,12 +6228,31 @@ function CalendarCell({
6130
6228
  "span",
6131
6229
  {
6132
6230
  className: clsx_default(
6133
- "text-xs font-semibold",
6134
- current ? "text-text-brand-secondary" : muted ? "text-text-quaternary" : "text-text-secondary"
6231
+ "flex size-6 items-center justify-center text-xs font-semibold",
6232
+ today ? "rounded-full bg-bg-brand-solid text-white" : isSelected ? "rounded-full bg-bg-secondary text-text-secondary" : disabled ? "text-text-quaternary" : "text-text-secondary"
6135
6233
  ),
6136
6234
  children: date2
6137
6235
  }
6138
6236
  ),
6237
+ events && events.length > 0 ? /* @__PURE__ */ jsx(
6238
+ "div",
6239
+ {
6240
+ className: clsx_default(
6241
+ breakpoint === "mobile" ? "flex flex-row flex-wrap gap-xxs" : "flex flex-col gap-xs"
6242
+ ),
6243
+ children: events.map((ev, i) => /* @__PURE__ */ jsx(
6244
+ CalendarEvent,
6245
+ {
6246
+ title: ev.title,
6247
+ time: ev.time,
6248
+ color: ev.color,
6249
+ filled: true,
6250
+ breakpoint
6251
+ },
6252
+ i
6253
+ ))
6254
+ }
6255
+ ) : null,
6139
6256
  children ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-xs", children }) : null,
6140
6257
  moreCount && moreCount > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-xs font-medium text-text-tertiary", children: [
6141
6258
  moreCount,
@@ -6155,6 +6272,13 @@ function CalendarCell({
6155
6272
  }
6156
6273
  );
6157
6274
  }
6275
+ var heightClasses = {
6276
+ empty: "h-[48px]",
6277
+ "30min": "h-[48px]",
6278
+ "60min": "h-[96px]",
6279
+ "90min": "h-[144px]",
6280
+ "120min": "h-[192px]"
6281
+ };
6158
6282
  function PlusIcon3() {
6159
6283
  return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-4", "aria-hidden": true, children: /* @__PURE__ */ jsx(
6160
6284
  "path",
@@ -6168,6 +6292,8 @@ function PlusIcon3() {
6168
6292
  ) });
6169
6293
  }
6170
6294
  function CalendarCellDayWeekView({
6295
+ type,
6296
+ state = "default",
6171
6297
  children,
6172
6298
  onAdd,
6173
6299
  muted = false,
@@ -6177,8 +6303,9 @@ function CalendarCellDayWeekView({
6177
6303
  "div",
6178
6304
  {
6179
6305
  className: clsx_default(
6180
- "group relative min-h-[64px] border-b border-border-secondary p-xs font-body",
6181
- muted ? "bg-bg-secondary" : "bg-bg-primary",
6306
+ "group relative border-b border-border-secondary p-xs font-body transition-colors hover:bg-bg-secondary",
6307
+ type ? heightClasses[type] : "min-h-[64px]",
6308
+ muted ? "bg-bg-secondary" : state === "hover" ? "bg-bg-secondary" : "bg-bg-primary",
6182
6309
  className
6183
6310
  ),
6184
6311
  children: [
@@ -6200,16 +6327,20 @@ function CalendarCellDayWeekView({
6200
6327
  function CalendarColumnHeader({
6201
6328
  weekday,
6202
6329
  date: date2,
6330
+ type,
6203
6331
  current = false,
6204
6332
  orientation = "vertical",
6333
+ breakpoint = "desktop",
6205
6334
  className
6206
6335
  }) {
6336
+ const state = type ?? (current ? "selected" : "default");
6207
6337
  return /* @__PURE__ */ jsxs(
6208
6338
  "div",
6209
6339
  {
6210
6340
  className: clsx_default(
6211
6341
  "flex items-center justify-center gap-md py-md font-body",
6212
6342
  orientation === "vertical" && "flex-col gap-xs",
6343
+ breakpoint === "desktop" && "w-[160px]",
6213
6344
  className
6214
6345
  ),
6215
6346
  children: [
@@ -6219,9 +6350,11 @@ function CalendarColumnHeader({
6219
6350
  {
6220
6351
  className: clsx_default(
6221
6352
  "flex items-center justify-center text-xs font-semibold",
6222
- current ? "size-6 rounded-full bg-brand-solid text-white" : "text-text-secondary"
6353
+ state === "selected" && "size-6 rounded-full bg-bg-brand-solid text-white",
6354
+ state === "today" && "border-b-2 border-border-brand pb-xxs text-text-brand-secondary",
6355
+ state === "default" && "text-text-secondary"
6223
6356
  ),
6224
- "aria-current": current ? "date" : void 0,
6357
+ "aria-current": state !== "default" ? "date" : void 0,
6225
6358
  children: date2
6226
6359
  }
6227
6360
  )
@@ -6244,51 +6377,6 @@ function CalendarDateIcon({ month, day, className }) {
6244
6377
  }
6245
6378
  );
6246
6379
  }
6247
- var dotClasses = {
6248
- neutral: "bg-utility-neutral-500",
6249
- brand: "bg-utility-brand-500",
6250
- emerald: "bg-utility-emerald-500",
6251
- blue: "bg-utility-blue-500",
6252
- indigo: "bg-utility-indigo-500",
6253
- purple: "bg-utility-purple-500",
6254
- pink: "bg-utility-pink-500",
6255
- orange: "bg-utility-orange-500",
6256
- amber: "bg-utility-amber-500"
6257
- };
6258
- var filledClasses = {
6259
- neutral: "bg-utility-neutral-100 text-utility-neutral-700",
6260
- brand: "bg-utility-brand-100 text-utility-brand-700",
6261
- emerald: "bg-utility-emerald-100 text-utility-emerald-700",
6262
- blue: "bg-utility-blue-100 text-utility-blue-700",
6263
- indigo: "bg-utility-indigo-100 text-utility-indigo-700",
6264
- purple: "bg-utility-purple-100 text-utility-purple-700",
6265
- pink: "bg-utility-pink-100 text-utility-pink-700",
6266
- orange: "bg-utility-orange-100 text-utility-orange-700",
6267
- amber: "bg-utility-amber-100 text-utility-amber-700"
6268
- };
6269
- function CalendarEvent({
6270
- title,
6271
- time: time2,
6272
- color: color2 = "neutral",
6273
- filled = false,
6274
- className
6275
- }) {
6276
- return /* @__PURE__ */ jsxs(
6277
- "div",
6278
- {
6279
- className: clsx_default(
6280
- "flex w-full items-center gap-md rounded-sm px-md py-xs font-body text-xs",
6281
- filled ? filledClasses[color2] : "border border-border-secondary bg-bg-primary text-text-secondary",
6282
- className
6283
- ),
6284
- children: [
6285
- /* @__PURE__ */ jsx("span", { className: clsx_default("size-2 shrink-0 rounded-full", dotClasses[color2]), "aria-hidden": true }),
6286
- /* @__PURE__ */ jsx("span", { className: "truncate font-semibold", children: title }),
6287
- time2 ? /* @__PURE__ */ jsx("span", { className: clsx_default("ml-auto shrink-0 font-normal", !filled && "text-text-tertiary"), children: time2 }) : null
6288
- ]
6289
- }
6290
- );
6291
- }
6292
6380
  var accentClasses = {
6293
6381
  neutral: "border-l-utility-neutral-500",
6294
6382
  brand: "border-l-utility-brand-500",
@@ -6355,11 +6443,13 @@ function CalendarEventDayWeekView({
6355
6443
  function CalendarHeader({
6356
6444
  title,
6357
6445
  range: range6,
6446
+ supportingText,
6358
6447
  badge,
6359
6448
  dateIcon,
6360
6449
  actions,
6361
6450
  className
6362
6451
  }) {
6452
+ const subtitle = range6 ?? supportingText;
6363
6453
  return /* @__PURE__ */ jsxs(
6364
6454
  "div",
6365
6455
  {
@@ -6375,7 +6465,7 @@ function CalendarHeader({
6375
6465
  /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold text-text-primary", children: title }),
6376
6466
  badge
6377
6467
  ] }),
6378
- range6 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-text-tertiary", children: range6 }) : null
6468
+ subtitle ? /* @__PURE__ */ jsx("p", { className: "text-sm text-text-tertiary", children: subtitle }) : null
6379
6469
  ] })
6380
6470
  ] }),
6381
6471
  actions ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-md", children: actions }) : null
@@ -6383,7 +6473,7 @@ function CalendarHeader({
6383
6473
  }
6384
6474
  );
6385
6475
  }
6386
- function CalendarRowLabel({ label, className }) {
6476
+ function CalendarRowLabel({ label, time: time2, className }) {
6387
6477
  return /* @__PURE__ */ jsx(
6388
6478
  "div",
6389
6479
  {
@@ -6391,7 +6481,7 @@ function CalendarRowLabel({ label, className }) {
6391
6481
  "pr-md text-right text-xs font-medium text-text-quaternary font-body",
6392
6482
  className
6393
6483
  ),
6394
- children: label
6484
+ children: time2 ?? label
6395
6485
  }
6396
6486
  );
6397
6487
  }
@@ -6401,15 +6491,17 @@ var Label = ({ time: time2 }) => /* @__PURE__ */ jsx("span", { className: "shrin
6401
6491
  function CalendarTimemarker({
6402
6492
  time: time2,
6403
6493
  align = "left",
6494
+ breakpoint = "desktop",
6404
6495
  className
6405
6496
  }) {
6497
+ const showLabel = breakpoint === "desktop";
6406
6498
  return /* @__PURE__ */ jsx("div", { className: clsx_default("flex w-full items-center gap-xs font-body", className), children: align === "center" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
6407
6499
  /* @__PURE__ */ jsx(Dot, {}),
6408
6500
  /* @__PURE__ */ jsx(Line, {}),
6409
- /* @__PURE__ */ jsx(Label, { time: time2 }),
6501
+ showLabel ? /* @__PURE__ */ jsx(Label, { time: time2 }) : null,
6410
6502
  /* @__PURE__ */ jsx(Line, {})
6411
6503
  ] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
6412
- /* @__PURE__ */ jsx(Label, { time: time2 }),
6504
+ showLabel ? /* @__PURE__ */ jsx(Label, { time: time2 }) : null,
6413
6505
  /* @__PURE__ */ jsx(Dot, {}),
6414
6506
  /* @__PURE__ */ jsx(Line, {})
6415
6507
  ] }) });
@@ -6434,10 +6526,19 @@ function Chevron2() {
6434
6526
  function CalendarViewDropdown({
6435
6527
  value,
6436
6528
  onChange,
6529
+ onSelect,
6530
+ open: openProp,
6531
+ onOpenChange,
6437
6532
  options = DEFAULT_OPTIONS,
6438
6533
  className
6439
6534
  }) {
6440
- const [open, setOpen] = useState(false);
6535
+ const [internalOpen, setInternalOpen] = useState(false);
6536
+ const isControlled = openProp !== void 0;
6537
+ const open = isControlled ? openProp : internalOpen;
6538
+ const setOpen = (next) => {
6539
+ if (!isControlled) setInternalOpen(next);
6540
+ onOpenChange?.(next);
6541
+ };
6441
6542
  const selected = options.find((o) => o.value === value) ?? options[0];
6442
6543
  return /* @__PURE__ */ jsxs("div", { className: clsx_default("relative inline-block font-body", className), children: [
6443
6544
  /* @__PURE__ */ jsxs(
@@ -6446,7 +6547,7 @@ function CalendarViewDropdown({
6446
6547
  type: "button",
6447
6548
  "aria-haspopup": "listbox",
6448
6549
  "aria-expanded": open,
6449
- onClick: () => setOpen((v) => !v),
6550
+ onClick: () => setOpen(!open),
6450
6551
  className: "inline-flex items-center gap-md rounded-md border border-border-primary bg-bg-primary px-lg py-md text-sm font-semibold text-text-secondary shadow-skeuomorphic transition-colors hover:bg-bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-brand focus-visible:ring-offset-2 focus-visible:ring-offset-bg-primary",
6451
6552
  children: [
6452
6553
  selected.label,
@@ -6467,6 +6568,7 @@ function CalendarViewDropdown({
6467
6568
  type: "button",
6468
6569
  onClick: () => {
6469
6570
  onChange?.(opt.value);
6571
+ onSelect?.(opt.value);
6470
6572
  setOpen(false);
6471
6573
  },
6472
6574
  className: "flex w-full items-center gap-md rounded-sm px-md py-xs text-sm font-medium text-text-secondary transition-colors hover:bg-bg-primary-hover",
@@ -6478,7 +6580,7 @@ function CalendarViewDropdown({
6478
6580
  "flex size-4 shrink-0 items-center justify-center rounded-full border",
6479
6581
  isSelected ? "border-border-brand" : "border-border-primary"
6480
6582
  ),
6481
- children: isSelected ? /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-brand-solid" }) : null
6583
+ children: isSelected ? /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-bg-brand-solid" }) : null
6482
6584
  }
6483
6585
  ),
6484
6586
  /* @__PURE__ */ jsx("span", { className: "flex-1 text-left", children: opt.label }),
@@ -28849,7 +28951,7 @@ function CheckControlVisual({
28849
28951
  "peer-focus-visible:ring-2 peer-focus-visible:ring-border-brand peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-bg-primary",
28850
28952
  type === "radio" ? "rounded-full" : "rounded-sm",
28851
28953
  boxSize[size],
28852
- disabled ? "border-border-primary bg-bg-tertiary" : active ? "border-brand-solid bg-brand-solid" : "border-border-primary bg-bg-primary"
28954
+ disabled ? "border-border-primary bg-bg-tertiary" : active ? "border-bg-brand-solid bg-bg-brand-solid" : "border-border-primary bg-bg-primary"
28853
28955
  ),
28854
28956
  children: [
28855
28957
  type === "checkbox" && checked && !indeterminate ? /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: glyphSize[size], "aria-hidden": true, children: /* @__PURE__ */ jsx(
@@ -29298,7 +29400,7 @@ function ContentDivider({
29298
29400
  );
29299
29401
  }
29300
29402
  var sizeConfig = {
29301
- sm: { box: "p-3xl rounded-xl", heading: "text-lg", body: "text-md" },
29403
+ sm: { box: "p-3xl rounded-2xl", heading: "text-lg", body: "text-md" },
29302
29404
  md: { box: "p-4xl rounded-2xl", heading: "text-xl", body: "text-lg" }
29303
29405
  };
29304
29406
  function ContentFeatureText({
@@ -29949,6 +30051,100 @@ function EmptyState({
29949
30051
  }
29950
30052
  );
29951
30053
  }
30054
+ var boxSize2 = {
30055
+ sm: "size-8",
30056
+ // 32px
30057
+ md: "size-10",
30058
+ // 40px
30059
+ lg: "size-12",
30060
+ // 48px
30061
+ xl: "size-14"
30062
+ // 56px
30063
+ };
30064
+ var iconPx = {
30065
+ sm: 16,
30066
+ md: 20,
30067
+ lg: 24,
30068
+ xl: 28
30069
+ };
30070
+ function radiusFor(theme) {
30071
+ if (theme === "light") return "rounded-full";
30072
+ if (theme === "modern-neue") return "rounded-lg";
30073
+ return "rounded-xl";
30074
+ }
30075
+ var lightBg = {
30076
+ brand: "bg-bg-brand-secondary",
30077
+ gray: "bg-bg-secondary",
30078
+ error: "bg-bg-error-secondary",
30079
+ warning: "bg-bg-warning-secondary",
30080
+ success: "bg-bg-success-secondary"
30081
+ };
30082
+ var lightFg = {
30083
+ brand: "text-fg-brand-primary",
30084
+ gray: "text-fg-secondary",
30085
+ error: "text-fg-error-primary",
30086
+ warning: "text-fg-warning-primary",
30087
+ success: "text-fg-success-primary"
30088
+ };
30089
+ var darkBg = {
30090
+ brand: "bg-bg-brand-solid",
30091
+ gray: "bg-bg-secondary-solid",
30092
+ error: "bg-bg-error-solid",
30093
+ warning: "bg-bg-warning-solid",
30094
+ success: "bg-bg-success-solid"
30095
+ };
30096
+ var gradientFill = {
30097
+ brand: "bg-gradient-to-br from-utility-brand-50 to-utility-brand-200",
30098
+ gray: "bg-gradient-to-br from-utility-neutral-50 to-utility-neutral-200",
30099
+ error: "bg-gradient-to-br from-utility-red-50 to-utility-red-200",
30100
+ warning: "bg-gradient-to-br from-utility-amber-50 to-utility-amber-200",
30101
+ success: "bg-gradient-to-br from-utility-green-50 to-utility-green-200"
30102
+ };
30103
+ function FeaturedIcon({
30104
+ icon,
30105
+ color: color2 = "brand",
30106
+ theme = "light",
30107
+ size = "md",
30108
+ className,
30109
+ ...rest
30110
+ }) {
30111
+ const px = iconPx[size];
30112
+ const themeClasses = clsx_default(
30113
+ theme === "light" && [lightBg[color2], lightFg[color2]],
30114
+ theme === "dark" && [
30115
+ darkBg[color2],
30116
+ "text-fg-white border-2 border-[rgba(255,255,255,0.12)] shadow-skeuomorphic"
30117
+ ],
30118
+ theme === "gradient" && [gradientFill[color2], "text-fg-white"],
30119
+ theme === "modern" && [
30120
+ "bg-bg-primary text-fg-secondary border border-border-primary shadow-skeuomorphic"
30121
+ ],
30122
+ theme === "modern-neue" && [
30123
+ "bg-bg-primary text-fg-secondary border border-border-primary shadow-xs"
30124
+ ]
30125
+ );
30126
+ return /* @__PURE__ */ jsx(
30127
+ "span",
30128
+ {
30129
+ className: clsx_default(
30130
+ "inline-flex shrink-0 items-center justify-center",
30131
+ boxSize2[size],
30132
+ radiusFor(theme),
30133
+ themeClasses,
30134
+ className
30135
+ ),
30136
+ ...rest,
30137
+ children: /* @__PURE__ */ jsx(
30138
+ "span",
30139
+ {
30140
+ "aria-hidden": "true",
30141
+ style: { width: px, height: px, display: "inline-flex" },
30142
+ children: icon
30143
+ }
30144
+ )
30145
+ }
30146
+ );
30147
+ }
29952
30148
  var avatarSize2 = {
29953
30149
  sm: "size-8",
29954
30150
  // 32px
@@ -31399,7 +31595,7 @@ function MetricItem({
31399
31595
  }
31400
31596
  );
31401
31597
  }
31402
- var FeaturedIcon = ({ children }) => /* @__PURE__ */ jsx("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-md border border-border-primary text-fg-secondary shadow-xs", children });
31598
+ var FeaturedIcon2 = ({ children }) => /* @__PURE__ */ jsx("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-md border border-border-primary text-fg-secondary shadow-xs", children });
31403
31599
  var XClose2 = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: "M15 5 5 15M5 5l10 10", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) });
31404
31600
  function ModalHeader({
31405
31601
  title,
@@ -31433,7 +31629,7 @@ function ModalHeader({
31433
31629
  isCenter && "items-center"
31434
31630
  ),
31435
31631
  children: [
31436
- icon && /* @__PURE__ */ jsx(FeaturedIcon, { children: icon }),
31632
+ icon && /* @__PURE__ */ jsx(FeaturedIcon2, { children: icon }),
31437
31633
  /* @__PURE__ */ jsxs(
31438
31634
  "div",
31439
31635
  {
@@ -32091,7 +32287,7 @@ var GLYPH = {
32091
32287
  error: "M10 6.67V10m0 3.33h.01M18.33 10a8.33 8.33 0 1 1-16.66 0 8.33 8.33 0 0 1 16.66 0Z"
32092
32288
  };
32093
32289
  var XClose5 = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: "M15 5 5 15M5 5l10 10", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) });
32094
- var FeaturedIcon2 = ({ variant }) => /* @__PURE__ */ jsxs("span", { className: clsx_default("relative inline-flex size-5 shrink-0 items-center justify-center", RING[variant].split(" ")[1]), children: [
32290
+ var FeaturedIcon3 = ({ variant }) => /* @__PURE__ */ jsxs("span", { className: clsx_default("relative inline-flex size-5 shrink-0 items-center justify-center", RING[variant].split(" ")[1]), children: [
32095
32291
  /* @__PURE__ */ jsx("span", { className: clsx_default("absolute inset-[-20%] rounded-full border-2 opacity-30", RING[variant].split(" ")[0]) }),
32096
32292
  /* @__PURE__ */ jsx("span", { className: clsx_default("absolute inset-[-45%] rounded-full border-2 opacity-10", RING[variant].split(" ")[0]) }),
32097
32293
  /* @__PURE__ */ jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "relative size-5", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: GLYPH[variant], stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) })
@@ -32116,7 +32312,7 @@ function Notification({
32116
32312
  ),
32117
32313
  ...rest,
32118
32314
  children: [
32119
- leadingMedia ?? /* @__PURE__ */ jsx(FeaturedIcon2, { variant }),
32315
+ leadingMedia ?? /* @__PURE__ */ jsx(FeaturedIcon3, { variant }),
32120
32316
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-lg pr-8", children: [
32121
32317
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-xs", children: [
32122
32318
  /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-fg-primary", children: title }),
@@ -33852,6 +34048,6 @@ object-assign/index.js:
33852
34048
  *)
33853
34049
  */
33854
34050
 
33855
- export { ActivityFeed, ActivityGauge, AdvancedFilterBar, Alert, Avatar, AvatarAddButton, AvatarGroup, AvatarLabelGroup, AvatarProfilePhoto, BadgeCloseX, BadgeGroup, BreadcrumbButtonBase, Breadcrumbs, Button, ButtonCloseX, ButtonDestructive, ButtonGroup, ButtonGroupSegment, ButtonUtility, CalendarCell, CalendarCellDayWeekView, CalendarColumnHeader, CalendarDateIcon, CalendarEvent, CalendarEventDayWeekView, CalendarHeader, CalendarRowLabel, CalendarTimemarker, CalendarViewDropdown, CardHeader, CarouselArrow, CarouselImage, Change, ChartLegend, ChartMarker, ChartMini, ChartTooltip, Checkbox, CodeSnippet, CodeSnippetTabs, ColorBadge, CommandBar, CommandBarFooter, CommandBarMenuSection, CommandBarNavigationIcon, CommandDropdownMenuItem, CommandInput, CommandShortcut, ContentDivider, ContentFeatureText, ContentHeading, ContentParagraph, ContentQuote, ContentRule, ContextMenu, DatePickerCell, DatePickerListItem, DatePickerMenu, DropdownAccountListItem, DropdownMenuFooter, DropdownMenuHeader, DropdownMenuItemInsetIcon, DropdownMenuListItem, EmptyState, FeedItemBase, FileUpload, FileUploadBase, FileUploadItemBase, FilterBar, FilterTabs, FiltersDropdownMenu, FiltersSlideoutMenu, HeaderNavigation, HelpIcon2 as HelpIcon, InputField, LeadingInputField, LineAndBarChart, LinkMessage, LoadingIndicator, MediaMessage, MegaInputFieldBase, Message, MessageAction, MessageActionButton, MessageActionPanel, MessageReaction, MessageStatusIcon, MetricItem, Modal, ModalActions, ModalHeader, ModernBadge, MultiSelect, NavAccountCard, NavAccountCardMenuItem, NavButton2 as NavButton, NavFeaturedCard, NavItemBase, NavItemDropdownBase, NavMenuButton, Notification, NumberInput, PageHeader, Pagination, PaginationButtonGroupBase, PaginationCards, PaginationDotGroup, PaginationDotIndicator, PaginationNumberBase, PieChart2 as PieChart, PillBadge, ProgressBar, ProgressCircle, RadarChart2 as RadarChart, Radio, RadioGroup, RadioGroupItem, SectionFooter, SectionHeader, SectionLabel, Select, SelectMenuItem, SidebarNavigation, SlideOutMenuHeader, SlideoutMenu, Slider, SocialButton, StatusIcon, StepBase, StepIconBase, TabButtonBase, TableCell, TableHeaderCell, TableHeaderLabel, Tabs, Tag, TagsInputField, TextEditorToolbar, TextEditorToolbarDivider, TextEditorTooltip, TextareaInputField, Toggle, Tooltip2 as Tooltip, TrailingInputField, TreeView, TreeViewConnector, TreeViewItem, VerificationCodeInput, illustrations_exports as illustrations, useContextMenu };
34051
+ export { ActivityFeed, ActivityGauge, AdvancedFilterBar, Alert, Avatar, AvatarAddButton, AvatarGroup, AvatarLabelGroup, AvatarProfilePhoto, BadgeCloseX, BadgeGroup, BreadcrumbButtonBase, Breadcrumbs, Button, ButtonCloseX, ButtonDestructive, ButtonGroup, ButtonGroupSegment, ButtonUtility, CalendarCell, CalendarCellDayWeekView, CalendarColumnHeader, CalendarDateIcon, CalendarEvent, CalendarEventDayWeekView, CalendarHeader, CalendarRowLabel, CalendarTimemarker, CalendarViewDropdown, CardHeader, CarouselArrow, CarouselImage, Change, ChartLegend, ChartMarker, ChartMini, ChartTooltip, Checkbox, CodeSnippet, CodeSnippetTabs, ColorBadge, CommandBar, CommandBarFooter, CommandBarMenuSection, CommandBarNavigationIcon, CommandDropdownMenuItem, CommandInput, CommandShortcut, ContentDivider, ContentFeatureText, ContentHeading, ContentParagraph, ContentQuote, ContentRule, ContextMenu, DatePickerCell, DatePickerListItem, DatePickerMenu, DropdownAccountListItem, DropdownMenuFooter, DropdownMenuHeader, DropdownMenuItemInsetIcon, DropdownMenuListItem, EmptyState, FeaturedIcon, FeedItemBase, FileUpload, FileUploadBase, FileUploadItemBase, FilterBar, FilterTabs, FiltersDropdownMenu, FiltersSlideoutMenu, HeaderNavigation, HelpIcon2 as HelpIcon, InputField, LeadingInputField, LineAndBarChart, LinkMessage, LoadingIndicator, MediaMessage, MegaInputFieldBase, Message, MessageAction, MessageActionButton, MessageActionPanel, MessageReaction, MessageStatusIcon, MetricItem, Modal, ModalActions, ModalHeader, ModernBadge, MultiSelect, NavAccountCard, NavAccountCardMenuItem, NavButton2 as NavButton, NavFeaturedCard, NavItemBase, NavItemDropdownBase, NavMenuButton, Notification, NumberInput, PageHeader, Pagination, PaginationButtonGroupBase, PaginationCards, PaginationDotGroup, PaginationDotIndicator, PaginationNumberBase, PieChart2 as PieChart, PillBadge, ProgressBar, ProgressCircle, RadarChart2 as RadarChart, Radio, RadioGroup, RadioGroupItem, SectionFooter, SectionHeader, SectionLabel, Select, SelectMenuItem, SidebarNavigation, SlideOutMenuHeader, SlideoutMenu, Slider, SocialButton, StatusIcon, StepBase, StepIconBase, TabButtonBase, TableCell, TableHeaderCell, TableHeaderLabel, Tabs, Tag, TagsInputField, TextEditorToolbar, TextEditorToolbarDivider, TextEditorTooltip, TextareaInputField, Toggle, Tooltip2 as Tooltip, TrailingInputField, TreeView, TreeViewConnector, TreeViewItem, VerificationCodeInput, illustrations_exports as illustrations, useContextMenu };
33856
34052
  //# sourceMappingURL=index.js.map
33857
34053
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@borisj74/bv-ds",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "bv-ds — React component library synced from Figma (Untitled UI v8.0), built on Tailwind CSS",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -38,20 +38,22 @@
38
38
  "react-dom": ">=18.0.0"
39
39
  },
40
40
  "devDependencies": {
41
+ "@borisj74/bv-ds-icons": "^0.1.0",
42
+ "@storybook/addon-a11y": "^8.0.0",
43
+ "@storybook/addon-essentials": "^8.6.14",
44
+ "@storybook/react-vite": "^8.0.0",
41
45
  "@types/react": "^18.2.0",
42
46
  "@types/react-dom": "^18.2.0",
47
+ "autoprefixer": "^10.4.0",
48
+ "clsx": "^2.1.0",
49
+ "postcss": "^8.4.0",
43
50
  "react": "^18.2.0",
44
51
  "react-dom": "^18.2.0",
52
+ "recharts": "^2.15.4",
53
+ "storybook": "^8.0.0",
45
54
  "tailwindcss": "^3.4.0",
46
- "postcss": "^8.4.0",
47
- "autoprefixer": "^10.4.0",
48
- "clsx": "^2.1.0",
49
55
  "tsup": "^8.0.0",
50
- "typescript": "^5.4.0",
51
- "@storybook/react-vite": "^8.0.0",
52
- "@storybook/addon-essentials": "^8.0.0",
53
- "@storybook/addon-a11y": "^8.0.0",
54
- "storybook": "^8.0.0"
56
+ "typescript": "^5.4.0"
55
57
  },
56
58
  "publishConfig": {
57
59
  "access": "public"
@@ -34,7 +34,7 @@ const hierarchyClasses: Record<ButtonHierarchy, string> = {
34
34
  "bg-bg-brand-solid text-text-white border-2 border-white/[0.12] shadow-skeuomorphic " +
35
35
  "hover:bg-bg-brand-solid-hover",
36
36
  Secondary:
37
- "bg-bg-primary text-text-secondary border border-border-border-primary shadow-skeuomorphic " +
37
+ "bg-bg-primary text-text-secondary border border-border-primary shadow-skeuomorphic " +
38
38
  "hover:bg-bg-primary-hover",
39
39
  Tertiary:
40
40
  "bg-transparent text-text-tertiary border-0 " +
@@ -17,12 +17,12 @@ export interface ButtonDestructiveProps
17
17
 
18
18
  // Destructive palette (design.md §3 / Figma Button destructive 6218:85578).
19
19
  // Primary/Secondary carry the skeuomorphic shadow stack; focus ring is the
20
- // error ring (border-error).
20
+ // error ring (border-border-error).
21
21
  const hierarchyClasses: Record<ButtonDestructiveHierarchy, string> = {
22
22
  Primary:
23
23
  "bg-bg-error-solid text-text-white border-2 border-white/[0.12] shadow-skeuomorphic hover:bg-bg-error-solid-hover",
24
24
  Secondary:
25
- "bg-bg-primary text-text-error-primary border border-border-border-error-subtle shadow-skeuomorphic hover:bg-bg-error-primary",
25
+ "bg-bg-primary text-text-error-primary border border-border-error-subtle shadow-skeuomorphic hover:bg-bg-error-primary",
26
26
  Tertiary:
27
27
  "bg-transparent text-text-error-primary border-0 hover:bg-bg-error-primary",
28
28
  Link: "bg-transparent text-text-error-primary border-0 p-0 hover:text-text-error-primary",