@codbex/harmonia 1.10.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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");
@@ -11436,7 +11579,7 @@ function tree_default(Alpine) {
11436
11579
  }
11437
11580
 
11438
11581
  // package.json
11439
- var version = "1.10.2";
11582
+ var version = "1.11.0";
11440
11583
 
11441
11584
  // src/utils/theme.js
11442
11585
  var colorSchemeKey = "codbex.harmonia.colorMode";
@@ -11629,6 +11772,7 @@ var registerComponents = (registerPlugin) => {
11629
11772
  registerPlugin(alert_default);
11630
11773
  registerPlugin(avatar_default);
11631
11774
  registerPlugin(badge_default);
11775
+ registerPlugin(breadcrumb_default);
11632
11776
  registerPlugin(button_default);
11633
11777
  registerPlugin(calendar_default);
11634
11778
  registerPlugin(card_default);
@@ -11677,6 +11821,7 @@ export {
11677
11821
  alert_default as Alert,
11678
11822
  avatar_default as Avatar,
11679
11823
  badge_default as Badge,
11824
+ breadcrumb_default as Breadcrumb,
11680
11825
  button_default as Button,
11681
11826
  calendar_default as Calendar,
11682
11827
  card_default as Card,