@haiilo/catalyst 0.6.0 → 0.7.2

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 (164) hide show
  1. package/dist/catalyst/catalyst.esm.js +1 -1
  2. package/dist/catalyst/catalyst.esm.js.map +1 -1
  3. package/dist/catalyst/p-12486027.js.map +1 -1
  4. package/dist/catalyst/p-12b96af6.js +2 -0
  5. package/dist/catalyst/p-12b96af6.js.map +1 -0
  6. package/dist/catalyst/p-4254363e.entry.js +2 -0
  7. package/dist/catalyst/p-4254363e.entry.js.map +1 -0
  8. package/dist/catalyst/p-5616e2cd.js +2 -0
  9. package/dist/catalyst/p-5616e2cd.js.map +1 -0
  10. package/dist/catalyst/p-dda85567.entry.js +10 -0
  11. package/dist/catalyst/p-dda85567.entry.js.map +1 -0
  12. package/dist/catalyst/scss/_mixins.scss +9 -0
  13. package/dist/catalyst/scss/_variables.scss +64 -0
  14. package/dist/catalyst/scss/_variables.tokens.scss +84 -0
  15. package/dist/catalyst/scss/core/_base.scss +12 -0
  16. package/dist/catalyst/scss/core/_nav.scss +23 -0
  17. package/dist/catalyst/scss/core/_typography.scss +237 -0
  18. package/dist/catalyst/scss/fonts/_fonts.mixins.azeret.scss +14 -0
  19. package/dist/catalyst/scss/fonts/_fonts.mixins.dm.scss +53 -0
  20. package/dist/catalyst/scss/fonts/_fonts.mixins.lato.scss +185 -0
  21. package/dist/catalyst/scss/fonts/_fonts.mixins.scss +3 -0
  22. package/dist/catalyst/scss/fonts/_fonts.scss +13 -0
  23. package/dist/catalyst/scss/index.scss +32 -0
  24. package/dist/catalyst/scss/utils/_color.scss +52 -0
  25. package/dist/catalyst/scss/utils/_disabled.mixins.scss +7 -0
  26. package/dist/catalyst/scss/utils/_display.scss +20 -0
  27. package/dist/catalyst/scss/utils/_elevation.mixins.scss +10 -0
  28. package/dist/catalyst/scss/utils/_elevation.scss +19 -0
  29. package/dist/catalyst/scss/utils/_layout.scss +78 -0
  30. package/dist/catalyst/scss/utils/_media.mixins.scss +37 -0
  31. package/dist/catalyst/scss/utils/_ratio.mixins.scss +12 -0
  32. package/dist/catalyst/scss/utils/_ratio.scss +20 -0
  33. package/dist/catalyst/scss/utils/_sizing.mixins.scss +15 -0
  34. package/dist/catalyst/scss/utils/_sizing.scss +16 -0
  35. package/dist/catalyst/scss/utils/_spacing.mixins.scss +5 -0
  36. package/dist/catalyst/scss/utils/_spacing.scss +49 -0
  37. package/dist/catalyst/scss/utils/_toast.scss +77 -0
  38. package/dist/catalyst/scss/utils/_typography.mixins.scss +102 -0
  39. package/dist/catalyst/scss/utils/_typography.scss +34 -0
  40. package/dist/catalyst/scss/utils/_visibility.mixins.scss +29 -0
  41. package/dist/catalyst/scss/utils/_visibility.scss +13 -0
  42. package/dist/cjs/app-globals-aa29ad72.js.map +1 -1
  43. package/dist/cjs/{cat-alert_16.cjs.entry.js → cat-alert_18.cjs.entry.js} +174 -44
  44. package/dist/cjs/cat-alert_18.cjs.entry.js.map +1 -0
  45. package/dist/cjs/cat-form-hint-93a6936b.js +22 -0
  46. package/dist/cjs/cat-form-hint-93a6936b.js.map +1 -0
  47. package/dist/cjs/cat-textarea.cjs.entry.js +13 -12
  48. package/dist/cjs/cat-textarea.cjs.entry.js.map +1 -1
  49. package/dist/cjs/catalyst.cjs.js +2 -2
  50. package/dist/cjs/{index-5d72f0e4.js → index-499bad41.js} +44 -1
  51. package/dist/cjs/index-499bad41.js.map +1 -0
  52. package/dist/cjs/loader.cjs.js +2 -2
  53. package/dist/collection/collection-manifest.json +2 -0
  54. package/dist/collection/components/cat-checkbox/cat-checkbox.css +14 -0
  55. package/dist/collection/components/cat-checkbox/cat-checkbox.js +44 -11
  56. package/dist/collection/components/cat-checkbox/cat-checkbox.js.map +1 -1
  57. package/dist/collection/components/cat-form-hint/cat-form-hint.js +16 -0
  58. package/dist/collection/components/cat-form-hint/cat-form-hint.js.map +1 -0
  59. package/dist/collection/components/cat-icon/cat-icon.css +4 -1
  60. package/dist/collection/components/cat-input/cat-input.css +12 -6
  61. package/dist/collection/components/cat-input/cat-input.js +24 -25
  62. package/dist/collection/components/cat-input/cat-input.js.map +1 -1
  63. package/dist/collection/components/cat-radio/cat-radio.css +14 -0
  64. package/dist/collection/components/cat-radio/cat-radio.js +41 -8
  65. package/dist/collection/components/cat-radio/cat-radio.js.map +1 -1
  66. package/dist/collection/components/cat-tab/cat-tab.css +12 -0
  67. package/dist/collection/components/cat-tab/cat-tab.js +203 -0
  68. package/dist/collection/components/cat-tab/cat-tab.js.map +1 -0
  69. package/dist/collection/components/cat-tabs/cat-tabs.css +33 -0
  70. package/dist/collection/components/cat-tabs/cat-tabs.js +122 -0
  71. package/dist/collection/components/cat-tabs/cat-tabs.js.map +1 -0
  72. package/dist/collection/components/cat-textarea/cat-textarea.css +12 -6
  73. package/dist/collection/components/cat-textarea/cat-textarea.js +24 -18
  74. package/dist/collection/components/cat-textarea/cat-textarea.js.map +1 -1
  75. package/dist/collection/components/cat-toggle/cat-toggle.css +14 -0
  76. package/dist/collection/components/cat-toggle/cat-toggle.js +40 -7
  77. package/dist/collection/components/cat-toggle/cat-toggle.js.map +1 -1
  78. package/dist/collection/components/cat-tooltip/cat-tooltip.js +13 -8
  79. package/dist/collection/components/cat-tooltip/cat-tooltip.js.map +1 -1
  80. package/dist/collection/scss/_mixins.scss +9 -0
  81. package/dist/collection/scss/_variables.scss +64 -0
  82. package/dist/collection/scss/_variables.tokens.scss +84 -0
  83. package/dist/collection/scss/core/_base.scss +12 -0
  84. package/dist/collection/scss/core/_nav.scss +23 -0
  85. package/dist/collection/scss/core/_typography.scss +237 -0
  86. package/dist/collection/scss/fonts/_fonts.mixins.azeret.scss +14 -0
  87. package/dist/collection/scss/fonts/_fonts.mixins.dm.scss +53 -0
  88. package/dist/collection/scss/fonts/_fonts.mixins.lato.scss +185 -0
  89. package/dist/collection/scss/fonts/_fonts.mixins.scss +3 -0
  90. package/dist/collection/scss/fonts/_fonts.scss +13 -0
  91. package/dist/collection/scss/index.scss +32 -0
  92. package/dist/collection/scss/utils/_color.scss +52 -0
  93. package/dist/collection/scss/utils/_disabled.mixins.scss +7 -0
  94. package/dist/collection/scss/utils/_display.scss +20 -0
  95. package/dist/collection/scss/utils/_elevation.mixins.scss +10 -0
  96. package/dist/collection/scss/utils/_elevation.scss +19 -0
  97. package/dist/collection/scss/utils/_layout.scss +78 -0
  98. package/dist/collection/scss/utils/_media.mixins.scss +37 -0
  99. package/dist/collection/scss/utils/_ratio.mixins.scss +12 -0
  100. package/dist/collection/scss/utils/_ratio.scss +20 -0
  101. package/dist/collection/scss/utils/_sizing.mixins.scss +15 -0
  102. package/dist/collection/scss/utils/_sizing.scss +16 -0
  103. package/dist/collection/scss/utils/_spacing.mixins.scss +5 -0
  104. package/dist/collection/scss/utils/_spacing.scss +49 -0
  105. package/dist/collection/scss/utils/_toast.scss +77 -0
  106. package/dist/collection/scss/utils/_typography.mixins.scss +102 -0
  107. package/dist/collection/scss/utils/_typography.scss +34 -0
  108. package/dist/collection/scss/utils/_visibility.mixins.scss +29 -0
  109. package/dist/collection/scss/utils/_visibility.scss +13 -0
  110. package/dist/components/cat-checkbox.js +16 -5
  111. package/dist/components/cat-checkbox.js.map +1 -1
  112. package/dist/components/cat-form-hint.js +20 -0
  113. package/dist/components/cat-form-hint.js.map +1 -0
  114. package/dist/components/cat-icon2.js +1 -1
  115. package/dist/components/cat-icon2.js.map +1 -1
  116. package/dist/components/cat-input.js +16 -18
  117. package/dist/components/cat-input.js.map +1 -1
  118. package/dist/components/cat-radio.js +16 -5
  119. package/dist/components/cat-radio.js.map +1 -1
  120. package/dist/components/cat-tab.d.ts +11 -0
  121. package/dist/components/cat-tab.js +70 -0
  122. package/dist/components/cat-tab.js.map +1 -0
  123. package/dist/components/cat-tabs.d.ts +11 -0
  124. package/dist/components/cat-tabs.js +107 -0
  125. package/dist/components/cat-tabs.js.map +1 -0
  126. package/dist/components/cat-textarea.js +14 -12
  127. package/dist/components/cat-textarea.js.map +1 -1
  128. package/dist/components/cat-toggle.js +16 -5
  129. package/dist/components/cat-toggle.js.map +1 -1
  130. package/dist/components/cat-tooltip.js +13 -8
  131. package/dist/components/cat-tooltip.js.map +1 -1
  132. package/dist/components/index.js.map +1 -1
  133. package/dist/esm/app-globals-cf55f7f5.js.map +1 -1
  134. package/dist/esm/{cat-alert_16.entry.js → cat-alert_18.entry.js} +173 -45
  135. package/dist/esm/cat-alert_18.entry.js.map +1 -0
  136. package/dist/esm/cat-form-hint-dc443c7c.js +20 -0
  137. package/dist/esm/cat-form-hint-dc443c7c.js.map +1 -0
  138. package/dist/esm/cat-textarea.entry.js +13 -12
  139. package/dist/esm/cat-textarea.entry.js.map +1 -1
  140. package/dist/esm/catalyst.js +2 -2
  141. package/dist/esm/{index-fd12be19.js → index-039e6f5f.js} +44 -2
  142. package/dist/esm/index-039e6f5f.js.map +1 -0
  143. package/dist/esm/loader.js +2 -2
  144. package/dist/types/components/cat-checkbox/cat-checkbox.d.ts +9 -0
  145. package/dist/types/components/cat-form-hint/cat-form-hint.d.ts +19 -0
  146. package/dist/types/components/cat-input/cat-input.d.ts +7 -5
  147. package/dist/types/components/cat-radio/cat-radio.d.ts +9 -0
  148. package/dist/types/components/cat-tab/cat-tab.d.ts +43 -0
  149. package/dist/types/components/cat-tabs/cat-tabs.d.ts +25 -0
  150. package/dist/types/components/cat-textarea/cat-textarea.d.ts +7 -2
  151. package/dist/types/components/cat-toggle/cat-toggle.d.ts +9 -0
  152. package/dist/types/components/cat-tooltip/cat-tooltip.d.ts +1 -0
  153. package/dist/types/components.d.ts +134 -8
  154. package/package.json +2 -2
  155. package/dist/catalyst/p-6a5f0d4a.entry.js +0 -10
  156. package/dist/catalyst/p-6a5f0d4a.entry.js.map +0 -1
  157. package/dist/catalyst/p-a8629c54.entry.js +0 -2
  158. package/dist/catalyst/p-a8629c54.entry.js.map +0 -1
  159. package/dist/catalyst/p-bfc656ca.js +0 -2
  160. package/dist/catalyst/p-bfc656ca.js.map +0 -1
  161. package/dist/cjs/cat-alert_16.cjs.entry.js.map +0 -1
  162. package/dist/cjs/index-5d72f0e4.js.map +0 -1
  163. package/dist/esm/cat-alert_16.entry.js.map +0 -1
  164. package/dist/esm/index-fd12be19.js.map +0 -1
@@ -1,5 +1,6 @@
1
- import { r as registerInstance, h, H as Host, c as createEvent } from './index-fd12be19.js';
1
+ import { r as registerInstance, h, H as Host, c as createEvent, g as getElement } from './index-039e6f5f.js';
2
2
  import { l as loglevel } from './loglevel-39a9e3f9.js';
3
+ import { C as CatFormHint } from './cat-form-hint-dc443c7c.js';
3
4
  import { C as CatIconRegistry, a as CatI18nRegistry } from './cat-icon-registry-3ea75755.js';
4
5
  import { N as NotificationsService } from './cat-notification-cd98c266.js';
5
6
 
@@ -459,16 +460,17 @@ const CatCard = class {
459
460
  };
460
461
  CatCard.style = catCardCss;
461
462
 
462
- const catCheckboxCss = ":host{display:flex;margin-bottom:1rem}:host([hidden]){display:none}label{flex:0 1 auto;display:flex;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}input{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.box{flex:0 0 auto;display:flex;position:relative;height:1.25rem;width:1.25rem;background-color:white;border:1px solid #d7dbe0;border-radius:0.125rem;transition:background-color 0.13s ease, border-color 0.13s ease}.box svg{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:16px;stroke-dashoffset:16px;transition:all 0.13s ease;width:70%;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%) scale(0.99)}:checked+.box{background-color:rgb(var(--cat-primary-bg, 32, 127, 138));border-color:rgb(var(--cat-primary-bg, 32, 127, 138));stroke:rgb(var(--cat-primary-fill, 255, 255, 255))}:checked+.box .check{stroke-dashoffset:0}:indeterminate+.box{background-color:rgb(var(--cat-primary-bg, 32, 127, 138));border-color:rgb(var(--cat-primary-bg, 32, 127, 138));stroke:rgb(var(--cat-primary-fill, 255, 255, 255))}:indeterminate+.box .dash{stroke-dashoffset:0}:focus-visible+.box{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));outline-offset:1px}.label{flex:1 1 auto}.is-hidden .label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-disabled{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}";
463
+ const catCheckboxCss = ".hint-section{display:flex;gap:0.5rem;flex-direction:column}.hint-section .input-hint,.hint-section ::slotted([slot=hint]){font-size:0.875rem;line-height:1rem;margin:0}:host{display:flex;flex-direction:column;gap:0.5rem;margin-bottom:1rem}:host([hidden]){display:none}label{flex:0 1 auto;display:flex;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}input{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.box{flex:0 0 auto;display:flex;position:relative;height:1.25rem;width:1.25rem;background-color:white;border:1px solid #d7dbe0;border-radius:0.125rem;transition:background-color 0.13s ease, border-color 0.13s ease}.box svg{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:16px;stroke-dashoffset:16px;transition:all 0.13s ease;width:70%;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%) scale(0.99)}:checked+.box{background-color:rgb(var(--cat-primary-bg, 32, 127, 138));border-color:rgb(var(--cat-primary-bg, 32, 127, 138));stroke:rgb(var(--cat-primary-fill, 255, 255, 255))}:checked+.box .check{stroke-dashoffset:0}:indeterminate+.box{background-color:rgb(var(--cat-primary-bg, 32, 127, 138));border-color:rgb(var(--cat-primary-bg, 32, 127, 138));stroke:rgb(var(--cat-primary-fill, 255, 255, 255))}:indeterminate+.box .dash{stroke-dashoffset:0}:focus-visible+.box{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));outline-offset:1px}.label{flex:1 1 auto}.is-hidden .label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-disabled{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}";
463
464
 
464
- let nextUniqueId$5 = 0;
465
+ let nextUniqueId$6 = 0;
465
466
  const CatCheckbox = class {
466
467
  constructor(hostRef) {
467
468
  registerInstance(this, hostRef);
468
469
  this.catChange = createEvent(this, "catChange", 7);
469
470
  this.catFocus = createEvent(this, "catFocus", 7);
470
471
  this.catBlur = createEvent(this, "catBlur", 7);
471
- this.id = `cat-checkbox-${nextUniqueId$5++}`;
472
+ this.id = `cat-checkbox-${nextUniqueId$6++}`;
473
+ this.hasSlottedLabel = false;
472
474
  /**
473
475
  * Checked state of the checkbox
474
476
  */
@@ -500,7 +502,8 @@ const CatCheckbox = class {
500
502
  }
501
503
  }
502
504
  componentWillRender() {
503
- if (!this.label) {
505
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
506
+ if (!this.label && !this.hasSlottedLabel) {
504
507
  loglevel.error('[A11y] Missing ARIA label on checkbox', this);
505
508
  }
506
509
  }
@@ -514,9 +517,14 @@ const CatCheckbox = class {
514
517
  this.input.focus(options);
515
518
  }
516
519
  render() {
517
- return (h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, h("input", { ref: el => (this.input = el), id: this.id, type: "checkbox", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), h("span", { class: "box", "aria-hidden": "true", part: "checkbox" }, h("svg", { class: "check", viewBox: "0 0 12 10" }, h("polyline", { points: "1.5 6 4.5 9 10.5 1" })), h("svg", { class: "dash", viewBox: "0 0 12 10" }, h("polyline", { points: "1.5 5 10.5 5" }))), h("span", { class: "label", part: "label" }, this.label)));
520
+ return (h(Host, null, h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, h("input", { ref: el => (this.input = el), id: this.id, type: "checkbox", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), h("span", { class: "box", "aria-hidden": "true", part: "checkbox" }, h("svg", { class: "check", viewBox: "0 0 12 10" }, h("polyline", { points: "1.5 6 4.5 9 10.5 1" })), h("svg", { class: "dash", viewBox: "0 0 12 10" }, h("polyline", { points: "1.5 5 10.5 5" }))), h("span", { class: "label", part: "label" }, (this.hasSlottedLabel && h("slot", { name: "label" })) || this.label)), this.hintSection));
521
+ }
522
+ get hintSection() {
523
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
524
+ return ((this.hint || hasSlottedHint) && (h(CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && h("slot", { name: "hint" }) })));
518
525
  }
519
526
  onInput(event) {
527
+ this.value = this.input.value;
520
528
  this.catChange.emit(event);
521
529
  }
522
530
  onFocus(event) {
@@ -525,10 +533,11 @@ const CatCheckbox = class {
525
533
  onBlur(event) {
526
534
  this.catBlur.emit(event);
527
535
  }
536
+ get hostElement() { return getElement(this); }
528
537
  };
529
538
  CatCheckbox.style = catCheckboxCss;
530
539
 
531
- const catIconCss = ":host{display:inline-flex;vertical-align:middle;-webkit-user-select:none;-ms-user-select:none;user-select:none;}:host([hidden]){display:none}span{display:inline-flex}svg{fill:currentColor;stroke:none;transform-origin:center center;width:1em;height:1em}.icon-xs svg{font-size:0.75rem}.icon-s svg{font-size:1rem}.icon-m svg{font-size:1.25rem}.icon-l svg{font-size:1.5rem}.icon-xl svg{font-size:1.75rem}";
540
+ const catIconCss = ":host{display:inline-flex;vertical-align:middle;-webkit-user-select:none;-ms-user-select:none;user-select:none;}:host([hidden]){display:none}span{display:inline-flex}svg{fill:currentColor;stroke:none;transform-origin:center center;height:1em;width:calc(var(--cat-icon-ratio, 1) * 1em)}.icon-xs svg{font-size:0.75rem}.icon-s svg{font-size:1rem}.icon-m svg{font-size:1.25rem}.icon-l svg{font-size:1.5rem}.icon-xl svg{font-size:1.75rem}";
532
541
 
533
542
  const CatIcon = class {
534
543
  constructor(hostRef) {
@@ -552,9 +561,9 @@ const CatIcon = class {
552
561
  };
553
562
  CatIcon.style = catIconCss;
554
563
 
555
- const catInputCss = ":host{display:flex;flex-direction:column;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;margin-bottom:1rem}:host([hidden]){display:none}.input-wrapper{display:flex;align-items:stretch;gap:0.75rem;padding:0 0.75rem;height:2.5rem;overflow:hidden;background:white;border-radius:0.25rem;box-shadow:0 0 0 1px #d7dbe0;transition:box-shadow 0.13s linear}.input-wrapper.input-round{border-radius:10rem}.input-wrapper.input-disabled{background:#f8f8fb;cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.input-wrapper:not(.input-disabled):hover{box-shadow:0 0 0 2px #d7dbe0}.input-wrapper:not(.input-disabled):focus-within{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255))}label{align-self:flex-start}label.hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.input-optional{margin-left:0.25rem;font-size:0.75rem;line-height:1rem;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.text-prefix,.text-suffix{display:inline-flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.text-prefix{border-right:1px solid #d7dbe0;padding-right:0.75rem}.text-suffix{border-left:1px solid #d7dbe0;padding-left:0.75rem}.icon-prefix,.icon-suffix{align-self:center}.input-inner-wrapper{display:flex;position:relative;flex:1 1 auto}input{font:inherit;margin:0;padding:0;width:100%;min-width:0;border:none;outline:none;background:none}.input-disabled input{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}input.has-clearable{padding-right:1.5rem}input::placeholder{color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.clearable{position:absolute;top:calc(50% - 1rem);right:-0.5rem}.input-hint{font-size:0.875rem;line-height:1rem;margin:0}";
564
+ const catInputCss = ".hint-section{display:flex;gap:0.5rem;flex-direction:column}.hint-section .input-hint,.hint-section ::slotted([slot=hint]){font-size:0.875rem;line-height:1rem;margin:0}:host{display:flex;flex-direction:column;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;margin-bottom:1rem}:host([hidden]){display:none}.input-wrapper{display:flex;align-items:stretch;gap:0.75rem;padding:0 0.75rem;height:2.5rem;overflow:hidden;background:white;border-radius:0.25rem;box-shadow:0 0 0 1px #d7dbe0;transition:box-shadow 0.13s linear}.input-wrapper.input-round{border-radius:10rem}.input-wrapper.input-disabled{background:#f8f8fb;cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.input-wrapper:not(.input-disabled):hover{box-shadow:0 0 0 2px #d7dbe0}.input-wrapper:not(.input-disabled):focus-within{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255))}label{align-self:flex-start}label.hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.input-optional{margin-left:0.25rem;font-size:0.75rem;line-height:1rem;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.text-prefix,.text-suffix{display:inline-flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.text-prefix{border-right:1px solid #d7dbe0;padding-right:0.75rem}.text-suffix{border-left:1px solid #d7dbe0;padding-left:0.75rem}.icon-prefix,.icon-suffix{align-self:center}.input-inner-wrapper{display:flex;position:relative;flex:1 1 auto}input{font:inherit;margin:0;padding:0;width:100%;min-width:0;border:none;outline:none;background:none}.input-disabled input{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}input.has-clearable{padding-right:1.5rem}input::placeholder{color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.clearable{position:absolute;top:calc(50% - 1rem);right:-0.5rem}";
556
565
 
557
- let nextUniqueId$4 = 0;
566
+ let nextUniqueId$5 = 0;
558
567
  const CatInput = class {
559
568
  constructor(hostRef) {
560
569
  registerInstance(this, hostRef);
@@ -562,8 +571,8 @@ const CatInput = class {
562
571
  this.catFocus = createEvent(this, "catFocus", 7);
563
572
  this.catBlur = createEvent(this, "catBlur", 7);
564
573
  this.i18n = CatI18nRegistry.getInstance();
565
- this.id = `cat-input-${nextUniqueId$4++}`;
566
- this.inputValue = '';
574
+ this.id = `cat-input-${nextUniqueId$5++}`;
575
+ this.hasSlottedLabel = false;
567
576
  /**
568
577
  * Whether the input should show a clear button.
569
578
  */
@@ -605,14 +614,9 @@ const CatInput = class {
605
614
  */
606
615
  this.type = 'text';
607
616
  }
608
- onValueChange(value) {
609
- this.inputValue = '' + (value !== null && value !== void 0 ? value : '');
610
- }
611
- componentWillLoad() {
612
- this.onValueChange(this.value);
613
- }
614
617
  componentWillRender() {
615
- if (!this.label) {
618
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
619
+ if (!this.label && !this.hasSlottedLabel) {
616
620
  loglevel.error('[A11y] Missing ARIA label on input', this);
617
621
  }
618
622
  }
@@ -629,19 +633,23 @@ const CatInput = class {
629
633
  * Clear the input.
630
634
  */
631
635
  async clear() {
632
- this.inputValue = '';
636
+ this.value = '';
633
637
  }
634
638
  render() {
635
- return (h(Host, null, this.label && (h("label", { htmlFor: this.id, class: { hidden: this.labelHidden } }, h("span", { part: "label" }, this.label, !this.required && (h("span", { class: "input-optional", "aria-hidden": "true" }, "(", this.i18n.getMessage('input.optional'), ")"))))), h("div", { class: {
639
+ return (h(Host, null, (this.hasSlottedLabel || this.label) && (h("label", { htmlFor: this.id, class: { hidden: this.labelHidden } }, h("span", { part: "label" }, (this.hasSlottedLabel && h("slot", { name: "label" })) || this.label, !this.required && (h("span", { class: "input-optional", "aria-hidden": "true" }, "(", this.i18n.getMessage('input.optional'), ")"))))), h("div", { class: {
636
640
  'input-wrapper': true,
637
641
  'input-round': this.round,
638
642
  'input-disabled': this.disabled
639
643
  }, onClick: () => this.input.focus() }, this.textPrefix && (h("span", { class: "text-prefix", part: "prefix" }, this.textPrefix)), this.icon && !this.iconRight && h("cat-icon", { icon: this.icon, class: "icon-prefix", size: "l" }), h("div", { class: "input-inner-wrapper" }, h("input", { ref: el => (this.input = el), id: this.id, class: {
640
644
  'has-clearable': this.clearable && !this.disabled
641
- }, autocomplete: this.autoComplete, disabled: this.disabled, max: this.max, maxlength: this.maxLength, min: this.max, minlength: this.minLength, name: this.name, placeholder: this.placeholder, readonly: this.readonly, required: this.required, type: this.type, value: this.inputValue, onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), this.clearable && !this.disabled && this.inputValue && (h("cat-button", { class: "clearable", icon: "cross-circle-outlined", "icon-only": "true", size: "s", variant: "text", "a11y-label": this.i18n.getMessage('input.clear'), onClick: this.clear.bind(this) }))), this.icon && this.iconRight && h("cat-icon", { icon: this.icon, class: "icon-suffix", size: "l" }), this.textSuffix && (h("span", { class: "text-suffix", part: "suffix" }, this.textSuffix))), this.hint && h("p", { class: "input-hint" }, this.hint)));
645
+ }, autocomplete: this.autoComplete, disabled: this.disabled, max: this.max, maxlength: this.maxLength, min: this.max, minlength: this.minLength, name: this.name, placeholder: this.placeholder, readonly: this.readonly, required: this.required, type: this.type, value: this.value, onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), this.clearable && !this.disabled && this.value && (h("cat-button", { class: "clearable", icon: "cross-circle-outlined", "icon-only": "true", size: "s", variant: "text", "a11y-label": this.i18n.getMessage('input.clear'), onClick: this.clear.bind(this) }))), this.icon && this.iconRight && h("cat-icon", { icon: this.icon, class: "icon-suffix", size: "l" }), this.textSuffix && (h("span", { class: "text-suffix", part: "suffix" }, this.textSuffix))), this.hintSection));
646
+ }
647
+ get hintSection() {
648
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
649
+ return ((this.hint || hasSlottedHint) && (h(CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && h("slot", { name: "hint" }) })));
642
650
  }
643
651
  onInput(event) {
644
- this.inputValue = this.input.value;
652
+ this.value = this.input.value;
645
653
  this.catChange.emit(event);
646
654
  }
647
655
  onFocus(event) {
@@ -650,9 +658,7 @@ const CatInput = class {
650
658
  onBlur(event) {
651
659
  this.catBlur.emit(event);
652
660
  }
653
- static get watchers() { return {
654
- "value": ["onValueChange"]
655
- }; }
661
+ get hostElement() { return getElement(this); }
656
662
  };
657
663
  CatInput.style = catInputCss;
658
664
 
@@ -2891,13 +2897,13 @@ const firstTabbable = (container) => {
2891
2897
 
2892
2898
  const catMenuCss = ":host{display:contents}:host([hidden]){display:none}.content{padding-top:0.5rem;padding-bottom:0.5rem;position:absolute;background:white;display:none;overflow:auto;-webkit-overflow-scrolling:touch;min-width:8rem;max-width:16rem;min-height:2rem;max-height:calc(100vh - 48px);box-shadow:0 1px 4px 0 rgba(16, 29, 48, 0.2);border-radius:0.25rem;z-index:100}";
2893
2899
 
2894
- let nextUniqueId$3 = 0;
2900
+ let nextUniqueId$4 = 0;
2895
2901
  const CatMenu = class {
2896
2902
  constructor(hostRef) {
2897
2903
  registerInstance(this, hostRef);
2898
2904
  this.catOpen = createEvent(this, "catOpen", 7);
2899
2905
  this.catClose = createEvent(this, "catClose", 7);
2900
- this.id = nextUniqueId$3++;
2906
+ this.id = nextUniqueId$4++;
2901
2907
  /**
2902
2908
  * The placement of the menu.
2903
2909
  */
@@ -2992,16 +2998,17 @@ const CatMenu = class {
2992
2998
  CatMenu.OFFSET = 4;
2993
2999
  CatMenu.style = catMenuCss;
2994
3000
 
2995
- const catRadioCss = ":host{display:flex;margin-bottom:1rem}:host([hidden]){display:none}label{display:flex;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;cursor:pointer}.radio{display:flex;position:relative}.circle{position:absolute;width:0.75rem;height:0.75rem;background-color:rgb(var(--cat-primary-bg, 32, 127, 138));border-radius:10rem;top:calc(50% - 0.375rem);left:calc(50% - 0.375rem);visibility:hidden}input{margin:0;width:1.25rem;height:1.25rem;appearance:none;background-color:white;border:1px solid #d7dbe0;border-radius:10rem;cursor:inherit}input:checked{border-color:rgb(var(--cat-primary-bg, 32, 127, 138))}input:checked+.circle{visibility:visible}input:focus-visible{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));outline-offset:1px}.is-hidden .label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-disabled{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.is-disabled input{background-color:#f8f8fb}.is-disabled input:checked{border-color:#d7dbe0}.is-disabled .circle{background-color:#d7dbe0}";
3001
+ const catRadioCss = ".hint-section{display:flex;gap:0.5rem;flex-direction:column}.hint-section .input-hint,.hint-section ::slotted([slot=hint]){font-size:0.875rem;line-height:1rem;margin:0}:host{display:flex;flex-direction:column;gap:0.5rem;margin-bottom:1rem}:host([hidden]){display:none}label{display:flex;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;cursor:pointer}.radio{display:flex;position:relative}.circle{position:absolute;width:0.75rem;height:0.75rem;background-color:rgb(var(--cat-primary-bg, 32, 127, 138));border-radius:10rem;top:calc(50% - 0.375rem);left:calc(50% - 0.375rem);visibility:hidden}input{margin:0;width:1.25rem;height:1.25rem;appearance:none;background-color:white;border:1px solid #d7dbe0;border-radius:10rem;cursor:inherit}input:checked{border-color:rgb(var(--cat-primary-bg, 32, 127, 138))}input:checked+.circle{visibility:visible}input:focus-visible{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));outline-offset:1px}.is-hidden .label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-disabled{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}.is-disabled input{background-color:#f8f8fb}.is-disabled input:checked{border-color:#d7dbe0}.is-disabled .circle{background-color:#d7dbe0}";
2996
3002
 
2997
- let nextUniqueId$2 = 0;
3003
+ let nextUniqueId$3 = 0;
2998
3004
  const CatRadio = class {
2999
3005
  constructor(hostRef) {
3000
3006
  registerInstance(this, hostRef);
3001
3007
  this.catChange = createEvent(this, "catChange", 7);
3002
3008
  this.catFocus = createEvent(this, "catFocus", 7);
3003
3009
  this.catBlur = createEvent(this, "catBlur", 7);
3004
- this.id = `cat-radio-${++nextUniqueId$2}`;
3010
+ this.id = `cat-radio-${++nextUniqueId$3}`;
3011
+ this.hasSlottedLabel = false;
3005
3012
  /**
3006
3013
  * Whether this radio is checked.
3007
3014
  */
@@ -3024,7 +3031,8 @@ const CatRadio = class {
3024
3031
  this.required = false;
3025
3032
  }
3026
3033
  componentWillRender() {
3027
- if (!this.label) {
3034
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
3035
+ if (!this.label && !this.hasSlottedLabel) {
3028
3036
  loglevel.error('[A11y] Missing ARIA label on radio', this);
3029
3037
  }
3030
3038
  }
@@ -3038,9 +3046,14 @@ const CatRadio = class {
3038
3046
  this.input.focus(options);
3039
3047
  }
3040
3048
  render() {
3041
- return (h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, h("span", { class: "radio" }, h("input", { ref: el => (this.input = el), id: this.id, type: "radio", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onInput: this.onChange.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), h("span", { class: "circle" })), h("span", { class: "label", part: "label" }, this.label)));
3049
+ return (h(Host, null, h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, h("span", { class: "radio" }, h("input", { ref: el => (this.input = el), id: this.id, type: "radio", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onInput: this.onChange.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), h("span", { class: "circle" })), h("span", { class: "label", part: "label" }, (this.hasSlottedLabel && h("slot", { name: "label" })) || this.label)), this.hintSection));
3050
+ }
3051
+ get hintSection() {
3052
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
3053
+ return ((this.hint || hasSlottedHint) && (h(CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && h("slot", { name: "hint" }) })));
3042
3054
  }
3043
3055
  onChange(event) {
3056
+ this.value = this.input.value;
3044
3057
  this.catChange.emit(event);
3045
3058
  }
3046
3059
  onFocus(event) {
@@ -3049,6 +3062,7 @@ const CatRadio = class {
3049
3062
  onBlur(event) {
3050
3063
  this.catBlur.emit(event);
3051
3064
  }
3065
+ get hostElement() { return getElement(this); }
3052
3066
  };
3053
3067
  CatRadio.style = catRadioCss;
3054
3068
 
@@ -4451,6 +4465,107 @@ const CatSpinner = class {
4451
4465
  };
4452
4466
  CatSpinner.style = catSpinnerCss;
4453
4467
 
4468
+ const catTabCss = ":host{display:block}:host([hidden]){display:none}";
4469
+
4470
+ let nextUniqueId$2 = 0;
4471
+ const CatTab = class {
4472
+ constructor(hostRef) {
4473
+ registerInstance(this, hostRef);
4474
+ this.tabClick = createEvent(this, "tabClick", 7);
4475
+ /**
4476
+ * The label of the tab.
4477
+ */
4478
+ this.label = '';
4479
+ /**
4480
+ * Hide the actual button content and only display the tab.
4481
+ */
4482
+ this.iconOnly = false;
4483
+ /**
4484
+ * Display the icon on the right.
4485
+ */
4486
+ this.iconRight = false;
4487
+ /**
4488
+ * Specifies that the tab should be deactivated.
4489
+ */
4490
+ this.deactivated = false;
4491
+ }
4492
+ connectedCallback() {
4493
+ if (!this.hostElement.id) {
4494
+ this.hostElement.id = `cat-tab-${nextUniqueId$2++}`;
4495
+ }
4496
+ }
4497
+ onClick(event) {
4498
+ this.tabClick.emit(event);
4499
+ }
4500
+ render() {
4501
+ return h(Host, null);
4502
+ }
4503
+ get hostElement() { return getElement(this); }
4504
+ };
4505
+ CatTab.style = catTabCss;
4506
+
4507
+ const catTabsCss = ":host{display:flex;flex-direction:row;box-shadow:inset 0 -1px 0 0 #d7dbe0}:host([hidden]){display:none}:host([tabs-align=center]){justify-content:center}:host([tabs-align=right]){justify-content:end}:host([tabs-align=justify]) cat-button{flex:1 0 auto}.tab{padding:0.5rem}.tab.tab-active{box-shadow:inset 0 -3px 0 0 #207f8a}";
4508
+
4509
+ const CatTabs = class {
4510
+ constructor(hostRef) {
4511
+ registerInstance(this, hostRef);
4512
+ this.tabs = [];
4513
+ this.buttons = [];
4514
+ /**
4515
+ * The ID of the active tab.
4516
+ */
4517
+ this.activeTab = '';
4518
+ /**
4519
+ * The alignment of the tabs.
4520
+ */
4521
+ this.tabsAlign = 'left';
4522
+ }
4523
+ onActiveTabChanged(newActiveTab) {
4524
+ const activeTab = this.tabs.find(value => value.id === newActiveTab);
4525
+ activeTab === null || activeTab === void 0 ? void 0 : activeTab.click();
4526
+ }
4527
+ componentWillLoad() {
4528
+ this.tabs = Array.from(this.hostElement.querySelectorAll('cat-tab'));
4529
+ if (this.tabs.length) {
4530
+ this.activeTabId = this.activeTab;
4531
+ }
4532
+ }
4533
+ onKeydown(event) {
4534
+ var _a;
4535
+ if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(event.key)) {
4536
+ const targetElements = this.buttons.filter(button => !button.disabled);
4537
+ const activeElement = (_a = this.hostElement.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement;
4538
+ const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;
4539
+ const activeOff = ['ArrowDown', 'ArrowRight'].includes(event.key) ? 1 : -1;
4540
+ const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;
4541
+ targetElements[targetIdx].setFocus();
4542
+ event.preventDefault();
4543
+ }
4544
+ }
4545
+ render() {
4546
+ return (h(Host, null, this.tabs.map((tab) => {
4547
+ return (h("cat-button", { ref: el => el && this.updateButtonsRef(el), buttonId: tab.id, role: "tab", part: "tab", class: {
4548
+ tab: true,
4549
+ 'tab-active': Boolean(this.activeTabId && tab.id === this.activeTabId)
4550
+ }, color: this.activeTabId && tab.id === this.activeTabId ? 'primary' : 'secondary', variant: "text", icon: tab.icon, iconOnly: tab.iconOnly, iconRight: tab.iconRight, url: tab.url, disabled: tab.deactivated, urlTarget: tab.urlTarget, onCatClick: () => (this.activeTabId = tab.id) }, tab.label));
4551
+ })));
4552
+ }
4553
+ updateButtonsRef(button) {
4554
+ const indexOf = this.buttons.indexOf(button);
4555
+ if (indexOf >= 0) {
4556
+ this.buttons[indexOf] = button;
4557
+ }
4558
+ else {
4559
+ this.buttons.push(button);
4560
+ }
4561
+ }
4562
+ get hostElement() { return getElement(this); }
4563
+ static get watchers() { return {
4564
+ "activeTabId": ["onActiveTabChanged"]
4565
+ }; }
4566
+ };
4567
+ CatTabs.style = catTabsCss;
4568
+
4454
4569
  const catToastDemoCss = ":host{display:block}";
4455
4570
 
4456
4571
  const CatToastDemo = class {
@@ -4494,7 +4609,7 @@ const CatToastDemo = class {
4494
4609
  };
4495
4610
  CatToastDemo.style = catToastDemoCss;
4496
4611
 
4497
- const catToggleCss = ":host{display:flex;margin-bottom:1rem}:host([hidden]){display:none}label{flex:0 1 auto;display:flex;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}input{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.toggle{flex:0 0 auto;display:flex;align-items:center;justify-content:center;position:relative;width:2rem;height:1.25rem;border-radius:10rem;background-color:#d7dbe0;transition:background-color 0.13s ease}:checked+.toggle{background-color:rgb(var(--cat-primary-bg, 32, 127, 138))}:focus-visible+.toggle{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));outline-offset:1px}.toggle::after{content:\"\";position:absolute;width:1rem;height:1rem;background:#fff;border-radius:10rem;transform:translateX(calc(2px - 0.5rem));transition:transform 0.13s linear;box-shadow:0 1px 4px 0 rgba(16, 29, 48, 0.2)}:checked+.toggle::after{transform:translateX(calc(-2px + 0.5rem))}.label{flex:1 1 auto}.is-hidden .label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-disabled{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}";
4612
+ const catToggleCss = ".hint-section{display:flex;gap:0.5rem;flex-direction:column}.hint-section .input-hint,.hint-section ::slotted([slot=hint]){font-size:0.875rem;line-height:1rem;margin:0}:host{display:flex;flex-direction:column;gap:0.5rem;margin-bottom:1rem}:host([hidden]){display:none}label{flex:0 1 auto;display:flex;gap:0.5rem;font-size:0.9375rem;line-height:1.25rem;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}input{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.toggle{flex:0 0 auto;display:flex;align-items:center;justify-content:center;position:relative;width:2rem;height:1.25rem;border-radius:10rem;background-color:#d7dbe0;transition:background-color 0.13s ease}:checked+.toggle{background-color:rgb(var(--cat-primary-bg, 32, 127, 138))}:focus-visible+.toggle{outline:2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));outline-offset:1px}.toggle::after{content:\"\";position:absolute;width:1rem;height:1rem;background:#fff;border-radius:10rem;transform:translateX(calc(2px - 0.5rem));transition:transform 0.13s linear;box-shadow:0 1px 4px 0 rgba(16, 29, 48, 0.2)}:checked+.toggle::after{transform:translateX(calc(-2px + 0.5rem))}.label{flex:1 1 auto}.is-hidden .label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-disabled{cursor:not-allowed;color:rgb(var(--cat-font-color-muted, 105, 118, 135))}";
4498
4613
 
4499
4614
  let nextUniqueId$1 = 0;
4500
4615
  const CatToggle = class {
@@ -4504,6 +4619,7 @@ const CatToggle = class {
4504
4619
  this.catFocus = createEvent(this, "catFocus", 7);
4505
4620
  this.catBlur = createEvent(this, "catBlur", 7);
4506
4621
  this.id = `cat-toggle-${nextUniqueId$1++}`;
4622
+ this.hasSlottedLabel = false;
4507
4623
  /**
4508
4624
  * Checked state of the toggle.
4509
4625
  */
@@ -4526,7 +4642,8 @@ const CatToggle = class {
4526
4642
  this.required = false;
4527
4643
  }
4528
4644
  componentWillRender() {
4529
- if (!this.label) {
4645
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
4646
+ if (!this.label && !this.hasSlottedLabel) {
4530
4647
  loglevel.error('[A11y] Missing ARIA label on toggle', this);
4531
4648
  }
4532
4649
  }
@@ -4540,9 +4657,14 @@ const CatToggle = class {
4540
4657
  this.input.focus(options);
4541
4658
  }
4542
4659
  render() {
4543
- return (h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, h("input", { ref: el => (this.input = el), id: this.id, type: "checkbox", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, class: "form-check-input", role: "switch", onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), h("span", { class: "toggle", part: "toggle" }), h("span", { class: "label", part: "label" }, this.label)));
4660
+ return (h(Host, null, h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, h("input", { ref: el => (this.input = el), id: this.id, type: "checkbox", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, class: "form-check-input", role: "switch", onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), h("span", { class: "toggle", part: "toggle" }), h("span", { class: "label", part: "label" }, (this.hasSlottedLabel && h("slot", { name: "label" })) || this.label)), this.hintSection));
4661
+ }
4662
+ get hintSection() {
4663
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
4664
+ return ((this.hint || hasSlottedHint) && (h(CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && h("slot", { name: "hint" }) })));
4544
4665
  }
4545
4666
  onInput(event) {
4667
+ this.value = this.input.value;
4546
4668
  this.catChange.emit(event);
4547
4669
  }
4548
4670
  onFocus(event) {
@@ -4551,6 +4673,7 @@ const CatToggle = class {
4551
4673
  onBlur(event) {
4552
4674
  this.catBlur.emit(event);
4553
4675
  }
4676
+ get hostElement() { return getElement(this); }
4554
4677
  };
4555
4678
  CatToggle.style = catToggleCss;
4556
4679
 
@@ -4602,6 +4725,7 @@ const CatTooltip = class {
4602
4725
  autoUpdate(this.trigger, this.tooltip, () => this.update());
4603
4726
  }
4604
4727
  if (isTouchDevice) {
4728
+ window.addEventListener('touchstart', this.windowTouchStartListener.bind(this));
4605
4729
  (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.addEventListener('touchstart', this.touchStartListener.bind(this));
4606
4730
  (_c = this.trigger) === null || _c === void 0 ? void 0 : _c.addEventListener('touchend', this.touchEndListener.bind(this));
4607
4731
  }
@@ -4615,6 +4739,7 @@ const CatTooltip = class {
4615
4739
  disconnectedCallback() {
4616
4740
  var _a, _b, _c, _d, _e, _f;
4617
4741
  if (isTouchDevice) {
4742
+ window.removeEventListener('touchstart', this.windowTouchStartListener.bind(this));
4618
4743
  (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.removeEventListener('touchstart', this.touchStartListener.bind(this));
4619
4744
  (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.removeEventListener('touchend', this.touchEndListener.bind(this));
4620
4745
  }
@@ -4649,34 +4774,37 @@ const CatTooltip = class {
4649
4774
  showListener() {
4650
4775
  window.clearTimeout(this.hideTimeout);
4651
4776
  this.showTimeout = window.setTimeout(() => {
4652
- var _a, _b;
4653
- (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.focus();
4654
- (_b = this.tooltip) === null || _b === void 0 ? void 0 : _b.classList.add('tooltip-show');
4777
+ var _a;
4778
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.add('tooltip-show');
4655
4779
  }, this.showDelay);
4656
4780
  }
4657
4781
  hideListener() {
4658
4782
  window.clearTimeout(this.showTimeout);
4659
4783
  this.hideTimeout = window.setTimeout(() => {
4660
- var _a, _b;
4661
- (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.blur();
4662
- (_b = this.tooltip) === null || _b === void 0 ? void 0 : _b.classList.remove('tooltip-show');
4784
+ var _a;
4785
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.remove('tooltip-show');
4663
4786
  }, this.hideDelay);
4664
4787
  }
4665
- touchStartListener() {
4788
+ touchStartListener(event) {
4789
+ event.stopPropagation();
4666
4790
  this.touchTimeout = window.setTimeout(() => {
4667
4791
  var _a;
4668
4792
  (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.add('tooltip-show');
4669
4793
  }, this.longTouchDuration);
4670
4794
  }
4671
4795
  touchEndListener() {
4796
+ if (this.touchTimeout) {
4797
+ window.clearTimeout(this.touchTimeout);
4798
+ }
4799
+ }
4800
+ windowTouchStartListener() {
4672
4801
  var _a;
4673
- window.clearTimeout(this.touchTimeout);
4674
4802
  (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.remove('tooltip-show');
4675
4803
  }
4676
4804
  };
4677
4805
  CatTooltip.OFFSET = 4;
4678
4806
  CatTooltip.style = catTooltipCss;
4679
4807
 
4680
- export { CatAlert as cat_alert, CatAvatar as cat_avatar, CatBadge as cat_badge, CatButton as cat_button, CatCard as cat_card, CatCheckbox as cat_checkbox, CatIcon as cat_icon, CatInput as cat_input, CatMenu as cat_menu, CatRadio as cat_radio, CatScrollable as cat_scrollable, CatSkeleton as cat_skeleton, CatSpinner as cat_spinner, CatToastDemo as cat_toast_demo, CatToggle as cat_toggle, CatTooltip as cat_tooltip };
4808
+ export { CatAlert as cat_alert, CatAvatar as cat_avatar, CatBadge as cat_badge, CatButton as cat_button, CatCard as cat_card, CatCheckbox as cat_checkbox, CatIcon as cat_icon, CatInput as cat_input, CatMenu as cat_menu, CatRadio as cat_radio, CatScrollable as cat_scrollable, CatSkeleton as cat_skeleton, CatSpinner as cat_spinner, CatTab as cat_tab, CatTabs as cat_tabs, CatToastDemo as cat_toast_demo, CatToggle as cat_toggle, CatTooltip as cat_tooltip };
4681
4809
 
4682
- //# sourceMappingURL=cat-alert_16.entry.js.map
4810
+ //# sourceMappingURL=cat-alert_18.entry.js.map