@codbex/harmonia 1.10.2 → 1.11.1

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.
@@ -1948,6 +1948,7 @@ var CircleError = 25;
1948
1948
  var CircleSuccess = 26;
1949
1949
  var CircleUnknown = 27;
1950
1950
  var CircleUser = 28;
1951
+ var Home = 29;
1951
1952
  function setCalendarContent(svg) {
1952
1953
  const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
1953
1954
  path.setAttributeNS(
@@ -2290,6 +2291,15 @@ function setCircleUserContent(svg) {
2290
2291
  );
2291
2292
  svg.appendChild(path2);
2292
2293
  }
2294
+ function setHomeContent(svg) {
2295
+ const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
2296
+ path.setAttributeNS(
2297
+ null,
2298
+ "d",
2299
+ "m8 0.8252c-0.51124 0-1.0243 0.19615-1.416 0.58789l-4.4316 4.4297c-0.27162 0.2733-0.65234 0.7207-0.65234 1.6055v5.7266c0 1.108 0.892 2 2 2h9c1.108 0 2-0.892 2-2v-5.7266c0-0.88477-0.38073-1.3322-0.65234-1.6055l-4.4316-4.4297c-0.39174-0.39174-0.90478-0.58789-1.416-0.58789zm0 1.4258c0.25431-2.91e-4 0.5101 0.096117 0.70703 0.29297l4.2207 4.2188v0.00195c0.17404 0.1851 0.27111 0.42951 0.27148 0.68359v5.4277c0 0.554-0.446 1-1 1h-1.5078v-4.1289c0-1.108-0.892-2-2-2h-1.3828c-1.108 0-2 0.892-2 2v4.1289h-1.5078c-0.554 0-1-0.446-1-1v-5.4277c3.752e-4 -0.25408 0.09744-0.4985 0.27148-0.68359v-0.00195l4.2207-4.2188c0.19693-0.19685 0.45273-0.29326 0.70703-0.29297zm-0.58984 6.7949h1.1797c0.44244-4.323e-4 0.80121 0.35834 0.80078 0.80078v4.0293h-2.7812v-4.0293c-4.322e-4 -0.44244 0.35834-0.80121 0.80078-0.80078z"
2300
+ );
2301
+ svg.appendChild(path);
2302
+ }
2293
2303
  function createSvg({ icon, classes = "size-4", attrs } = {}) {
2294
2304
  const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
2295
2305
  svg.setAttributeNS(null, "width", "16");
@@ -2390,6 +2400,9 @@ function createSvg({ icon, classes = "size-4", attrs } = {}) {
2390
2400
  case CircleUser:
2391
2401
  setCircleUserContent(svg);
2392
2402
  break;
2403
+ case Home:
2404
+ setHomeContent(svg);
2405
+ break;
2393
2406
  default:
2394
2407
  break;
2395
2408
  }
@@ -2489,6 +2502,9 @@ function setSvgContent(svg, icon) {
2489
2502
  case "circle-user":
2490
2503
  setCircleUserContent(svg);
2491
2504
  break;
2505
+ case "home":
2506
+ setHomeContent(svg);
2507
+ break;
2492
2508
  default:
2493
2509
  break;
2494
2510
  }
@@ -2923,6 +2939,113 @@ function badge_default(Alpine) {
2923
2939
  });
2924
2940
  }
2925
2941
 
2942
+ // src/components/breadcrumb.js
2943
+ function breadcrumb_default(Alpine) {
2944
+ Alpine.directive("h-breadcrumb", (el, _, { Alpine: Alpine2, cleanup }) => {
2945
+ el.classList.add("flex", "items-center", "break-words", "text-sm", "text-muted-foreground", "rounded-control");
2946
+ el.setAttribute("role", "navigation");
2947
+ el.setAttribute("aria-label", "breadcrumb");
2948
+ el.setAttribute("data-slot", "breadcrumb");
2949
+ const variants = {
2950
+ outline: ["border"]
2951
+ };
2952
+ const allVariantClasses = Object.values(variants).flat();
2953
+ const sizes = {
2954
+ default: ["h-9", "px-3"],
2955
+ md: ["h-8", "px-2.5"],
2956
+ sm: ["h-6.5", "px-2"]
2957
+ };
2958
+ const allSizeClasses = Object.values(sizes).flat();
2959
+ function applyClasses() {
2960
+ const variant = el.getAttribute("data-variant");
2961
+ const size3 = el.getAttribute("data-size") ?? "default";
2962
+ el.classList.remove(...allVariantClasses, ...allSizeClasses);
2963
+ if (variant && Object.prototype.hasOwnProperty.call(variants, variant)) {
2964
+ el.classList.add(...variants[variant]);
2965
+ el.classList.add(...sizes[size3] ?? sizes.default);
2966
+ } else {
2967
+ el.classList.add("px-2");
2968
+ }
2969
+ }
2970
+ applyClasses();
2971
+ const observer = new MutationObserver(() => applyClasses());
2972
+ observer.observe(el, { attributes: true, attributeFilter: ["data-variant", "data-size"] });
2973
+ if (el.getAttribute("data-overflow") === "scroll") {
2974
+ el.classList.add("overflow-x-scroll", "scrollbar-none");
2975
+ let preserveScroll = false;
2976
+ const scrollToEnd = () => {
2977
+ el.scrollLeft = el.scrollWidth;
2978
+ };
2979
+ Alpine2.nextTick(scrollToEnd);
2980
+ const handleScroll = () => {
2981
+ preserveScroll = el.scrollLeft < el.scrollWidth - el.clientWidth - 1;
2982
+ };
2983
+ const handleResize = () => {
2984
+ if (!preserveScroll) scrollToEnd();
2985
+ };
2986
+ el.addEventListener("scroll", handleScroll);
2987
+ window.addEventListener("resize", handleResize);
2988
+ cleanup(() => {
2989
+ el.removeEventListener("scroll", handleScroll);
2990
+ window.removeEventListener("resize", handleResize);
2991
+ observer.disconnect();
2992
+ });
2993
+ } else if (el.getAttribute("data-overflow") === "nowrap") {
2994
+ el.classList.add("flex-nowrap");
2995
+ cleanup(() => observer.disconnect());
2996
+ } else {
2997
+ el.classList.add("flex-wrap");
2998
+ cleanup(() => observer.disconnect());
2999
+ }
3000
+ });
3001
+ Alpine.directive("h-breadcrumb-list", (el, _, { Alpine: Alpine2 }) => {
3002
+ el.classList.add("flex", "items-center", "gap-1.5");
3003
+ el.setAttribute("data-slot", "breadcrumb-list");
3004
+ const nav = Alpine2.findClosest(el, (node) => node.getAttribute("data-slot") === "breadcrumb");
3005
+ const overflow = nav?.getAttribute("data-overflow");
3006
+ if (overflow === "scroll" || overflow === "nowrap") {
3007
+ el.classList.add("flex-nowrap");
3008
+ } else {
3009
+ el.classList.add("flex-wrap");
3010
+ }
3011
+ });
3012
+ Alpine.directive("h-breadcrumb-item", (el) => {
3013
+ el.classList.add("group", "inline-flex", "items-center", "gap-1.5");
3014
+ el.setAttribute("data-slot", "breadcrumb-item");
3015
+ const separator = createSvg({
3016
+ icon: ChevronRight,
3017
+ classes: "size-3.5 group-first-of-type:hidden",
3018
+ attrs: { "aria-hidden": "true", role: "presentation" }
3019
+ });
3020
+ el.prepend(separator);
3021
+ });
3022
+ Alpine.directive("h-breadcrumb-link", (el) => {
3023
+ el.classList.add(
3024
+ "cursor-pointer",
3025
+ "hbox",
3026
+ "gap-1.5",
3027
+ "items-center",
3028
+ "whitespace-nowrap",
3029
+ "text-primary",
3030
+ "transition-colors",
3031
+ "underline-offset-4",
3032
+ "hover:underline",
3033
+ "hover:text-primary-hover",
3034
+ "active:text-primary-active",
3035
+ "[&>svg]:size-4",
3036
+ "[&>svg]:text-current"
3037
+ );
3038
+ el.setAttribute("data-slot", "breadcrumb-link");
3039
+ });
3040
+ Alpine.directive("h-breadcrumb-page", (el) => {
3041
+ el.classList.add("hbox", "gap-1.5", "items-center", "whitespace-nowrap", "text-foreground", "font-normal", "[&>svg]:size-4", "[&>svg]:text-current");
3042
+ el.setAttribute("role", "link");
3043
+ el.setAttribute("aria-current", "page");
3044
+ el.setAttribute("aria-disabled", "true");
3045
+ el.setAttribute("data-slot", "breadcrumb-page");
3046
+ });
3047
+ }
3048
+
2926
3049
  // src/components/button.js
2927
3050
  var buttonVariants = {
2928
3051
  default: [
@@ -6735,6 +6858,10 @@ function menu_default(Alpine) {
6735
6858
  }
6736
6859
  function close(closeParent = false, focusTrigger = false) {
6737
6860
  el.pauseKeyEvents = false;
6861
+ if (autoUpdateCleanup) {
6862
+ autoUpdateCleanup();
6863
+ autoUpdateCleanup = null;
6864
+ }
6738
6865
  if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
6739
6866
  el.classList.add("hidden", "scale-95", "opacity-0");
6740
6867
  Object.assign(el.style, {
@@ -6864,6 +6991,7 @@ function menu_default(Alpine) {
6864
6991
  }
6865
6992
  }
6866
6993
  }
6994
+ let autoUpdateCleanup;
6867
6995
  function open(parent) {
6868
6996
  if (el.classList.contains("hidden")) {
6869
6997
  let getPlacement = function() {
@@ -6873,41 +7001,52 @@ function menu_default(Alpine) {
6873
7001
  return el.getAttribute("data-align") || "bottom-start";
6874
7002
  }
6875
7003
  return "right-start";
7004
+ }, updatePosition = function() {
7005
+ const isFirst = firstOpen;
7006
+ firstOpen = false;
7007
+ computePosition2(parent, el, {
7008
+ placement: getPlacement(),
7009
+ strategy: "fixed",
7010
+ middleware: [
7011
+ offset2(isSubmenu ? 0 : 4),
7012
+ flip2(),
7013
+ shift2({ padding: 4 }),
7014
+ size2({
7015
+ apply({ availableWidth, availableHeight, elements }) {
7016
+ Object.assign(elements.floating.style, {
7017
+ maxWidth: `${Math.max(0, availableWidth) - 4}px`,
7018
+ maxHeight: `${Math.max(0, availableHeight) - 4}px`
7019
+ });
7020
+ }
7021
+ })
7022
+ ]
7023
+ }).then(({ x, y }) => {
7024
+ if (isFirst) {
7025
+ if (!isSubmenu) {
7026
+ Alpine2.nextTick(() => el.focus());
7027
+ listenForTrigger(false);
7028
+ }
7029
+ Alpine2.nextTick(() => {
7030
+ top.addEventListener("contextmenu", onClick);
7031
+ top.addEventListener("click", onClick);
7032
+ el.addEventListener("keydown", onKeyDown);
7033
+ });
7034
+ }
7035
+ Object.assign(el.style, {
7036
+ left: `${x}px`,
7037
+ top: `${y}px`
7038
+ });
7039
+ el.classList.remove("scale-95", "opacity-0");
7040
+ });
6876
7041
  };
6877
7042
  el.classList.remove("hidden");
6878
7043
  el.pauseKeyEvents = false;
6879
- computePosition2(parent, el, {
6880
- placement: getPlacement(),
6881
- strategy: "fixed",
6882
- middleware: [
6883
- offset2(isSubmenu ? 0 : 4),
6884
- flip2(),
6885
- shift2({ padding: 4 }),
6886
- size2({
6887
- apply({ availableWidth, availableHeight, elements }) {
6888
- Object.assign(elements.floating.style, {
6889
- maxWidth: `${Math.max(0, availableWidth) - 4}px`,
6890
- maxHeight: `${Math.max(0, availableHeight) - 4}px`
6891
- });
6892
- }
6893
- })
6894
- ]
6895
- }).then(({ x, y }) => {
6896
- if (!isSubmenu) {
6897
- Alpine2.nextTick(() => el.focus());
6898
- listenForTrigger(false);
6899
- }
6900
- Alpine2.nextTick(() => {
6901
- top.addEventListener("contextmenu", onClick);
6902
- top.addEventListener("click", onClick);
6903
- el.addEventListener("keydown", onKeyDown);
6904
- });
6905
- Object.assign(el.style, {
6906
- left: `${x}px`,
6907
- top: `${y}px`
6908
- });
6909
- el.classList.remove("scale-95", "opacity-0");
6910
- });
7044
+ let firstOpen = true;
7045
+ if (!isSubmenu && menuTrigger._menu_trigger.isDropdown) {
7046
+ autoUpdateCleanup = autoUpdate(parent, el, updatePosition);
7047
+ } else {
7048
+ updatePosition();
7049
+ }
6911
7050
  }
6912
7051
  }
6913
7052
  function openDropdown() {
@@ -6951,6 +7090,7 @@ function menu_default(Alpine) {
6951
7090
  }
6952
7091
  el.addEventListener("transitionend", onTransitionEnd);
6953
7092
  cleanup(() => {
7093
+ if (autoUpdateCleanup) autoUpdateCleanup();
6954
7094
  if (menuTrigger) listenForTrigger(false);
6955
7095
  top.removeEventListener("click", onClick);
6956
7096
  top.removeEventListener("contextmenu", onClick);
@@ -6990,7 +7130,10 @@ function menu_default(Alpine) {
6990
7130
  "data-[inset=true]:pl-8",
6991
7131
  "[&_svg]:pointer-events-none",
6992
7132
  "[&_svg]:shrink-0",
6993
- "[&_svg:not([class*='size-'])]:size-4"
7133
+ "[&_svg:not([class*='size-'])]:size-4",
7134
+ "[&>a]:no-underline",
7135
+ "[&>a]:text-inherit",
7136
+ "[&>a]:size-full"
6994
7137
  );
6995
7138
  el.setAttribute("role", "menuitem");
6996
7139
  el.setAttribute("tabindex", "-1");
@@ -7404,8 +7547,8 @@ function notifications_default(Alpine) {
7404
7547
  el.setAttribute("aria-atomic", "false");
7405
7548
  el.setAttribute("data-slot", "notification-overlay");
7406
7549
  const commonListClasses = ["flex", "flex-col", "py-4", "p-10", "gap-4", "overflow-visible", "size-full"];
7407
- const commonTopClasses = ["[mask-image:linear-gradient(to_bottom,black_80%,transparent)]", "row-1"];
7408
- const commonBottomClasses = ["[mask-image:linear-gradient(to_top,black_80%,transparent)]", "row-2"];
7550
+ const commonTopClasses = ["mask-[linear-gradient(to_bottom,black_85%,transparent)]", "row-1"];
7551
+ const commonBottomClasses = ["mask-[linear-gradient(to_top,black_85%,transparent)]", "row-2"];
7409
7552
  const olTopLeft = document.createElement("ol");
7410
7553
  olTopLeft.classList.add(...commonListClasses, ...commonTopClasses, "max-lg:hidden", "items-start");
7411
7554
  olTopLeft.setAttribute("tabindex", "-1");
@@ -9199,8 +9342,13 @@ function split_default(Alpine) {
9199
9342
  if (!storageKey) return;
9200
9343
  if (saveTimer) clearTimeout(saveTimer);
9201
9344
  saveTimer = setTimeout(() => {
9345
+ const usable = usableSize();
9346
+ if (usable <= 0) {
9347
+ saveTimer = null;
9348
+ return;
9349
+ }
9202
9350
  const visible = panels.filter((p) => !p.hidden);
9203
- const sizes = visible.map((p) => p.size / usableSize());
9351
+ const sizes = visible.map((p) => p.size / usable);
9204
9352
  localStorage.setItem(storageKey, JSON.stringify(sizes));
9205
9353
  saveTimer = null;
9206
9354
  }, SAVE_DELAY);
@@ -9235,26 +9383,44 @@ function split_default(Alpine) {
9235
9383
  const total = usableSize();
9236
9384
  if (!initialized) {
9237
9385
  initialized = true;
9238
- const visible2 = panels.filter((p) => !p.hidden);
9239
- const stored = loadSizes();
9240
- if (stored && stored.length === visible2.length) {
9241
- visible2.forEach((p, i) => {
9242
- p.size = stored[i] * usableSize();
9243
- p.explicit = true;
9244
- });
9245
- } else {
9246
- const explicitTotal = visible2.filter((p) => p.explicit).reduce((sum, p) => sum + p.declaredSize, 0);
9247
- const autoPanels = visible2.filter((p) => !p.explicit);
9248
- const remaining = total - explicitTotal;
9249
- const share = autoPanels.length ? remaining / autoPanels.length : 0;
9250
- visible2.forEach((p) => {
9251
- if (p.explicit) {
9252
- p.size = p.declaredSize;
9386
+ const anyRestore = visible.some((p) => p.restoreFraction != null);
9387
+ if (anyRestore) {
9388
+ const restoreFractionSum = visible.reduce((sum, p) => sum + (p.restoreFraction ?? 0), 0);
9389
+ const remainingSpace = total * (1 - restoreFractionSum);
9390
+ const nonRestorePanels = visible.filter((p) => p.restoreFraction == null);
9391
+ const nonRestoreDeclaredTotal = nonRestorePanels.reduce((s, p) => s + (p.declaredSize ?? 0), 0);
9392
+ visible.forEach((p) => {
9393
+ if (p.restoreFraction != null) {
9394
+ p.size = p.restoreFraction * total;
9395
+ p.explicit = true;
9396
+ p.restoreFraction = null;
9397
+ } else if (nonRestoreDeclaredTotal > 0) {
9398
+ p.size = (p.declaredSize ?? 0) / nonRestoreDeclaredTotal * remainingSpace;
9253
9399
  } else {
9254
- p.size = share;
9400
+ p.size = nonRestorePanels.length > 0 ? remainingSpace / nonRestorePanels.length : 0;
9255
9401
  }
9256
- p.size = Math.min(Math.max(p.size ?? share, p.min), p.max);
9257
9402
  });
9403
+ } else {
9404
+ const stored = loadSizes();
9405
+ if (stored && stored.length === visible.length) {
9406
+ visible.forEach((p, i) => {
9407
+ p.size = stored[i] * usableSize();
9408
+ p.explicit = true;
9409
+ });
9410
+ } else {
9411
+ const explicitTotal = visible.filter((p) => p.explicit).reduce((sum, p) => sum + p.declaredSize, 0);
9412
+ const autoPanels = visible.filter((p) => !p.explicit);
9413
+ const remaining = total - explicitTotal;
9414
+ const share = autoPanels.length ? remaining / autoPanels.length : 0;
9415
+ visible.forEach((p) => {
9416
+ if (p.explicit) {
9417
+ p.size = p.declaredSize;
9418
+ } else {
9419
+ p.size = share;
9420
+ }
9421
+ p.size = Math.min(Math.max(p.size ?? share, p.min), p.max);
9422
+ });
9423
+ }
9258
9424
  }
9259
9425
  }
9260
9426
  visible.forEach((p) => {
@@ -9267,6 +9433,10 @@ function split_default(Alpine) {
9267
9433
  let delta = total - currentTotal;
9268
9434
  if (Math.abs(delta) < DELTA_ABS) {
9269
9435
  visible.forEach((p) => p.apply());
9436
+ if (total > 0)
9437
+ visible.forEach((p) => {
9438
+ p.savedFraction = p.size / total;
9439
+ });
9270
9440
  return;
9271
9441
  }
9272
9442
  let flexible = visible.filter((p) => {
@@ -9300,6 +9470,10 @@ function split_default(Alpine) {
9300
9470
  if (Math.abs(consumed) < DELTA_ABS) break;
9301
9471
  }
9302
9472
  visible.forEach((p) => p.apply());
9473
+ if (total > 0)
9474
+ visible.forEach((p) => {
9475
+ p.savedFraction = p.size / total;
9476
+ });
9303
9477
  };
9304
9478
  let layoutFrame = null;
9305
9479
  const queueLayout = () => {
@@ -9334,7 +9508,6 @@ function split_default(Alpine) {
9334
9508
  queueLayout();
9335
9509
  },
9336
9510
  panelHidden() {
9337
- initialized = false;
9338
9511
  refreshGutters();
9339
9512
  queueLayout();
9340
9513
  },
@@ -9345,6 +9518,9 @@ function split_default(Alpine) {
9345
9518
  panelChange() {
9346
9519
  queueLayout();
9347
9520
  },
9521
+ resetInit() {
9522
+ initialized = false;
9523
+ },
9348
9524
  normalize,
9349
9525
  saveSizes
9350
9526
  };
@@ -9508,6 +9684,9 @@ function split_default(Alpine) {
9508
9684
  max: split._h_split.normalize(el.getAttribute("data-max")) ?? Infinity,
9509
9685
  collapsed: false,
9510
9686
  prevSize: null,
9687
+ prevHiddenFraction: null,
9688
+ savedFraction: null,
9689
+ restoreFraction: null,
9511
9690
  apply() {
9512
9691
  el.style.flexBasis = `${this.size.toFixed(2)}px`;
9513
9692
  if (split._h_split.state.isBorder) {
@@ -9612,7 +9791,7 @@ function split_default(Alpine) {
9612
9791
  gutter.addEventListener("pointerdown", drag);
9613
9792
  const collapse = () => {
9614
9793
  if (panel.collapsed) return;
9615
- panel.prevSize = panel.size;
9794
+ panel.prevSize = panel.size > (panel.min ?? 0) ? panel.size : panel.declaredSize;
9616
9795
  panel.size = panel.min ?? 0;
9617
9796
  panel.collapsed = true;
9618
9797
  panel.explicit = true;
@@ -9636,19 +9815,32 @@ function split_default(Alpine) {
9636
9815
  panel.explicit = true;
9637
9816
  split._h_split.panelChange();
9638
9817
  };
9818
+ const setState = () => {
9819
+ if (panel.hidden) {
9820
+ el.classList.add("hidden");
9821
+ } else {
9822
+ el.classList.remove("hidden");
9823
+ }
9824
+ split._h_split.panelHidden();
9825
+ };
9826
+ setState();
9639
9827
  const observer = new MutationObserver((mutations) => {
9640
9828
  mutations.forEach((mutation) => {
9641
9829
  if (mutation.attributeName === "data-gutterless") {
9642
9830
  gutterless = el.getAttribute("data-gutterless") === "true";
9643
9831
  split._h_split.gutterHidden();
9644
9832
  } else if (mutation.attributeName === "data-hidden") {
9645
- panel.hidden = el.getAttribute("data-hidden") === "true";
9646
- if (panel.hidden) {
9647
- el.classList.add("hidden");
9648
- } else {
9649
- el.classList.remove("hidden");
9833
+ const newHidden = el.getAttribute("data-hidden") === "true";
9834
+ if (!panel.hidden && newHidden) {
9835
+ panel.prevHiddenFraction = panel.savedFraction;
9836
+ } else if (panel.hidden && !newHidden) {
9837
+ if (panel.prevHiddenFraction != null) {
9838
+ panel.restoreFraction = panel.prevHiddenFraction;
9839
+ }
9840
+ split._h_split.resetInit();
9650
9841
  }
9651
- split._h_split.panelHidden();
9842
+ panel.hidden = newHidden;
9843
+ setState();
9652
9844
  } else if (mutation.attributeName === "data-locked") {
9653
9845
  panel.setLocked();
9654
9846
  } else {
@@ -11436,7 +11628,7 @@ function tree_default(Alpine) {
11436
11628
  }
11437
11629
 
11438
11630
  // package.json
11439
- var version = "1.10.2";
11631
+ var version = "1.11.1";
11440
11632
 
11441
11633
  // src/utils/theme.js
11442
11634
  var colorSchemeKey = "codbex.harmonia.colorMode";
@@ -11629,6 +11821,7 @@ var registerComponents = (registerPlugin) => {
11629
11821
  registerPlugin(alert_default);
11630
11822
  registerPlugin(avatar_default);
11631
11823
  registerPlugin(badge_default);
11824
+ registerPlugin(breadcrumb_default);
11632
11825
  registerPlugin(button_default);
11633
11826
  registerPlugin(calendar_default);
11634
11827
  registerPlugin(card_default);
@@ -11677,6 +11870,7 @@ export {
11677
11870
  alert_default as Alert,
11678
11871
  avatar_default as Avatar,
11679
11872
  badge_default as Badge,
11873
+ breadcrumb_default as Breadcrumb,
11680
11874
  button_default as Button,
11681
11875
  calendar_default as Calendar,
11682
11876
  card_default as Card,