@codbex/harmonia 1.0.0 → 1.1.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.
@@ -21295,7 +21295,7 @@ function calendar_default(Alpine) {
21295
21295
  previousYearBtn.setAttribute("type", "button");
21296
21296
  previousYearBtn.appendChild(
21297
21297
  (0, import_lucide2.createElement)(import_lucide2.ChevronsLeft, {
21298
- class: ["opacity-50 size-4 shrink-0 pointer-events-none"],
21298
+ class: ["opacity-70 size-4 shrink-0 pointer-events-none"],
21299
21299
  width: "16",
21300
21300
  height: "16",
21301
21301
  "aria-hidden": true,
@@ -21313,7 +21313,7 @@ function calendar_default(Alpine) {
21313
21313
  previousMonthBtn.setAttribute("type", "button");
21314
21314
  previousMonthBtn.appendChild(
21315
21315
  (0, import_lucide2.createElement)(import_lucide2.ChevronLeft, {
21316
- class: ["opacity-50 size-4 shrink-0 pointer-events-none"],
21316
+ class: ["opacity-70 size-4 shrink-0 pointer-events-none"],
21317
21317
  width: "16",
21318
21318
  height: "16",
21319
21319
  "aria-hidden": true,
@@ -21336,7 +21336,7 @@ function calendar_default(Alpine) {
21336
21336
  nextMonthBtn.setAttribute("type", "button");
21337
21337
  nextMonthBtn.appendChild(
21338
21338
  (0, import_lucide2.createElement)(import_lucide2.ChevronRight, {
21339
- class: ["opacity-50 size-4 shrink-0 pointer-events-none"],
21339
+ class: ["opacity-70 size-4 shrink-0 pointer-events-none"],
21340
21340
  width: "16",
21341
21341
  height: "16",
21342
21342
  "aria-hidden": true,
@@ -21354,7 +21354,7 @@ function calendar_default(Alpine) {
21354
21354
  nextYearBtn.setAttribute("type", "button");
21355
21355
  nextYearBtn.appendChild(
21356
21356
  (0, import_lucide2.createElement)(import_lucide2.ChevronsRight, {
21357
- class: ["opacity-50 size-4 shrink-0 pointer-events-none"],
21357
+ class: ["opacity-70 size-4 shrink-0 pointer-events-none"],
21358
21358
  width: "16",
21359
21359
  height: "16",
21360
21360
  "aria-hidden": true,
@@ -21779,8 +21779,29 @@ function collapsible_default(Alpine) {
21779
21779
 
21780
21780
  // src/components/datepicker.js
21781
21781
  var import_lucide3 = __toESM(require_lucide(), 1);
21782
+
21783
+ // src/common/input-size.js
21784
+ function setSize(el, size3) {
21785
+ if (size3 === "sm") {
21786
+ el.classList.add("h-6.5");
21787
+ el.classList.remove("h-9");
21788
+ } else {
21789
+ el.classList.add("h-9");
21790
+ el.classList.remove("h-6.5");
21791
+ }
21792
+ }
21793
+ function sizeObserver(el) {
21794
+ const observer = new MutationObserver(() => {
21795
+ setSize(el, el.getAttribute("data-size"));
21796
+ });
21797
+ setSize(el, el.getAttribute("data-size"));
21798
+ observer.observe(el, { attributes: true, attributeFilter: ["data-size"] });
21799
+ return observer;
21800
+ }
21801
+
21802
+ // src/components/datepicker.js
21782
21803
  function datepicker_default(Alpine) {
21783
- Alpine.directive("h-date-picker", (el, { original }, { Alpine: Alpine2 }) => {
21804
+ Alpine.directive("h-date-picker", (el, { original }, { Alpine: Alpine2, cleanup }) => {
21784
21805
  el._h_datepicker = Alpine2.reactive({
21785
21806
  id: void 0,
21786
21807
  controls: `hdpc${v4_default()}`,
@@ -21809,10 +21830,7 @@ function datepicker_default(Alpine) {
21809
21830
  "transition-[color,box-shadow]",
21810
21831
  "duration-200",
21811
21832
  "outline-none",
21812
- "h-9",
21813
21833
  "pl-3",
21814
- "pr-1",
21815
- "gap-2",
21816
21834
  "min-w-0",
21817
21835
  "has-[input:focus-visible]:border-ring",
21818
21836
  "has-[input:focus-visible]:ring-ring/50",
@@ -21828,18 +21846,26 @@ function datepicker_default(Alpine) {
21828
21846
  el._h_datepicker.input.classList.add(
21829
21847
  "bg-transparent",
21830
21848
  "outline-none",
21831
- "flex-1",
21832
- "h-full",
21833
- "border-0",
21849
+ "size-full",
21850
+ "pr-1",
21851
+ "border-r",
21852
+ "border-input",
21853
+ "aria-invalid:border-negative",
21854
+ "invalid:border-negative",
21834
21855
  "focus-visible:ring-0",
21835
21856
  "disabled:pointer-events-none",
21836
21857
  "disabled:cursor-not-allowed",
21837
21858
  "disabled:opacity-50",
21838
21859
  "md:text-sm",
21839
- "text-base"
21860
+ "text-base",
21861
+ "truncate"
21840
21862
  );
21841
21863
  el._h_datepicker.input.setAttribute("aria-autocomplete", "none");
21842
21864
  el._h_datepicker.input.setAttribute("type", "text");
21865
+ const observer = sizeObserver(el);
21866
+ cleanup(() => {
21867
+ observer.disconnect();
21868
+ });
21843
21869
  });
21844
21870
  Alpine.directive("h-date-picker-trigger", (el, { original }, { effect, cleanup, Alpine: Alpine2 }) => {
21845
21871
  if (el.tagName !== "BUTTON") {
@@ -21852,6 +21878,28 @@ function datepicker_default(Alpine) {
21852
21878
  if (!datepicker) {
21853
21879
  throw new Error(`${original} must be inside an date-picker element`);
21854
21880
  }
21881
+ el.classList.add(
21882
+ "cursor-pointer",
21883
+ "inline-flex",
21884
+ "items-center",
21885
+ "justify-center",
21886
+ "rounded-r-control",
21887
+ "h-full",
21888
+ "aspect-square",
21889
+ "bg-transparent",
21890
+ "hover:bg-secondary",
21891
+ "active:bg-secondary-active",
21892
+ "outline-none",
21893
+ "focus-visible:border-ring",
21894
+ "focus-visible:ring-ring/50",
21895
+ "focus-visible:ring-[calc(var(--spacing)*0.75)]",
21896
+ "[input[aria-invalid=true]~&]:ring-negative/20",
21897
+ "[input[aria-invalid=true]~&]:border-negative",
21898
+ "dark:[input[aria-invalid=true]~&]:ring-negative/40",
21899
+ "[input:invalid~&]:ring-negative/20",
21900
+ "[input:invalid~&]:border-negative",
21901
+ "dark:[input:invalid~&]:ring-negative/40"
21902
+ );
21855
21903
  el.setAttribute("aria-controls", datepicker._h_datepicker.controls);
21856
21904
  el.setAttribute("aria-expanded", "false");
21857
21905
  el.setAttribute("aria-haspopup", "dialog");
@@ -21859,7 +21907,7 @@ function datepicker_default(Alpine) {
21859
21907
  el.setAttribute("data-slot", "date-picker-trigger");
21860
21908
  el.appendChild(
21861
21909
  (0, import_lucide3.createElement)(import_lucide3.Calendar, {
21862
- class: ["opacity-50 size-4 transition-transform duration-200"],
21910
+ class: ["opacity-70 text-foreground size-4"],
21863
21911
  width: "16",
21864
21912
  height: "16",
21865
21913
  "aria-hidden": true,
@@ -21889,7 +21937,7 @@ function datepicker_default(Alpine) {
21889
21937
  el.removeEventListener("click", handler);
21890
21938
  top.removeEventListener("click", close);
21891
21939
  });
21892
- }).before("h-button");
21940
+ });
21893
21941
  }
21894
21942
 
21895
21943
  // src/components/dialog.js
@@ -22163,25 +22211,6 @@ function info_page_default(Alpine) {
22163
22211
  });
22164
22212
  }
22165
22213
 
22166
- // src/common/input-size.js
22167
- function setSize(el, size3) {
22168
- if (size3 === "sm") {
22169
- el.classList.add("h-6.5");
22170
- el.classList.remove("h-9");
22171
- } else {
22172
- el.classList.add("h-9");
22173
- el.classList.remove("h-6.5");
22174
- }
22175
- }
22176
- function sizeObserver(el) {
22177
- const observer = new MutationObserver(() => {
22178
- setSize(el, el.getAttribute("data-size"));
22179
- });
22180
- setSize(el, el.getAttribute("data-size"));
22181
- observer.observe(el, { attributes: true, attributeFilter: ["data-size"] });
22182
- return observer;
22183
- }
22184
-
22185
22214
  // src/components/input.js
22186
22215
  function input_default(Alpine) {
22187
22216
  Alpine.directive("h-input", (el, { modifiers }, { cleanup }) => {
@@ -22382,8 +22411,11 @@ function input_default(Alpine) {
22382
22411
  stepDown.setAttribute("aria-controls", input.getAttribute("id"));
22383
22412
  stepDown.setAttribute("data-slot", "step-up-trigger");
22384
22413
  stepDown.classList.add(
22414
+ "cursor-pointer",
22385
22415
  "border-l",
22386
22416
  "border-input",
22417
+ "[input[aria-invalid=true]~&]:border-negative",
22418
+ "[input:invalid~&]:border-negative",
22387
22419
  "h-full",
22388
22420
  "aspect-square",
22389
22421
  "bg-transparent",
@@ -22392,6 +22424,7 @@ function input_default(Alpine) {
22392
22424
  "outline-none",
22393
22425
  "relative",
22394
22426
  "before:block",
22427
+ "before:opacity-70",
22395
22428
  "before:rounded-full",
22396
22429
  "before:h-0.5",
22397
22430
  "before:min-h-px",
@@ -22414,8 +22447,11 @@ function input_default(Alpine) {
22414
22447
  stepUp.setAttribute("aria-controls", input.getAttribute("id"));
22415
22448
  stepUp.setAttribute("data-slot", "step-up-trigger");
22416
22449
  stepUp.classList.add(
22450
+ "cursor-pointer",
22417
22451
  "border-l",
22418
22452
  "border-input",
22453
+ "[input[aria-invalid=true]~&]:border-negative",
22454
+ "[input:invalid~&]:border-negative",
22419
22455
  "rounded-r-control",
22420
22456
  "h-full",
22421
22457
  "aspect-square",
@@ -22425,6 +22461,7 @@ function input_default(Alpine) {
22425
22461
  "outline-none",
22426
22462
  "relative",
22427
22463
  "before:block",
22464
+ "before:opacity-70",
22428
22465
  "before:absolute",
22429
22466
  "before:rounded-full",
22430
22467
  "before:h-0.5",
@@ -22437,6 +22474,7 @@ function input_default(Alpine) {
22437
22474
  "before:bg-foreground",
22438
22475
  "before:hover:bg-secondary-foreground",
22439
22476
  "after:block",
22477
+ "after:opacity-70",
22440
22478
  "after:absolute",
22441
22479
  "after:rounded-full",
22442
22480
  "after:h-3",
@@ -23598,11 +23636,7 @@ function select_default(Alpine) {
23598
23636
  "duration-200",
23599
23637
  "outline-none",
23600
23638
  "has-[input:disabled]:pointer-events-none",
23601
- "has-[input:disabled]:opacity-50",
23602
- "[&_svg]:pointer-events-none",
23603
- "[&_svg]:shrink-0",
23604
- "[&_svg]:size-4",
23605
- "[&_svg]:opacity-50"
23639
+ "has-[input:disabled]:opacity-50"
23606
23640
  );
23607
23641
  el.setAttribute("data-slot", "select");
23608
23642
  const observer = sizeObserver(el);
@@ -23840,7 +23874,7 @@ function select_default(Alpine) {
23840
23874
  fakeTrigger.addEventListener("keydown", onPress);
23841
23875
  fakeTrigger.addEventListener("click", onClick2);
23842
23876
  const chevronDown = (0, import_lucide4.createElement)(import_lucide4.ChevronDown, {
23843
- class: ["opacity-50 size-4 transition-transform duration-200"],
23877
+ class: ["opacity-70 text-foreground size-4 shrink-0 pointer-events-none transition-transform duration-200"],
23844
23878
  width: "16",
23845
23879
  height: "16",
23846
23880
  "aria-hidden": true,
@@ -25258,12 +25292,12 @@ function timepicker_default(Alpine) {
25258
25292
  "has-[input:focus-visible]:border-ring",
25259
25293
  "has-[input:focus-visible]:ring-[calc(var(--spacing)*0.75)]",
25260
25294
  "has-[input:focus-visible]:ring-ring/50",
25261
- "dark:has-[aria-invalid=true]:ring-negative/40",
25262
- "dark:has-[input:invalid]:ring-negative/40",
25263
- "has-[aria-invalid=true]:border-negative",
25264
- "has-[aria-invalid=true]:ring-negative/20",
25265
- "has-[input:invalid]:border-negative",
25295
+ "has-[input[aria-invalid=true]]:ring-negative/20",
25296
+ "has-[input[aria-invalid=true]]:border-negative",
25297
+ "dark:has-[input[aria-invalid=true]]:ring-negative/40",
25266
25298
  "has-[input:invalid]:ring-negative/20",
25299
+ "has-[input:invalid]:border-negative",
25300
+ "dark:has-[input:invalid]:ring-negative/40",
25267
25301
  "hover:bg-secondary-hover",
25268
25302
  "active:bg-secondary-active",
25269
25303
  "flex",
@@ -25271,12 +25305,12 @@ function timepicker_default(Alpine) {
25271
25305
  "items-center",
25272
25306
  "justify-between",
25273
25307
  "gap-2",
25274
- "h-9",
25275
25308
  "rounded-control",
25276
25309
  "border",
25277
25310
  "bg-input-inner",
25278
25311
  "pl-3",
25279
25312
  "pr-2",
25313
+ "data-[size=sm]:pr-1",
25280
25314
  "text-sm",
25281
25315
  "whitespace-nowrap",
25282
25316
  "shadow-input",
@@ -25284,17 +25318,13 @@ function timepicker_default(Alpine) {
25284
25318
  "duration-200",
25285
25319
  "outline-none",
25286
25320
  "has-[input:disabled]:pointer-events-none",
25287
- "has-[input:disabled]:opacity-50",
25288
- "[&_svg]:pointer-events-none",
25289
- "[&_svg]:shrink-0",
25290
- "[&_svg]:size-4",
25291
- "[&_svg]:opacity-50"
25321
+ "has-[input:disabled]:opacity-50"
25292
25322
  );
25293
25323
  el.setAttribute("data-slot", "time-picker");
25294
25324
  el.setAttribute("tabindex", "-1");
25295
25325
  el.appendChild(
25296
25326
  (0, import_lucide5.createElement)(import_lucide5.Clock, {
25297
- class: ["opacity-50 size-4 transition-transform duration-200"],
25327
+ class: ["opacity-70 text-foreground size-4 shrink-0 pointer-events-none"],
25298
25328
  width: "16",
25299
25329
  height: "16",
25300
25330
  "aria-hidden": true,
@@ -25333,13 +25363,15 @@ function timepicker_default(Alpine) {
25333
25363
  };
25334
25364
  el.addEventListener("click", handler);
25335
25365
  el.addEventListener("keydown", handler);
25366
+ const observer = sizeObserver(el);
25336
25367
  cleanup(() => {
25368
+ observer.disconnect();
25337
25369
  el.removeEventListener("click", handler);
25338
25370
  el.removeEventListener("keydown", handler);
25339
25371
  top.removeEventListener("click", el._h_timepicker.close);
25340
25372
  });
25341
25373
  });
25342
- Alpine.directive("h-time-picker-input", (el, { original }, { effect, Alpine: Alpine2 }) => {
25374
+ Alpine.directive("h-time-picker-input", (el, { original }, { effect, cleanup, Alpine: Alpine2 }) => {
25343
25375
  if (el.tagName !== "INPUT") {
25344
25376
  throw new Error(`${original} must be a readonly input of type "text"`);
25345
25377
  }
@@ -25373,8 +25405,7 @@ function timepicker_default(Alpine) {
25373
25405
  timepicker._h_timepicker.id = `htp${v4_default()}`;
25374
25406
  el.setAttribute("id", timepicker._h_timepicker.id);
25375
25407
  }
25376
- el.classList.add("cursor-pointer", "bg-transparent", "text-transparent", "text-shadow-[0_0_0_var(--foreground)]", "outline-none", "flex-1", "h-full", "border-0", "md:text-sm", "text-base");
25377
- el.readOnly = true;
25408
+ el.classList.add("cursor-pointer", "bg-transparent", "text-transparent", "text-shadow-[0_0_0_var(--foreground)]", "placeholder:text-muted-foreground", "outline-none", "size-full", "border-0", "md:text-sm", "text-base", "truncate");
25378
25409
  el.setAttribute("aria-autocomplete", "none");
25379
25410
  el.setAttribute("aria-controls", timepicker._h_timepicker.controls);
25380
25411
  el.setAttribute("aria-expanded", "false");
@@ -25417,11 +25448,20 @@ function timepicker_default(Alpine) {
25417
25448
  placeholder = timepicker._h_timepicker.is12Hour ? "--:-- --" : "--:--";
25418
25449
  }
25419
25450
  el.setAttribute("placeholder", placeholder);
25451
+ const preventInput = (event) => {
25452
+ event.preventDefault();
25453
+ };
25454
+ el.addEventListener("beforeinput", preventInput);
25455
+ el.addEventListener("paste", preventInput);
25420
25456
  effect(() => {
25421
25457
  el.setAttribute("data-state", timepicker._h_timepicker.expanded ? "open" : "closed");
25422
25458
  el.setAttribute("aria-expanded", timepicker._h_timepicker.expanded);
25423
25459
  });
25424
- }).before("h-button");
25460
+ cleanup(() => {
25461
+ el.removeEventListener("keydown", preventInput);
25462
+ el.removeEventListener("paste", preventInput);
25463
+ });
25464
+ });
25425
25465
  Alpine.directive("h-time-picker-popup", (el, _, { effect, cleanup, Alpine: Alpine2 }) => {
25426
25466
  const timepicker = Alpine2.findClosest(el.parentElement, (parent) => parent.hasOwnProperty("_h_timepicker"));
25427
25467
  el.classList.add(
@@ -25438,6 +25478,7 @@ function timepicker_default(Alpine) {
25438
25478
  "z-50",
25439
25479
  "shadow-md"
25440
25480
  );
25481
+ el.setAttribute("id", timepicker._h_timepicker.controls);
25441
25482
  el.setAttribute("tabindex", "-1");
25442
25483
  el.setAttribute("role", "dialog");
25443
25484
  el.setAttribute("aria-modal", "true");
@@ -25634,7 +25675,7 @@ function timepicker_default(Alpine) {
25634
25675
  }
25635
25676
  }
25636
25677
  const timeContainer = document.createElement("div");
25637
- timeContainer.classList.add("hbox", "max-h-[18rem]", "[&>ul]:border-r", "[&>ul:last-of-type]:border-r-0");
25678
+ timeContainer.classList.add("hbox", "max-h-[14rem]", "[&>ul]:border-r", "[&>ul:last-of-type]:border-r-0");
25638
25679
  if (el.firstChild) el.classList.add("border-b");
25639
25680
  timeContainer.setAttribute("role", "group");
25640
25681
  timeContainer.addEventListener("click", setTime);
@@ -25721,6 +25762,7 @@ function timepicker_default(Alpine) {
25721
25762
  footer.classList.add("hbox", "justify-between", "gap-1", "border-t", "p-2");
25722
25763
  footer.setAttribute("tabindex", "-1");
25723
25764
  const nowButton = document.createElement("button");
25765
+ nowButton.setAttribute("type", "button");
25724
25766
  nowButton.setAttribute(Alpine2.prefixed("h-button"), "");
25725
25767
  nowButton.setAttribute("data-size", "sm");
25726
25768
  nowButton.setAttribute("data-action", "time");
@@ -25728,6 +25770,7 @@ function timepicker_default(Alpine) {
25728
25770
  nowButton.addEventListener("click", getCurrentTime);
25729
25771
  footer.appendChild(nowButton);
25730
25772
  const okButton = document.createElement("button");
25773
+ okButton.setAttribute("type", "button");
25731
25774
  okButton.setAttribute(Alpine2.prefixed("h-button"), "");
25732
25775
  okButton.setAttribute("data-variant", "primary");
25733
25776
  okButton.setAttribute("data-size", "sm");
@@ -26264,7 +26307,7 @@ function tree_default(Alpine) {
26264
26307
  }
26265
26308
 
26266
26309
  // package.json
26267
- var version = "1.0.0";
26310
+ var version = "1.1.0";
26268
26311
 
26269
26312
  // src/utils/breakpoint-listener.js
26270
26313
  function getBreakpointListener(handler, breakpoint = 768) {