kemet-ui 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +1 -1
  2. package/custom-elements.json +3355 -3272
  3. package/dist/{constants-W9QKPlZP.d.ts → constants-CHvA2ed5.d.ts} +13 -0
  4. package/dist/elements/accordion/index.d.ts +1 -0
  5. package/dist/elements/accordion/index.js +5 -1
  6. package/dist/elements/accordion/index.js.map +1 -1
  7. package/dist/elements/accordion-panel/index.d.ts +1 -0
  8. package/dist/elements/accordion-panel/index.js +5 -1
  9. package/dist/elements/accordion-panel/index.js.map +1 -1
  10. package/dist/elements/alert/index.d.ts +2 -1
  11. package/dist/elements/alert/index.js +5 -1
  12. package/dist/elements/alert/index.js.map +1 -1
  13. package/dist/elements/avatar/index.d.ts +2 -1
  14. package/dist/elements/avatar/index.js +5 -1
  15. package/dist/elements/avatar/index.js.map +1 -1
  16. package/dist/elements/avatars/index.d.ts +1 -0
  17. package/dist/elements/avatars/index.js +5 -1
  18. package/dist/elements/avatars/index.js.map +1 -1
  19. package/dist/elements/badge/index.d.ts +2 -1
  20. package/dist/elements/badge/index.js +5 -1
  21. package/dist/elements/badge/index.js.map +1 -1
  22. package/dist/elements/button/index.d.ts +2 -1
  23. package/dist/elements/button/index.js +5 -1
  24. package/dist/elements/button/index.js.map +1 -1
  25. package/dist/elements/card/index.d.ts +2 -1
  26. package/dist/elements/card/index.js +5 -1
  27. package/dist/elements/card/index.js.map +1 -1
  28. package/dist/elements/checkbox/index.d.ts +2 -1
  29. package/dist/elements/checkbox/index.js +7 -1
  30. package/dist/elements/checkbox/index.js.map +1 -1
  31. package/dist/elements/combo/index.d.ts +1 -1
  32. package/dist/elements/combo/index.js +5 -1
  33. package/dist/elements/combo/index.js.map +1 -1
  34. package/dist/elements/count/index.d.ts +1 -1
  35. package/dist/elements/count/index.js +28 -1
  36. package/dist/elements/count/index.js.map +1 -1
  37. package/dist/elements/dialog/index.d.ts +2 -1
  38. package/dist/elements/dialog/index.js +5 -1
  39. package/dist/elements/dialog/index.js.map +1 -1
  40. package/dist/elements/dialog-close/index.d.ts +1 -0
  41. package/dist/elements/dialog-close/index.js +5 -1
  42. package/dist/elements/dialog-close/index.js.map +1 -1
  43. package/dist/elements/drawer/effects.js +1 -1
  44. package/dist/elements/drawer/effects.js.map +1 -1
  45. package/dist/elements/drawer/index.d.ts +1 -0
  46. package/dist/elements/drawer/index.js +6 -2
  47. package/dist/elements/drawer/index.js.map +1 -1
  48. package/dist/elements/fab/index.d.ts +2 -1
  49. package/dist/elements/fab/index.js +5 -1
  50. package/dist/elements/fab/index.js.map +1 -1
  51. package/dist/elements/field/index.d.ts +1 -1
  52. package/dist/elements/field/index.js +5 -1
  53. package/dist/elements/field/index.js.map +1 -1
  54. package/dist/elements/flipcard/index.d.ts +2 -1
  55. package/dist/elements/flipcard/index.js +5 -1
  56. package/dist/elements/flipcard/index.js.map +1 -1
  57. package/dist/elements/flipcard-trigger/index.d.ts +1 -0
  58. package/dist/elements/flipcard-trigger/index.js +5 -1
  59. package/dist/elements/flipcard-trigger/index.js.map +1 -1
  60. package/dist/elements/icon/index.d.ts +2 -1
  61. package/dist/elements/icon/index.js +8 -2
  62. package/dist/elements/icon/index.js.map +1 -1
  63. package/dist/elements/input/index.d.ts +1 -1
  64. package/dist/elements/input/index.js +9 -3
  65. package/dist/elements/input/index.js.map +1 -1
  66. package/dist/elements/input/styles.css.js +2 -2
  67. package/dist/elements/input/styles.css.js.map +1 -1
  68. package/dist/elements/input-combo/index.d.ts +2 -1
  69. package/dist/elements/input-combo/index.js +7 -1
  70. package/dist/elements/input-combo/index.js.map +1 -1
  71. package/dist/elements/input-file/index.d.ts +1 -1
  72. package/dist/elements/input-file/index.js +39 -249
  73. package/dist/elements/input-file/index.js.map +1 -1
  74. package/dist/elements/input-file/styles.css.js +8 -8
  75. package/dist/elements/input-file/styles.css.js.map +1 -1
  76. package/dist/elements/input-files/index.d.ts +1 -1
  77. package/dist/elements/input-files/index.js +29 -237
  78. package/dist/elements/input-files/index.js.map +1 -1
  79. package/dist/elements/input-files/styles.css.js +2 -2
  80. package/dist/elements/input-files/styles.css.js.map +1 -1
  81. package/dist/elements/input-otp/index.d.ts +1 -0
  82. package/dist/elements/input-otp/index.js +5 -1
  83. package/dist/elements/input-otp/index.js.map +1 -1
  84. package/dist/elements/loader/index.d.ts +1 -0
  85. package/dist/elements/loader/index.js +5 -1
  86. package/dist/elements/loader/index.js.map +1 -1
  87. package/dist/elements/password/index.d.ts +2 -2
  88. package/dist/elements/password/index.js +24 -234
  89. package/dist/elements/password/index.js.map +1 -1
  90. package/dist/elements/radio/index.d.ts +1 -0
  91. package/dist/elements/radio/index.js +7 -1
  92. package/dist/elements/radio/index.js.map +1 -1
  93. package/dist/elements/radios/index.d.ts +2 -1
  94. package/dist/elements/radios/index.js +5 -1
  95. package/dist/elements/radios/index.js.map +1 -1
  96. package/dist/elements/rotator/index.d.ts +1 -0
  97. package/dist/elements/rotator/index.js +7 -2
  98. package/dist/elements/rotator/index.js.map +1 -1
  99. package/dist/elements/select/index.d.ts +2 -1
  100. package/dist/elements/select/index.js +28 -25
  101. package/dist/elements/select/index.js.map +1 -1
  102. package/dist/elements/select-option/index.d.ts +1 -0
  103. package/dist/elements/select-option/index.js +7 -1
  104. package/dist/elements/select-option/index.js.map +1 -1
  105. package/dist/elements/sortable/index.d.ts +1 -0
  106. package/dist/elements/sortable/index.js +7 -1
  107. package/dist/elements/sortable/index.js.map +1 -1
  108. package/dist/elements/sortable-item/index.d.ts +1 -0
  109. package/dist/elements/sortable-item/index.js +5 -1
  110. package/dist/elements/sortable-item/index.js.map +1 -1
  111. package/dist/elements/tab/index.d.ts +1 -1
  112. package/dist/elements/tab/index.js +18 -228
  113. package/dist/elements/tab/index.js.map +1 -1
  114. package/dist/elements/tab-panel/index.d.ts +1 -0
  115. package/dist/elements/tab-panel/index.js +5 -1
  116. package/dist/elements/tab-panel/index.js.map +1 -1
  117. package/dist/elements/tabs/index.d.ts +3 -2
  118. package/dist/elements/tabs/index.js +44 -246
  119. package/dist/elements/tabs/index.js.map +1 -1
  120. package/dist/elements/textarea/index.d.ts +1 -1
  121. package/dist/elements/textarea/index.js +9 -3
  122. package/dist/elements/textarea/index.js.map +1 -1
  123. package/dist/elements/textarea/styles.css.js +2 -2
  124. package/dist/elements/textarea/styles.css.js.map +1 -1
  125. package/dist/elements/timer/index.d.ts +1 -0
  126. package/dist/elements/timer/index.js +11 -7
  127. package/dist/elements/timer/index.js.map +1 -1
  128. package/dist/elements/timer-display/index.d.ts +1 -1
  129. package/dist/elements/timer-display/index.js +19 -16
  130. package/dist/elements/timer-display/index.js.map +1 -1
  131. package/dist/elements/toggle/index.d.ts +1 -0
  132. package/dist/elements/toggle/index.js +5 -1
  133. package/dist/elements/toggle/index.js.map +1 -1
  134. package/dist/elements/tracker/index.d.ts +1 -2
  135. package/dist/elements/tracker/index.js +10 -19
  136. package/dist/elements/tracker/index.js.map +1 -1
  137. package/dist/elements/tracker-step/index.d.ts +1 -2
  138. package/dist/elements/tracker-step/index.js +46 -240
  139. package/dist/elements/tracker-step/index.js.map +1 -1
  140. package/dist/elements/typewriter/index.d.ts +1 -0
  141. package/dist/elements/typewriter/index.js +7 -1
  142. package/dist/elements/typewriter/index.js.map +1 -1
  143. package/dist/{index-h1DTXXCf.d.ts → index-n43o0UmE.d.ts} +13 -7
  144. package/dist/wrappers/react.d.ts +2 -2
  145. package/dist/wrappers/react.js +489 -491
  146. package/dist/wrappers/react.js.map +1 -1
  147. package/package.json +2 -3
@@ -11,7 +11,13 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
 
12
12
  // src/elements/rotator/index.ts
13
13
  import { html, LitElement } from "lit";
14
- import { customElement, property, state } from "lit/decorators.js";
14
+
15
+ // src/utilities/decorators.ts
16
+ import { property, state, query, queryAll } from "lit/decorators.js";
17
+ import { customElement as litCustomElement } from "lit/decorators.js";
18
+ var customElement = (tagName) => (classOrDescriptor) => typeof customElements !== "undefined" && !customElements.get(tagName) ? litCustomElement(tagName)(classOrDescriptor) : classOrDescriptor;
19
+
20
+ // src/elements/rotator/index.ts
15
21
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
16
22
 
17
23
  // src/utilities/events.ts
@@ -138,7 +144,6 @@ var KemetRotator = class extends LitElement {
138
144
  render() {
139
145
  const setWidth = this.effect === "flip" ? `width:${this.width};` : "";
140
146
  const setHeight = this.effect === "flip" ? `height:${this.height};` : "";
141
- console.log(this.height);
142
147
  return html`
143
148
  <span part="rotator" style="${setWidth} ${setHeight}">
144
149
  ${this.makeMessages()}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/rotator/index.ts","../../../src/utilities/events.ts","../../../src/elements/rotator/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nexport enum EnumEffects {\n Fade = 'fade',\n Flip = 'flip',\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-rotator\n * @summary A component that rotates through an array of text.\n *\n * @prop {number} activeSlide - The index number for the current slide.\n * @prop {array} messages - Text in the rotator. Supports HTML.\n * @prop {TypeEffects} effect - The transition effect type.\n * @prop {number} speed - How fast, in seconds, each slide lasts. Stop the rotator with 0.\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-rotator-transition-speed - How long, in css time units, the transition effect lasts.\n *\n * @fires kemet-rotator-mounted - Fired when the rotator is mounted to the DOM\n * @detail {HTMLElement} element - The rotator element\n *\n */\n\n@customElement('kemet-rotator')\nexport default class KemetRotator extends LitElement {\n static styles = [styles];\n\n @property({ type: Number, attribute: 'active-slide' })\n activeSlide: number = 0;\n\n @property({ type: Array })\n messages: string[] = [];\n\n @property({ type: String, reflect: true })\n effect: EnumEffects = EnumEffects.Fade;\n\n @property({ type: Number })\n speed: number = 3;\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 width: string = 'auto';\n\n @state()\n height: string = 'auto';\n\n @state()\n prevSlide!: number | null;\n\n firstUpdated() {\n // standard properties\n this.prevSlide = null;\n\n window.addEventListener('resize', this.setDimensions.bind(this));\n\n emitEvent(this, 'kemet-rotator-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(changed: Map<string, never>) {\n const widthHasChanged = !!changed.get('width');\n const heightHasChanged = !!changed.get('height');\n\n this.setDimensions();\n\n // only trigger slide updates when width and height has not changed\n if (!widthHasChanged && !heightHasChanged) {\n setTimeout(() => {\n if (this.speed > 0) {\n this.nextSlide();\n }\n }, this.speed * 1000);\n }\n }\n\n render() {\n const setWidth = this.effect === 'flip' ? `width:${this.width};` : '';\n const setHeight = this.effect === 'flip' ? `height:${this.height};` : '';\n\n console.log(this.height);\n\n return html`\n <span part=\"rotator\" style=\"${setWidth} ${setHeight}\">\n ${this.makeMessages()}\n </span>\n `;\n }\n\n makeMessages() {\n return this.messages.map((message, index) => {\n const setActiveClass = this.activeSlide === index ? 'active' : '';\n const setPrevClass = this.prevSlide === index ? 'previous' : '';\n\n return html`\n <span part=\"slide\" class=\"${setActiveClass} ${setPrevClass}\">\n ${unsafeHTML(message)}\n </span>\n `;\n });\n }\n\n setDimensions() {\n if (this.effect === 'flip') {\n this.width = `${this.offsetWidth}px`;\n\n const slides = this.shadowRoot?.querySelectorAll('[part=\"slide\"]');\n let tallest = 0;\n\n slides?.forEach((slide: Element) => {\n if ((slide as HTMLElement).offsetHeight > tallest) {\n tallest = (slide as HTMLElement).offsetHeight;\n }\n });\n\n this.height = `${tallest}px`;\n }\n }\n\n /**\n * Rotates to the next slide.\n * @public\n * @method nextSlide\n * @returns {void}\n */\n nextSlide() {\n if (this.activeSlide < this.messages.length - 1) {\n this.activeSlide += 1;\n this.prevSlide = this.activeSlide - 1;\n } else {\n this.activeSlide = 0;\n this.prevSlide = this.messages.length - 1;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-rotator': KemetRotator\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-rotator-transition-speed: 500ms;\n\n display: flex;\n}\n\n[part=slide] {\n pointer-events: none;\n}\n\n.rotator__slide--active {\n pointer-events: auto;\n}\n\n/* fade effect */\n:host([effect=fade]) [part=rotator] {\n display: inline-flex;\n flex-wrap: nowrap;\n flex-direction: row;\n}\n\n:host([effect=fade]) [part=slide] {\n width: 100%;\n flex: none;\n opacity: 0;\n box-sizing: border-box;\n transition: all var(--kemet-rotator-transition-speed) ease;\n}\n\n:host([effect=fade]) [part=slide]:not(:first-child) {\n margin-left: -100%; /* this is the bulk of the overlay trick */\n}\n\n:host([effect=fade]) .active {\n opacity: 1;\n}\n\n/* flip effect */\n:host([effect=flip]) [part=rotator] {\n display: flex;\n position: relative;\n perspective: 500px;\n}\n\n:host([effect=flip]) [part=slide] {\n display: block;\n width: auto;\n position: absolute;\n top: -20px;\n left: 0;\n\n opacity: 0;\n\n transform: rotateX(90deg);\n transform-origin: 0% 0%;\n transition: all var(--kemet-rotator-transition-speed) ease;\n}\n\n:host([effect=flip]) .active {\n top: 0;\n opacity: 1;\n\n transform: rotateX(0deg);\n}\n\n:host([effect=flip]) .previous {\n top: 40px;;\n transform: rotateX(-90deg);\n}\n`;\n"],"mappings":"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","names":["EnumEffects"]}
1
+ {"version":3,"sources":["../../../src/elements/rotator/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/rotator/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nexport enum EnumEffects {\n Fade = 'fade',\n Flip = 'flip',\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-rotator\n * @summary A component that rotates through an array of text.\n * @ssrsafe yes\n *\n * @prop {number} activeSlide - The index number for the current slide.\n * @prop {array} messages - Text in the rotator. Supports HTML.\n * @prop {TypeEffects} effect - The transition effect type.\n * @prop {number} speed - How fast, in seconds, each slide lasts. Stop the rotator with 0.\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-rotator-transition-speed - How long, in css time units, the transition effect lasts.\n *\n * @fires kemet-rotator-mounted - Fired when the rotator is mounted to the DOM\n * @detail {HTMLElement} element - The rotator element\n *\n */\n\n@customElement('kemet-rotator')\nexport default class KemetRotator extends LitElement {\n static styles = [styles];\n\n @property({ type: Number, attribute: 'active-slide' })\n activeSlide: number = 0;\n\n @property({ type: Array })\n messages: string[] = [];\n\n @property({ type: String, reflect: true })\n effect: EnumEffects = EnumEffects.Fade;\n\n @property({ type: Number })\n speed: number = 3;\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 width: string = 'auto';\n\n @state()\n height: string = 'auto';\n\n @state()\n prevSlide!: number | null;\n\n firstUpdated() {\n // standard properties\n this.prevSlide = null;\n\n window.addEventListener('resize', this.setDimensions.bind(this));\n\n emitEvent(this, 'kemet-rotator-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(changed: Map<string, never>) {\n const widthHasChanged = !!changed.get('width');\n const heightHasChanged = !!changed.get('height');\n\n this.setDimensions();\n\n // only trigger slide updates when width and height has not changed\n if (!widthHasChanged && !heightHasChanged) {\n setTimeout(() => {\n if (this.speed > 0) {\n this.nextSlide();\n }\n }, this.speed * 1000);\n }\n }\n\n render() {\n const setWidth = this.effect === 'flip' ? `width:${this.width};` : '';\n const setHeight = this.effect === 'flip' ? `height:${this.height};` : '';\n\n return html`\n <span part=\"rotator\" style=\"${setWidth} ${setHeight}\">\n ${this.makeMessages()}\n </span>\n `;\n }\n\n makeMessages() {\n return this.messages.map((message, index) => {\n const setActiveClass = this.activeSlide === index ? 'active' : '';\n const setPrevClass = this.prevSlide === index ? 'previous' : '';\n\n return html`\n <span part=\"slide\" class=\"${setActiveClass} ${setPrevClass}\">\n ${unsafeHTML(message)}\n </span>\n `;\n });\n }\n\n setDimensions() {\n if (this.effect === 'flip') {\n this.width = `${this.offsetWidth}px`;\n\n const slides = this.shadowRoot?.querySelectorAll('[part=\"slide\"]');\n let tallest = 0;\n\n slides?.forEach((slide: Element) => {\n if ((slide as HTMLElement).offsetHeight > tallest) {\n tallest = (slide as HTMLElement).offsetHeight;\n }\n });\n\n this.height = `${tallest}px`;\n }\n }\n\n /**\n * Rotates to the next slide.\n * @public\n * @method nextSlide\n * @returns {void}\n */\n nextSlide() {\n if (this.activeSlide < this.messages.length - 1) {\n this.activeSlide += 1;\n this.prevSlide = this.activeSlide - 1;\n } else {\n this.activeSlide = 0;\n this.prevSlide = this.messages.length - 1;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-rotator': KemetRotator\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-rotator-transition-speed: 500ms;\n\n display: flex;\n}\n\n[part=slide] {\n pointer-events: none;\n}\n\n.rotator__slide--active {\n pointer-events: auto;\n}\n\n/* fade effect */\n:host([effect=fade]) [part=rotator] {\n display: inline-flex;\n flex-wrap: nowrap;\n flex-direction: row;\n}\n\n:host([effect=fade]) [part=slide] {\n width: 100%;\n flex: none;\n opacity: 0;\n box-sizing: border-box;\n transition: all var(--kemet-rotator-transition-speed) ease;\n}\n\n:host([effect=fade]) [part=slide]:not(:first-child) {\n margin-left: -100%; /* this is the bulk of the overlay trick */\n}\n\n:host([effect=fade]) .active {\n opacity: 1;\n}\n\n/* flip effect */\n:host([effect=flip]) [part=rotator] {\n display: flex;\n position: relative;\n perspective: 500px;\n}\n\n:host([effect=flip]) [part=slide] {\n display: block;\n width: auto;\n position: absolute;\n top: -20px;\n left: 0;\n\n opacity: 0;\n\n transform: rotateX(90deg);\n transform-origin: 0% 0%;\n transition: all var(--kemet-rotator-transition-speed) ease;\n}\n\n:host([effect=flip]) .active {\n top: 0;\n opacity: 1;\n\n transform: rotateX(0deg);\n}\n\n:host([effect=flip]) .previous {\n top: 40px;;\n transform: rotateX(-90deg);\n}\n`;\n"],"mappings":"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","names":["EnumEffects"]}
@@ -1,7 +1,7 @@
1
1
  import * as lit from 'lit';
2
2
  import { LitElement, TemplateResult } from 'lit';
3
3
  import { F as FormSubmitController } from '../../form-controller-3q581XcZ.js';
4
- import { e as EnumRoundedSizes, H as HTMLKemetFieldElement } from '../../constants-W9QKPlZP.js';
4
+ import { e as EnumRoundedSizes, H as HTMLKemetFieldElement } from '../../constants-CHvA2ed5.js';
5
5
  import KemetSelectOption from '../select-option/index.js';
6
6
  import '../icon/index.js';
7
7
  import 'lit-html';
@@ -18,6 +18,7 @@ interface IOptions {
18
18
  *
19
19
  * @tagname kemet-select
20
20
  * @summary An enhanced select element.
21
+ * @ssrsafe no - This element queriesAll for child elements which is not supported in SSR.
21
22
  *
22
23
  * @prop {string} slug - A string the uniquely identifies the select
23
24
  * @prop {string} name - The name of the select
@@ -11,7 +11,11 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
 
12
12
  // src/elements/select/index.ts
13
13
  import { html as html2, LitElement as LitElement2 } from "lit";
14
- import { customElement as customElement2, property as property2, state as state2 } from "lit/decorators.js";
14
+
15
+ // src/utilities/decorators.ts
16
+ import { property, state, query, queryAll } from "lit/decorators.js";
17
+ import { customElement as litCustomElement } from "lit/decorators.js";
18
+ var customElement = (tagName) => (classOrDescriptor) => typeof customElements !== "undefined" && !customElements.get(tagName) ? litCustomElement(tagName)(classOrDescriptor) : classOrDescriptor;
15
19
 
16
20
  // src/utilities/form-controller.ts
17
21
  var FormSubmitController = class {
@@ -120,7 +124,6 @@ var emitEvent = (element, name, detail, bubbles = true, composed = true) => {
120
124
 
121
125
  // src/elements/icon/index.ts
122
126
  import { html, LitElement } from "lit";
123
- import { customElement, property, state } from "lit/decorators.js";
124
127
  import { isTemplateResult } from "lit/directive-helpers.js";
125
128
 
126
129
  // src/elements/icon/styles.css.ts
@@ -222,7 +225,7 @@ var KemetIcon = class extends LitElement {
222
225
  }
223
226
  if (isTemplateResult(svg)) {
224
227
  this.svg = svg;
225
- } else if (svg instanceof SVGSVGElement) {
228
+ } else if (typeof SVGSVGElement !== "undefined" && svg instanceof SVGSVGElement) {
226
229
  this.svg = svg.cloneNode(true);
227
230
  }
228
231
  }
@@ -481,9 +484,9 @@ var KemetSelect = class extends LitElement2 {
481
484
  this.invalid = false;
482
485
  this.hasFocus = false;
483
486
  this.formSubmitController = new FormSubmitController(this);
484
- this.control = this.closest("kemet-field");
485
487
  }
486
488
  firstUpdated() {
489
+ this.control = this.closest("kemet-field");
487
490
  this.select = this.shadowRoot?.querySelector("select");
488
491
  this.selectedOption = this.querySelector("[selected]");
489
492
  this.value = this.selectedOption ? this.selectedOption.value : "";
@@ -621,67 +624,67 @@ var KemetSelect = class extends LitElement2 {
621
624
  };
622
625
  KemetSelect.styles = [styles_css_default2];
623
626
  __decorateClass([
624
- property2({ type: String })
627
+ property({ type: String })
625
628
  ], KemetSelect.prototype, "slug", 2);
626
629
  __decorateClass([
627
- property2({ type: String })
630
+ property({ type: String })
628
631
  ], KemetSelect.prototype, "name", 2);
629
632
  __decorateClass([
630
- property2({ type: String })
633
+ property({ type: String })
631
634
  ], KemetSelect.prototype, "value", 2);
632
635
  __decorateClass([
633
- property2({ type: Array })
636
+ property({ type: Array })
634
637
  ], KemetSelect.prototype, "options", 2);
635
638
  __decorateClass([
636
- property2({ type: String, reflect: true })
639
+ property({ type: String, reflect: true })
637
640
  ], KemetSelect.prototype, "appearance", 2);
638
641
  __decorateClass([
639
- property2({ type: Boolean, reflect: true })
642
+ property({ type: Boolean, reflect: true })
640
643
  ], KemetSelect.prototype, "required", 2);
641
644
  __decorateClass([
642
- property2({ type: Boolean, reflect: true })
645
+ property({ type: Boolean, reflect: true })
643
646
  ], KemetSelect.prototype, "disabled", 2);
644
647
  __decorateClass([
645
- property2({ type: Boolean })
648
+ property({ type: Boolean })
646
649
  ], KemetSelect.prototype, "multiple", 2);
647
650
  __decorateClass([
648
- property2({ type: String })
651
+ property({ type: String })
649
652
  ], KemetSelect.prototype, "icon", 2);
650
653
  __decorateClass([
651
- property2({ type: Number, attribute: "icon-size" })
654
+ property({ type: Number, attribute: "icon-size" })
652
655
  ], KemetSelect.prototype, "iconSize", 2);
653
656
  __decorateClass([
654
- property2({ type: Boolean, reflect: true })
657
+ property({ type: Boolean, reflect: true })
655
658
  ], KemetSelect.prototype, "filled", 2);
656
659
  __decorateClass([
657
- property2({ reflect: true })
660
+ property({ reflect: true })
658
661
  ], KemetSelect.prototype, "rounded", 2);
659
662
  __decorateClass([
660
- property2({ type: String, reflect: true })
663
+ property({ type: String, reflect: true })
661
664
  ], KemetSelect.prototype, "polarity", 2);
662
665
  __decorateClass([
663
- property2({ type: String, reflect: true })
666
+ property({ type: String, reflect: true })
664
667
  ], KemetSelect.prototype, "dom", 2);
665
668
  __decorateClass([
666
- state2()
669
+ state()
667
670
  ], KemetSelect.prototype, "invalid", 2);
668
671
  __decorateClass([
669
- state2()
672
+ state()
670
673
  ], KemetSelect.prototype, "control", 2);
671
674
  __decorateClass([
672
- state2()
675
+ state()
673
676
  ], KemetSelect.prototype, "select", 2);
674
677
  __decorateClass([
675
- state2()
678
+ state()
676
679
  ], KemetSelect.prototype, "selectedOption", 2);
677
680
  __decorateClass([
678
- state2()
681
+ state()
679
682
  ], KemetSelect.prototype, "optionElements", 2);
680
683
  __decorateClass([
681
- state2()
684
+ state()
682
685
  ], KemetSelect.prototype, "hasFocus", 2);
683
686
  KemetSelect = __decorateClass([
684
- customElement2("kemet-select")
687
+ customElement("kemet-select")
685
688
  ], KemetSelect);
686
689
  export {
687
690
  KemetSelect as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/select/index.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/icon/index.ts","../../../src/elements/icon/styles.css.ts","../../../src/elements/select/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormSubmitController } from '../../utilities/form-controller';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumAppearances, EnumRoundedSizes } from '../../utilities/constants';\nimport HTMLKemetFieldElement from '../field';\nimport type HTMLKemetOptionElement from '../select-option';\nimport '../icon';\nimport styles from './styles.css.ts';\n\ninterface IOptions {\n label: string;\n value: string;\n disabled: boolean;\n selected: boolean;\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-select\n * @summary An enhanced select element.\n *\n * @prop {string} slug - A string the uniquely identifies the select\n * @prop {string} name - The name of the select\n * @prop {string} value - The value of the select\n * @prop {array} options - The options the select contains\n * @prop {EnumAppearances} appearance - The status of the select\n * @prop {boolean} required - Determines whether the field is required\n * @prop {boolean} disabled - Determines whether the field is disabled\n * @prop {boolean} multiple - Support of multiple choice selections\n * @prop {string} icon - The dropdown icon\n * @prop {number} iconSize - The dropdown icon size\n * @prop {boolean} filled - Displays a filled select\n * @prop {EnumRoundedSizes} rounded - Displays rounded corners\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 select\n * @csspart option\n *\n * @cssproperty --kemet-select-padding - The padding on the textarea.\n * @cssproperty --kemet-select-border - The border of the textarea.\n * @cssproperty --kemet-select-border-color-error - The border of the error state.\n * @cssproperty --kemet-select-border-color-success - The border of the success state.\n * @cssproperty --kemet-select-border-color-warning - The border of the warning state.\n * @cssproperty --kemet-select-border-radius-rounded - The border radius on rounded.\n * @cssproperty --kemet-select-border-filled - The border on filled.\n * @cssproperty --kemet-select-color-filled - The color on filled.\n * @cssproperty --kemet-select-background-color-filled - The background-color on filled.\n * @cssproperty --kemet-select-background-color-error - The error state background color.\n * @cssproperty --kemet-select-background-color-success - The success state background color.\n * @cssproperty --kemet-select-background-color-warning - The warning state background color.\n * @cssproperty --kemet-select-icon-right - The space on the right of the icon.\n *\n * @fires kemet-select-mounted - Fires when the select is mounted\n * @fires kemet-select-focus - Fires when the input receives focus\n * @fires kemet-select-blur - Fires when the input loses focus\n * @fires kemet-select-appearance-change - Fires when there's a change in appearance\n * @fires kemet-select-change - Fires when the select input changes\n *\n */\n\n@customElement('kemet-select')\nexport default class KemetSelect extends LitElement {\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n slug: string = '';\n\n @property({ type: String })\n name: string = 'select';\n\n @property({ type: String })\n value: string = '';\n\n @property({ type: Array })\n options: IOptions[] = [];\n\n @property({ type: String, reflect: true })\n appearance: string = '';\n\n @property({ type: Boolean, reflect: true })\n required: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property({ type: Boolean })\n multiple: boolean = false;\n\n @property({ type: String })\n icon: string = 'chevron-down';\n\n @property({ type: Number, attribute: 'icon-size' })\n iconSize: number = 18;\n\n @property({ type: Boolean, reflect: true })\n filled: boolean = false;\n\n @property({ reflect: true })\n rounded?: EnumRoundedSizes;\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 invalid: boolean = false;\n\n @state()\n control!: HTMLKemetFieldElement;\n\n @state()\n select!: HTMLSelectElement;\n\n @state()\n selectedOption!: HTMLOptionElement;\n\n @state()\n optionElements!: NodeListOf<HTMLKemetOptionElement>;\n\n @state()\n hasFocus: boolean = false;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n\n /** @internal */\n this.control = this.closest('kemet-field') as HTMLKemetFieldElement;\n }\n\n firstUpdated() {\n this.select = this.shadowRoot?.querySelector('select') as HTMLSelectElement;\n this.selectedOption = this.querySelector('[selected]') as HTMLOptionElement;\n this.value = this.selectedOption ? this.selectedOption.value : '';\n\n emitEvent(this, 'kemet-select-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 <select\n part=\"select\"\n id=${this.slug}\n name=${this.name}\n ?required=${this.required}\n ?disabled=${this.disabled}\n ?multiple=${this.multiple}\n @change=${this.handleChange}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @invalid=${this.handleInvalid}\n >\n ${this.makeOptions()}\n </select>\n ${this.makeIcon()}\n <slot @slotchange=${() => this.makeOptions()}></slot>\n `;\n }\n\n /**\n * Generates the option elements\n * @private\n * @returns {TemplateResult} An option element\n */\n makeOptions(): TemplateResult<1>[] {\n this.options = [];\n this.optionElements = this.querySelectorAll('kemet-select-option');\n\n this.optionElements.forEach((option: HTMLKemetOptionElement) => {\n this.options = this.options.concat({\n label: option.label,\n value: option.value,\n disabled: option.disabled,\n selected: option.selected,\n });\n });\n\n return this.options.map(\n option => html`<option part=\"option\" value=${option.value} ?disabled=${option.disabled} ?selected=${option.selected}>\n ${option.label}\n </option>`,\n );\n }\n\n /**\n * Generates a dropdown icon\n * @private\n */\n makeIcon() {\n if (this.icon || this.icon !== '') {\n return html`<kemet-icon name=${this.icon} size=${this.iconSize}></kemet-icon>`;\n }\n\n return null;\n }\n\n /**\n * Handles when the input receives focus\n * @private\n */\n handleFocus() {\n this.hasFocus = true;\n emitEvent(this, 'kemet-select-focus', { focused: true, element: this });\n }\n\n /**\n * Handles when the input loses focus\n * @private\n */\n handleBlur() {\n this.hasFocus = false;\n emitEvent(this, 'kemet-select-blur', { focused: false, element: this });\n\n this.select.checkValidity();\n\n if (!this.select.checkValidity()) {\n this.invalid = true;\n this.appearance = EnumAppearances.Error;\n this.control.appearance = EnumAppearances.Error;\n\n emitEvent(this, 'kemet-select-appearance-change', {\n status: EnumAppearances.Error,\n validity: this.select.validity,\n element: this,\n });\n }\n }\n\n /**\n * Handles when the input changes value\n * @private\n */\n handleChange(event: Event) {\n this.value = this.select.value;\n emitEvent(this, 'kemet-select-change', {\n appearance: this.appearance,\n validity: this.select.validity,\n element: this,\n value: (event.target as HTMLSelectElement).value,\n });\n\n if (this.select.checkValidity()) {\n this.invalid = false;\n // this.appearance = EnumAppearances.Neutral;\n\n emitEvent(this, 'kemet-select-appearancce-change', {\n appearance: EnumAppearances.Neutral,\n validity: this.select.validity,\n element: this,\n value: (event.target as HTMLSelectElement).value,\n });\n }\n }\n\n /**\n * Handles when the input has an error\n * @private\n */\n handleInvalid() {\n this.invalid = true;\n this.appearance = EnumAppearances.Error;\n\n emitEvent(this, 'kemet-select-appearance-change', {\n appearance: EnumAppearances.Error,\n validity: this.select.validity,\n element: this,\n });\n }\n\n /**\n * Checks the validity of the standard select\n * @public\n * @returns {boolean}\n */\n checkValidity(): boolean {\n return this.select.checkValidity();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-select': KemetSelect\n }\n}\n","export 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 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 components.forEach((component: any) => {\n if (component.checkValidity) {\n component.checkValidity();\n\n if (!component.checkValidity()) {\n component.status = '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: component.validity ? component.validity : {},\n element: component,\n },\n }),\n );\n }\n\n if (component.checkLimitValidity && !component.checkLimitValidity()) {\n component.status = '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 { html, HTMLTemplateResult, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { isTemplateResult } from 'lit/directive-helpers.js';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nconst CACHEABLE_ERROR = Symbol();\nconst RETRYABLE_ERROR = Symbol();\ntype SVGResult = HTMLTemplateResult | SVGSVGElement | typeof RETRYABLE_ERROR | typeof CACHEABLE_ERROR;\n\nlet parser: DOMParser;\nconst iconCache = new Map<string, Promise<SVGResult>>();\n\n// Request queue with concurrency limit\nconst MAX_CONCURRENT_REQUESTS = 10;\nconst requestQueue: Array<() => void> = [];\nlet activeRequests = 0;\n\nfunction queueRequest(callback: () => void) {\n if (activeRequests < MAX_CONCURRENT_REQUESTS) {\n activeRequests++;\n callback();\n } else {\n requestQueue.push(callback);\n }\n}\n\nfunction requestComplete() {\n activeRequests--;\n if (requestQueue.length > 0) {\n const nextRequest = requestQueue.shift();\n if (nextRequest) {\n activeRequests++;\n nextRequest();\n }\n }\n}\n\nexport enum EnumLibrary {\n FONTAWESOME = 'fontawesome',\n BOOTSTRAP = 'bootstrap',\n}\n\n/**\n * @since 5.0.0\n * @status stable\n *\n * @tagname kemet-icon\n * @summary An element that represents an icon from a predefined set of open sourced icons.\n *\n * @prop {string} name - The name of the icon to reference.\n * @prop {string} library - The library of icons to use. Values include: (bootstrap | fontawesome)\n * @prop {string} family - The family of icons to use. The family is relative to the library being used. Font awesome values include: (regular | solid | brand)\n * @prop {string} version - The version of the icon library to use. Use latest to grab the most recent version.\n * @prop {number} size - The width and height of the icon in pixels.\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-icon-mounted - Fired when the icon is mounted to the DOM\n * @detail {HTMLElement} element - The icon element\n *\n */\n\n@customElement('kemet-icon')\nexport default class KemetIcon extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n name: string = 'house';\n\n @property({ type: String })\n library: string = 'bootstrap';\n\n @property({ type: String })\n family: string = 'regular';\n\n @property({ type: Number })\n size: number = 16;\n\n @property({ type: String })\n version?: 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 private svg: SVGElement | HTMLTemplateResult | null = null;\n\n /** @internal */\n @state()\n private url: string = 'https://unpkg.com/bootstrap-icons@latest/icons';\n\n /** @internal */\n private isVisible: boolean = false;\n\n connectedCallback() {\n super.connectedCallback();\n // Load icon when connected to DOM\n this.updateUrl();\n if (!this.svg) {\n this.isVisible = true;\n this.setIcon();\n }\n }\n\n updated() {\n this.updateUrl();\n this.updateSize();\n }\n\n firstUpdated() {\n emitEvent(this, 'kemet-icon-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n // Return the svg if it's loaded, otherwise show placeholder\n if (this.svg) {\n return this.svg;\n }\n\n // If not loaded, trigger loading\n if (!this.isVisible) {\n this.isVisible = true;\n this.setIcon();\n }\n\n return html`<svg part=\"svg\" width=\"${this.size}\" height=\"${this.size}\" viewBox=\"0 0 16 16\"></svg>`;\n }\n\n /** Public method to force icon loading */\n public loadIcon() {\n this.isVisible = true;\n this.setIcon();\n }\n\n async setIcon() {\n if (!this.isVisible) return;\n\n let iconResolver = iconCache.get(`${this.family}/${this.name}`);\n\n if (!iconResolver) {\n iconResolver = this.resolveIcon();\n iconCache.set(`${this.family}/${this.name}`, iconResolver);\n }\n\n const svg = await iconResolver;\n\n if (svg === RETRYABLE_ERROR) {\n iconCache.delete(`${this.family}/${this.name}`);\n }\n\n if (isTemplateResult(svg)) {\n this.svg = svg;\n } else if (svg instanceof SVGSVGElement) {\n // Clone the SVG so each icon instance gets its own copy\n this.svg = svg.cloneNode(true) as SVGSVGElement;\n }\n }\n\n private updateUrl() {\n switch (this.library) {\n case EnumLibrary.FONTAWESOME:\n this.version = this.version || '7.3.1';\n this.url = `https://unpkg.com/@fortawesome/fontawesome-free@${this.version}/svgs`;\n break;\n case EnumLibrary.BOOTSTRAP:\n this.version = this.version || '1.11.3';\n this.url = `https://unpkg.com/bootstrap-icons@${this.version}/icons`;\n break;\n }\n }\n\n private async resolveIcon(): Promise<SVGResult> {\n return new Promise((resolve) => {\n queueRequest(async () => {\n let fileData: Response;\n let fetchURL: string = `${this.url}/${this.family}/${this.name}.svg`;\n\n switch (this.library) {\n case EnumLibrary.FONTAWESOME:\n fetchURL = `${this.url}/${this.family}/${this.name}.svg`;\n break;\n case EnumLibrary.BOOTSTRAP:\n fetchURL = `${this.url}/${this.name}.svg`;\n break;\n }\n\n try {\n fileData = await fetch(fetchURL);\n if (!fileData.ok) {\n requestComplete();\n resolve(fileData.status === 410 ? CACHEABLE_ERROR : RETRYABLE_ERROR);\n return;\n }\n } catch {\n requestComplete();\n resolve(RETRYABLE_ERROR);\n return;\n }\n\n try {\n const div = document.createElement('div');\n div.innerHTML = await fileData.text();\n\n const svg = div.firstElementChild;\n if (svg?.tagName?.toLowerCase() !== 'svg') {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n return;\n }\n\n if (!parser) parser = new DOMParser();\n const doc = parser.parseFromString(svg.outerHTML, 'text/html');\n\n const svgEl = doc.body.querySelector('svg');\n if (!svgEl) {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n return;\n }\n\n svgEl.part.add('svg');\n svgEl.setAttribute('width', `${this.size}px`);\n svgEl.setAttribute('height', `${this.size}px`);\n\n requestComplete();\n resolve(document.adoptNode(svgEl));\n } catch {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n }\n });\n });\n }\n\n private updateSize() {\n if (this.svg) {\n const svg = this.svg as SVGElement;\n svg.setAttribute('width', `${this.size}px`);\n svg.setAttribute('height', `${this.size}px`);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-icon': KemetIcon\n }\n}\n","import { css } from 'lit';\n\nexport default css`:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-select-padding: 1rem;\n --kemet-select-color: var(--kemet-color-font-base);\n --kemet-select-font-color: var(--kemet-color-font-base);\n --kemet-select-border: 1px solid var(--kemet-select-color);\n --kemet-select-border-radius: 0;\n --kemet-select-icon-gap: 1rem;\n\n /* private */\n --_kemet-select-background-color: transparent;\n\n\n position: relative;\n display: block;\n}\n\nselect {\n color: var(--kemet-select-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n padding: var(--kemet-select-padding);\n border: var(--kemet-select-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-select-background-color);\n border-radius: var(--kemet-select-border-radius);\n}\n\noption {\n color: var(--kemet-color-font-base);\n display: flex;\n gap: 1rem;\n padding: 1rem;\n}\n\n:host([polarity=dark]) {\n --kemet-select-color: var(--kemet-color-font-inverse-base);\n --kemet-select-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([appearance=brand]) {\n --kemet-select-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error]) {\n --kemet-select-color: var(--kemet-color-background-error);\n}\n\n:host([appearance=success]) {\n --kemet-select-color: var(--kemet-color-background-success);\n}\n\n:host([appearance=warning]) {\n --kemet-select-color: var(--kemet-color-background-warning);\n}\n\n:host([disabled]) {\n --kemet-select-font-color: var(--kemet-color-font-disabled);\n --kemet-select-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --kemet-select-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --kemet-select-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=md]) {\n --kemet-select-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=lg]) {\n --kemet-select-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --kemet-select-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --kemet-select-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --kemet-select-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-select-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-select-background-color: var(--kemet-color-background-inverse);\n --kemet-select-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\n:host([appearance=brand][filled]) {\n --_kemet-select-background-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-select-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-select-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-select-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-select-background-color: var(--kemet-color-font-link);\n}\n\n\nkemet-icon {\n color: var(--kemet-select-font-color);\n position: absolute;\n right: var(--kemet-select-icon-gap);\n top: 50%;\n transform: translateY(-50%);\n}\n`;\n"],"mappings":"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","names":["html","LitElement","customElement","property","state","css","styles_css_default","LitElement","html","styles_css_default","property","state","customElement"]}
1
+ {"version":3,"sources":["../../../src/elements/select/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/icon/index.ts","../../../src/elements/icon/styles.css.ts","../../../src/elements/select/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { FormSubmitController } from '../../utilities/form-controller';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumAppearances, EnumRoundedSizes } from '../../utilities/constants';\nimport HTMLKemetFieldElement from '../field';\nimport type HTMLKemetOptionElement from '../select-option';\nimport '../icon';\nimport styles from './styles.css.ts';\n\ninterface IOptions {\n label: string;\n value: string;\n disabled: boolean;\n selected: boolean;\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-select\n * @summary An enhanced select element.\n * @ssrsafe no - This element queriesAll for child elements which is not supported in SSR.\n *\n * @prop {string} slug - A string the uniquely identifies the select\n * @prop {string} name - The name of the select\n * @prop {string} value - The value of the select\n * @prop {array} options - The options the select contains\n * @prop {EnumAppearances} appearance - The status of the select\n * @prop {boolean} required - Determines whether the field is required\n * @prop {boolean} disabled - Determines whether the field is disabled\n * @prop {boolean} multiple - Support of multiple choice selections\n * @prop {string} icon - The dropdown icon\n * @prop {number} iconSize - The dropdown icon size\n * @prop {boolean} filled - Displays a filled select\n * @prop {EnumRoundedSizes} rounded - Displays rounded corners\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 select\n * @csspart option\n *\n * @cssproperty --kemet-select-padding - The padding on the textarea.\n * @cssproperty --kemet-select-border - The border of the textarea.\n * @cssproperty --kemet-select-border-color-error - The border of the error state.\n * @cssproperty --kemet-select-border-color-success - The border of the success state.\n * @cssproperty --kemet-select-border-color-warning - The border of the warning state.\n * @cssproperty --kemet-select-border-radius-rounded - The border radius on rounded.\n * @cssproperty --kemet-select-border-filled - The border on filled.\n * @cssproperty --kemet-select-color-filled - The color on filled.\n * @cssproperty --kemet-select-background-color-filled - The background-color on filled.\n * @cssproperty --kemet-select-background-color-error - The error state background color.\n * @cssproperty --kemet-select-background-color-success - The success state background color.\n * @cssproperty --kemet-select-background-color-warning - The warning state background color.\n * @cssproperty --kemet-select-icon-right - The space on the right of the icon.\n *\n * @fires kemet-select-mounted - Fires when the select is mounted\n * @fires kemet-select-focus - Fires when the input receives focus\n * @fires kemet-select-blur - Fires when the input loses focus\n * @fires kemet-select-appearance-change - Fires when there's a change in appearance\n * @fires kemet-select-change - Fires when the select input changes\n *\n */\n\n@customElement('kemet-select')\nexport default class KemetSelect extends LitElement {\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n slug: string = '';\n\n @property({ type: String })\n name: string = 'select';\n\n @property({ type: String })\n value: string = '';\n\n @property({ type: Array })\n options: IOptions[] = [];\n\n @property({ type: String, reflect: true })\n appearance: string = '';\n\n @property({ type: Boolean, reflect: true })\n required: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property({ type: Boolean })\n multiple: boolean = false;\n\n @property({ type: String })\n icon: string = 'chevron-down';\n\n @property({ type: Number, attribute: 'icon-size' })\n iconSize: number = 18;\n\n @property({ type: Boolean, reflect: true })\n filled: boolean = false;\n\n @property({ reflect: true })\n rounded?: EnumRoundedSizes;\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 invalid: boolean = false;\n\n @state()\n control!: HTMLKemetFieldElement;\n\n @state()\n select!: HTMLSelectElement;\n\n @state()\n selectedOption!: HTMLOptionElement;\n\n @state()\n optionElements!: NodeListOf<HTMLKemetOptionElement>;\n\n @state()\n hasFocus: boolean = false;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n firstUpdated() {\n this.control = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.select = this.shadowRoot?.querySelector('select') as HTMLSelectElement;\n this.selectedOption = this.querySelector('[selected]') as HTMLOptionElement;\n this.value = this.selectedOption ? this.selectedOption.value : '';\n\n emitEvent(this, 'kemet-select-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 <select\n part=\"select\"\n id=${this.slug}\n name=${this.name}\n ?required=${this.required}\n ?disabled=${this.disabled}\n ?multiple=${this.multiple}\n @change=${this.handleChange}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @invalid=${this.handleInvalid}\n >\n ${this.makeOptions()}\n </select>\n ${this.makeIcon()}\n <slot @slotchange=${() => this.makeOptions()}></slot>\n `;\n }\n\n /**\n * Generates the option elements\n * @private\n * @returns {TemplateResult} An option element\n */\n makeOptions(): TemplateResult<1>[] {\n this.options = [];\n this.optionElements = this.querySelectorAll('kemet-select-option');\n\n this.optionElements.forEach((option: HTMLKemetOptionElement) => {\n this.options = this.options.concat({\n label: option.label,\n value: option.value,\n disabled: option.disabled,\n selected: option.selected,\n });\n });\n\n return this.options.map(\n option => html`<option part=\"option\" value=${option.value} ?disabled=${option.disabled} ?selected=${option.selected}>\n ${option.label}\n </option>`,\n );\n }\n\n /**\n * Generates a dropdown icon\n * @private\n */\n makeIcon() {\n if (this.icon || this.icon !== '') {\n return html`<kemet-icon name=${this.icon} size=${this.iconSize}></kemet-icon>`;\n }\n\n return null;\n }\n\n /**\n * Handles when the input receives focus\n * @private\n */\n handleFocus() {\n this.hasFocus = true;\n emitEvent(this, 'kemet-select-focus', { focused: true, element: this });\n }\n\n /**\n * Handles when the input loses focus\n * @private\n */\n handleBlur() {\n this.hasFocus = false;\n emitEvent(this, 'kemet-select-blur', { focused: false, element: this });\n\n this.select.checkValidity();\n\n if (!this.select.checkValidity()) {\n this.invalid = true;\n this.appearance = EnumAppearances.Error;\n this.control.appearance = EnumAppearances.Error;\n\n emitEvent(this, 'kemet-select-appearance-change', {\n status: EnumAppearances.Error,\n validity: this.select.validity,\n element: this,\n });\n }\n }\n\n /**\n * Handles when the input changes value\n * @private\n */\n handleChange(event: Event) {\n this.value = this.select.value;\n emitEvent(this, 'kemet-select-change', {\n appearance: this.appearance,\n validity: this.select.validity,\n element: this,\n value: (event.target as HTMLSelectElement).value,\n });\n\n if (this.select.checkValidity()) {\n this.invalid = false;\n // this.appearance = EnumAppearances.Neutral;\n\n emitEvent(this, 'kemet-select-appearancce-change', {\n appearance: EnumAppearances.Neutral,\n validity: this.select.validity,\n element: this,\n value: (event.target as HTMLSelectElement).value,\n });\n }\n }\n\n /**\n * Handles when the input has an error\n * @private\n */\n handleInvalid() {\n this.invalid = true;\n this.appearance = EnumAppearances.Error;\n\n emitEvent(this, 'kemet-select-appearance-change', {\n appearance: EnumAppearances.Error,\n validity: this.select.validity,\n element: this,\n });\n }\n\n /**\n * Checks the validity of the standard select\n * @public\n * @returns {boolean}\n */\n checkValidity(): boolean {\n return this.select.checkValidity();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-select': KemetSelect\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 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 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 components.forEach((component: any) => {\n if (component.checkValidity) {\n component.checkValidity();\n\n if (!component.checkValidity()) {\n component.status = '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: component.validity ? component.validity : {},\n element: component,\n },\n }),\n );\n }\n\n if (component.checkLimitValidity && !component.checkLimitValidity()) {\n component.status = '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 { html, HTMLTemplateResult, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { isTemplateResult } from 'lit/directive-helpers.js';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nconst CACHEABLE_ERROR = Symbol();\nconst RETRYABLE_ERROR = Symbol();\ntype SVGResult = HTMLTemplateResult | SVGSVGElement | typeof RETRYABLE_ERROR | typeof CACHEABLE_ERROR;\n\nlet parser: DOMParser;\nconst iconCache = new Map<string, Promise<SVGResult>>();\n\n// Request queue with concurrency limit\nconst MAX_CONCURRENT_REQUESTS = 10;\nconst requestQueue: Array<() => void> = [];\nlet activeRequests = 0;\n\nfunction queueRequest(callback: () => void) {\n if (activeRequests < MAX_CONCURRENT_REQUESTS) {\n activeRequests++;\n callback();\n } else {\n requestQueue.push(callback);\n }\n}\n\nfunction requestComplete() {\n activeRequests--;\n if (requestQueue.length > 0) {\n const nextRequest = requestQueue.shift();\n if (nextRequest) {\n activeRequests++;\n nextRequest();\n }\n }\n}\n\nexport enum EnumLibrary {\n FONTAWESOME = 'fontawesome',\n BOOTSTRAP = 'bootstrap',\n}\n\n/**\n * @since 5.0.0\n * @status stable\n *\n * @tagname kemet-icon\n * @summary An element that represents an icon from a predefined set of open sourced icons.\n * @ssrsafe yes\n *\n * @prop {string} name - The name of the icon to reference.\n * @prop {string} library - The library of icons to use. Values include: (bootstrap | fontawesome)\n * @prop {string} family - The family of icons to use. The family is relative to the library being used. Font awesome values include: (regular | solid | brand)\n * @prop {string} version - The version of the icon library to use. Use latest to grab the most recent version.\n * @prop {number} size - The width and height of the icon in pixels.\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-icon-mounted - Fired when the icon is mounted to the DOM\n * @detail {HTMLElement} element - The icon element\n *\n */\n\n@customElement('kemet-icon')\nexport default class KemetIcon extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n name: string = 'house';\n\n @property({ type: String })\n library: string = 'bootstrap';\n\n @property({ type: String })\n family: string = 'regular';\n\n @property({ type: Number })\n size: number = 16;\n\n @property({ type: String })\n version?: 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 private svg: SVGElement | HTMLTemplateResult | null = null;\n\n /** @internal */\n @state()\n private url: string = 'https://unpkg.com/bootstrap-icons@latest/icons';\n\n /** @internal */\n private isVisible: boolean = false;\n\n connectedCallback() {\n super.connectedCallback();\n // Load icon when connected to DOM\n this.updateUrl();\n if (!this.svg) {\n this.isVisible = true;\n this.setIcon();\n }\n }\n\n updated() {\n this.updateUrl();\n this.updateSize();\n }\n\n firstUpdated() {\n emitEvent(this, 'kemet-icon-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n // Return the svg if it's loaded, otherwise show placeholder\n if (this.svg) {\n return this.svg;\n }\n\n // If not loaded, trigger loading\n if (!this.isVisible) {\n this.isVisible = true;\n this.setIcon();\n }\n\n return html`<svg part=\"svg\" width=\"${this.size}\" height=\"${this.size}\" viewBox=\"0 0 16 16\"></svg>`;\n }\n\n /** Public method to force icon loading */\n public loadIcon() {\n this.isVisible = true;\n this.setIcon();\n }\n\n async setIcon() {\n if (!this.isVisible) return;\n\n let iconResolver = iconCache.get(`${this.family}/${this.name}`);\n\n if (!iconResolver) {\n iconResolver = this.resolveIcon();\n iconCache.set(`${this.family}/${this.name}`, iconResolver);\n }\n\n const svg = await iconResolver;\n\n if (svg === RETRYABLE_ERROR) {\n iconCache.delete(`${this.family}/${this.name}`);\n }\n\n if (isTemplateResult(svg)) {\n this.svg = svg;\n } else if (typeof SVGSVGElement !== 'undefined' && svg instanceof SVGSVGElement) {\n // Clone the SVG so each icon instance gets its own copy\n this.svg = svg.cloneNode(true) as SVGSVGElement;\n }\n }\n\n private updateUrl() {\n switch (this.library) {\n case EnumLibrary.FONTAWESOME:\n this.version = this.version || '7.3.1';\n this.url = `https://unpkg.com/@fortawesome/fontawesome-free@${this.version}/svgs`;\n break;\n case EnumLibrary.BOOTSTRAP:\n this.version = this.version || '1.11.3';\n this.url = `https://unpkg.com/bootstrap-icons@${this.version}/icons`;\n break;\n }\n }\n\n private async resolveIcon(): Promise<SVGResult> {\n return new Promise((resolve) => {\n queueRequest(async () => {\n let fileData: Response;\n let fetchURL: string = `${this.url}/${this.family}/${this.name}.svg`;\n\n switch (this.library) {\n case EnumLibrary.FONTAWESOME:\n fetchURL = `${this.url}/${this.family}/${this.name}.svg`;\n break;\n case EnumLibrary.BOOTSTRAP:\n fetchURL = `${this.url}/${this.name}.svg`;\n break;\n }\n\n try {\n fileData = await fetch(fetchURL);\n if (!fileData.ok) {\n requestComplete();\n resolve(fileData.status === 410 ? CACHEABLE_ERROR : RETRYABLE_ERROR);\n return;\n }\n } catch {\n requestComplete();\n resolve(RETRYABLE_ERROR);\n return;\n }\n\n try {\n const div = document.createElement('div');\n div.innerHTML = await fileData.text();\n\n const svg = div.firstElementChild;\n if (svg?.tagName?.toLowerCase() !== 'svg') {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n return;\n }\n\n if (!parser) parser = new DOMParser();\n const doc = parser.parseFromString(svg.outerHTML, 'text/html');\n\n const svgEl = doc.body.querySelector('svg');\n if (!svgEl) {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n return;\n }\n\n svgEl.part.add('svg');\n svgEl.setAttribute('width', `${this.size}px`);\n svgEl.setAttribute('height', `${this.size}px`);\n\n requestComplete();\n resolve(document.adoptNode(svgEl));\n } catch {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n }\n });\n });\n }\n\n private updateSize() {\n if (this.svg) {\n const svg = this.svg as SVGElement;\n svg.setAttribute('width', `${this.size}px`);\n svg.setAttribute('height', `${this.size}px`);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-icon': KemetIcon\n }\n}\n","import { css } from 'lit';\n\nexport default css`:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-select-padding: 1rem;\n --kemet-select-color: var(--kemet-color-font-base);\n --kemet-select-font-color: var(--kemet-color-font-base);\n --kemet-select-border: 1px solid var(--kemet-select-color);\n --kemet-select-border-radius: 0;\n --kemet-select-icon-gap: 1rem;\n\n /* private */\n --_kemet-select-background-color: transparent;\n\n\n position: relative;\n display: block;\n}\n\nselect {\n color: var(--kemet-select-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n padding: var(--kemet-select-padding);\n border: var(--kemet-select-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-select-background-color);\n border-radius: var(--kemet-select-border-radius);\n}\n\noption {\n color: var(--kemet-color-font-base);\n display: flex;\n gap: 1rem;\n padding: 1rem;\n}\n\n:host([polarity=dark]) {\n --kemet-select-color: var(--kemet-color-font-inverse-base);\n --kemet-select-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([appearance=brand]) {\n --kemet-select-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error]) {\n --kemet-select-color: var(--kemet-color-background-error);\n}\n\n:host([appearance=success]) {\n --kemet-select-color: var(--kemet-color-background-success);\n}\n\n:host([appearance=warning]) {\n --kemet-select-color: var(--kemet-color-background-warning);\n}\n\n:host([disabled]) {\n --kemet-select-font-color: var(--kemet-color-font-disabled);\n --kemet-select-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --kemet-select-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --kemet-select-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=md]) {\n --kemet-select-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=lg]) {\n --kemet-select-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --kemet-select-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --kemet-select-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --kemet-select-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-select-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-select-background-color: var(--kemet-color-background-inverse);\n --kemet-select-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\n:host([appearance=brand][filled]) {\n --_kemet-select-background-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-select-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-select-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-select-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-select-background-color: var(--kemet-color-font-link);\n}\n\n\nkemet-icon {\n color: var(--kemet-select-font-color);\n position: absolute;\n right: var(--kemet-select-icon-gap);\n top: 50%;\n transform: translateY(-50%);\n}\n`;\n"],"mappings":"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","names":["html","LitElement","css","styles_css_default","LitElement","html","styles_css_default"]}
@@ -7,6 +7,7 @@ import { LitElement } from 'lit';
7
7
  *
8
8
  * @tagname kemet-select-option
9
9
  * @summary An option in a select.
10
+ * @ssrsafe no
10
11
  *
11
12
  * @prop {string} label - The label of the option
12
13
  * @prop {string} value - The value of the options
@@ -11,7 +11,13 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
 
12
12
  // src/elements/select-option/index.ts
13
13
  import { html, LitElement } from "lit";
14
- import { customElement, property } from "lit/decorators.js";
14
+
15
+ // src/utilities/decorators.ts
16
+ import { property, state, query, queryAll } from "lit/decorators.js";
17
+ import { customElement as litCustomElement } from "lit/decorators.js";
18
+ var customElement = (tagName) => (classOrDescriptor) => typeof customElements !== "undefined" && !customElements.get(tagName) ? litCustomElement(tagName)(classOrDescriptor) : classOrDescriptor;
19
+
20
+ // src/elements/select-option/index.ts
15
21
  var KemetSelectOption = class extends LitElement {
16
22
  render() {
17
23
  return html`<slot></slot>`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/select-option/index.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-select-option\n * @summary An option in a select.\n *\n * @prop {string} label - The label of the option\n * @prop {string} value - The value of the options\n * @prop {boolean} disabled - Determines whether to disable the option\n * @prop {boolean} selected - Selects the option if true\n *\n */\n\n@customElement('kemet-select-option')\nexport default class KemetSelectOption extends LitElement {\n @property({ type: String })\n label!: string;\n\n @property({ type: String })\n value!: string;\n\n @property({ type: Boolean })\n disabled!: boolean;\n\n @property({ type: Boolean })\n selected!: boolean;\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-select-option': KemetSelectOption\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,MAAM,kBAAkB;AACjC,SAAS,eAAe,gBAAgB;AAiBxC,IAAqB,oBAArB,cAA+C,WAAW;AAAA,EAaxD,SAAS;AACP,WAAO;AAAA,EACT;AACF;AAdE;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GADP,kBAEnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJP,kBAKnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAPR,kBAQnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAVR,kBAWnB;AAXmB,oBAArB;AAAA,EADC,cAAc,qBAAqB;AAAA,GACf;","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/select-option/index.ts","../../../src/utilities/decorators.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-select-option\n * @summary An option in a select.\n * @ssrsafe no\n *\n * @prop {string} label - The label of the option\n * @prop {string} value - The value of the options\n * @prop {boolean} disabled - Determines whether to disable the option\n * @prop {boolean} selected - Selects the option if true\n *\n */\n\n@customElement('kemet-select-option')\nexport default class KemetSelectOption extends LitElement {\n @property({ type: String })\n label!: string;\n\n @property({ type: String })\n value!: string;\n\n @property({ type: Boolean })\n disabled!: boolean;\n\n @property({ type: Boolean })\n selected!: boolean;\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-select-option': KemetSelectOption\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"],"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;;;ADQN,IAAqB,oBAArB,cAA+C,WAAW;AAAA,EAaxD,SAAS;AACP,WAAO;AAAA,EACT;AACF;AAdE;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GADP,kBAEnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJP,kBAKnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAPR,kBAQnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAVR,kBAWnB;AAXmB,oBAArB;AAAA,EADC,cAAc,qBAAqB;AAAA,GACf;","names":[]}
@@ -14,6 +14,7 @@ interface InterfaceSortableDragDetails {
14
14
  *
15
15
  * @tagname kemet-sortable
16
16
  * @summary A list that can be sorted by drag and drop.
17
+ * @ssrsafe no - This component uses a drag and drop polyfill which is not supported on the server.
17
18
  *
18
19
  * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background
19
20
  * @prop {string} dom - The status of dom initalization.
@@ -11,7 +11,13 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
 
12
12
  // src/elements/sortable/index.ts
13
13
  import { html, LitElement } from "lit";
14
- import { customElement, property, state } from "lit/decorators.js";
14
+
15
+ // src/utilities/decorators.ts
16
+ import { property, state, query, queryAll } from "lit/decorators.js";
17
+ import { customElement as litCustomElement } from "lit/decorators.js";
18
+ var customElement = (tagName) => (classOrDescriptor) => typeof customElements !== "undefined" && !customElements.get(tagName) ? litCustomElement(tagName)(classOrDescriptor) : classOrDescriptor;
19
+
20
+ // src/elements/sortable/index.ts
15
21
  import { polyfill } from "mobile-drag-drop";
16
22
 
17
23
  // src/utilities/events.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/sortable/index.ts","../../../src/utilities/events.ts","../../../src/elements/sortable/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { polyfill } from 'mobile-drag-drop';\nimport { emitEvent } from '../../utilities/events';\nimport type HTMLKemetSortableItemElement from '../sortable-item';\nimport styles from './styles.css.ts';\n\nexport interface InterfaceSortableDragDetails {\n event: DragEvent,\n current: HTMLKemetSortableItemElement,\n all: NodeListOf<HTMLKemetSortableItemElement>,\n}\n\nconst getMouseOffset = (event: DragEvent) => {\n const target = event.target as HTMLElement;\n const targetRect = target.getBoundingClientRect();\n return {\n x: event.pageX - targetRect.left,\n y: event.pageY - targetRect.top,\n };\n};\n\nconst getElementVerticalCenter = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n return (rect.bottom - rect.top) / 2;\n};\n\n/**\n * @since 1.3.0\n * @status stable\n *\n * @tagname kemet-sortable\n * @summary A list that can be sorted by drag and drop.\n *\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-drag-start - Fires when an item starts to be moved.\n * @event kemet-drag-over - Fires when an item is moving to a new spot.\n * @event kemet-drag-end - Fires when an item has been moved to a new spot.\n *\n * @fires kemet-sortable-mounted - Fired when the sortable is mounted to the DOM\n * @detail {HTMLElement} element - The sortable element\n */\n\n@customElement('kemet-sortable')\nexport default class KemetSortable extends LitElement {\n static styles = [styles];\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 sortableItem!: HTMLKemetSortableItemElement;\n\n firstUpdated() {\n polyfill();\n\n this.addEventListener('dragstart', event => this.handleDragStart(event), false);\n this.addEventListener('dragenter', (event) => { event.preventDefault(); });\n\n emitEvent(this, 'kemet-sortable-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></slot>`;\n }\n\n handleDragStart(event: DragEvent) {\n this.sortableItem = event.target as HTMLKemetSortableItemElement;\n\n this.addEventListener('dragover', dragOverEvent => this.handleDragOver(dragOverEvent), false);\n this.addEventListener('dragend', dragEndEvent => this.handleDragEnd(dragEndEvent), false);\n\n setTimeout(() => {\n this.sortableItem.ghost = true;\n\n emitEvent(this, 'kemet-drag-start', {\n event,\n current: this.sortableItem,\n all: this.querySelectorAll('kemet-sortable-item'),\n });\n }, 0);\n }\n\n handleDragOver(event: DragEvent) {\n event.preventDefault();\n\n const target = event.target as HTMLKemetSortableItemElement;\n\n emitEvent(this, 'kemet-drag-over', {\n event,\n current: this.sortableItem,\n all: this.querySelectorAll('kemet-sortable-item'),\n });\n\n if (target && target.tagName === 'KEMET-SORTABLE-ITEM') {\n const offset = getMouseOffset(event);\n const middleY = getElementVerticalCenter(target);\n\n if (offset.y > middleY) {\n this.insertBefore(this.sortableItem, target.nextSibling);\n } else {\n this.insertBefore(this.sortableItem, target);\n }\n }\n }\n\n handleDragEnd(event: DragEvent) {\n event.preventDefault();\n this.sortableItem.ghost = false;\n\n emitEvent(this, 'kemet-drag-end', {\n event,\n current: this.sortableItem,\n all: this.querySelectorAll('kemet-sortable-item'),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-sortable': KemetSortable\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: flex;\n gap: 1rem;\n flex-direction: column;\n}\n`;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/sortable/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/sortable/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { polyfill } from 'mobile-drag-drop';\nimport { emitEvent } from '../../utilities/events';\nimport type HTMLKemetSortableItemElement from '../sortable-item';\nimport styles from './styles.css.ts';\n\nexport interface InterfaceSortableDragDetails {\n event: DragEvent,\n current: HTMLKemetSortableItemElement,\n all: NodeListOf<HTMLKemetSortableItemElement>,\n}\n\nconst getMouseOffset = (event: DragEvent) => {\n const target = event.target as HTMLElement;\n const targetRect = target.getBoundingClientRect();\n return {\n x: event.pageX - targetRect.left,\n y: event.pageY - targetRect.top,\n };\n};\n\nconst getElementVerticalCenter = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n return (rect.bottom - rect.top) / 2;\n};\n\n/**\n * @since 1.3.0\n * @status stable\n *\n * @tagname kemet-sortable\n * @summary A list that can be sorted by drag and drop.\n * @ssrsafe no - This component uses a drag and drop polyfill which is not supported on the server.\n *\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-drag-start - Fires when an item starts to be moved.\n * @event kemet-drag-over - Fires when an item is moving to a new spot.\n * @event kemet-drag-end - Fires when an item has been moved to a new spot.\n *\n * @fires kemet-sortable-mounted - Fired when the sortable is mounted to the DOM\n * @detail {HTMLElement} element - The sortable element\n */\n\n@customElement('kemet-sortable')\nexport default class KemetSortable extends LitElement {\n static styles = [styles];\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 sortableItem!: HTMLKemetSortableItemElement;\n\n firstUpdated() {\n polyfill();\n\n this.addEventListener('dragstart', event => this.handleDragStart(event), false);\n this.addEventListener('dragenter', (event) => { event.preventDefault(); });\n\n emitEvent(this, 'kemet-sortable-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></slot>`;\n }\n\n handleDragStart(event: DragEvent) {\n this.sortableItem = event.target as HTMLKemetSortableItemElement;\n\n this.addEventListener('dragover', dragOverEvent => this.handleDragOver(dragOverEvent), false);\n this.addEventListener('dragend', dragEndEvent => this.handleDragEnd(dragEndEvent), false);\n\n setTimeout(() => {\n this.sortableItem.ghost = true;\n\n emitEvent(this, 'kemet-drag-start', {\n event,\n current: this.sortableItem,\n all: this.querySelectorAll('kemet-sortable-item'),\n });\n }, 0);\n }\n\n handleDragOver(event: DragEvent) {\n event.preventDefault();\n\n const target = event.target as HTMLKemetSortableItemElement;\n\n emitEvent(this, 'kemet-drag-over', {\n event,\n current: this.sortableItem,\n all: this.querySelectorAll('kemet-sortable-item'),\n });\n\n if (target && target.tagName === 'KEMET-SORTABLE-ITEM') {\n const offset = getMouseOffset(event);\n const middleY = getElementVerticalCenter(target);\n\n if (offset.y > middleY) {\n this.insertBefore(this.sortableItem, target.nextSibling);\n } else {\n this.insertBefore(this.sortableItem, target);\n }\n }\n }\n\n handleDragEnd(event: DragEvent) {\n event.preventDefault();\n this.sortableItem.ghost = false;\n\n emitEvent(this, 'kemet-drag-end', {\n event,\n current: this.sortableItem,\n all: this.querySelectorAll('kemet-sortable-item'),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-sortable': KemetSortable\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 display: flex;\n gap: 1rem;\n flex-direction: column;\n}\n`;\n"],"mappings":"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","names":[]}
@@ -8,6 +8,7 @@ import { LitElement } from 'lit';
8
8
  *
9
9
  * @tagname kemet-sortable-item
10
10
  * @summary An item in a sortable list.
11
+ * @ssrsafe no - This component uses a drag and drop polyfill which is not supported on the server.
11
12
  *
12
13
  * @prop {boolean} ghost - Automatically set to true when an item is dragged to a new spot.
13
14
  * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background
@@ -11,7 +11,11 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
 
12
12
  // src/elements/sortable-item/index.ts
13
13
  import { html, LitElement } from "lit";
14
- import { customElement, property } from "lit/decorators.js";
14
+
15
+ // src/utilities/decorators.ts
16
+ import { property, state, query, queryAll } from "lit/decorators.js";
17
+ import { customElement as litCustomElement } from "lit/decorators.js";
18
+ var customElement = (tagName) => (classOrDescriptor) => typeof customElements !== "undefined" && !customElements.get(tagName) ? litCustomElement(tagName)(classOrDescriptor) : classOrDescriptor;
15
19
 
16
20
  // src/elements/sortable-item/styles.css.ts
17
21
  import { css } from "lit";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/sortable-item/index.ts","../../../src/elements/sortable-item/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.3.0\n * @status stable\n *\n * @tagname kemet-sortable-item\n * @summary An item in a sortable list.\n *\n * @prop {boolean} ghost - Automatically set to true when an item is dragged to a new spot.\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-sortable-item-mounted - Fired when the sortable item is mounted to the DOM\n * @detail {HTMLElement} element - The sortable item element\n */\n\n@customElement('kemet-sortable-item')\nexport default class KemetSortableItem extends LitElement {\n static styles = [styles];\n\n @property({ type: Boolean, reflect: true })\n ghost!: boolean;\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.draggable = true;\n emitEvent(this, 'kemet-sortable-item-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></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-sortable-item': KemetSortableItem\n }\n}\n","import { css } from 'lit';\n\nexport default css`:host {\n cursor: grab;\n display: block;\n padding: 1rem;\n border: 1px solid;\n}\n\n:host([ghost]) {\n opacity: 0.5;\n border-style: dashed;\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,kBAA6B;AAC5C,SAAS,eAAe,gBAAgB;;;ACDxC,SAAS,WAAW;AAEpB,IAAO,qBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;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;;;AFiBA,IAAqB,oBAArB,cAA+C,WAAW;AAAA,EAA1D;AAAA;AAUE,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,SAAK,YAAY;AACjB,cAAU,MAAM,+BAA+B;AAAA,MAC7C,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;AAAA,EACT;AACF;AA3BqB,kBACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAHvB,kBAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,kBAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,kBAUnB;AAVmB,oBAArB;AAAA,EADC,cAAc,qBAAqB;AAAA,GACf;","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/sortable-item/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/sortable-item/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.3.0\n * @status stable\n *\n * @tagname kemet-sortable-item\n * @summary An item in a sortable list.\n * @ssrsafe no - This component uses a drag and drop polyfill which is not supported on the server.\n *\n * @prop {boolean} ghost - Automatically set to true when an item is dragged to a new spot.\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-sortable-item-mounted - Fired when the sortable item is mounted to the DOM\n * @detail {HTMLElement} element - The sortable item element\n */\n\n@customElement('kemet-sortable-item')\nexport default class KemetSortableItem extends LitElement {\n static styles = [styles];\n\n @property({ type: Boolean, reflect: true })\n ghost!: boolean;\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.draggable = true;\n emitEvent(this, 'kemet-sortable-item-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></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-sortable-item': KemetSortableItem\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 cursor: grab;\n display: block;\n padding: 1rem;\n border: 1px solid;\n}\n\n:host([ghost]) {\n opacity: 0.5;\n border-style: dashed;\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,kBAA6B;;;ACA5C,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;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;;;AHkBA,IAAqB,oBAArB,cAA+C,WAAW;AAAA,EAA1D;AAAA;AAUE,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,SAAK,YAAY;AACjB,cAAU,MAAM,+BAA+B;AAAA,MAC7C,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;AAAA,EACT;AACF;AA3BqB,kBACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAHvB,kBAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,kBAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,kBAUnB;AAVmB,oBAArB;AAAA,EADC,cAAc,qBAAqB;AAAA,GACf;","names":[]}
@@ -1,7 +1,6 @@
1
1
  import * as lit_html from 'lit-html';
2
2
  import * as lit from 'lit';
3
3
  import { LitElement } from 'lit';
4
- import '../icon/index.js';
5
4
 
6
5
  /**
7
6
  * @since 1.0.0
@@ -9,6 +8,7 @@ import '../icon/index.js';
9
8
  *
10
9
  * @tagname kemet-tab
11
10
  * @summary A tab in a set of tabs.
11
+ * @ssrsafe yes
12
12
  *
13
13
  * @prop {boolean} selected - Is true when the tab is selected
14
14
  * @prop {string} link - Links to a panel name