@bubo-squared/ui-framework 0.2.31 → 0.2.33

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.
package/dist/index.cjs CHANGED
@@ -785,26 +785,26 @@ var import_react_slot4 = require("@radix-ui/react-slot");
785
785
  var import_class_variance_authority8 = require("class-variance-authority");
786
786
  var import_jsx_runtime12 = require("react/jsx-runtime");
787
787
  var badgeVariants = (0, import_class_variance_authority8.cva)(
788
- "inline-flex items-center justify-center rounded-4 leading-none whitespace-nowrap gap-1 py-0",
788
+ "inline-flex items-center justify-center rounded-full leading-none whitespace-nowrap gap-1 py-0 font-normal",
789
789
  {
790
790
  variants: {
791
791
  size: {
792
- sm: "px-1.5 paragraph-sm",
793
- md: "px-2 paragraph-md",
794
- lg: "px-2 subtitle",
795
- xl: "px-2.5 h6-title"
792
+ sm: "px-2.5 paragraph-sm",
793
+ md: "px-3 paragraph-md",
794
+ lg: "px-3.5 subtitle",
795
+ xl: "px-4 h6-title"
796
796
  },
797
797
  variant: {
798
- primary: "bg-(--background-secondary) text-primary",
799
- secondary: "bg-(--background-primary) border-1 border-primary text-primary",
798
+ primary: "bg-primary text-primary",
799
+ primaryInverted: "bg-(--color-primary) text-(--color-primary-inverse)",
800
+ secondary: "bg-(--background-secondary) text-secondary",
801
+ outline: "bg-(--background-secondary) text-secondary shadow-[inset_0_0_0_1px_var(--border-secondary)]",
800
802
  active: "bg-ac-lilac text-badge-black",
801
803
  informal: "bg-ac-neon-blue text-badge-black",
802
804
  success: "bg-ac-neon-green text-badge-black",
803
805
  warning: "bg-ac-light-orange text-badge-black",
804
- error: "bg-s-error-300 text-badge-black",
805
- disabled: "bg-(--background-primary-disabled) border-1 border-primary-disabled text-primary-disabled",
806
- "double-default": "bg-(--background-secondary) text-primary",
807
- "double-current": "bg-color-ac-lilac text-badge-black"
806
+ error: "bg-(--color-s-error-500)/15 text-error",
807
+ disabled: "bg-(--background-primary-disabled) shadow-[inset_0_0_0_1px_var(--color-primary-disabled)] text-primary-disabled"
808
808
  }
809
809
  },
810
810
  defaultVariants: {
@@ -818,25 +818,20 @@ var Badge = React10.forwardRef(
818
818
  const {
819
819
  asChild = false,
820
820
  label,
821
- value,
822
821
  size = "sm",
823
822
  variant = "primary",
824
823
  className,
825
824
  ...rest
826
825
  } = props;
827
- const Comp = asChild ? import_react_slot4.Slot : "div";
828
- const hasValue = typeof value === "string" ? value.trim() !== "" : value != null;
826
+ const Comp = asChild ? import_react_slot4.Slot : "span";
829
827
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
830
828
  Comp,
831
829
  {
830
+ "data-slot": "badge",
832
831
  ref,
833
832
  className: cn(badgeVariants({ size, variant }), className),
834
833
  ...rest,
835
- children: hasValue ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
836
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-normal", children: label }),
837
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-normal", children: ":" }),
838
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-medium", children: value })
839
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "font-normal", children: label })
834
+ children: label
840
835
  }
841
836
  );
842
837
  }
@@ -1333,21 +1328,75 @@ var import_react_slot5 = require("@radix-ui/react-slot");
1333
1328
  var import_class_variance_authority12 = require("class-variance-authority");
1334
1329
  var import_jsx_runtime20 = require("react/jsx-runtime");
1335
1330
  var tagVariants = (0, import_class_variance_authority12.cva)(
1336
- "inline-flex flex-row items-center justify-center rounded-6 gap-2 px-3 overflow-hidden border-1 border-secondary bg-(--background-neutral) focus:border-brand focus-ring-primary ",
1331
+ "inline-flex flex-row items-center justify-center gap-1.5 overflow-hidden border border-secondary bg-tag focus:border-brand focus-ring-primary ",
1337
1332
  {
1338
1333
  variants: {
1339
1334
  size: {
1340
- sm: "py-0.5",
1341
- md: "py-1.5"
1335
+ sm: "h-6",
1336
+ md: "h-7",
1337
+ lg: "h-8",
1338
+ xl: "h-9"
1339
+ },
1340
+ rounded: {
1341
+ true: "rounded-full",
1342
+ false: "rounded-8"
1342
1343
  }
1343
1344
  },
1344
1345
  defaultVariants: {
1345
- size: "sm"
1346
+ size: "sm",
1347
+ rounded: false
1346
1348
  }
1347
1349
  }
1348
1350
  );
1349
- var disabledTag = "pointer-events-none border-secondary-disabled bg-(--background-neutral-disabled) text-primary-disabled";
1350
- var iconClasses = "flex items-center justify-center w-5 h-5 [&>*]:w-5 [&>*]:h-5 shrink-0 text-primary";
1351
+ var calculateXPadding = (size, hasTrailing, hasLeading) => {
1352
+ if (!hasTrailing && !hasLeading) {
1353
+ return size === "sm" ? "px-2.5" : "px-3";
1354
+ } else if (hasTrailing && !hasLeading) {
1355
+ return size === "sm" ? "pl-2.5 pr-1.25" : "pl-3 pr-1.5";
1356
+ } else if (!hasTrailing && hasLeading) {
1357
+ return size === "sm" ? "pl-1.25 pr-2.5" : "pl-1.5 pr-3";
1358
+ } else {
1359
+ return size === "sm" ? "px-1.25" : "px-1.5";
1360
+ }
1361
+ };
1362
+ var disabledTag = "pointer-events-none border-secondary-disabled bg-tag-disabled text-primary-disabled";
1363
+ var calculateIconClasses = (size) => {
1364
+ switch (size) {
1365
+ case "sm":
1366
+ return "flex items-center justify-center size-4 [&>*]:size-4 shrink-0";
1367
+ case "md":
1368
+ return "flex items-center justify-center size-5 [&>*]:size-5 shrink-0";
1369
+ case "lg":
1370
+ return "flex items-center justify-center size-5 [&>*]:size-5 shrink-0";
1371
+ case "xl":
1372
+ return "flex items-center justify-center size-6 [&>*]:size-6 shrink-0";
1373
+ }
1374
+ };
1375
+ var keyTextClassBySize = {
1376
+ sm: "paragraph-sm cursor-default",
1377
+ md: "paragraph-md cursor-default",
1378
+ lg: "paragraph-lg cursor-default",
1379
+ xl: "subtitle cursor-default"
1380
+ };
1381
+ var valueTextClassBySize = {
1382
+ sm: "paragraph-sm-medium cursor-default",
1383
+ md: "paragraph-md-medium cursor-default",
1384
+ lg: "paragraph-lg-medium cursor-default",
1385
+ xl: "subtitle-medium cursor-default"
1386
+ };
1387
+ var labelTextClassBySize = {
1388
+ sm: "paragraph-sm cursor-default",
1389
+ md: "paragraph-md cursor-default",
1390
+ lg: "paragraph-lg cursor-default",
1391
+ xl: "subtitle cursor-default"
1392
+ };
1393
+ var getTextColor = (type, disabled) => {
1394
+ if (disabled) return "";
1395
+ else if (type === "key") return "text-secondary";
1396
+ else if (type === "value") return "text-primary";
1397
+ else if (type === "label") return "text-primary";
1398
+ return "text-primary";
1399
+ };
1351
1400
  var Tag = React18.forwardRef(
1352
1401
  (props, ref) => {
1353
1402
  const {
@@ -1366,17 +1415,18 @@ var Tag = React18.forwardRef(
1366
1415
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1367
1416
  Comp,
1368
1417
  {
1369
- className: cn(tagVariants({ size }), disabled && disabledTag, className),
1418
+ className: cn(tagVariants({ size, rounded: props.rounded }), calculateXPadding(size, !!trailing, !!leading), disabled && disabledTag, className),
1419
+ "data-slot": "tag",
1370
1420
  ref,
1371
1421
  ...rest,
1372
1422
  children: [
1373
- leading && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: iconClasses, children: leading }),
1374
- hasValue ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex flex-row gap-1 items-center", children: [
1375
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-primary paragraph-lg mb-0! cursor-default font-normal", children: label }),
1376
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-primary paragraph-lg mb-0! cursor-default font-normal", children: ":" }),
1377
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-primary paragraph-lg-medium mb-0! cursor-default font-medium", children: value })
1378
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-primary paragraph-lg mb-0! cursor-default", children: label }),
1379
- trailing && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: iconClasses, children: trailing })
1423
+ leading && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn(disabled ? "text-primary-disabled" : "text-primary", calculateIconClasses(size)), children: leading }),
1424
+ hasValue ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex flex-row items-center gap-1", children: [
1425
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn(keyTextClassBySize[size], getTextColor("key", disabled)), children: label }),
1426
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn(keyTextClassBySize[size], getTextColor("key", disabled)), children: ":" }),
1427
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn(valueTextClassBySize[size], getTextColor("value", disabled)), children: value })
1428
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn(labelTextClassBySize[size], getTextColor("label", disabled)), children: label }),
1429
+ trailing && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn(disabled ? "text-primary-disabled" : "text-primary", calculateIconClasses(size)), children: trailing })
1380
1430
  ]
1381
1431
  }
1382
1432
  );
@@ -2595,14 +2645,6 @@ var createLucideIcon = (iconName, iconNode) => {
2595
2645
  var __iconNode = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
2596
2646
  var ChevronRight = createLucideIcon("chevron-right", __iconNode);
2597
2647
 
2598
- // ../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/ellipsis.js
2599
- var __iconNode2 = [
2600
- ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
2601
- ["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
2602
- ["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
2603
- ];
2604
- var Ellipsis = createLucideIcon("ellipsis", __iconNode2);
2605
-
2606
2648
  // src/components/ui/dialog.tsx
2607
2649
  var import_jsx_runtime29 = require("react/jsx-runtime");
2608
2650
 
@@ -4446,7 +4488,7 @@ var React43 = __toESM(require("react"), 1);
4446
4488
  var React42 = require("react");
4447
4489
  var import_react_slot6 = require("@radix-ui/react-slot");
4448
4490
  var import_jsx_runtime44 = require("react/jsx-runtime");
4449
- var breadcrumbItemClasses = "h6-title inline-flex items-center gap-1.5 text-(--color-secondary) hover:text-(--color-primary-hover) focus-within:text-(--color-secondary-focus) [&_[aria-current=page]]:font-medium [&_[aria-current=page]]:text-primary";
4491
+ var breadcrumbItemClasses = "inline-flex items-center gap-1.5 text-(--color-secondary) hover:text-(--color-primary-hover) focus-within:text-(--color-secondary-focus) [&_[aria-current=page]]:font-medium [&_[aria-current=page]]:text-primary";
4450
4492
  var disabledItemClasses = "text-primary-disabled cursor-default pointer-events-none";
4451
4493
  function Breadcrumb({ ...props }) {
4452
4494
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
@@ -4470,7 +4512,6 @@ function BreadcrumbItem({ className, disabled, ...props }) {
4470
4512
  {
4471
4513
  "data-slot": "breadcrumb-item",
4472
4514
  className: cn(breadcrumbItemClasses, disabled && disabledItemClasses, className),
4473
- style: { marginBottom: "7px" },
4474
4515
  ...props
4475
4516
  }
4476
4517
  );
@@ -4499,36 +4540,16 @@ function BreadcrumbSeparator({
4499
4540
  "data-slot": "breadcrumb-separator",
4500
4541
  role: "presentation",
4501
4542
  "aria-hidden": "true",
4502
- className: cn("[&>svg]:size-6 [&>svg]:text-(--color-secondary)", className),
4543
+ className: cn("text-secondary", className),
4503
4544
  ...props,
4504
4545
  children: children ?? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ChevronRight, {})
4505
4546
  }
4506
4547
  );
4507
4548
  }
4508
- function BreadcrumbEllipsis({
4509
- className,
4510
- ...props
4511
- }) {
4512
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
4513
- "span",
4514
- {
4515
- "data-slot": "breadcrumb-ellipsis",
4516
- role: "presentation",
4517
- "aria-hidden": "true",
4518
- className: cn("flex size-9 items-center justify-center", className),
4519
- ...props,
4520
- children: [
4521
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Ellipsis, { className: "size-4" }),
4522
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "sr-only", children: "More" })
4523
- ]
4524
- }
4525
- );
4526
- }
4527
4549
 
4528
4550
  // src/components/Navigation/Breadcrumbs.tsx
4551
+ var import_icons14 = require("@bubo-squared/icons");
4529
4552
  var import_jsx_runtime45 = require("react/jsx-runtime");
4530
- var breadcrumbSeparatorVariants = "size-5 relative bottom-1 [&>svg]:text-secondary group-disabled:text-secondary";
4531
- var breadcrumbItemBase = "h6-title text-secondary hover:text-primary-hover";
4532
4553
  var Breadcrumbs = React43.forwardRef(
4533
4554
  (props, ref) => {
4534
4555
  const {
@@ -4539,40 +4560,53 @@ var Breadcrumbs = React43.forwardRef(
4539
4560
  breadcrumbItemClassName,
4540
4561
  breadcrumbPageClassName,
4541
4562
  separatorClassName,
4563
+ breadcrumbListClassName,
4564
+ ellipsisItemClassName,
4565
+ ellipsisTriggerClassName,
4566
+ ellipsisContentClassName,
4567
+ ellipsisGroupClassName,
4568
+ ellipsisMenuItemClassName,
4569
+ ellipsisAriaLabel = "Open breadcrumb menu",
4542
4570
  ...rest
4543
4571
  } = props;
4544
4572
  const items = React43.Children.toArray(children).filter(Boolean);
4545
4573
  const shouldCollapse = Boolean(ellipsis) && items.length >= 5;
4546
4574
  const hiddenItems = shouldCollapse ? items.slice(1, -2) : [];
4547
4575
  const displayItems = shouldCollapse ? [items[0], "__ELLIPSIS__", items[items.length - 2], items[items.length - 1]] : items;
4548
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Breadcrumb, { ref, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbList, { children: displayItems.map((child, index) => {
4576
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Breadcrumb, { ref, className: cn("mb-1.75", className), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbList, { className: breadcrumbListClassName, children: displayItems.map((child, index) => {
4549
4577
  const isEllipsis = child === "__ELLIPSIS__";
4550
4578
  const key = isEllipsis ? "__ellipsis" : React43.isValidElement(child) && child.key != null ? String(child.key) : String(index);
4551
4579
  const isLast = index === displayItems.length - 1;
4552
4580
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(React43.Fragment, { children: [
4553
- isEllipsis ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbItem, { className: cn(breadcrumbItemBase, breadcrumbItemClassName), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(DropdownMenu, { children: [
4581
+ isEllipsis ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbItem, { className: cn(breadcrumbItemClassName, ellipsisItemClassName), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(DropdownMenu, { children: [
4554
4582
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4555
- "button",
4583
+ Button,
4556
4584
  {
4557
- type: "button",
4558
- className: "inline-flex size-8 items-center justify-center rounded-4 hover:bg-(--background-secondary) focus-ring-primary text-secondary",
4559
- "aria-label": "Open breadcrumb menu",
4560
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbEllipsis, {})
4585
+ variant: "ghost",
4586
+ className: cn(
4587
+ "inline-flex text-secondary hover:text-primary &[aria-expanded=true]:text-primary-focus items-center justify-center",
4588
+ ellipsisTriggerClassName
4589
+ ),
4590
+ "aria-label": ellipsisAriaLabel,
4591
+ "data-slot": "breadcrumb-ellipsis",
4592
+ role: "presentation",
4593
+ "aria-hidden": "true",
4594
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_icons14.MoreHorizFullIcon, {})
4561
4595
  }
4562
4596
  ) }),
4563
4597
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4564
4598
  DropdownMenuContent,
4565
4599
  {
4566
4600
  align: "start",
4567
- className: "bg-(--background-neutral) border-secondary-hover shadow-card-md rounded-4",
4568
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuGroup, { children: hiddenItems.map((hidden, hiddenIndex) => {
4601
+ className: ellipsisContentClassName,
4602
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuGroup, { className: ellipsisGroupClassName, children: hiddenItems.map((hidden, hiddenIndex) => {
4569
4603
  const hiddenKey = React43.isValidElement(hidden) && hidden.key != null ? String(hidden.key) : `hidden-${hiddenIndex}`;
4570
4604
  if (React43.isValidElement(hidden)) {
4571
4605
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4572
4606
  DropdownMenuItem,
4573
4607
  {
4574
4608
  asChild: true,
4575
- className: "cursor-pointer paragraph-md text-primary focus:bg-(--background-secondary)",
4609
+ className: ellipsisMenuItemClassName,
4576
4610
  children: hidden
4577
4611
  },
4578
4612
  hiddenKey
@@ -4581,7 +4615,7 @@ var Breadcrumbs = React43.forwardRef(
4581
4615
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4582
4616
  DropdownMenuItem,
4583
4617
  {
4584
- className: "cursor-pointer paragraph-md text-primary focus:bg-(--background-secondary)",
4618
+ className: ellipsisMenuItemClassName,
4585
4619
  children: String(hidden)
4586
4620
  },
4587
4621
  hiddenKey
@@ -4589,14 +4623,8 @@ var Breadcrumbs = React43.forwardRef(
4589
4623
  }) })
4590
4624
  }
4591
4625
  )
4592
- ] }) }) : isLast ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbItem, { className: cn(breadcrumbItemBase, breadcrumbItemClassName), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4593
- BreadcrumbPage,
4594
- {
4595
- className: cn("h6-title-medium cursor-pointer", breadcrumbPageClassName),
4596
- children: child
4597
- }
4598
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbItem, { className: cn(breadcrumbItemBase, breadcrumbItemClassName), children: child }),
4599
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbSeparator, { className: cn(breadcrumbSeparatorVariants, separatorClassName), children: separator })
4626
+ ] }) }) : isLast ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbItem, { className: breadcrumbItemClassName, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbPage, { className: breadcrumbPageClassName, children: child }) }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbItem, { className: breadcrumbItemClassName, children: child }),
4627
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(BreadcrumbSeparator, { className: separatorClassName, children: separator })
4600
4628
  ] }, key);
4601
4629
  }) }) });
4602
4630
  }
@@ -4759,7 +4787,6 @@ lucide-react/dist/esm/defaultAttributes.js:
4759
4787
  lucide-react/dist/esm/Icon.js:
4760
4788
  lucide-react/dist/esm/createLucideIcon.js:
4761
4789
  lucide-react/dist/esm/icons/chevron-right.js:
4762
- lucide-react/dist/esm/icons/ellipsis.js:
4763
4790
  lucide-react/dist/esm/lucide-react.js:
4764
4791
  (**
4765
4792
  * @license lucide-react v0.555.0 - ISC