@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
@@ -2,8 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-5d72f0e4.js');
5
+ const index = require('./index-499bad41.js');
6
6
  const loglevel = require('./loglevel-c9b2d01f.js');
7
+ const catFormHint = require('./cat-form-hint-93a6936b.js');
7
8
  const catIconRegistry = require('./cat-icon-registry-49b11b51.js');
8
9
  const catNotification = require('./cat-notification-156f4cf5.js');
9
10
 
@@ -463,16 +464,17 @@ const CatCard = class {
463
464
  };
464
465
  CatCard.style = catCardCss;
465
466
 
466
- 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))}";
467
+ 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))}";
467
468
 
468
- let nextUniqueId$5 = 0;
469
+ let nextUniqueId$6 = 0;
469
470
  const CatCheckbox = class {
470
471
  constructor(hostRef) {
471
472
  index.registerInstance(this, hostRef);
472
473
  this.catChange = index.createEvent(this, "catChange", 7);
473
474
  this.catFocus = index.createEvent(this, "catFocus", 7);
474
475
  this.catBlur = index.createEvent(this, "catBlur", 7);
475
- this.id = `cat-checkbox-${nextUniqueId$5++}`;
476
+ this.id = `cat-checkbox-${nextUniqueId$6++}`;
477
+ this.hasSlottedLabel = false;
476
478
  /**
477
479
  * Checked state of the checkbox
478
480
  */
@@ -504,7 +506,8 @@ const CatCheckbox = class {
504
506
  }
505
507
  }
506
508
  componentWillRender() {
507
- if (!this.label) {
509
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
510
+ if (!this.label && !this.hasSlottedLabel) {
508
511
  loglevel.loglevel.error('[A11y] Missing ARIA label on checkbox', this);
509
512
  }
510
513
  }
@@ -518,9 +521,14 @@ const CatCheckbox = class {
518
521
  this.input.focus(options);
519
522
  }
520
523
  render() {
521
- return (index.h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, index.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) }), index.h("span", { class: "box", "aria-hidden": "true", part: "checkbox" }, index.h("svg", { class: "check", viewBox: "0 0 12 10" }, index.h("polyline", { points: "1.5 6 4.5 9 10.5 1" })), index.h("svg", { class: "dash", viewBox: "0 0 12 10" }, index.h("polyline", { points: "1.5 5 10.5 5" }))), index.h("span", { class: "label", part: "label" }, this.label)));
524
+ return (index.h(index.Host, null, index.h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, index.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) }), index.h("span", { class: "box", "aria-hidden": "true", part: "checkbox" }, index.h("svg", { class: "check", viewBox: "0 0 12 10" }, index.h("polyline", { points: "1.5 6 4.5 9 10.5 1" })), index.h("svg", { class: "dash", viewBox: "0 0 12 10" }, index.h("polyline", { points: "1.5 5 10.5 5" }))), index.h("span", { class: "label", part: "label" }, (this.hasSlottedLabel && index.h("slot", { name: "label" })) || this.label)), this.hintSection));
525
+ }
526
+ get hintSection() {
527
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
528
+ return ((this.hint || hasSlottedHint) && (index.h(catFormHint.CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && index.h("slot", { name: "hint" }) })));
522
529
  }
523
530
  onInput(event) {
531
+ this.value = this.input.value;
524
532
  this.catChange.emit(event);
525
533
  }
526
534
  onFocus(event) {
@@ -529,10 +537,11 @@ const CatCheckbox = class {
529
537
  onBlur(event) {
530
538
  this.catBlur.emit(event);
531
539
  }
540
+ get hostElement() { return index.getElement(this); }
532
541
  };
533
542
  CatCheckbox.style = catCheckboxCss;
534
543
 
535
- 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}";
544
+ 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}";
536
545
 
537
546
  const CatIcon = class {
538
547
  constructor(hostRef) {
@@ -556,9 +565,9 @@ const CatIcon = class {
556
565
  };
557
566
  CatIcon.style = catIconCss;
558
567
 
559
- 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}";
568
+ 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}";
560
569
 
561
- let nextUniqueId$4 = 0;
570
+ let nextUniqueId$5 = 0;
562
571
  const CatInput = class {
563
572
  constructor(hostRef) {
564
573
  index.registerInstance(this, hostRef);
@@ -566,8 +575,8 @@ const CatInput = class {
566
575
  this.catFocus = index.createEvent(this, "catFocus", 7);
567
576
  this.catBlur = index.createEvent(this, "catBlur", 7);
568
577
  this.i18n = catIconRegistry.CatI18nRegistry.getInstance();
569
- this.id = `cat-input-${nextUniqueId$4++}`;
570
- this.inputValue = '';
578
+ this.id = `cat-input-${nextUniqueId$5++}`;
579
+ this.hasSlottedLabel = false;
571
580
  /**
572
581
  * Whether the input should show a clear button.
573
582
  */
@@ -609,14 +618,9 @@ const CatInput = class {
609
618
  */
610
619
  this.type = 'text';
611
620
  }
612
- onValueChange(value) {
613
- this.inputValue = '' + (value !== null && value !== void 0 ? value : '');
614
- }
615
- componentWillLoad() {
616
- this.onValueChange(this.value);
617
- }
618
621
  componentWillRender() {
619
- if (!this.label) {
622
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
623
+ if (!this.label && !this.hasSlottedLabel) {
620
624
  loglevel.loglevel.error('[A11y] Missing ARIA label on input', this);
621
625
  }
622
626
  }
@@ -633,19 +637,23 @@ const CatInput = class {
633
637
  * Clear the input.
634
638
  */
635
639
  async clear() {
636
- this.inputValue = '';
640
+ this.value = '';
637
641
  }
638
642
  render() {
639
- return (index.h(index.Host, null, this.label && (index.h("label", { htmlFor: this.id, class: { hidden: this.labelHidden } }, index.h("span", { part: "label" }, this.label, !this.required && (index.h("span", { class: "input-optional", "aria-hidden": "true" }, "(", this.i18n.getMessage('input.optional'), ")"))))), index.h("div", { class: {
643
+ return (index.h(index.Host, null, (this.hasSlottedLabel || this.label) && (index.h("label", { htmlFor: this.id, class: { hidden: this.labelHidden } }, index.h("span", { part: "label" }, (this.hasSlottedLabel && index.h("slot", { name: "label" })) || this.label, !this.required && (index.h("span", { class: "input-optional", "aria-hidden": "true" }, "(", this.i18n.getMessage('input.optional'), ")"))))), index.h("div", { class: {
640
644
  'input-wrapper': true,
641
645
  'input-round': this.round,
642
646
  'input-disabled': this.disabled
643
647
  }, onClick: () => this.input.focus() }, this.textPrefix && (index.h("span", { class: "text-prefix", part: "prefix" }, this.textPrefix)), this.icon && !this.iconRight && index.h("cat-icon", { icon: this.icon, class: "icon-prefix", size: "l" }), index.h("div", { class: "input-inner-wrapper" }, index.h("input", { ref: el => (this.input = el), id: this.id, class: {
644
648
  'has-clearable': this.clearable && !this.disabled
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.inputValue, onInput: this.onInput.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }), this.clearable && !this.disabled && this.inputValue && (index.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 && index.h("cat-icon", { icon: this.icon, class: "icon-suffix", size: "l" }), this.textSuffix && (index.h("span", { class: "text-suffix", part: "suffix" }, this.textSuffix))), this.hint && index.h("p", { class: "input-hint" }, this.hint)));
649
+ }, 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 && (index.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 && index.h("cat-icon", { icon: this.icon, class: "icon-suffix", size: "l" }), this.textSuffix && (index.h("span", { class: "text-suffix", part: "suffix" }, this.textSuffix))), this.hintSection));
650
+ }
651
+ get hintSection() {
652
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
653
+ return ((this.hint || hasSlottedHint) && (index.h(catFormHint.CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && index.h("slot", { name: "hint" }) })));
646
654
  }
647
655
  onInput(event) {
648
- this.inputValue = this.input.value;
656
+ this.value = this.input.value;
649
657
  this.catChange.emit(event);
650
658
  }
651
659
  onFocus(event) {
@@ -654,9 +662,7 @@ const CatInput = class {
654
662
  onBlur(event) {
655
663
  this.catBlur.emit(event);
656
664
  }
657
- static get watchers() { return {
658
- "value": ["onValueChange"]
659
- }; }
665
+ get hostElement() { return index.getElement(this); }
660
666
  };
661
667
  CatInput.style = catInputCss;
662
668
 
@@ -2895,13 +2901,13 @@ const firstTabbable = (container) => {
2895
2901
 
2896
2902
  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}";
2897
2903
 
2898
- let nextUniqueId$3 = 0;
2904
+ let nextUniqueId$4 = 0;
2899
2905
  const CatMenu = class {
2900
2906
  constructor(hostRef) {
2901
2907
  index.registerInstance(this, hostRef);
2902
2908
  this.catOpen = index.createEvent(this, "catOpen", 7);
2903
2909
  this.catClose = index.createEvent(this, "catClose", 7);
2904
- this.id = nextUniqueId$3++;
2910
+ this.id = nextUniqueId$4++;
2905
2911
  /**
2906
2912
  * The placement of the menu.
2907
2913
  */
@@ -2996,16 +3002,17 @@ const CatMenu = class {
2996
3002
  CatMenu.OFFSET = 4;
2997
3003
  CatMenu.style = catMenuCss;
2998
3004
 
2999
- 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}";
3005
+ 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}";
3000
3006
 
3001
- let nextUniqueId$2 = 0;
3007
+ let nextUniqueId$3 = 0;
3002
3008
  const CatRadio = class {
3003
3009
  constructor(hostRef) {
3004
3010
  index.registerInstance(this, hostRef);
3005
3011
  this.catChange = index.createEvent(this, "catChange", 7);
3006
3012
  this.catFocus = index.createEvent(this, "catFocus", 7);
3007
3013
  this.catBlur = index.createEvent(this, "catBlur", 7);
3008
- this.id = `cat-radio-${++nextUniqueId$2}`;
3014
+ this.id = `cat-radio-${++nextUniqueId$3}`;
3015
+ this.hasSlottedLabel = false;
3009
3016
  /**
3010
3017
  * Whether this radio is checked.
3011
3018
  */
@@ -3028,7 +3035,8 @@ const CatRadio = class {
3028
3035
  this.required = false;
3029
3036
  }
3030
3037
  componentWillRender() {
3031
- if (!this.label) {
3038
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
3039
+ if (!this.label && !this.hasSlottedLabel) {
3032
3040
  loglevel.loglevel.error('[A11y] Missing ARIA label on radio', this);
3033
3041
  }
3034
3042
  }
@@ -3042,9 +3050,14 @@ const CatRadio = class {
3042
3050
  this.input.focus(options);
3043
3051
  }
3044
3052
  render() {
3045
- return (index.h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, index.h("span", { class: "radio" }, index.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) }), index.h("span", { class: "circle" })), index.h("span", { class: "label", part: "label" }, this.label)));
3053
+ return (index.h(index.Host, null, index.h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, index.h("span", { class: "radio" }, index.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) }), index.h("span", { class: "circle" })), index.h("span", { class: "label", part: "label" }, (this.hasSlottedLabel && index.h("slot", { name: "label" })) || this.label)), this.hintSection));
3054
+ }
3055
+ get hintSection() {
3056
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
3057
+ return ((this.hint || hasSlottedHint) && (index.h(catFormHint.CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && index.h("slot", { name: "hint" }) })));
3046
3058
  }
3047
3059
  onChange(event) {
3060
+ this.value = this.input.value;
3048
3061
  this.catChange.emit(event);
3049
3062
  }
3050
3063
  onFocus(event) {
@@ -3053,6 +3066,7 @@ const CatRadio = class {
3053
3066
  onBlur(event) {
3054
3067
  this.catBlur.emit(event);
3055
3068
  }
3069
+ get hostElement() { return index.getElement(this); }
3056
3070
  };
3057
3071
  CatRadio.style = catRadioCss;
3058
3072
 
@@ -4455,6 +4469,107 @@ const CatSpinner = class {
4455
4469
  };
4456
4470
  CatSpinner.style = catSpinnerCss;
4457
4471
 
4472
+ const catTabCss = ":host{display:block}:host([hidden]){display:none}";
4473
+
4474
+ let nextUniqueId$2 = 0;
4475
+ const CatTab = class {
4476
+ constructor(hostRef) {
4477
+ index.registerInstance(this, hostRef);
4478
+ this.tabClick = index.createEvent(this, "tabClick", 7);
4479
+ /**
4480
+ * The label of the tab.
4481
+ */
4482
+ this.label = '';
4483
+ /**
4484
+ * Hide the actual button content and only display the tab.
4485
+ */
4486
+ this.iconOnly = false;
4487
+ /**
4488
+ * Display the icon on the right.
4489
+ */
4490
+ this.iconRight = false;
4491
+ /**
4492
+ * Specifies that the tab should be deactivated.
4493
+ */
4494
+ this.deactivated = false;
4495
+ }
4496
+ connectedCallback() {
4497
+ if (!this.hostElement.id) {
4498
+ this.hostElement.id = `cat-tab-${nextUniqueId$2++}`;
4499
+ }
4500
+ }
4501
+ onClick(event) {
4502
+ this.tabClick.emit(event);
4503
+ }
4504
+ render() {
4505
+ return index.h(index.Host, null);
4506
+ }
4507
+ get hostElement() { return index.getElement(this); }
4508
+ };
4509
+ CatTab.style = catTabCss;
4510
+
4511
+ 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}";
4512
+
4513
+ const CatTabs = class {
4514
+ constructor(hostRef) {
4515
+ index.registerInstance(this, hostRef);
4516
+ this.tabs = [];
4517
+ this.buttons = [];
4518
+ /**
4519
+ * The ID of the active tab.
4520
+ */
4521
+ this.activeTab = '';
4522
+ /**
4523
+ * The alignment of the tabs.
4524
+ */
4525
+ this.tabsAlign = 'left';
4526
+ }
4527
+ onActiveTabChanged(newActiveTab) {
4528
+ const activeTab = this.tabs.find(value => value.id === newActiveTab);
4529
+ activeTab === null || activeTab === void 0 ? void 0 : activeTab.click();
4530
+ }
4531
+ componentWillLoad() {
4532
+ this.tabs = Array.from(this.hostElement.querySelectorAll('cat-tab'));
4533
+ if (this.tabs.length) {
4534
+ this.activeTabId = this.activeTab;
4535
+ }
4536
+ }
4537
+ onKeydown(event) {
4538
+ var _a;
4539
+ if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(event.key)) {
4540
+ const targetElements = this.buttons.filter(button => !button.disabled);
4541
+ const activeElement = (_a = this.hostElement.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement;
4542
+ const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;
4543
+ const activeOff = ['ArrowDown', 'ArrowRight'].includes(event.key) ? 1 : -1;
4544
+ const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;
4545
+ targetElements[targetIdx].setFocus();
4546
+ event.preventDefault();
4547
+ }
4548
+ }
4549
+ render() {
4550
+ return (index.h(index.Host, null, this.tabs.map((tab) => {
4551
+ return (index.h("cat-button", { ref: el => el && this.updateButtonsRef(el), buttonId: tab.id, role: "tab", part: "tab", class: {
4552
+ tab: true,
4553
+ 'tab-active': Boolean(this.activeTabId && tab.id === this.activeTabId)
4554
+ }, 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));
4555
+ })));
4556
+ }
4557
+ updateButtonsRef(button) {
4558
+ const indexOf = this.buttons.indexOf(button);
4559
+ if (indexOf >= 0) {
4560
+ this.buttons[indexOf] = button;
4561
+ }
4562
+ else {
4563
+ this.buttons.push(button);
4564
+ }
4565
+ }
4566
+ get hostElement() { return index.getElement(this); }
4567
+ static get watchers() { return {
4568
+ "activeTabId": ["onActiveTabChanged"]
4569
+ }; }
4570
+ };
4571
+ CatTabs.style = catTabsCss;
4572
+
4458
4573
  const catToastDemoCss = ":host{display:block}";
4459
4574
 
4460
4575
  const CatToastDemo = class {
@@ -4498,7 +4613,7 @@ const CatToastDemo = class {
4498
4613
  };
4499
4614
  CatToastDemo.style = catToastDemoCss;
4500
4615
 
4501
- 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))}";
4616
+ 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))}";
4502
4617
 
4503
4618
  let nextUniqueId$1 = 0;
4504
4619
  const CatToggle = class {
@@ -4508,6 +4623,7 @@ const CatToggle = class {
4508
4623
  this.catFocus = index.createEvent(this, "catFocus", 7);
4509
4624
  this.catBlur = index.createEvent(this, "catBlur", 7);
4510
4625
  this.id = `cat-toggle-${nextUniqueId$1++}`;
4626
+ this.hasSlottedLabel = false;
4511
4627
  /**
4512
4628
  * Checked state of the toggle.
4513
4629
  */
@@ -4530,7 +4646,8 @@ const CatToggle = class {
4530
4646
  this.required = false;
4531
4647
  }
4532
4648
  componentWillRender() {
4533
- if (!this.label) {
4649
+ this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
4650
+ if (!this.label && !this.hasSlottedLabel) {
4534
4651
  loglevel.loglevel.error('[A11y] Missing ARIA label on toggle', this);
4535
4652
  }
4536
4653
  }
@@ -4544,9 +4661,14 @@ const CatToggle = class {
4544
4661
  this.input.focus(options);
4545
4662
  }
4546
4663
  render() {
4547
- return (index.h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, index.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) }), index.h("span", { class: "toggle", part: "toggle" }), index.h("span", { class: "label", part: "label" }, this.label)));
4664
+ return (index.h(index.Host, null, index.h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } }, index.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) }), index.h("span", { class: "toggle", part: "toggle" }), index.h("span", { class: "label", part: "label" }, (this.hasSlottedLabel && index.h("slot", { name: "label" })) || this.label)), this.hintSection));
4665
+ }
4666
+ get hintSection() {
4667
+ const hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
4668
+ return ((this.hint || hasSlottedHint) && (index.h(catFormHint.CatFormHint, { hint: this.hint, slottedHint: hasSlottedHint && index.h("slot", { name: "hint" }) })));
4548
4669
  }
4549
4670
  onInput(event) {
4671
+ this.value = this.input.value;
4550
4672
  this.catChange.emit(event);
4551
4673
  }
4552
4674
  onFocus(event) {
@@ -4555,6 +4677,7 @@ const CatToggle = class {
4555
4677
  onBlur(event) {
4556
4678
  this.catBlur.emit(event);
4557
4679
  }
4680
+ get hostElement() { return index.getElement(this); }
4558
4681
  };
4559
4682
  CatToggle.style = catToggleCss;
4560
4683
 
@@ -4606,6 +4729,7 @@ const CatTooltip = class {
4606
4729
  autoUpdate(this.trigger, this.tooltip, () => this.update());
4607
4730
  }
4608
4731
  if (isTouchDevice) {
4732
+ window.addEventListener('touchstart', this.windowTouchStartListener.bind(this));
4609
4733
  (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.addEventListener('touchstart', this.touchStartListener.bind(this));
4610
4734
  (_c = this.trigger) === null || _c === void 0 ? void 0 : _c.addEventListener('touchend', this.touchEndListener.bind(this));
4611
4735
  }
@@ -4619,6 +4743,7 @@ const CatTooltip = class {
4619
4743
  disconnectedCallback() {
4620
4744
  var _a, _b, _c, _d, _e, _f;
4621
4745
  if (isTouchDevice) {
4746
+ window.removeEventListener('touchstart', this.windowTouchStartListener.bind(this));
4622
4747
  (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.removeEventListener('touchstart', this.touchStartListener.bind(this));
4623
4748
  (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.removeEventListener('touchend', this.touchEndListener.bind(this));
4624
4749
  }
@@ -4653,28 +4778,31 @@ const CatTooltip = class {
4653
4778
  showListener() {
4654
4779
  window.clearTimeout(this.hideTimeout);
4655
4780
  this.showTimeout = window.setTimeout(() => {
4656
- var _a, _b;
4657
- (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.focus();
4658
- (_b = this.tooltip) === null || _b === void 0 ? void 0 : _b.classList.add('tooltip-show');
4781
+ var _a;
4782
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.add('tooltip-show');
4659
4783
  }, this.showDelay);
4660
4784
  }
4661
4785
  hideListener() {
4662
4786
  window.clearTimeout(this.showTimeout);
4663
4787
  this.hideTimeout = window.setTimeout(() => {
4664
- var _a, _b;
4665
- (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.blur();
4666
- (_b = this.tooltip) === null || _b === void 0 ? void 0 : _b.classList.remove('tooltip-show');
4788
+ var _a;
4789
+ (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.remove('tooltip-show');
4667
4790
  }, this.hideDelay);
4668
4791
  }
4669
- touchStartListener() {
4792
+ touchStartListener(event) {
4793
+ event.stopPropagation();
4670
4794
  this.touchTimeout = window.setTimeout(() => {
4671
4795
  var _a;
4672
4796
  (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.add('tooltip-show');
4673
4797
  }, this.longTouchDuration);
4674
4798
  }
4675
4799
  touchEndListener() {
4800
+ if (this.touchTimeout) {
4801
+ window.clearTimeout(this.touchTimeout);
4802
+ }
4803
+ }
4804
+ windowTouchStartListener() {
4676
4805
  var _a;
4677
- window.clearTimeout(this.touchTimeout);
4678
4806
  (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.classList.remove('tooltip-show');
4679
4807
  }
4680
4808
  };
@@ -4694,8 +4822,10 @@ exports.cat_radio = CatRadio;
4694
4822
  exports.cat_scrollable = CatScrollable;
4695
4823
  exports.cat_skeleton = CatSkeleton;
4696
4824
  exports.cat_spinner = CatSpinner;
4825
+ exports.cat_tab = CatTab;
4826
+ exports.cat_tabs = CatTabs;
4697
4827
  exports.cat_toast_demo = CatToastDemo;
4698
4828
  exports.cat_toggle = CatToggle;
4699
4829
  exports.cat_tooltip = CatTooltip;
4700
4830
 
4701
- //# sourceMappingURL=cat-alert_16.cjs.entry.js.map
4831
+ //# sourceMappingURL=cat-alert_18.cjs.entry.js.map