kemet-ui 5.0.4 → 5.0.5

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 (78) hide show
  1. package/custom-elements.json +1575 -1579
  2. package/dist/{constants-C4-3KYlX.d.ts → constants-BsAfWV-a.d.ts} +4 -3
  3. package/dist/elements/accordion/index.js.map +1 -1
  4. package/dist/elements/accordion-panel/index.js.map +1 -1
  5. package/dist/elements/alert/index.d.ts +1 -1
  6. package/dist/elements/alert/index.js.map +1 -1
  7. package/dist/elements/avatar/index.d.ts +1 -1
  8. package/dist/elements/avatar/index.js.map +1 -1
  9. package/dist/elements/avatars/index.js.map +1 -1
  10. package/dist/elements/badge/index.d.ts +1 -1
  11. package/dist/elements/badge/index.js.map +1 -1
  12. package/dist/elements/button/index.d.ts +1 -1
  13. package/dist/elements/button/index.js.map +1 -1
  14. package/dist/elements/card/index.d.ts +1 -1
  15. package/dist/elements/card/index.js.map +1 -1
  16. package/dist/elements/checkbox/index.d.ts +1 -1
  17. package/dist/elements/checkbox/index.js +2 -6
  18. package/dist/elements/checkbox/index.js.map +1 -1
  19. package/dist/elements/combo/index.d.ts +1 -1
  20. package/dist/elements/combo/index.js.map +1 -1
  21. package/dist/elements/count/index.d.ts +1 -1
  22. package/dist/elements/count/index.js.map +1 -1
  23. package/dist/elements/dialog/index.d.ts +1 -1
  24. package/dist/elements/dialog/index.js.map +1 -1
  25. package/dist/elements/dialog-close/index.js.map +1 -1
  26. package/dist/elements/drawer/index.js.map +1 -1
  27. package/dist/elements/fab/index.d.ts +1 -1
  28. package/dist/elements/fab/index.js.map +1 -1
  29. package/dist/elements/field/index.d.ts +1 -1
  30. package/dist/elements/field/index.js +24 -15
  31. package/dist/elements/field/index.js.map +1 -1
  32. package/dist/elements/field/styles.css.js +15 -6
  33. package/dist/elements/field/styles.css.js.map +1 -1
  34. package/dist/elements/flipcard/index.d.ts +1 -1
  35. package/dist/elements/flipcard/index.js.map +1 -1
  36. package/dist/elements/flipcard-trigger/index.js.map +1 -1
  37. package/dist/elements/icon/index.js.map +1 -1
  38. package/dist/elements/input/index.d.ts +1 -1
  39. package/dist/elements/input/index.js +13 -8
  40. package/dist/elements/input/index.js.map +1 -1
  41. package/dist/elements/input-combo/index.d.ts +1 -1
  42. package/dist/elements/input-combo/index.js.map +1 -1
  43. package/dist/elements/input-file/index.js.map +1 -1
  44. package/dist/elements/input-files/index.js.map +1 -1
  45. package/dist/elements/input-otp/index.js.map +1 -1
  46. package/dist/elements/loader/index.js.map +1 -1
  47. package/dist/elements/password/index.d.ts +1 -1
  48. package/dist/elements/password/index.js.map +1 -1
  49. package/dist/elements/radio/index.js.map +1 -1
  50. package/dist/elements/radios/index.d.ts +1 -1
  51. package/dist/elements/radios/index.js +2 -6
  52. package/dist/elements/radios/index.js.map +1 -1
  53. package/dist/elements/rotator/index.js.map +1 -1
  54. package/dist/elements/select/index.d.ts +2 -1
  55. package/dist/elements/select/index.js +11 -6
  56. package/dist/elements/select/index.js.map +1 -1
  57. package/dist/elements/sortable/index.js.map +1 -1
  58. package/dist/elements/sortable-item/index.js.map +1 -1
  59. package/dist/elements/tab/index.js.map +1 -1
  60. package/dist/elements/tab-panel/index.js.map +1 -1
  61. package/dist/elements/tabs/index.d.ts +1 -1
  62. package/dist/elements/tabs/index.js.map +1 -1
  63. package/dist/elements/textarea/index.d.ts +1 -1
  64. package/dist/elements/textarea/index.js +12 -7
  65. package/dist/elements/textarea/index.js.map +1 -1
  66. package/dist/elements/textarea/styles.css.js +1 -1
  67. package/dist/elements/textarea/styles.css.js.map +1 -1
  68. package/dist/elements/timer/index.js.map +1 -1
  69. package/dist/elements/timer-display/index.js.map +1 -1
  70. package/dist/elements/toggle/index.js +2 -6
  71. package/dist/elements/toggle/index.js.map +1 -1
  72. package/dist/elements/tracker/index.js.map +1 -1
  73. package/dist/elements/tracker-step/index.js.map +1 -1
  74. package/dist/elements/typewriter/index.js.map +1 -1
  75. package/dist/wrappers/react.d.ts +1 -1
  76. package/dist/wrappers/react.js +46 -23
  77. package/dist/wrappers/react.js.map +1 -1
  78. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/timer-display/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/timer/index.ts","../../../src/utilities/events.ts","../../../src/elements/timer/styles.css.ts","../../../src/elements/timer-display/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { EnumFormats } from '../timer';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-timer-display\n * @summary Displays remaining time\n * @ssrsafe yes\n *\n * @prop {EnumFormats} format - The format to display the remaining time in\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @fires kemet-timer-display-mounted - Fired when the timer display is mounted to the DOM\n * @detail {HTMLElement} element - The timer display element\n */\n\n@customElement('kemet-timer-display')\nexport default class KemetTimerDisplay extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n format: EnumFormats = EnumFormats.Seconds;\n\n @state()\n displayTime!: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n firstUpdated() {\n this.getTime();\n\n emitEvent(this, 'kemet-timer-display-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`${this.displayTime}`;\n }\n\n getTime() {\n this.closest('kemet-timer')?.addEventListener('kemet-timer-increment', (event: Event) => {\n const secondsLeft = (event as CustomEvent).detail.timeleft;\n switch (this.format) {\n case 'seconds':\n this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();\n break;\n case 'minutes':\n this.displayTime = Math.floor((secondsLeft % 86400) % 3600 / 60).toString();\n break;\n case 'hours':\n this.displayTime = Math.floor((secondsLeft % 86400) / 3600).toString();\n break;\n case 'days':\n this.displayTime = Math.floor(secondsLeft / 86400).toString();\n break;\n default:\n this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();\n }\n });\n }\n\n getTimeInSeconds(time: number) {\n switch (this.format) {\n case 'minutes': return time * 60;\n case 'hours': return time * 60 * 60;\n case 'days': return time * 60 * 60 * 24;\n default: return time;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-timer-display': KemetTimerDisplay\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { html, LitElement, PropertyValues } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nexport enum EnumFormats {\n Seconds = 'seconds',\n Minutes = 'minutes',\n Hours = 'hours',\n Days = 'days'\n}\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-timer\n * @summary Counts down from a specified amount of time or date.\n * @ssrsafe yes\n *\n * @prop {TypeFormats} format - The format of the amount property\n * @prop {number} amount - The amount of time to set the timer\n * @prop {string} expires - Begins a count down to a specified time, accepts a string that matches value given for a Date constructor\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @event kemet-timer-start - Fires when the timer starts\n * @event kemet-timer-complete - Fires when the timer reaches 0\n * @event kemet-timer-increment - Fires on tick of the timer\n *\n * @fires kemet-timer-mounted - Fired when the timer is mounted to the DOM\n * @detail {HTMLElement} element - The timer element\n *\n */\n\n@customElement('kemet-timer')\nexport default class KemetTimer extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n format: EnumFormats = EnumFormats.Seconds;\n\n @property({ type: Number })\n amount: number = 10;\n\n @property({ type: String })\n expires!: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n /** @internal */\n @state()\n interval!: any;\n\n firstUpdated() {\n if (this.expires) {\n this.countDown();\n } else {\n this.timer(this.getTimeInSeconds(this.amount));\n }\n\n emitEvent(this, 'kemet-timer-start', { element: this });\n emitEvent(this, 'kemet-timer-increment', { element: this, timeleft: this.getTimeInSeconds(this.amount) });\n\n emitEvent(this, 'kemet-timer-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(prevProps: PropertyValues<this>) {\n const hasFormatOrAmountChanged = prevProps.get('format') || prevProps.get('amount');\n const hasExpiredChanged = prevProps.get('expires');\n\n if (hasFormatOrAmountChanged) {\n clearInterval(this.interval);\n this.timer(this.getTimeInSeconds(this.amount));\n }\n\n if (hasExpiredChanged) {\n clearInterval(this.interval);\n this.countDown();\n }\n }\n\n render() {\n return html`<slot></slot>`;\n }\n\n getTimeInSeconds(time: number): number {\n switch (this.format) {\n case 'minutes': return time * 60;\n case 'hours': return time * 60 * 60;\n case 'days': return time * 60 * 60 * 24;\n default: return time;\n }\n }\n\n timer(seconds: number = 0) {\n const now = Date.now();\n const then = now + seconds * 1000;\n\n this.interval = setInterval(() => {\n const secondsLeft = Math.round((then - Date.now()) / 1000);\n\n if (secondsLeft < 0) {\n clearInterval(this.interval);\n emitEvent(this, 'kemet-timer-complete', { element: this });\n return;\n }\n\n emitEvent(this, 'kemet-timer-increment', { element: this, timeleft: secondsLeft });\n }, 1000);\n }\n\n countDown() {\n const expires = new Date(this.expires).getTime();\n\n this.interval = setInterval(() => {\n const secondsLeft = Math.round((expires - Date.now()) / 1000);\n\n if (secondsLeft < 0) {\n clearInterval(this.interval);\n emitEvent(this, 'kemet-timer-complete', { element: this });\n return;\n }\n\n emitEvent(this, 'kemet-timer-increment', { element: this, timeleft: secondsLeft });\n }, 1000);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-timer': KemetTimer\n }\n}\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n display: block;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n display: inline-block;\n}\n`;\n"],"mappings":"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","names":["html","LitElement","css","styles_css_default","LitElement","html","styles_css_default"]}
1
+ {"version":3,"sources":["../../../src/elements/timer-display/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/timer/index.ts","../../../src/utilities/events.ts","../../../src/elements/timer/styles.css.ts","../../../src/elements/timer-display/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { EnumFormats } from '../timer';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-timer-display\n * @summary Displays remaining time\n * @ssrsafe yes\n *\n * @prop {EnumFormats} format - The format to display the remaining time in\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @fires kemet-timer-display-mounted - Fired when the timer display is mounted to the DOM\n * @detail {HTMLElement} element - The timer display element\n */\n\n@customElement('kemet-timer-display')\nexport default class KemetTimerDisplay extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n format: EnumFormats = EnumFormats.Seconds;\n\n @state()\n displayTime!: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n firstUpdated() {\n this.getTime();\n\n emitEvent(this, 'kemet-timer-display-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`${this.displayTime}`;\n }\n\n getTime() {\n this.closest('kemet-timer')?.addEventListener('kemet-timer-increment', (event: Event) => {\n const secondsLeft = (event as CustomEvent).detail.timeleft;\n switch (this.format) {\n case 'seconds':\n this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();\n break;\n case 'minutes':\n this.displayTime = Math.floor((secondsLeft % 86400) % 3600 / 60).toString();\n break;\n case 'hours':\n this.displayTime = Math.floor((secondsLeft % 86400) / 3600).toString();\n break;\n case 'days':\n this.displayTime = Math.floor(secondsLeft / 86400).toString();\n break;\n default:\n this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();\n }\n });\n }\n\n getTimeInSeconds(time: number) {\n switch (this.format) {\n case 'minutes': return time * 60;\n case 'hours': return time * 60 * 60;\n case 'days': return time * 60 * 60 * 24;\n default: return time;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-timer-display': KemetTimerDisplay\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { html, LitElement, PropertyValues } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nexport enum EnumFormats {\n Seconds = 'seconds',\n Minutes = 'minutes',\n Hours = 'hours',\n Days = 'days'\n}\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-timer\n * @summary Counts down from a specified amount of time or date.\n * @ssrsafe yes\n *\n * @prop {TypeFormats} format - The format of the amount property\n * @prop {number} amount - The amount of time to set the timer\n * @prop {string} expires - Begins a count down to a specified time, accepts a string that matches value given for a Date constructor\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @event kemet-timer-start - Fires when the timer starts\n * @event kemet-timer-complete - Fires when the timer reaches 0\n * @event kemet-timer-increment - Fires on tick of the timer\n *\n * @fires kemet-timer-mounted - Fired when the timer is mounted to the DOM\n * @detail {HTMLElement} element - The timer element\n *\n */\n\n@customElement('kemet-timer')\nexport default class KemetTimer extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n format: EnumFormats = EnumFormats.Seconds;\n\n @property({ type: Number })\n amount: number = 10;\n\n @property({ type: String })\n expires!: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n /** @internal */\n @state()\n interval!: any;\n\n firstUpdated() {\n if (this.expires) {\n this.countDown();\n } else {\n this.timer(this.getTimeInSeconds(this.amount));\n }\n\n emitEvent(this, 'kemet-timer-start', { element: this });\n emitEvent(this, 'kemet-timer-increment', { element: this, timeleft: this.getTimeInSeconds(this.amount) });\n\n emitEvent(this, 'kemet-timer-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(prevProps: PropertyValues<this>) {\n const hasFormatOrAmountChanged = prevProps.get('format') || prevProps.get('amount');\n const hasExpiredChanged = prevProps.get('expires');\n\n if (hasFormatOrAmountChanged) {\n clearInterval(this.interval);\n this.timer(this.getTimeInSeconds(this.amount));\n }\n\n if (hasExpiredChanged) {\n clearInterval(this.interval);\n this.countDown();\n }\n }\n\n render() {\n return html`<slot></slot>`;\n }\n\n getTimeInSeconds(time: number): number {\n switch (this.format) {\n case 'minutes': return time * 60;\n case 'hours': return time * 60 * 60;\n case 'days': return time * 60 * 60 * 24;\n default: return time;\n }\n }\n\n timer(seconds: number = 0) {\n const now = Date.now();\n const then = now + seconds * 1000;\n\n this.interval = setInterval(() => {\n const secondsLeft = Math.round((then - Date.now()) / 1000);\n\n if (secondsLeft < 0) {\n clearInterval(this.interval);\n emitEvent(this, 'kemet-timer-complete', { element: this });\n return;\n }\n\n emitEvent(this, 'kemet-timer-increment', { element: this, timeleft: secondsLeft });\n }, 1000);\n }\n\n countDown() {\n const expires = new Date(this.expires).getTime();\n\n this.interval = setInterval(() => {\n const secondsLeft = Math.round((expires - Date.now()) / 1000);\n\n if (secondsLeft < 0) {\n clearInterval(this.interval);\n emitEvent(this, 'kemet-timer-complete', { element: this });\n return;\n }\n\n emitEvent(this, 'kemet-timer-increment', { element: this, timeleft: secondsLeft });\n }, 1000);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-timer': KemetTimer\n }\n}\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n display: block;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n display: inline-block;\n}\n`;\n"],"mappings":"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","names":["html","LitElement","css","styles_css_default","LitElement","html","styles_css_default"]}
@@ -32,10 +32,8 @@ var FormSubmitController = class {
32
32
  this.handleFormSubmit = this.handleFormSubmit.bind(this);
33
33
  }
34
34
  hostConnected() {
35
- console.log("what?!");
36
35
  this.form = this.options.form(this.host);
37
36
  if (this.form) {
38
- console.log("Adding form listeners");
39
37
  this.form.addEventListener("formdata", this.handleFormData);
40
38
  this.form.addEventListener("submit", this.handleFormSubmit);
41
39
  }
@@ -56,7 +54,6 @@ var FormSubmitController = class {
56
54
  }
57
55
  }
58
56
  handleFormSubmit(event) {
59
- console.log("~~Form submitted~~");
60
57
  event.preventDefault();
61
58
  event.stopImmediatePropagation();
62
59
  const disabled = this.options.disabled(this.host);
@@ -67,14 +64,13 @@ var FormSubmitController = class {
67
64
  if (component.checkValidity) {
68
65
  component.checkValidity();
69
66
  if (!component.checkValidity()) {
67
+ console.log("invalid", component);
70
68
  component.appearance = "error" /* Error */;
71
69
  component.invalid = true;
72
70
  component.dispatchEvent(
73
71
  new CustomEvent("kemet-input-status", {
74
- bubbles: true,
75
- composed: true,
76
72
  detail: {
77
- status: "error" /* Error */,
73
+ appearance: "error" /* Error */,
78
74
  validity: component.validity ? component.validity : {},
79
75
  element: component
80
76
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/toggle/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/toggle/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { FormSubmitController } from '../../utilities/form-controller';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-toggle\n * @summary A toggle switch for forms.\n * @ssrsafe yes\n *\n * @prop {string} name - The name on the input field\n * @prop {boolean} checked - Determines whether the toggle is checked\n * @prop {boolean} disabled - Determines whether the toggle is disabled\n * @prop {string} label - A description of the toggle's purpose\n * @prop {boolean} show - Determines whether to show text options\n * @prop {boolean} squared - Displays the toggle as squared instead of rounded\n * @prop {string} optionChecked - The checked option text\n * @prop {string} optionUnchecked - The unchecked option text\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @csspart label - The label element.\n * @csspart control - The control element.\n * @csspart text - The label text.\n * @csspart checked - The checked text.\n * @csspart unchecked - The unchecked text.\n *\n * @cssproperty --kemet-toggle-width - The width of the entire toggle.\n * @cssproperty --kemet-toggle-height - The height of the entire toggle.\n * @cssproperty --kemet-toggle-handle-diameter - The diameter of the handle.\n * @cssproperty --kemet-toggle-track-border - The border of the track.\n * @cssproperty --kemet-toggle-track-color - The color of the track.\n * @cssproperty --kemet-toggle-track-shadow - The shadow on the track.\n * @cssproperty --kemet-toggle-handle-border - The border on the handle.\n * @cssproperty --kemet-toggle-handle-color - The color of the handle.\n * @cssproperty --kemet-toggle-handle-shadow - The shadow on the handle.\n *\n * @event kemet-toggle-change - Fires when the toggle changes state\n *\n * @fires kemet-toggle-mounted - Fired when the toggle is mounted to the DOM\n * @detail {HTMLElement} element - The toggle element\n *\n */\n\n@customElement('kemet-toggle')\nexport default class KemetToggle extends LitElement {\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n name: string = 'toggle-switch';\n\n @property({ type: Boolean, reflect: true })\n checked: boolean = false;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Boolean })\n show: boolean = false;\n\n @property({ type: Boolean })\n squared: boolean = false;\n\n @property({ type: String, attribute: 'option-checked' })\n optionChecked: string = 'on';\n\n @property({ type: String, attribute: 'option-unchecked' })\n optionUnchecked: string = 'off';\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n value: string | boolean = this.checked ? this.optionChecked : this.optionUnchecked;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n firstUpdated() {\n emitEvent(this, 'kemet-toggle-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`\n <label part=\"label\">\n ${this.makeUncheckedOption()}\n <span part=\"control\">\n <span part=\"track\"></span>\n <span part=\"handle\"></span>\n </span>\n <input\n role=\"switch\"\n type=\"checkbox\"\n name=\"${this.name}\"\n aria-label=\"${this.label}\"\n aria-checked=${this.checked ? 'true' : 'false'}\n ?disabled=${this.disabled}\n ?checked=${this.checked}\n @change=${this.handleChange}\n />\n ${this.makeCheckedOption()}\n <span part=\"text\">${this.label}</span>\n </label>\n `;\n }\n\n handleChange() {\n this.checked = !this.checked;\n this.value = this.checked ? this.optionChecked : this.optionUnchecked;\n emitEvent(this, 'kemet-toggle-change', { element: this });\n }\n\n makeUncheckedOption() {\n if (this.show) {\n return html`<span class=\"option\" part=\"unchecked\">${this.optionUnchecked}</span>`;\n }\n\n return null;\n }\n\n makeCheckedOption() {\n if (this.show) {\n return html`<span class=\"option\" part=\"checked\">${this.optionChecked}</span>`;\n }\n\n return null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-toggle': KemetToggle\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { EnumAppearances } from \"./constants\";\n\nexport class FormSubmitController {\n host: any;\n form: HTMLFormElement | null | undefined;\n options: {\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n };\n\n constructor(host: any, options: Partial<{\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n }> = {}) {\n (this.host = host).addController(this);\n\n this.options = {\n form: (input: any) => input.closest('form'),\n name: (input: any) => input.name,\n value: (input: any) => input.value,\n disabled: (input: any) => input.disabled,\n ...options,\n };\n\n this.handleFormData = this.handleFormData.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n\n\n }\n\n hostConnected() {\n console.log('what?!');\n this.form = this.options.form(this.host);\n\n if (this.form) {\n console.log('Adding form listeners');\n this.form.addEventListener('formdata', this.handleFormData);\n this.form.addEventListener('submit', this.handleFormSubmit);\n }\n }\n\n hostDisconnected() {\n if (this.form) {\n this.form.removeEventListener('formdata', this.handleFormData);\n this.form.removeEventListener('submit', this.handleFormSubmit);\n this.form = undefined;\n }\n }\n\n handleFormData(event: FormDataEvent) {\n const disabled = this.options.disabled(this.host);\n const name = this.options.name(this.host);\n const value = this.options.value(this.host);\n\n if (!disabled && typeof name === 'string' && typeof value !== 'undefined') {\n // TODO recreate a scenario where value will be an array\n // if (Array.isArray(value)) {\n // value.forEach((val) => {\n // event.formData?.append(name, val.toString());\n // });\n // } else {\n // event.formData?.append(name, value.toString());\n // }\n event.formData?.append(name, value.toString());\n }\n }\n\n handleFormSubmit(event: SubmitEvent) {\n console.log('~~Form submitted~~');\n event.preventDefault();\n event.stopImmediatePropagation();\n\n const disabled = this.options.disabled(this.host);\n this.form = this.options.form(this.host);\n\n if (this.form && !disabled) {\n const components = this.form.querySelectorAll('kemet-input, kemet-textarea, kemet-select, kemet-checkbox, kemet-radios');\n\n components.forEach((component: any) => {\n if (component.checkValidity) {\n component.checkValidity();\n\n if (!component.checkValidity()) {\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n bubbles: true,\n composed: true,\n detail: {\n status: EnumAppearances.Error,\n validity: component.validity ? component.validity : {},\n element: component,\n },\n }),\n );\n }\n\n if (component.checkLimitValidity && !component.checkLimitValidity()) {\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n bubbles: true,\n composed: true,\n detail: {\n status: 'error',\n validity: { passedLimit: true },\n element: component,\n },\n }),\n );\n }\n }\n });\n }\n }\n\n submit() {\n const button = document.createElement('button');\n\n if (this.form) {\n button.type = 'submit';\n button.style.position = 'absolute';\n button.style.width = '0';\n button.style.height = '0';\n button.style.clip = 'rect(0 0 0 0)';\n button.style.clipPath = 'inset(50%)';\n button.style.overflow = 'hidden';\n button.style.whiteSpace = 'nowrap';\n this.form.append(button);\n button.click();\n button.remove();\n }\n }\n}\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-toggle-width: 3.5rem;\n --kemet-toggle-height: 2rem;\n --kemet-toggle-handle-diameter: 1.6rem;\n --kemet-toggle-handle-margin: calc((var(--kemet-toggle-height) - var(--kemet-toggle-handle-diameter)) / 2);\n --kemet-toggle-track-border: none;\n --kemet-toggle-track-color: var(--kemet-color-background-base);\n --kemet-toggle-track-shadow: inset 0 0.4rem 0.7rem 0 rgb(0 0 0 / 15%), inset 0 -0.2rem 0.4rem 0 rgb(0 0 0 / 5%);\n --kemet-toggle-handle-border: none;\n --kemet-toggle-handle-color: var(--kemet-color-font-active);\n --kemet-toggle-handle-shadow: 0 0.5rem 0.5rem 0 rgb(0 0 0 / 10%), 0 0.5rem 0.5rem 0 rgb(0 0 0 / 20%);\n\n display: flex;\n align-items: center;\n}\n\n:host([disabled]) {\n opacity: 0.5;\n}\n\nlabel {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 1rem;\n font-size: inherit;\n color: inherit;\n}\n\n:host([disabled]) label {\n cursor: not-allowed;\n}\n\ninput {\n display: none;\n}\n\n[part='control'] {\n position: relative;\n display: inline-flex;\n margin: 0;\n width: var(--kemet-toggle-width);\n height: var(--kemet-toggle-height);\n}\n\n[part='control'] > span {\n transition: 300ms ease-in-out;\n}\n\n[part='track'] {\n width: var(--kemet-toggle-width);\n height: var(--kemet-toggle-height);\n border: var(--kemet-toggle-track-border);\n border-radius: var(--kemet-toggle-height);\n background-color: var(--kemet-toggle-track-color);\n box-shadow: var(--kemet-toggle-track-shadow);\n}\n\n:host([squared]) [part='track'] {\n border-radius: 0;\n}\n\n[part='handle'] {\n position: absolute;\n top: var(--kemet-toggle-handle-margin);\n left: var(--kemet-toggle-handle-margin);\n width: var(--kemet-toggle-handle-diameter);\n height: var(--kemet-toggle-handle-diameter);\n transform: translateX(0);\n border: var(--kemet-toggle-handle-border);\n border-radius: var(--kemet-toggle-handle-diameter);\n background-color: var(--kemet-toggle-handle-color);\n box-shadow: var(--kemet-toggle-handle-shadow);\n}\n\n:host([squared]) [part='handle'] {\n border-radius: 0;\n}\n\n:host([checked]) [part='handle'] {\n transform: translateX(calc(var(--kemet-toggle-width) - var(--kemet-toggle-handle-diameter) - var(--kemet-toggle-handle-margin) * 2));\n}\n\n.option {\n font-size: 90%;\n}\n`;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/toggle/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/toggle/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { FormSubmitController } from '../../utilities/form-controller';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-toggle\n * @summary A toggle switch for forms.\n * @ssrsafe yes\n *\n * @prop {string} name - The name on the input field\n * @prop {boolean} checked - Determines whether the toggle is checked\n * @prop {boolean} disabled - Determines whether the toggle is disabled\n * @prop {string} label - A description of the toggle's purpose\n * @prop {boolean} show - Determines whether to show text options\n * @prop {boolean} squared - Displays the toggle as squared instead of rounded\n * @prop {string} optionChecked - The checked option text\n * @prop {string} optionUnchecked - The unchecked option text\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @csspart label - The label element.\n * @csspart control - The control element.\n * @csspart text - The label text.\n * @csspart checked - The checked text.\n * @csspart unchecked - The unchecked text.\n *\n * @cssproperty --kemet-toggle-width - The width of the entire toggle.\n * @cssproperty --kemet-toggle-height - The height of the entire toggle.\n * @cssproperty --kemet-toggle-handle-diameter - The diameter of the handle.\n * @cssproperty --kemet-toggle-track-border - The border of the track.\n * @cssproperty --kemet-toggle-track-color - The color of the track.\n * @cssproperty --kemet-toggle-track-shadow - The shadow on the track.\n * @cssproperty --kemet-toggle-handle-border - The border on the handle.\n * @cssproperty --kemet-toggle-handle-color - The color of the handle.\n * @cssproperty --kemet-toggle-handle-shadow - The shadow on the handle.\n *\n * @event kemet-toggle-change - Fires when the toggle changes state\n *\n * @fires kemet-toggle-mounted - Fired when the toggle is mounted to the DOM\n * @detail {HTMLElement} element - The toggle element\n *\n */\n\n@customElement('kemet-toggle')\nexport default class KemetToggle extends LitElement {\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n name: string = 'toggle-switch';\n\n @property({ type: Boolean, reflect: true })\n checked: boolean = false;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Boolean })\n show: boolean = false;\n\n @property({ type: Boolean })\n squared: boolean = false;\n\n @property({ type: String, attribute: 'option-checked' })\n optionChecked: string = 'on';\n\n @property({ type: String, attribute: 'option-unchecked' })\n optionUnchecked: string = 'off';\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n value: string | boolean = this.checked ? this.optionChecked : this.optionUnchecked;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n firstUpdated() {\n emitEvent(this, 'kemet-toggle-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`\n <label part=\"label\">\n ${this.makeUncheckedOption()}\n <span part=\"control\">\n <span part=\"track\"></span>\n <span part=\"handle\"></span>\n </span>\n <input\n role=\"switch\"\n type=\"checkbox\"\n name=\"${this.name}\"\n aria-label=\"${this.label}\"\n aria-checked=${this.checked ? 'true' : 'false'}\n ?disabled=${this.disabled}\n ?checked=${this.checked}\n @change=${this.handleChange}\n />\n ${this.makeCheckedOption()}\n <span part=\"text\">${this.label}</span>\n </label>\n `;\n }\n\n handleChange() {\n this.checked = !this.checked;\n this.value = this.checked ? this.optionChecked : this.optionUnchecked;\n emitEvent(this, 'kemet-toggle-change', { element: this });\n }\n\n makeUncheckedOption() {\n if (this.show) {\n return html`<span class=\"option\" part=\"unchecked\">${this.optionUnchecked}</span>`;\n }\n\n return null;\n }\n\n makeCheckedOption() {\n if (this.show) {\n return html`<span class=\"option\" part=\"checked\">${this.optionChecked}</span>`;\n }\n\n return null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-toggle': KemetToggle\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { EnumAppearances } from \"./constants\";\n\nexport class FormSubmitController {\n host: any;\n form: HTMLFormElement | null | undefined;\n options: {\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n };\n\n constructor(host: any, options: Partial<{\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n }> = {}) {\n (this.host = host).addController(this);\n\n this.options = {\n form: (input: any) => input.closest('form'),\n name: (input: any) => input.name,\n value: (input: any) => input.value,\n disabled: (input: any) => input.disabled,\n ...options,\n };\n\n this.handleFormData = this.handleFormData.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n\n\n }\n\n hostConnected() {\n this.form = this.options.form(this.host);\n\n if (this.form) {\n this.form.addEventListener('formdata', this.handleFormData);\n this.form.addEventListener('submit', this.handleFormSubmit);\n }\n }\n\n hostDisconnected() {\n if (this.form) {\n this.form.removeEventListener('formdata', this.handleFormData);\n this.form.removeEventListener('submit', this.handleFormSubmit);\n this.form = undefined;\n }\n }\n\n handleFormData(event: FormDataEvent) {\n const disabled = this.options.disabled(this.host);\n const name = this.options.name(this.host);\n const value = this.options.value(this.host);\n\n if (!disabled && typeof name === 'string' && typeof value !== 'undefined') {\n // TODO recreate a scenario where value will be an array\n // if (Array.isArray(value)) {\n // value.forEach((val) => {\n // event.formData?.append(name, val.toString());\n // });\n // } else {\n // event.formData?.append(name, value.toString());\n // }\n event.formData?.append(name, value.toString());\n }\n }\n\n handleFormSubmit(event: SubmitEvent) {\n event.preventDefault();\n event.stopImmediatePropagation();\n\n const disabled = this.options.disabled(this.host);\n this.form = this.options.form(this.host);\n\n if (this.form && !disabled) {\n const components = this.form.querySelectorAll('kemet-input, kemet-textarea, kemet-select, kemet-checkbox, kemet-radios');\n\n\n components.forEach((component: any) => {\n if (component.checkValidity) {\n component.checkValidity();\n\n if (!component.checkValidity()) {\n console.log('invalid', component);\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n detail: {\n appearance: EnumAppearances.Error,\n validity: component.validity ? component.validity : {},\n element: component,\n },\n }),\n );\n }\n\n if (component.checkLimitValidity && !component.checkLimitValidity()) {\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n bubbles: true,\n composed: true,\n detail: {\n status: 'error',\n validity: { passedLimit: true },\n element: component,\n },\n }),\n );\n }\n }\n });\n }\n }\n\n submit() {\n const button = document.createElement('button');\n\n if (this.form) {\n button.type = 'submit';\n button.style.position = 'absolute';\n button.style.width = '0';\n button.style.height = '0';\n button.style.clip = 'rect(0 0 0 0)';\n button.style.clipPath = 'inset(50%)';\n button.style.overflow = 'hidden';\n button.style.whiteSpace = 'nowrap';\n this.form.append(button);\n button.click();\n button.remove();\n }\n }\n}\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-toggle-width: 3.5rem;\n --kemet-toggle-height: 2rem;\n --kemet-toggle-handle-diameter: 1.6rem;\n --kemet-toggle-handle-margin: calc((var(--kemet-toggle-height) - var(--kemet-toggle-handle-diameter)) / 2);\n --kemet-toggle-track-border: none;\n --kemet-toggle-track-color: var(--kemet-color-background-base);\n --kemet-toggle-track-shadow: inset 0 0.4rem 0.7rem 0 rgb(0 0 0 / 15%), inset 0 -0.2rem 0.4rem 0 rgb(0 0 0 / 5%);\n --kemet-toggle-handle-border: none;\n --kemet-toggle-handle-color: var(--kemet-color-font-active);\n --kemet-toggle-handle-shadow: 0 0.5rem 0.5rem 0 rgb(0 0 0 / 10%), 0 0.5rem 0.5rem 0 rgb(0 0 0 / 20%);\n\n display: flex;\n align-items: center;\n}\n\n:host([disabled]) {\n opacity: 0.5;\n}\n\nlabel {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 1rem;\n font-size: inherit;\n color: inherit;\n}\n\n:host([disabled]) label {\n cursor: not-allowed;\n}\n\ninput {\n display: none;\n}\n\n[part='control'] {\n position: relative;\n display: inline-flex;\n margin: 0;\n width: var(--kemet-toggle-width);\n height: var(--kemet-toggle-height);\n}\n\n[part='control'] > span {\n transition: 300ms ease-in-out;\n}\n\n[part='track'] {\n width: var(--kemet-toggle-width);\n height: var(--kemet-toggle-height);\n border: var(--kemet-toggle-track-border);\n border-radius: var(--kemet-toggle-height);\n background-color: var(--kemet-toggle-track-color);\n box-shadow: var(--kemet-toggle-track-shadow);\n}\n\n:host([squared]) [part='track'] {\n border-radius: 0;\n}\n\n[part='handle'] {\n position: absolute;\n top: var(--kemet-toggle-handle-margin);\n left: var(--kemet-toggle-handle-margin);\n width: var(--kemet-toggle-handle-diameter);\n height: var(--kemet-toggle-handle-diameter);\n transform: translateX(0);\n border: var(--kemet-toggle-handle-border);\n border-radius: var(--kemet-toggle-handle-diameter);\n background-color: var(--kemet-toggle-handle-color);\n box-shadow: var(--kemet-toggle-handle-shadow);\n}\n\n:host([squared]) [part='handle'] {\n border-radius: 0;\n}\n\n:host([checked]) [part='handle'] {\n transform: translateX(calc(var(--kemet-toggle-width) - var(--kemet-toggle-handle-diameter) - var(--kemet-toggle-handle-margin) * 2));\n}\n\n.option {\n font-size: 90%;\n}\n`;\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/tracker/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/tracker/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport type KemetTrackerStep from '../tracker-step';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n *\n * @since 1.2.0\n * @status stable\n *\n * @tagname kemet-tracker\n * @summary A tracker for a multi step process\n * @ssrsafe yes\n *\n * @prop {number} total - The total number of steps\n * @prop {string} breakpoint - The point at which the tracker goes from mobile to standard * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @fires kemet-tracker-mounted - Fired when the tracker is mounted to the DOM\n * @detail {HTMLElement} element - The tracker element\n *\n */\n\n@customElement('kemet-tracker')\nexport default class KemetTracker extends LitElement {\n static styles = [styles];\n\n @property({ type: Number })\n total?: number;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n steps!: NodeListOf<KemetTrackerStep>;\n\n firstUpdated() {\n this.initializeSteps();\n emitEvent(this, 'kemet-tracker-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`<slot @slotchange=${() => this.initializeSteps()}></slot>`;\n }\n\n initializeSteps() {\n this.steps = this.querySelectorAll('kemet-tracker-step');\n this.total = this.steps.length;\n\n this.steps.forEach((step, index) => {\n step.step = index + 1;\n if (step.step === this.total) {\n step.last = true;\n }\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tracker': KemetTracker\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { css } from 'lit';\n\nexport default css`:host {\n display: flex;\n justify-content: center;\n align-items: flex-start;\n width: 100%;\n}\n`;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,MAAM,kBAAkB;;;ACAjC,SAAS,UAAU,OAAO,OAAO,gBAAgB;AACjD,SAAS,iBAAiB,wBAAwB;AAO3C,IAAM,gBAAgB,CAAC,YAAoB,CAAC,sBACjD,OAAO,mBAAmB,eAAe,CAAC,eAAe,IAAI,OAAO,IAChE,iBAAiB,OAAO,EAAE,iBAAiB,IAC3C;;;ACXN,SAAS,WAAW;AAEpB,IAAO,qBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACFR,IAAM,YAAY,CAAC,SAAS,MAAM,QAAQ,UAAU,MAAM,WAAW,SAAS;AACnF,UAAQ;AAAA,IACN,IAAI,YAAY,MAAM,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,EACrD;AACF;;;AHsBA,IAAqB,eAArB,cAA0C,WAAW;AAAA,EAArD;AAAA;AAUE,eAAc;AAAA;AAAA,EAKd,eAAe;AACb,SAAK,gBAAgB;AACrB,cAAU,MAAM,yBAAyB;AAAA,MACvC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,SAAS;AACP,WAAO,yBAAyB,MAAM,KAAK,gBAAgB,CAAC;AAAA,EAC9D;AAAA,EAEA,kBAAkB;AAChB,SAAK,QAAQ,KAAK,iBAAiB,oBAAoB;AACvD,SAAK,QAAQ,KAAK,MAAM;AAExB,SAAK,MAAM,QAAQ,CAAC,MAAM,UAAU;AAClC,WAAK,OAAO,QAAQ;AACpB,UAAI,KAAK,SAAS,KAAK,OAAO;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AACF;AA1CqB,aACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHP,aAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,aAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,aAUnB;AAGA;AAAA,EADC,MAAM;AAAA,GAZY,aAanB;AAbmB,eAArB;AAAA,EADC,cAAc,eAAe;AAAA,GACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/tracker/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/tracker/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport type KemetTrackerStep from '../tracker-step';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n *\n * @since 1.2.0\n * @status stable\n *\n * @tagname kemet-tracker\n * @summary A tracker for a multi step process\n * @ssrsafe yes\n *\n * @prop {number} total - The total number of steps\n * @prop {string} breakpoint - The point at which the tracker goes from mobile to standard * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @fires kemet-tracker-mounted - Fired when the tracker is mounted to the DOM\n * @detail {HTMLElement} element - The tracker element\n *\n */\n\n@customElement('kemet-tracker')\nexport default class KemetTracker extends LitElement {\n static styles = [styles];\n\n @property({ type: Number })\n total?: number;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n steps!: NodeListOf<KemetTrackerStep>;\n\n firstUpdated() {\n this.initializeSteps();\n emitEvent(this, 'kemet-tracker-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`<slot @slotchange=${() => this.initializeSteps()}></slot>`;\n }\n\n initializeSteps() {\n this.steps = this.querySelectorAll('kemet-tracker-step');\n this.total = this.steps.length;\n\n this.steps.forEach((step, index) => {\n step.step = index + 1;\n if (step.step === this.total) {\n step.last = true;\n }\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tracker': KemetTracker\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { css } from 'lit';\n\nexport default css`:host {\n display: flex;\n justify-content: center;\n align-items: flex-start;\n width: 100%;\n}\n`;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,MAAM,kBAAkB;;;ACAjC,SAAS,UAAU,OAAO,OAAO,gBAAgB;AACjD,SAAS,iBAAiB,wBAAwB;AAO3C,IAAM,gBAAgB,CAAC,YAAoB,CAAC,sBACjD,OAAO,mBAAmB,eAAe,CAAC,eAAe,IAAI,OAAO,IAChE,iBAAiB,OAAO,EAAE,iBAAiB,IAC3C;;;ACXN,SAAS,WAAW;AAEpB,IAAO,qBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACFR,IAAM,YAAY,CAAC,SAAsB,MAAc,QAAa,UAAU,MAAM,WAAW,SAAS;AAC7G,UAAQ;AAAA,IACN,IAAI,YAAY,MAAM,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,EACrD;AACF;;;AHsBA,IAAqB,eAArB,cAA0C,WAAW;AAAA,EAArD;AAAA;AAUE,eAAc;AAAA;AAAA,EAKd,eAAe;AACb,SAAK,gBAAgB;AACrB,cAAU,MAAM,yBAAyB;AAAA,MACvC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,SAAS;AACP,WAAO,yBAAyB,MAAM,KAAK,gBAAgB,CAAC;AAAA,EAC9D;AAAA,EAEA,kBAAkB;AAChB,SAAK,QAAQ,KAAK,iBAAiB,oBAAoB;AACvD,SAAK,QAAQ,KAAK,MAAM;AAExB,SAAK,MAAM,QAAQ,CAAC,MAAM,UAAU;AAClC,WAAK,OAAO,QAAQ;AACpB,UAAI,KAAK,SAAS,KAAK,OAAO;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AACF;AA1CqB,aACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHP,aAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,aAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,aAUnB;AAGA;AAAA,EADC,MAAM;AAAA,GAZY,aAanB;AAbmB,eAArB;AAAA,EADC,cAAc,eAAe;AAAA,GACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/tracker-step/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/tracker-step/styles.css.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport HTMLKemetTrackerElement from '../tracker';\nimport styles from './styles.css.ts';\n\n/**\n *\n * @since 1.2.0\n * @status stable\n\n * @tagname kemet-tracker-step\n * @summary A step in the Tracker\n * @ssrsafe yes\n *\n * @prop {number} step - The current step number\n * @prop {boolean} completed - Determines whether a step renders as complete\n * @prop {boolean} current - Determines whether a step renders as the current step\n * @prop {boolean} last - Is automatically added to the last step\n * @prop {string} breakpoint - The breakpoint to use for mobile rendering\n * @prop {boolean} mobile - Determines if a step should render as mobile\n * @prop {boolean} hideDotContent - Hides the label inside of a dot\n * @prop {number} completedSize - The icon size for the completed check mark\n * @prop {number} total - The total number of steps\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @cssproperty --kemet-tracker-step-dot-font-size - The font size.\n * @cssproperty --kemet-tracker-step-dot-color - The text color.\n * @cssproperty --kemet-tracker-step-dot-border - Border around a dot.\n * @cssproperty --kemet-tracker-step-dot-size - Width and height of a dot.\n * @cssproperty --kemet-tracker-step-dot-size-mobile - Mobile width and height of a dot.\n * @cssproperty --kemet-tracker-step-dot-gap - Space between a dot and connector line.\n * @cssproperty --kemet-tracker-step-dot-transition - Transition of a dot.\n * @cssproperty --kemet-tracker-step-dot-fill-color - Fill color of a dot.\n * @cssproperty --kemet-tracker-step-dot-background-color - Color of the background a dot is on.\n * @cssproperty --kemet-tracker-step-current-color - Current dot text color.\n * @cssproperty --kemet-tracker-step-current-fill-color - Current dot fill color.\n * @cssproperty --kemet-tracker-step-completed-color - Text color of a completed dot.\n * @cssproperty --kemet-tracker-step-completed-fill-color - Background color of a completed dot.\n * @cssproperty --kemet-tracker-step-completed-line-color - Completed connector line color.\n * @cssproperty --kemet-tracker-step-completed-line-weight - Completed line weight.\n * @cssproperty --kemet-tracker-step-standard-line-weight - Standard line weight.\n *\n * @csspart dot - The container for the dot.\n * @csspart line - A connector line from dot to dot.\n * @csspart completed-line - A completed connector line.\n *\n * @fires kemet-tracker-step-mounted - Fired when the tracker step is mounted to the DOM\n * @detail {HTMLElement} element - The tracker step element\n *\n */\n\n@customElement('kemet-tracker-step')\nexport default class KemetTrackerStep extends LitElement {\n static styles = [styles];\n\n @property({ type: Number})\n step!: number;\n\n @property({ type: Boolean, reflect: true })\n completed!: boolean;\n\n @property({ type: Boolean, reflect: true })\n current!: boolean;\n\n @property({ type: Boolean, reflect: true })\n last!: boolean;\n\n @property({ type: String })\n breakpoint: string = '767px';\n\n @property({ type: Boolean, reflect: true })\n mobile!: boolean;\n\n @property({ type: Boolean, reflect: true, attribute: 'hide-dot-content' })\n hideDotContent!: boolean;\n\n @property({ type: Number })\n completedSize: number = 16;\n\n @property({ type: Number })\n total: number = 0;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n\n\n @state()\n tracker!: HTMLKemetTrackerElement;\n\n firstUpdated() {\n this.last = this.step === this.total;\n\n this.isMobile();\n\n window.addEventListener('resize', () => {\n this.isMobile();\n });\n\n emitEvent(this, 'kemet-tracker-step-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`\n ${this.makeLine()}\n ${this.makeCompletedLine()}\n <div class=\"dot\" part=\"dot\">${this.makeDotContent()}</div>\n ${this.makeSlotContent()}\n `;\n }\n\n makeLine() {\n if (!this.last) {\n return html`<div class=\"line\" part=\"line\"></div>`;\n }\n\n return null;\n }\n\n makeCompletedLine() {\n if (this.completed && !this.last) {\n return html`<div class=\"line completed\" part=\"completed-line\" @animationend=${() => this.handleCompletedLineEnd()}></div>`;\n }\n\n return null;\n }\n\n makeDotContent() {\n if (this.completed && !this.mobile && !this.hideDotContent) {\n return html`\n <kemet-icon name=\"check2\" size=${this.completedSize}></kemet-icon>\n `;\n }\n\n if (!this.mobile && !this.hideDotContent) {\n return html`\n <span>${this.step}/${this.total}</span>\n `;\n }\n\n return null;\n }\n\n makeSlotContent() {\n if (!this.mobile) {\n return html`<slot></slot>`;\n }\n\n return null;\n }\n\n handleCompletedLineEnd() {\n const currentDot = this.current ? this.shadowRoot?.querySelector('.dot') : null;\n\n if (currentDot) {\n currentDot.classList.add('animate');\n }\n }\n\n isMobile() {\n const mediaQuery = window.matchMedia(`(max-width: ${this.breakpoint})`);\n this.mobile = mediaQuery.matches;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tracker-step': KemetTrackerStep\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-tracker-step-dot-size: 50px;\n --kemet-tracker-step-dot-size-mobile: 25px;\n --kemet-tracker-step-dot-gap: 4px;\n --kemet-tracker-step-dot-transition: all 300ms ease-in-out;\n --kemet-tracker-step-dot-font-size: 90%;\n --kemet-tracker-step-dot-color: var(--kemet-color-font-active);\n --kemet-tracker-step-dot-background-color: var(--kemet-color-background-base);\n --kemet-tracker-step-dot-border: 1px solid var(--kemet-color-font-active);\n --kemet-tracker-step-dot-fill-color: transparent;\n --kemet-tracker-step-standard-line-weight: 1px;\n --kemet-tracker-step-completed-line-weight: 3px;\n --kemet-tracker-step-completed-color: var(--kemet-color-background-base);\n --kemet-tracker-step-completed-fill-color: var(--kemet-color-background-success);\n --kemet-tracker-step-current-color: var(--kemet-color-font-inverse-base);\n --kemet-tracker-step-current-fill-color: var(--kemet-color-font-active);\n --kemet-tracker-step-line-color: var(--kemet-color-font-active);\n --kemet-tracker-step-completed-line-color: var(--kemet-color-font-active);\n\n position: relative;\n width: 100%;\n text-align: center;\n }\n\n .dot {\n font-size: var(--kemet-tracker-step-dot-font-size);\n color: var(--kemet-tracker-step-dot-color);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n position: relative;\n z-index: 1;\n width: var(--kemet-tracker-step-dot-size);\n height: var(--kemet-tracker-step-dot-size);\n border-radius: 100%;\n transition: var(--kemet-tracker-step-dot-transition);\n background-color: var(--kemet-tracker-step-dot-background-color);\n }\n\n .dot::after {\n content: \"\";\n width: unset;\n height: unset;\n position: absolute;\n top: var(--kemet-tracker-step-dot-gap);\n left: var(--kemet-tracker-step-dot-gap);\n right: var(--kemet-tracker-step-dot-gap);\n bottom: var(--kemet-tracker-step-dot-gap);\n z-index: -1;\n border-radius: 100%;\n transition: var(--kemet-tracker-step-dot-transition);\n border: var(--kemet-tracker-step-dot-border);\n background-color: var(--kemet-tracker-step-dot-fill-color);\n }\n\n :host([completed]) .dot {\n color: var(--kemet-tracker-step-completed-color);\n }\n\n :host([completed]) .dot::after {\n border: 0;\n background-color: var(--kemet-tracker-step-completed-fill-color);\n }\n\n :host([current]) .dot.animate {\n color: var(--kemet-tracker-step-current-color);\n }\n\n :host([current]) .dot.animate::after {\n border: 0;\n background-color: var(--kemet-tracker-step-current-fill-color);\n }\n\n :host([mobile]) .dot {\n width: var(--kemet-tracker-step-dot-size-mobile);\n height: var(--kemet-tracker-step-dot-size-mobile);\n }\n\n .line {\n display: block;\n position: absolute;\n left: 50%;\n right: 0;\n bottom: 0;\n width: 100%;\n\n /* standard */\n top: calc((var(--kemet-tracker-step-dot-size) - var(--kemet-tracker-step-standard-line-weight)) / 2);\n height: var(--kemet-tracker-step-standard-line-weight);\n background-color: var(--kemet-tracker-step-line-color);\n }\n\n .line.completed {\n width: 100%;\n transform: scaleX(0);\n transform-origin: left center;\n top: calc((var(--kemet-tracker-step-dot-size) - var(--kemet-tracker-step-completed-line-weight)) / 2);\n height: var(--kemet-tracker-step-completed-line-weight);\n background-color: var(--kemet-tracker-step-completed-line-color);\n animation-name: grow;\n animation-delay: 1s;\n animation-duration: 600ms;\n animation-fill-mode: forwards;\n }\n\n :host([mobile]) .line {\n top: calc((var(--kemet-tracker-step-dot-size-mobile) - var(--kemet-tracker-step-standard-line-weight)) / 2);\n }\n\n :host([mobile]) .line.completed {\n top: calc((var(--kemet-tracker-step-dot-size-mobile) - var(--kemet-tracker-step-completed-line-weight)) / 2);\n }\n\n @keyframes grow {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n`;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/tracker-step/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/tracker-step/styles.css.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport HTMLKemetTrackerElement from '../tracker';\nimport styles from './styles.css.ts';\n\n/**\n *\n * @since 1.2.0\n * @status stable\n\n * @tagname kemet-tracker-step\n * @summary A step in the Tracker\n * @ssrsafe yes\n *\n * @prop {number} step - The current step number\n * @prop {boolean} completed - Determines whether a step renders as complete\n * @prop {boolean} current - Determines whether a step renders as the current step\n * @prop {boolean} last - Is automatically added to the last step\n * @prop {string} breakpoint - The breakpoint to use for mobile rendering\n * @prop {boolean} mobile - Determines if a step should render as mobile\n * @prop {boolean} hideDotContent - Hides the label inside of a dot\n * @prop {number} completedSize - The icon size for the completed check mark\n * @prop {number} total - The total number of steps\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @cssproperty --kemet-tracker-step-dot-font-size - The font size.\n * @cssproperty --kemet-tracker-step-dot-color - The text color.\n * @cssproperty --kemet-tracker-step-dot-border - Border around a dot.\n * @cssproperty --kemet-tracker-step-dot-size - Width and height of a dot.\n * @cssproperty --kemet-tracker-step-dot-size-mobile - Mobile width and height of a dot.\n * @cssproperty --kemet-tracker-step-dot-gap - Space between a dot and connector line.\n * @cssproperty --kemet-tracker-step-dot-transition - Transition of a dot.\n * @cssproperty --kemet-tracker-step-dot-fill-color - Fill color of a dot.\n * @cssproperty --kemet-tracker-step-dot-background-color - Color of the background a dot is on.\n * @cssproperty --kemet-tracker-step-current-color - Current dot text color.\n * @cssproperty --kemet-tracker-step-current-fill-color - Current dot fill color.\n * @cssproperty --kemet-tracker-step-completed-color - Text color of a completed dot.\n * @cssproperty --kemet-tracker-step-completed-fill-color - Background color of a completed dot.\n * @cssproperty --kemet-tracker-step-completed-line-color - Completed connector line color.\n * @cssproperty --kemet-tracker-step-completed-line-weight - Completed line weight.\n * @cssproperty --kemet-tracker-step-standard-line-weight - Standard line weight.\n *\n * @csspart dot - The container for the dot.\n * @csspart line - A connector line from dot to dot.\n * @csspart completed-line - A completed connector line.\n *\n * @fires kemet-tracker-step-mounted - Fired when the tracker step is mounted to the DOM\n * @detail {HTMLElement} element - The tracker step element\n *\n */\n\n@customElement('kemet-tracker-step')\nexport default class KemetTrackerStep extends LitElement {\n static styles = [styles];\n\n @property({ type: Number})\n step!: number;\n\n @property({ type: Boolean, reflect: true })\n completed!: boolean;\n\n @property({ type: Boolean, reflect: true })\n current!: boolean;\n\n @property({ type: Boolean, reflect: true })\n last!: boolean;\n\n @property({ type: String })\n breakpoint: string = '767px';\n\n @property({ type: Boolean, reflect: true })\n mobile!: boolean;\n\n @property({ type: Boolean, reflect: true, attribute: 'hide-dot-content' })\n hideDotContent!: boolean;\n\n @property({ type: Number })\n completedSize: number = 16;\n\n @property({ type: Number })\n total: number = 0;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n\n\n @state()\n tracker!: HTMLKemetTrackerElement;\n\n firstUpdated() {\n this.last = this.step === this.total;\n\n this.isMobile();\n\n window.addEventListener('resize', () => {\n this.isMobile();\n });\n\n emitEvent(this, 'kemet-tracker-step-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`\n ${this.makeLine()}\n ${this.makeCompletedLine()}\n <div class=\"dot\" part=\"dot\">${this.makeDotContent()}</div>\n ${this.makeSlotContent()}\n `;\n }\n\n makeLine() {\n if (!this.last) {\n return html`<div class=\"line\" part=\"line\"></div>`;\n }\n\n return null;\n }\n\n makeCompletedLine() {\n if (this.completed && !this.last) {\n return html`<div class=\"line completed\" part=\"completed-line\" @animationend=${() => this.handleCompletedLineEnd()}></div>`;\n }\n\n return null;\n }\n\n makeDotContent() {\n if (this.completed && !this.mobile && !this.hideDotContent) {\n return html`\n <kemet-icon name=\"check2\" size=${this.completedSize}></kemet-icon>\n `;\n }\n\n if (!this.mobile && !this.hideDotContent) {\n return html`\n <span>${this.step}/${this.total}</span>\n `;\n }\n\n return null;\n }\n\n makeSlotContent() {\n if (!this.mobile) {\n return html`<slot></slot>`;\n }\n\n return null;\n }\n\n handleCompletedLineEnd() {\n const currentDot = this.current ? this.shadowRoot?.querySelector('.dot') : null;\n\n if (currentDot) {\n currentDot.classList.add('animate');\n }\n }\n\n isMobile() {\n const mediaQuery = window.matchMedia(`(max-width: ${this.breakpoint})`);\n this.mobile = mediaQuery.matches;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tracker-step': KemetTrackerStep\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-tracker-step-dot-size: 50px;\n --kemet-tracker-step-dot-size-mobile: 25px;\n --kemet-tracker-step-dot-gap: 4px;\n --kemet-tracker-step-dot-transition: all 300ms ease-in-out;\n --kemet-tracker-step-dot-font-size: 90%;\n --kemet-tracker-step-dot-color: var(--kemet-color-font-active);\n --kemet-tracker-step-dot-background-color: var(--kemet-color-background-base);\n --kemet-tracker-step-dot-border: 1px solid var(--kemet-color-font-active);\n --kemet-tracker-step-dot-fill-color: transparent;\n --kemet-tracker-step-standard-line-weight: 1px;\n --kemet-tracker-step-completed-line-weight: 3px;\n --kemet-tracker-step-completed-color: var(--kemet-color-background-base);\n --kemet-tracker-step-completed-fill-color: var(--kemet-color-background-success);\n --kemet-tracker-step-current-color: var(--kemet-color-font-inverse-base);\n --kemet-tracker-step-current-fill-color: var(--kemet-color-font-active);\n --kemet-tracker-step-line-color: var(--kemet-color-font-active);\n --kemet-tracker-step-completed-line-color: var(--kemet-color-font-active);\n\n position: relative;\n width: 100%;\n text-align: center;\n }\n\n .dot {\n font-size: var(--kemet-tracker-step-dot-font-size);\n color: var(--kemet-tracker-step-dot-color);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n position: relative;\n z-index: 1;\n width: var(--kemet-tracker-step-dot-size);\n height: var(--kemet-tracker-step-dot-size);\n border-radius: 100%;\n transition: var(--kemet-tracker-step-dot-transition);\n background-color: var(--kemet-tracker-step-dot-background-color);\n }\n\n .dot::after {\n content: \"\";\n width: unset;\n height: unset;\n position: absolute;\n top: var(--kemet-tracker-step-dot-gap);\n left: var(--kemet-tracker-step-dot-gap);\n right: var(--kemet-tracker-step-dot-gap);\n bottom: var(--kemet-tracker-step-dot-gap);\n z-index: -1;\n border-radius: 100%;\n transition: var(--kemet-tracker-step-dot-transition);\n border: var(--kemet-tracker-step-dot-border);\n background-color: var(--kemet-tracker-step-dot-fill-color);\n }\n\n :host([completed]) .dot {\n color: var(--kemet-tracker-step-completed-color);\n }\n\n :host([completed]) .dot::after {\n border: 0;\n background-color: var(--kemet-tracker-step-completed-fill-color);\n }\n\n :host([current]) .dot.animate {\n color: var(--kemet-tracker-step-current-color);\n }\n\n :host([current]) .dot.animate::after {\n border: 0;\n background-color: var(--kemet-tracker-step-current-fill-color);\n }\n\n :host([mobile]) .dot {\n width: var(--kemet-tracker-step-dot-size-mobile);\n height: var(--kemet-tracker-step-dot-size-mobile);\n }\n\n .line {\n display: block;\n position: absolute;\n left: 50%;\n right: 0;\n bottom: 0;\n width: 100%;\n\n /* standard */\n top: calc((var(--kemet-tracker-step-dot-size) - var(--kemet-tracker-step-standard-line-weight)) / 2);\n height: var(--kemet-tracker-step-standard-line-weight);\n background-color: var(--kemet-tracker-step-line-color);\n }\n\n .line.completed {\n width: 100%;\n transform: scaleX(0);\n transform-origin: left center;\n top: calc((var(--kemet-tracker-step-dot-size) - var(--kemet-tracker-step-completed-line-weight)) / 2);\n height: var(--kemet-tracker-step-completed-line-weight);\n background-color: var(--kemet-tracker-step-completed-line-color);\n animation-name: grow;\n animation-delay: 1s;\n animation-duration: 600ms;\n animation-fill-mode: forwards;\n }\n\n :host([mobile]) .line {\n top: calc((var(--kemet-tracker-step-dot-size-mobile) - var(--kemet-tracker-step-standard-line-weight)) / 2);\n }\n\n :host([mobile]) .line.completed {\n top: calc((var(--kemet-tracker-step-dot-size-mobile) - var(--kemet-tracker-step-completed-line-weight)) / 2);\n }\n\n @keyframes grow {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n`;\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/typewriter/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, PropertyValues } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport Typewriter from 'typewriter-effect/dist/core';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 4.1.0\n * @status stable\n *\n * @tagname kemet-typewriter\n * @summary An element that types out content.\n * @ssrsafe no - Depends on client-side effect library\n *\n * @prop {string} content - The content to be typed.\n * @prop {number} delay - The delay between each character.\n * @prop {string} cursor - The cursor to be displayed.\n * @prop {boolean} loop - Whether to loop the content.\n * @prop {number} restartDelay - The delay before restarting the typewriter.\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @event kemet-typewriter-completed - Fires when typewriter is completed\n *\n * @fires kemet-typewriter-mounted - Fired when the typewriter is mounted to the DOM\n * @detail {HTMLElement} element - The typewriter element\n *\n */\n\n@customElement('kemet-typewriter')\nexport default class KemetTypewriter extends LitElement {\n @property({ type: String })\n content: string = '';\n\n @property({ type: Number })\n delay: number = 10;\n\n @property({ type: String })\n cursor: string = '';\n\n @property({ type: Boolean })\n loop: boolean = false;\n\n @property({ type: Number, attribute: 'restart-delay' })\n restartDelay: number = 1000;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n private typewriter!: Typewriter;\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n createRenderRoot() {\n return this;\n }\n\n firstUpdated() {\n const target = this.querySelector('kemet-typewriter-target') as HTMLElement;\n\n this.typewriter = new Typewriter(target, {\n cursor: this.cursor,\n loop: this.loop,\n delay: this.delay,\n });\n\n this.restartTypewriter();\n\n emitEvent(this, 'kemet-typewriter-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (\n changedProperties.has('content') ||\n changedProperties.has('delay') ||\n changedProperties.has('cursor') ||\n changedProperties.has('loop')\n ) {\n const target = this.querySelector('kemet-typewriter-target') as HTMLElement;\n\n if (this.typewriter) {\n this.typewriter.stop();\n }\n\n this.typewriter = new Typewriter(target, {\n cursor: this.cursor,\n loop: this.loop,\n delay: this.delay,\n });\n\n this.restartTypewriter();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n\n if (this.typewriter) {\n this.typewriter.stop();\n }\n }\n\n render() {\n return html`\n <kemet-typewriter-target></kemet-typewriter-target>\n `;\n }\n\n restartTypewriter() {\n if (!this.typewriter) return;\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n\n this.timeoutId = setTimeout(() => {\n this.typewriter\n .deleteAll(1)\n .typeString(this.content)\n .callFunction(() => {\n emitEvent(this, 'kemet-typewriter-completed', { element: this });\n })\n .start();\n }, this.restartDelay);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-typewriter': KemetTypewriter;\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/typewriter/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, PropertyValues } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport Typewriter from 'typewriter-effect/dist/core';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 4.1.0\n * @status stable\n *\n * @tagname kemet-typewriter\n * @summary An element that types out content.\n * @ssrsafe no - Depends on client-side effect library\n *\n * @prop {string} content - The content to be typed.\n * @prop {number} delay - The delay between each character.\n * @prop {string} cursor - The cursor to be displayed.\n * @prop {boolean} loop - Whether to loop the content.\n * @prop {number} restartDelay - The delay before restarting the typewriter.\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @event kemet-typewriter-completed - Fires when typewriter is completed\n *\n * @fires kemet-typewriter-mounted - Fired when the typewriter is mounted to the DOM\n * @detail {HTMLElement} element - The typewriter element\n *\n */\n\n@customElement('kemet-typewriter')\nexport default class KemetTypewriter extends LitElement {\n @property({ type: String })\n content: string = '';\n\n @property({ type: Number })\n delay: number = 10;\n\n @property({ type: String })\n cursor: string = '';\n\n @property({ type: Boolean })\n loop: boolean = false;\n\n @property({ type: Number, attribute: 'restart-delay' })\n restartDelay: number = 1000;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n private typewriter!: Typewriter;\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n createRenderRoot() {\n return this;\n }\n\n firstUpdated() {\n const target = this.querySelector('kemet-typewriter-target') as HTMLElement;\n\n this.typewriter = new Typewriter(target, {\n cursor: this.cursor,\n loop: this.loop,\n delay: this.delay,\n });\n\n this.restartTypewriter();\n\n emitEvent(this, 'kemet-typewriter-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (\n changedProperties.has('content') ||\n changedProperties.has('delay') ||\n changedProperties.has('cursor') ||\n changedProperties.has('loop')\n ) {\n const target = this.querySelector('kemet-typewriter-target') as HTMLElement;\n\n if (this.typewriter) {\n this.typewriter.stop();\n }\n\n this.typewriter = new Typewriter(target, {\n cursor: this.cursor,\n loop: this.loop,\n delay: this.delay,\n });\n\n this.restartTypewriter();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n\n if (this.typewriter) {\n this.typewriter.stop();\n }\n }\n\n render() {\n return html`\n <kemet-typewriter-target></kemet-typewriter-target>\n `;\n }\n\n restartTypewriter() {\n if (!this.typewriter) return;\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n\n this.timeoutId = setTimeout(() => {\n this.typewriter\n .deleteAll(1)\n .typeString(this.content)\n .callFunction(() => {\n emitEvent(this, 'kemet-typewriter-completed', { element: this });\n })\n .start();\n }, this.restartDelay);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-typewriter': KemetTypewriter;\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":"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","names":[]}
@@ -9,7 +9,7 @@ import KemetAvatars$1 from '../elements/avatars/index.js';
9
9
  import KemetBadge$1 from '../elements/badge/index.js';
10
10
  import KemetCard$1 from '../elements/card/index.js';
11
11
  import KemetCheckbox$1 from '../elements/checkbox/index.js';
12
- import { K as KemetCombo$1, I as InterfaceKemetSelectionEvent, a as KemetCount$1, b as InterfaceInputDetails, H as HTMLKemetFieldElement, c as HTMLKemetInputElement } from '../constants-C4-3KYlX.js';
12
+ import { K as KemetCombo$1, I as InterfaceKemetSelectionEvent, a as KemetCount$1, b as InterfaceInputDetails, H as HTMLKemetFieldElement, c as HTMLKemetInputElement } from '../constants-BsAfWV-a.js';
13
13
  import KemetDrawer$1 from '../elements/drawer/index.js';
14
14
  import KemetFAB from '../elements/fab/index.js';
15
15
  import KemetFlipcard$1 from '../elements/flipcard/index.js';
@@ -1742,10 +1742,8 @@ var FormSubmitController = class {
1742
1742
  this.handleFormSubmit = this.handleFormSubmit.bind(this);
1743
1743
  }
1744
1744
  hostConnected() {
1745
- console.log("what?!");
1746
1745
  this.form = this.options.form(this.host);
1747
1746
  if (this.form) {
1748
- console.log("Adding form listeners");
1749
1747
  this.form.addEventListener("formdata", this.handleFormData);
1750
1748
  this.form.addEventListener("submit", this.handleFormSubmit);
1751
1749
  }
@@ -1766,7 +1764,6 @@ var FormSubmitController = class {
1766
1764
  }
1767
1765
  }
1768
1766
  handleFormSubmit(event) {
1769
- console.log("~~Form submitted~~");
1770
1767
  event.preventDefault();
1771
1768
  event.stopImmediatePropagation();
1772
1769
  const disabled = this.options.disabled(this.host);
@@ -1777,14 +1774,13 @@ var FormSubmitController = class {
1777
1774
  if (component.checkValidity) {
1778
1775
  component.checkValidity();
1779
1776
  if (!component.checkValidity()) {
1777
+ console.log("invalid", component);
1780
1778
  component.appearance = "error" /* Error */;
1781
1779
  component.invalid = true;
1782
1780
  component.dispatchEvent(
1783
1781
  new CustomEvent("kemet-input-status", {
1784
- bubbles: true,
1785
- composed: true,
1786
1782
  detail: {
1787
- status: "error" /* Error */,
1783
+ appearance: "error" /* Error */,
1788
1784
  validity: component.validity ? component.validity : {},
1789
1785
  element: component
1790
1786
  }
@@ -3042,6 +3038,7 @@ import { css as css16 } from "lit";
3042
3038
  var styles_css_default13 = css16`:host {
3043
3039
  /* private */
3044
3040
  --_kemet-field-message-color: inherit;
3041
+ --_kemet-field-message-display: none;
3045
3042
 
3046
3043
  display: block;
3047
3044
  }
@@ -3063,27 +3060,35 @@ label span {
3063
3060
  margin-bottom: 0.8rem;
3064
3061
  }
3065
3062
 
3066
- .message {
3063
+ [part=message] {
3064
+ display: var(--_kemet-field-message-display);
3067
3065
  color: var(--_kemet-field-message-color);
3068
3066
  font-size: 0.9rem;
3069
3067
  line-height: 1;
3070
- display: block;
3071
3068
  margin-top: 0.8rem;
3072
3069
  }
3073
3070
 
3074
- :host([appearance=error]) .message {
3071
+ :host([appearance]) {
3072
+ --_kemet-field-message-display: block;
3073
+ }
3074
+
3075
+ :host([appearance=neutral]) {
3076
+ --_kemet-field-message-display: none;
3077
+ }
3078
+
3079
+ :host([appearance=error]) {
3075
3080
  --_kemet-field-message-color: var(--kemet-color-font-error);
3076
3081
  }
3077
3082
 
3078
- :host([appearance=success]) .message {
3083
+ :host([appearance=success]) {
3079
3084
  --_kemet-field-message-color: var(--kemet-color-font-success);
3080
3085
  }
3081
3086
 
3082
- :host([appearance=warning]) .message {
3087
+ :host([appearance=warning]) {
3083
3088
  --_kemet-field-message-color: var(--kemet-color-font-warning);
3084
3089
  }
3085
3090
 
3086
- :host([appearance=link]) .message {
3091
+ :host([appearance=link]) {
3087
3092
  --_kemet-field-message-color: var(--kemet-color-font-link);
3088
3093
  }
3089
3094
  `;
@@ -3092,7 +3097,6 @@ label span {
3092
3097
  var HTMLKemetFieldElement = class extends LitElement14 {
3093
3098
  constructor() {
3094
3099
  super(...arguments);
3095
- this.appearance = "neutral" /* Neutral */;
3096
3100
  this.errorIcon = "exclamation-triangle-fill";
3097
3101
  this.successIcon = "check-lg";
3098
3102
  this.dom = "initializing";
@@ -3100,6 +3104,10 @@ var HTMLKemetFieldElement = class extends LitElement14 {
3100
3104
  firstUpdated() {
3101
3105
  this.slotInput = this.querySelector('[slot="input"]');
3102
3106
  this.slotCombo = this.querySelector('[slot="combo"]');
3107
+ this.slotInput?.addEventListener("kemet-input-appearance-change", (event) => this.handleAppearance(event));
3108
+ this.slotInput?.addEventListener("kemet-select-appearance-change", (event) => this.handleAppearance(event));
3109
+ this.slotInput?.addEventListener("kemet-textarea-appearance-change", (event) => this.handleAppearance(event));
3110
+ this.slotCombo?.addEventListener("kemet-select-appearance-change", (event) => this.handleAppearance(event));
3103
3111
  this.slotCombo?.addEventListener("kemet-input-combo-selection", (event) => this.handleSelection(event));
3104
3112
  if (this.slotInput.value) {
3105
3113
  this.length = this.slotInput.value.length;
@@ -3116,21 +3124,16 @@ var HTMLKemetFieldElement = class extends LitElement14 {
3116
3124
  this.dom = "mounted";
3117
3125
  }
3118
3126
  render() {
3127
+ this.appearance = this.appearance ?? "neutral" /* Neutral */;
3119
3128
  return html14`
3120
3129
  <label for="${this.slug}" id="${this.slug}-label" part="label">
3121
3130
  <span part="text">${this.label}</span>
3122
3131
  <slot name="input"></slot>
3123
3132
  </label>
3124
- ${this.makeStatusMessage()}
3133
+ ${this.appearance === "neutral" /* Neutral */ ? null : html14`<span part="message">${this.message}</span>`}
3125
3134
  <slot name="component"></slot>
3126
3135
  `;
3127
3136
  }
3128
- makeStatusMessage() {
3129
- if (this.appearance !== "neutral") {
3130
- return html14`<span class="message" part="message">${this.message}</span>`;
3131
- }
3132
- return null;
3133
- }
3134
3137
  handleFocused(event) {
3135
3138
  this.focused = event.detail;
3136
3139
  if (!this.focused && this.slotCombo && this.slotCombo.options.length < 1) {
@@ -3138,7 +3141,9 @@ var HTMLKemetFieldElement = class extends LitElement14 {
3138
3141
  }
3139
3142
  }
3140
3143
  handleAppearance(event) {
3141
- this.appearance = event.detail.appearance;
3144
+ const detail = event.detail;
3145
+ const appearance = !!detail.appearance ? detail.appearance : "neutral";
3146
+ this.appearance = appearance;
3142
3147
  }
3143
3148
  handleInput(event) {
3144
3149
  this.length = event.detail.value.length ?? 0;
@@ -3860,6 +3865,14 @@ var HTMLKemetInputElement = class extends LitElement18 {
3860
3865
  this.dom = "initializing";
3861
3866
  this.formSubmitController = new FormSubmitController(this);
3862
3867
  }
3868
+ updated(changedProperties) {
3869
+ if (changedProperties.has("appearance")) {
3870
+ emitEvent(this, "kemet-input-appearance-change", {
3871
+ appearance: this.appearance,
3872
+ element: this
3873
+ });
3874
+ }
3875
+ }
3863
3876
  firstUpdated() {
3864
3877
  this.input = this.shadowRoot?.querySelector("input");
3865
3878
  this.field = this.closest("kemet-field");
@@ -3985,6 +3998,7 @@ var HTMLKemetInputElement = class extends LitElement18 {
3985
3998
  */
3986
3999
  handleInput(event) {
3987
4000
  this.value = this.input.value;
4001
+ this.appearance = "neutral" /* Neutral */;
3988
4002
  emitEvent(this, "kemet-input-input", {
3989
4003
  appearance: this.appearance,
3990
4004
  validity: this.input.validity,
@@ -4002,7 +4016,7 @@ var HTMLKemetInputElement = class extends LitElement18 {
4002
4016
  this.invalid = true;
4003
4017
  this.appearance = "error" /* Error */;
4004
4018
  emitEvent(this, "kemet-input-appearance-change", {
4005
- status: "error" /* Error */,
4019
+ appearance: "error" /* Error */,
4006
4020
  validity: this.input?.validity,
4007
4021
  element: this,
4008
4022
  value: event.target.value
@@ -4010,7 +4024,7 @@ var HTMLKemetInputElement = class extends LitElement18 {
4010
4024
  }
4011
4025
  }
4012
4026
  handleStatus(event) {
4013
- this.appearance = event.detail.status;
4027
+ this.appearance = event.detail.appearance;
4014
4028
  }
4015
4029
  /**
4016
4030
  * Toggles password visibility
@@ -6000,6 +6014,14 @@ var KemetSelect = class extends LitElement26 {
6000
6014
  this.hasFocus = false;
6001
6015
  this.formSubmitController = new FormSubmitController(this);
6002
6016
  }
6017
+ updated(changedProperties) {
6018
+ if (changedProperties.has("appearance")) {
6019
+ emitEvent(this, "kemet-select-appearance-change", {
6020
+ appearance: this.appearance,
6021
+ element: this
6022
+ });
6023
+ }
6024
+ }
6003
6025
  firstUpdated() {
6004
6026
  this.control = this.closest("kemet-field");
6005
6027
  this.select = this.shadowRoot?.querySelector("select");
@@ -6099,6 +6121,7 @@ var KemetSelect = class extends LitElement26 {
6099
6121
  */
6100
6122
  handleChange(event) {
6101
6123
  this.value = this.select.value;
6124
+ this.appearance = "neutral" /* Neutral */;
6102
6125
  emitEvent(this, "kemet-select-change", {
6103
6126
  appearance: this.appearance,
6104
6127
  validity: this.select.validity,