kemet-ui 5.0.3 → 5.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +2191 -2199
- package/dist/{constants-Dj9X-JwG.d.ts → constants-BsAfWV-a.d.ts} +4 -4
- package/dist/elements/accordion/index.js.map +1 -1
- package/dist/elements/accordion-panel/index.js.map +1 -1
- package/dist/elements/alert/index.d.ts +1 -1
- package/dist/elements/alert/index.js +4 -4
- package/dist/elements/alert/index.js.map +1 -1
- package/dist/elements/alert/styles.css.js +4 -4
- package/dist/elements/alert/styles.css.js.map +1 -1
- package/dist/elements/avatar/index.d.ts +1 -1
- package/dist/elements/avatar/index.js.map +1 -1
- package/dist/elements/avatars/index.js.map +1 -1
- package/dist/elements/badge/index.d.ts +1 -1
- package/dist/elements/badge/index.js +1 -1
- package/dist/elements/badge/index.js.map +1 -1
- package/dist/elements/badge/styles.css.js +1 -1
- package/dist/elements/badge/styles.css.js.map +1 -1
- package/dist/elements/button/index.d.ts +1 -1
- package/dist/elements/button/index.js +4 -4
- package/dist/elements/button/index.js.map +1 -1
- package/dist/elements/button/styles.css.js +4 -4
- package/dist/elements/button/styles.css.js.map +1 -1
- package/dist/elements/card/index.d.ts +1 -1
- package/dist/elements/card/index.js.map +1 -1
- package/dist/elements/checkbox/index.d.ts +1 -1
- package/dist/elements/checkbox/index.js +5 -6
- package/dist/elements/checkbox/index.js.map +1 -1
- package/dist/elements/checkbox/styles.css.js +1 -1
- package/dist/elements/checkbox/styles.css.js.map +1 -1
- package/dist/elements/combo/index.d.ts +1 -1
- package/dist/elements/combo/index.js.map +1 -1
- package/dist/elements/count/index.d.ts +1 -1
- package/dist/elements/count/index.js.map +1 -1
- package/dist/elements/dialog/index.d.ts +1 -1
- package/dist/elements/dialog/index.js.map +1 -1
- package/dist/elements/dialog-close/index.js.map +1 -1
- package/dist/elements/drawer/index.js.map +1 -1
- package/dist/elements/fab/index.d.ts +1 -1
- package/dist/elements/fab/index.js +1 -1
- package/dist/elements/fab/index.js.map +1 -1
- package/dist/elements/fab/styles.css.js +1 -1
- package/dist/elements/fab/styles.css.js.map +1 -1
- package/dist/elements/field/index.d.ts +1 -1
- package/dist/elements/field/index.js +24 -15
- package/dist/elements/field/index.js.map +1 -1
- package/dist/elements/field/styles.css.js +15 -6
- package/dist/elements/field/styles.css.js.map +1 -1
- package/dist/elements/flipcard/index.d.ts +1 -1
- package/dist/elements/flipcard/index.js.map +1 -1
- package/dist/elements/flipcard-trigger/index.js.map +1 -1
- package/dist/elements/icon/index.js.map +1 -1
- package/dist/elements/input/index.d.ts +1 -1
- package/dist/elements/input/index.js +17 -9
- package/dist/elements/input/index.js.map +1 -1
- package/dist/elements/input/styles.css.js +2 -2
- package/dist/elements/input/styles.css.js.map +1 -1
- package/dist/elements/input-combo/index.d.ts +1 -1
- package/dist/elements/input-combo/index.js +2 -2
- package/dist/elements/input-combo/index.js.map +1 -1
- package/dist/elements/input-combo/styles.css.js +2 -2
- package/dist/elements/input-combo/styles.css.js.map +1 -1
- package/dist/elements/input-file/index.js.map +1 -1
- package/dist/elements/input-files/index.js.map +1 -1
- package/dist/elements/input-otp/index.js.map +1 -1
- package/dist/elements/loader/index.js.map +1 -1
- package/dist/elements/password/index.d.ts +1 -1
- package/dist/elements/password/index.js.map +1 -1
- package/dist/elements/radio/index.js +2 -8
- package/dist/elements/radio/index.js.map +1 -1
- package/dist/elements/radio/styles.css.js +1 -1
- package/dist/elements/radio/styles.css.js.map +1 -1
- package/dist/elements/radios/index.d.ts +1 -2
- package/dist/elements/radios/index.js +5 -23
- package/dist/elements/radios/index.js.map +1 -1
- package/dist/elements/rotator/index.js.map +1 -1
- package/dist/elements/select/index.d.ts +2 -1
- package/dist/elements/select/index.js +15 -7
- package/dist/elements/select/index.js.map +1 -1
- package/dist/elements/select/styles.css.js +2 -2
- package/dist/elements/select/styles.css.js.map +1 -1
- package/dist/elements/sortable/index.js.map +1 -1
- package/dist/elements/sortable-item/index.js.map +1 -1
- package/dist/elements/tab/index.js.map +1 -1
- package/dist/elements/tab-panel/index.js.map +1 -1
- package/dist/elements/tabs/index.d.ts +1 -1
- package/dist/elements/tabs/index.js.map +1 -1
- package/dist/elements/textarea/index.d.ts +1 -1
- package/dist/elements/textarea/index.js +16 -8
- package/dist/elements/textarea/index.js.map +1 -1
- package/dist/elements/textarea/styles.css.js +3 -3
- package/dist/elements/textarea/styles.css.js.map +1 -1
- package/dist/elements/timer/index.js.map +1 -1
- package/dist/elements/timer-display/index.js.map +1 -1
- package/dist/elements/toggle/index.js +4 -5
- package/dist/elements/toggle/index.js.map +1 -1
- package/dist/elements/tracker/index.js.map +1 -1
- package/dist/elements/tracker-step/index.js.map +1 -1
- package/dist/elements/typewriter/index.js.map +1 -1
- package/dist/wrappers/react.d.ts +1 -1
- package/dist/wrappers/react.js +68 -65
- package/dist/wrappers/react.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/flipcard/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/flipcard/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state, query } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumRoundedSizes } from '../../utilities/constants';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-flipcard\n * @summary A card that has a front and back side which can be flipped.\n * @ssrsafe yes\n *\n * @prop {string} axis\n * @prop {boolean} flipped\n * @prop {boolean} flipOnHover\n * @prop {string} height\n * @prop {boolean} measure\n * @prop {EnumRoundedSizes} rounded - The border radius of the card\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 * @slot front - The front of the card.\n * @slot back - The back of the card.\n *\n * @csspart front - The front of the card.\n * @csspart back - The back of the card.\n * @csspart wrapper - A container for both front and back of the card.\n *\n * @cssproperty --kemet-flipcard-width - The width of the card.\n * @cssproperty --kemet-flipcard-height - The height of the card.\n * @cssproperty --kemet-flipcard-ratio - The aspect ratio of the card.\n * @cssproperty --kemet-flipcard-border-radius - The border radius of the card.\n * @cssproperty --kemet-flipcard-border - The border of the card.\n *\n * @fires kemet-flipcard-mounted - Fired when the flipcard is mounted to the DOM\n * @detail {HTMLElement} element - The flipcard element\n *\n */\n\n@customElement('kemet-flipcard')\nexport default class KemetFlipcard extends LitElement {\n static styles = [styles];\n\n @property({ type: String, reflect: true })\n axis: string = 'horizontal';\n\n @property({ type: Boolean, reflect: true })\n flipped: boolean = false;\n\n @property({ type: Boolean, attribute: 'flip-on-hover' })\n flipOnHover: boolean = false;\n\n @property({ type: String })\n height: string = 'auto';\n\n @property({ type: Boolean })\n measure: boolean = false;\n\n @property({ type: String, 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 @query('[name=\"front\"]')\n frontChildren!: HTMLSlotElement;\n\n @query('[name=\"back\"]')\n backChildren!: HTMLSlotElement;\n\n @state()\n frontElement!: HTMLElement;\n\n @state()\n backElement!: HTMLElement;\n\n constructor() {\n super();\n\n this.addEventListener('kemet-flipcard-trigger-flipped', () => {\n this.flipped = !this.flipped;\n });\n }\n\n firstUpdated() {\n this.frontElement = this.querySelector('[slot=front]') as HTMLElement;\n this.backElement = this.querySelector('[slot=back]') as HTMLElement;\n window.addEventListener('resize', this.determineHeight.bind(this));\n\n emitEvent(this, 'kemet-flipcard-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.determineHeight();\n }\n\n render() {\n return html`\n <section\n tabindex=\"0\"\n part=\"wrapper\"\n @blur=${() => { if (this.flipOnHover) this.flipped = false; }}\n @focus=${() => { if (this.flipOnHover) this.flipped = true; }}\n @mouseover=${() => { if (this.flipOnHover) this.flipped = true; }}\n @mouseout=${() => { if (this.flipOnHover) this.flipped = false; }}>\n <div id=\"front\" class=\"front\" part=\"front\">\n <slot name=\"front\" @slotchange=\"${() => this.determineHeight()}\"></slot>\n </div>\n <div id=\"back\" class=\"back\" part=\"back\">\n <slot name=\"back\" @slotchange=\"${() => this.determineHeight()}\"></slot>\n </div>\n </section>\n `;\n }\n\n determineHeight() {\n // setTimeout is need to simulate a DOM repaint\n // without the repaint, offsetHeight on Custom Elements = 0\n // so this is needed for 'measure' to work correctly\n\n setTimeout(() => {\n if (this.measure) {\n if (this.frontElement?.offsetHeight > this.backElement?.offsetHeight) {\n this.height = `${this.frontElement?.offsetHeight}px`;\n } else {\n this.height = `${this.backElement?.offsetHeight}px`;\n }\n\n this.style.height = this.height;\n } else {\n this.style.removeProperty('height');\n }\n }, 0);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-flipcard': KemetFlipcard\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 --kemet-flipcard-width: 100%;\n --kemet-flipcard-height: auto;\n --kemet-flipcard-ratio: 16/9;\n --kemet-flipcard-border-radius: 0;\n --kemet-flipcard-border: 1px solid;\n\n display: inline-block;\n width: var(--kemet-flipcard-width);\n height: var(--kemet-flipcard-height);\n aspect-ratio: var(--kemet-flipcard-ratio);\n perspective: 1000px;\n}\n\nsection {\n position: relative;\n width: 100%;\n height: 100%;\n transition: transform 0.8s;\n transform-style: preserve-3d;\n}\n\n.front,\n.back {\n color: inherit;\n position: absolute;\n display: flex;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n /* overflow: hidden; */\n border-radius: var(--kemet-flipcard-border-radius);\n border: var(--kemet-flipcard-border);\n}\n\n:host([rounded]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=pill]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([rounded=circle]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([flipped]) .front {\n z-index: -1;\n}\n\n:host([axis=\"horizontal\"]) .back {\n transform: rotateY(180deg);\n}\n\n:host([flipped][axis=\"horizontal\"]) section {\n transform: rotateY(180deg);\n}\n\n:host([axis=\"vertical\"]) .back {\n transform: rotateX(180deg);\n}\n\n:host([flipped][axis=\"vertical\"]) section {\n transform: rotateX(180deg);\n}\n\n:host([flip-on-hover]) section {\n cursor: pointer;\n}\n\n::slotted([slot=\"front\"]),\n::slotted([slot=\"back\"]) {\n display: inline-block;\n margin: auto;\n position: relative;\n width: 100%;\n height: 100%;\n}\n`;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/flipcard/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/flipcard/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state, query } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumRoundedSizes } from '../../utilities/constants';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-flipcard\n * @summary A card that has a front and back side which can be flipped.\n * @ssrsafe yes\n *\n * @prop {string} axis\n * @prop {boolean} flipped\n * @prop {boolean} flipOnHover\n * @prop {string} height\n * @prop {boolean} measure\n * @prop {EnumRoundedSizes} rounded - The border radius of the card\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 * @slot front - The front of the card.\n * @slot back - The back of the card.\n *\n * @csspart front - The front of the card.\n * @csspart back - The back of the card.\n * @csspart wrapper - A container for both front and back of the card.\n *\n * @cssproperty --kemet-flipcard-width - The width of the card.\n * @cssproperty --kemet-flipcard-height - The height of the card.\n * @cssproperty --kemet-flipcard-ratio - The aspect ratio of the card.\n * @cssproperty --kemet-flipcard-border-radius - The border radius of the card.\n * @cssproperty --kemet-flipcard-border - The border of the card.\n *\n * @fires kemet-flipcard-mounted - Fired when the flipcard is mounted to the DOM\n * @detail {HTMLElement} element - The flipcard element\n *\n */\n\n@customElement('kemet-flipcard')\nexport default class KemetFlipcard extends LitElement {\n static styles = [styles];\n\n @property({ type: String, reflect: true })\n axis: string = 'horizontal';\n\n @property({ type: Boolean, reflect: true })\n flipped: boolean = false;\n\n @property({ type: Boolean, attribute: 'flip-on-hover' })\n flipOnHover: boolean = false;\n\n @property({ type: String })\n height: string = 'auto';\n\n @property({ type: Boolean })\n measure: boolean = false;\n\n @property({ type: String, 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 @query('[name=\"front\"]')\n frontChildren!: HTMLSlotElement;\n\n @query('[name=\"back\"]')\n backChildren!: HTMLSlotElement;\n\n @state()\n frontElement!: HTMLElement;\n\n @state()\n backElement!: HTMLElement;\n\n constructor() {\n super();\n\n this.addEventListener('kemet-flipcard-trigger-flipped', () => {\n this.flipped = !this.flipped;\n });\n }\n\n firstUpdated() {\n this.frontElement = this.querySelector('[slot=front]') as HTMLElement;\n this.backElement = this.querySelector('[slot=back]') as HTMLElement;\n window.addEventListener('resize', this.determineHeight.bind(this));\n\n emitEvent(this, 'kemet-flipcard-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.determineHeight();\n }\n\n render() {\n return html`\n <section\n tabindex=\"0\"\n part=\"wrapper\"\n @blur=${() => { if (this.flipOnHover) this.flipped = false; }}\n @focus=${() => { if (this.flipOnHover) this.flipped = true; }}\n @mouseover=${() => { if (this.flipOnHover) this.flipped = true; }}\n @mouseout=${() => { if (this.flipOnHover) this.flipped = false; }}>\n <div id=\"front\" class=\"front\" part=\"front\">\n <slot name=\"front\" @slotchange=\"${() => this.determineHeight()}\"></slot>\n </div>\n <div id=\"back\" class=\"back\" part=\"back\">\n <slot name=\"back\" @slotchange=\"${() => this.determineHeight()}\"></slot>\n </div>\n </section>\n `;\n }\n\n determineHeight() {\n // setTimeout is need to simulate a DOM repaint\n // without the repaint, offsetHeight on Custom Elements = 0\n // so this is needed for 'measure' to work correctly\n\n setTimeout(() => {\n if (this.measure) {\n if (this.frontElement?.offsetHeight > this.backElement?.offsetHeight) {\n this.height = `${this.frontElement?.offsetHeight}px`;\n } else {\n this.height = `${this.backElement?.offsetHeight}px`;\n }\n\n this.style.height = this.height;\n } else {\n this.style.removeProperty('height');\n }\n }, 0);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-flipcard': KemetFlipcard\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 --kemet-flipcard-width: 100%;\n --kemet-flipcard-height: auto;\n --kemet-flipcard-ratio: 16/9;\n --kemet-flipcard-border-radius: 0;\n --kemet-flipcard-border: 1px solid;\n\n display: inline-block;\n width: var(--kemet-flipcard-width);\n height: var(--kemet-flipcard-height);\n aspect-ratio: var(--kemet-flipcard-ratio);\n perspective: 1000px;\n}\n\nsection {\n position: relative;\n width: 100%;\n height: 100%;\n transition: transform 0.8s;\n transform-style: preserve-3d;\n}\n\n.front,\n.back {\n color: inherit;\n position: absolute;\n display: flex;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n /* overflow: hidden; */\n border-radius: var(--kemet-flipcard-border-radius);\n border: var(--kemet-flipcard-border);\n}\n\n:host([rounded]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=pill]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([rounded=circle]) {\n --kemet-flipcard-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([flipped]) .front {\n z-index: -1;\n}\n\n:host([axis=\"horizontal\"]) .back {\n transform: rotateY(180deg);\n}\n\n:host([flipped][axis=\"horizontal\"]) section {\n transform: rotateY(180deg);\n}\n\n:host([axis=\"vertical\"]) .back {\n transform: rotateX(180deg);\n}\n\n:host([flipped][axis=\"vertical\"]) section {\n transform: rotateX(180deg);\n}\n\n:host([flip-on-hover]) section {\n cursor: pointer;\n}\n\n::slotted([slot=\"front\"]),\n::slotted([slot=\"back\"]) {\n display: inline-block;\n margin: auto;\n position: relative;\n width: 100%;\n height: 100%;\n}\n`;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,MAAM,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACFR,IAAM,YAAY,CAAC,SAAsB,MAAc,QAAa,UAAU,MAAM,WAAW,SAAS;AAC7G,UAAQ;AAAA,IACN,IAAI,YAAY,MAAM,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,EACrD;AACF;;;AHsCA,IAAqB,gBAArB,cAA2C,WAAW;AAAA,EAuCpD,cAAc;AACZ,UAAM;AApCR,gBAAe;AAGf,mBAAmB;AAGnB,uBAAuB;AAGvB,kBAAiB;AAGjB,mBAAmB;AASnB,eAAc;AAiBZ,SAAK,iBAAiB,kCAAkC,MAAM;AAC5D,WAAK,UAAU,CAAC,KAAK;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe;AACb,SAAK,eAAe,KAAK,cAAc,cAAc;AACrD,SAAK,cAAc,KAAK,cAAc,aAAa;AACnD,WAAO,iBAAiB,UAAU,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAEjE,cAAU,MAAM,0BAA0B;AAAA,MACxC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,UAAU;AACR,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA;AAAA;AAAA,gBAIK,MAAM;AAAE,UAAI,KAAK,YAAa,MAAK,UAAU;AAAA,IAAO,CAAC;AAAA,iBACpD,MAAM;AAAE,UAAI,KAAK,YAAa,MAAK,UAAU;AAAA,IAAM,CAAC;AAAA,qBAChD,MAAM;AAAE,UAAI,KAAK,YAAa,MAAK,UAAU;AAAA,IAAM,CAAC;AAAA,oBACrD,MAAM;AAAE,UAAI,KAAK,YAAa,MAAK,UAAU;AAAA,IAAO,CAAC;AAAA;AAAA,4CAE7B,MAAM,KAAK,gBAAgB,CAAC;AAAA;AAAA;AAAA,2CAG7B,MAAM,KAAK,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA,EAIrE;AAAA,EAEA,kBAAkB;AAKhB,eAAW,MAAM;AACf,UAAI,KAAK,SAAS;AAChB,YAAI,KAAK,cAAc,eAAe,KAAK,aAAa,cAAc;AACpE,eAAK,SAAS,GAAG,KAAK,cAAc,YAAY;AAAA,QAClD,OAAO;AACL,eAAK,SAAS,GAAG,KAAK,aAAa,YAAY;AAAA,QACjD;AAEA,aAAK,MAAM,SAAS,KAAK;AAAA,MAC3B,OAAO;AACL,aAAK,MAAM,eAAe,QAAQ;AAAA,MACpC;AAAA,IACF,GAAG,CAAC;AAAA,EACN;AACF;AAxGqB,cACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAHtB,cAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GANvB,cAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,gBAAgB,CAAC;AAAA,GATpC,cAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAZP,cAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAfR,cAgBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAlBtB,cAmBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GArBtB,cAsBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAxBtB,cAyBnB;AAGA;AAAA,EADC,MAAM,gBAAgB;AAAA,GA3BJ,cA4BnB;AAGA;AAAA,EADC,MAAM,eAAe;AAAA,GA9BH,cA+BnB;AAGA;AAAA,EADC,MAAM;AAAA,GAjCY,cAkCnB;AAGA;AAAA,EADC,MAAM;AAAA,GApCY,cAqCnB;AArCmB,gBAArB;AAAA,EADC,cAAc,gBAAgB;AAAA,GACV;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/flipcard-trigger/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-flipcard-trigger\n * @summary Triggers a flipcard component to flip.\n * @ssrsafe yes\n *\n * @event kemet-flipcard-trigger-flipped - Fires when a flipcard is flipped\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\n@customElement('kemet-flipcard-trigger')\nexport default class KemetFlipcardTrigger extends LitElement {\n static styles = [\n css`\n :host {\n cursor: pointer;\n }\n `,\n ];\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 emitEvent(this, 'kemet-flipcard-trigger-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 <slot tabindex=\"0\" @click=${() => this.trigger()} @keypress=${(event: KeyboardEvent) => this.handleKeyup(event)}></slot>\n `;\n }\n\n trigger() {\n emitEvent(this, 'kemet-flipcard-trigger-flipped', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n });\n }\n\n handleKeyup(event: KeyboardEvent) {\n event.preventDefault();\n\n if (event.key === 'Enter') {\n this.trigger();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-flipcard-trigger': KemetFlipcardTrigger\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAY,MAAM,WAAW;;;ACAtC,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;;;ACXC,IAAM,YAAY,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/flipcard-trigger/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-flipcard-trigger\n * @summary Triggers a flipcard component to flip.\n * @ssrsafe yes\n *\n * @event kemet-flipcard-trigger-flipped - Fires when a flipcard is flipped\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\n@customElement('kemet-flipcard-trigger')\nexport default class KemetFlipcardTrigger extends LitElement {\n static styles = [\n css`\n :host {\n cursor: pointer;\n }\n `,\n ];\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 emitEvent(this, 'kemet-flipcard-trigger-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 <slot tabindex=\"0\" @click=${() => this.trigger()} @keypress=${(event: KeyboardEvent) => this.handleKeyup(event)}></slot>\n `;\n }\n\n trigger() {\n emitEvent(this, 'kemet-flipcard-trigger-flipped', {\n bubbles: true,\n composed: true,\n detail: { element: this }\n });\n }\n\n handleKeyup(event: KeyboardEvent) {\n event.preventDefault();\n\n if (event.key === 'Enter') {\n this.trigger();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-flipcard-trigger': KemetFlipcardTrigger\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAY,MAAM,WAAW;;;ACAtC,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;;;ACXC,IAAM,YAAY,CAAC,SAAsB,MAAc,QAAa,UAAU,MAAM,WAAW,SAAS;AAC7G,UAAQ;AAAA,IACN,IAAI,YAAY,MAAM,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,EACrD;AACF;;;AFeA,IAAqB,uBAArB,cAAkD,WAAW;AAAA,EAA7D;AAAA;AAaE,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,cAAU,MAAM,kCAAkC;AAAA,MAChD,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,kCACuB,MAAM,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAyB,KAAK,YAAY,KAAK,CAAC;AAAA;AAAA,EAEnH;AAAA,EAEA,UAAU;AACR,cAAU,MAAM,kCAAkC;AAAA,MAChD,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ,EAAE,SAAS,KAAK;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,OAAsB;AAChC,UAAM,eAAe;AAErB,QAAI,MAAM,QAAQ,SAAS;AACzB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AACF;AA/CqB,qBACZ,SAAS;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAKF;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,qBAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAZtB,qBAanB;AAbmB,uBAArB;AAAA,EADC,cAAc,wBAAwB;AAAA,GAClB;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/icon/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/icon/styles.css.ts"],"sourcesContent":["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","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: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n`;\n"],"mappings":"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","names":["EnumLibrary"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/icon/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/icon/styles.css.ts"],"sourcesContent":["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","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n`;\n"],"mappings":"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","names":["EnumLibrary"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'lit-html';
|
|
2
2
|
import 'lit';
|
|
3
3
|
import '../../form-controller-3q581XcZ.js';
|
|
4
|
-
export { i as EnumAriaAutoComplete, j as EnumAutoComplete, k as EnumInputModes, l as EnumInputTypes, c as default } from '../../constants-
|
|
4
|
+
export { i as EnumAriaAutoComplete, j as EnumAutoComplete, k as EnumInputModes, l as EnumInputTypes, c as default } from '../../constants-BsAfWV-a.js';
|
|
@@ -68,14 +68,13 @@ var FormSubmitController = class {
|
|
|
68
68
|
if (component.checkValidity) {
|
|
69
69
|
component.checkValidity();
|
|
70
70
|
if (!component.checkValidity()) {
|
|
71
|
-
|
|
71
|
+
console.log("invalid", component);
|
|
72
|
+
component.appearance = "error" /* Error */;
|
|
72
73
|
component.invalid = true;
|
|
73
74
|
component.dispatchEvent(
|
|
74
75
|
new CustomEvent("kemet-input-status", {
|
|
75
|
-
bubbles: true,
|
|
76
|
-
composed: true,
|
|
77
76
|
detail: {
|
|
78
|
-
|
|
77
|
+
appearance: "error" /* Error */,
|
|
79
78
|
validity: component.validity ? component.validity : {},
|
|
80
79
|
element: component
|
|
81
80
|
}
|
|
@@ -83,7 +82,7 @@ var FormSubmitController = class {
|
|
|
83
82
|
);
|
|
84
83
|
}
|
|
85
84
|
if (component.checkLimitValidity && !component.checkLimitValidity()) {
|
|
86
|
-
component.
|
|
85
|
+
component.appearance = "error" /* Error */;
|
|
87
86
|
component.invalid = true;
|
|
88
87
|
component.dispatchEvent(
|
|
89
88
|
new CustomEvent("kemet-input-status", {
|
|
@@ -193,7 +192,7 @@ input[type=search]::-webkit-search-results-decoration {
|
|
|
193
192
|
|
|
194
193
|
|
|
195
194
|
:host([appearance=brand]) {
|
|
196
|
-
--kemet-input-color: var(--kemet-color-brand-primary-
|
|
195
|
+
--kemet-input-color: var(--kemet-color-brand-primary-darker);
|
|
197
196
|
}
|
|
198
197
|
|
|
199
198
|
:host([appearance=error]) {
|
|
@@ -214,7 +213,7 @@ input[type=search]::-webkit-search-results-decoration {
|
|
|
214
213
|
|
|
215
214
|
|
|
216
215
|
:host([appearance=brand][filled]) {
|
|
217
|
-
--_kemet-input-background-color: var(--kemet-color-brand-primary-
|
|
216
|
+
--_kemet-input-background-color: var(--kemet-color-brand-primary-darker);
|
|
218
217
|
}
|
|
219
218
|
|
|
220
219
|
:host([appearance=error][filled]) {
|
|
@@ -365,6 +364,14 @@ var HTMLKemetInputElement = class extends LitElement {
|
|
|
365
364
|
this.dom = "initializing";
|
|
366
365
|
this.formSubmitController = new FormSubmitController(this);
|
|
367
366
|
}
|
|
367
|
+
updated(changedProperties) {
|
|
368
|
+
if (changedProperties.has("appearance")) {
|
|
369
|
+
emitEvent(this, "kemet-input-appearance-change", {
|
|
370
|
+
appearance: this.appearance,
|
|
371
|
+
element: this
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
368
375
|
firstUpdated() {
|
|
369
376
|
this.input = this.shadowRoot?.querySelector("input");
|
|
370
377
|
this.field = this.closest("kemet-field");
|
|
@@ -490,6 +497,7 @@ var HTMLKemetInputElement = class extends LitElement {
|
|
|
490
497
|
*/
|
|
491
498
|
handleInput(event) {
|
|
492
499
|
this.value = this.input.value;
|
|
500
|
+
this.appearance = "neutral" /* Neutral */;
|
|
493
501
|
emitEvent(this, "kemet-input-input", {
|
|
494
502
|
appearance: this.appearance,
|
|
495
503
|
validity: this.input.validity,
|
|
@@ -507,7 +515,7 @@ var HTMLKemetInputElement = class extends LitElement {
|
|
|
507
515
|
this.invalid = true;
|
|
508
516
|
this.appearance = "error" /* Error */;
|
|
509
517
|
emitEvent(this, "kemet-input-appearance-change", {
|
|
510
|
-
|
|
518
|
+
appearance: "error" /* Error */,
|
|
511
519
|
validity: this.input?.validity,
|
|
512
520
|
element: this,
|
|
513
521
|
value: event.target.value
|
|
@@ -515,7 +523,7 @@ var HTMLKemetInputElement = class extends LitElement {
|
|
|
515
523
|
}
|
|
516
524
|
}
|
|
517
525
|
handleStatus(event) {
|
|
518
|
-
this.appearance = event.detail.
|
|
526
|
+
this.appearance = event.detail.appearance;
|
|
519
527
|
}
|
|
520
528
|
/**
|
|
521
529
|
* Toggles password visibility
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/input/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/input/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { FormSubmitController } from '../../utilities/form-controller';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumAppearances, EnumRoundedSizes } from '../../utilities/constants';\nimport HTMLKemetFieldElement from '../field';\nimport HTMLKemetCountElement from '../count';\nimport styles from './styles.css.ts';\n\nexport enum EnumInputTypes {\n Text = 'text',\n Color = 'color',\n Date = 'date',\n DateTimeLocal = 'datetime-local',\n Email = 'email',\n Password = 'password',\n Hidden = 'hidden',\n Month = 'month',\n Number = 'number',\n Reset = 'reset',\n Search = 'search',\n Tel = 'tel',\n Time = 'time',\n Url = 'url',\n Week = 'week'\n}\n\nexport enum EnumAriaAutoComplete {\n Inline = 'inline',\n List = 'list',\n Both = 'both',\n None = 'none'\n}\n\nexport enum EnumAutoComplete {\n On = 'on',\n Off = 'off',\n AdditionalName = 'additional-name',\n AddressLevel1 = 'address-level1',\n AddressLevel2 = 'address-level2',\n AddressLevel3 = 'address-level3',\n AddressLevel4 = 'address-level4',\n AddressLine1 = 'address-line1',\n AddressLine2 = 'address-line2',\n AddressLine3 = 'address-line3',\n Bday = 'bday',\n BdayYear = 'bday-year',\n BdayDay = 'bday-day',\n BdayMonth = 'bday-month',\n Billing = 'billing',\n CcAdditionalName = 'cc-additional-name'\n}\n\nexport enum EnumInputModes {\n None = 'none',\n Text = 'text',\n Decimal = 'decimal',\n Numeric = 'numeric',\n Tel = 'tel',\n Search = 'search',\n Email = 'email',\n Url = 'url'\n}\n\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-input\n * @summary An enhanced input element.\n * @ssrsafe yes\n *\n * @prop {string} slug - Used for the id of the input. Should match the slug used in a control if applicable.\n * @prop {string} name - The name of the input\n * @prop {string} placeholder - The placeholder attribute\n * @prop {string} minlength - The minlength attribute\n * @prop {string} maxlength - The maxlength attribute\n * @prop {string} min - The min attribute\n * @prop {string} max - The max attribute\n * @prop {string} step - The step attribute\n * @prop {EnumAutoComplete} autocomplete - The autocomplete attribute\n * @prop {string} pattern - The pattern attribute\n * @prop {EnumInputModes} inputmode - The input mode attribute\n * @prop {boolean} autofocus - The autofocus attribute\n * @prop {boolean} disabled - The disable attribute\n * @prop {boolean} readonly - The readonly attribute\n * @prop {boolean} required - The required attribute\n * @prop {string} type - The type of input\n * @prop {string} value - The input's value\n * @prop {boolean} invalid - States whether the input is invalid\n * @prop {string} status - The status of the input\n * @prop {boolean} validateOnBlur - Activates validation on blur\n * @prop {EnumAriaAutoComplete} ariaAutoComplete - Aria Autocomplete\n * @prop {string} ariaControls - Aria Controls\n * @prop {string} ariaActiveDescendant - Aria Active Descendant\n * @prop {EnumRoundedSizes} rounded - Displays rounded corners\n * @prop {boolean} filled - Displays a filled input box\n * @prop {string} iconRight - Custom Icon to the right of the input\n * @prop {string} iconLeft - Custom Icon to the left of the input\n * @prop {number} iconSize - Size of the icons\n * @prop {object} validity - The HTML5 validity object.\n * @prop {boolean} isPasswordVisible - Manages password visibility\n * @prop {string} inputType - Input Type of keypress handled through handleInput(e)\n * @prop {boolean} focused - Determines if the input is focused\n *\n * @slot left - Allows you to place an icon to the left of the input.\n * @slot right - Allows you to place an icon to the right of the input.\n *\n * @csspart input\n *\n * @cssproperty --kemet-input-height - The height of the input.\n * @cssproperty --kemet-input-padding - The padding on the input.\n * @cssproperty --kemet-input-border - The border of the input.\n * @cssproperty --kemet-input-border-color-error - The border of the error state.\n * @cssproperty --kemet-input-border-color-success - The border of the success state.\n * @cssproperty --kemet-input-border-color-warning - The border of the warning state.\n * @cssproperty --kemet-input-icon-left-padding - The icon-left padding.\n * @cssproperty --kemet-input-icon-right-padding - The icon-right padding.\n * @cssproperty --kemet-input-border-radius-rounded - The border radius on rounded.\n * @cssproperty --kemet-input-border-filled - The border on filled.\n * @cssproperty --kemet-input-color-filled - The color on filled.\n * @cssproperty --kemet-input-background-color-filled - The background-color on filled.\n * @cssproperty --kemet-input-background-color-error - The error state background color.\n * @cssproperty --kemet-input-background-color-success - The success state background color.\n * @cssproperty --kemet-input-background-color-warning - The warning state background color.\n *\n * @event kemet-input-focus - Fires when the input receives focus\n * @event kemet-input-blur - Fires when the input loses focus\n * @event kemet-input-appearance-change Fires when there's a change in status. This event includes an object that reports: 1) the status. 2) HTML5 validity object. 3) the component element. Use the validity object to support custom validation messages.\n * @event kemet-input-input - Fires when the input receives input\n *\n */\n\n@customElement('kemet-input')\nexport default class HTMLKemetInputElement extends LitElement {\n /** @internal */\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n slug!: string;\n\n @property({ type: String })\n name: string = 'input';\n\n @property({ type: String })\n placeholder?: string;\n\n @property({ type: Number })\n minlength?: number;\n\n @property({ type: Number })\n maxlength?: number;\n\n @property({ type: String })\n min?: string;\n\n @property({ type: String })\n max?: string;\n\n @property({ type: Number })\n step?: number;\n\n @property({ type: String })\n autocomplete?: EnumAutoComplete;\n\n @property({ type: String })\n pattern?: string;\n\n @property({ type: String })\n inputmode?: EnumInputModes;\n\n @property({ type: Boolean })\n autofocus: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled?: boolean;\n\n @property({ type: Boolean })\n readonly?: boolean;\n\n @property({ type: Boolean, reflect: true })\n required?: boolean;\n\n @property({ type: String })\n type: EnumInputTypes = EnumInputTypes.Text;\n\n @property({ type: String, reflect: true })\n value: string = '';\n\n @property({ type: Boolean, reflect: true })\n invalid?: boolean;\n\n @property({ type: String, reflect: true })\n appearance: EnumAppearances = EnumAppearances.Neutral;\n\n @property({ type: Boolean, attribute: 'validate-on-blur' })\n validateOnBlur: boolean = false;\n\n @property({ type: String, attribute: 'aria-autocomplete' })\n ariaAutoComplete: EnumAriaAutoComplete = null as any;\n\n @property({ type: String, attribute: 'aria-controls' })\n ariaControls?: string;\n\n @property({ type: String, attribute: 'aria-activedescendant' })\n ariaActiveDescendant?: string;\n\n @property({ type: Boolean, reflect: true })\n filled?: boolean;\n\n @property({ type: Boolean, reflect: true, attribute: 'icon-right' })\n iconRight: boolean = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'icon-left' })\n iconLeft: boolean = false;\n\n @property({ type: Object })\n validity!: object;\n\n @property({ type: Boolean })\n isPasswordVisible: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n focused: boolean = false;\n\n @property({ type: String, 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 field!: HTMLKemetFieldElement;\n\n @state()\n form!: HTMLFormElement;\n\n @state()\n input!: HTMLInputElement;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n firstUpdated() {\n // elements\n this.input = this.shadowRoot?.querySelector('input') as HTMLInputElement;\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.form = this.closest('form') as HTMLFormElement;\n this.slug = this.field ? this.field.slug : 'input';\n\n if (this.field) {\n this.field.addEventListener('kemet-appearance-change', (event: Event) => this.handleStatus(event));\n }\n\n emitEvent(this, 'kemet-input-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 <div>\n <slot name=\"left\" @slotchange=${this.handleLeftChange}></slot>\n <input\n part=\"input\"\n id=${this.slug}\n name=${this.name}\n placeholder=${ifDefined(this.placeholder)}\n minlength=${ifDefined(this.minlength)}\n maxlength=${ifDefined(this.maxlength)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n step=${ifDefined(this.step)}\n autocomplete=${ifDefined(this.autocomplete)}\n aria-autocomplete=${ifDefined(this.ariaAutoComplete)}\n aria-controls=${ifDefined(this.ariaControls)}\n aria-activedescendant=${ifDefined(this.ariaActiveDescendant)}\n pattern=${ifDefined(this.pattern)}\n inputmode=${ifDefined(this.inputmode)}\n aria-invalid=${this.invalid ? 'true' : 'false'}\n ?autofocus=${this.autofocus}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n .type=\"${this.type === 'password' && this.isPasswordVisible ? 'text' : this.type}\"\n .value=${live(this.value)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @invalid=${this.handleInvalid}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n />\n <slot name=\"right\" @slotchange=${this.handleRightChange}></slot>\n ${this.makeIconClear()} ${this.makeVisibilityToggle()}\n </div>\n `;\n }\n\n handleLeftChange() {\n const left = this.querySelector('[slot=\"left\"]');\n if (left) this.iconLeft = true;\n }\n\n handleRightChange() {\n const right = this.querySelector('[slot=\"right\"]');\n if (right) this.iconRight = true;\n }\n\n makeIconClear() {\n if (this.type === 'search' && this.value !== '') {\n return html`\n <kemet-icon class=\"search right\" name=\"x-lg\" @click=${() => this.handleClear()}></kemet-icon>\n `;\n }\n\n return null;\n }\n\n makeVisibilityToggle() {\n if (this.type === EnumInputTypes.Password) {\n this.iconRight = true;\n return html`<kemet-icon\n class=\"eye right\"\n name=\"${this.isPasswordVisible ? 'eye' : 'eye-slash'}\"\n @click=${() => this.togglePasswordVisibility()}\n ></kemet-icon>`;\n }\n\n return null;\n }\n\n /**\n * Handles when the input receives focus\n * @private\n */\n handleFocus() {\n this.focused = true;\n emitEvent(this, 'kemet-input-focus', { focused: true, element: this });\n }\n\n /**\n * Handles when the input loses focus\n * @private\n */\n handleBlur() {\n if (this.validateOnBlur && this.form) {\n this.input?.reportValidity();\n this.validity = this.input?.validity;\n }\n\n this.focused = false;\n emitEvent(this, 'kemet-input-blur', { focused: false, element: this });\n }\n\n /**\n * Handles when the input changes value\n * @private\n */\n handleChange(event: Event) {\n this.value = this.input.value;\n\n if (this.input.checkValidity() && this.checkLimitValidity() && this.appearance !== EnumAppearances.Success) {\n this.invalid = false;\n this.validity = this.input.validity;\n\n emitEvent(this, 'kemet-input-appearance-change', {\n appearance: EnumAppearances.Neutral,\n validity: this.input.validity,\n element: this,\n value: (event.target as HTMLInputElement).value,\n });\n }\n }\n\n /**\n * Handles when the input receives input\n * @private\n */\n handleInput(event: InputEvent) {\n this.value = this.input.value;\n emitEvent(this, 'kemet-input-input', {\n appearance: this.appearance,\n validity: this.input.validity,\n element: event.target as HTMLInputElement,\n value: (event.target as HTMLInputElement).value,\n });\n }\n\n /**\n * Handles when the input has an error\n * @private\n */\n handleInvalid(event: Event) {\n this.validity = this.input?.validity;\n\n if (this.validateOnBlur) {\n this.invalid = true;\n this.appearance = EnumAppearances.Error;\n\n emitEvent(this, 'kemet-input-appearance-change', {\n status: EnumAppearances.Error,\n validity: this.input?.validity,\n element: this,\n value: (event.target as HTMLInputElement).value,\n });\n }\n }\n\n handleStatus(event: Event) {\n this.appearance = (event as CustomEvent).detail.status;\n }\n\n /**\n * Toggles password visibility\n * @private\n */\n togglePasswordVisibility() {\n this.isPasswordVisible = !this.isPasswordVisible;\n }\n\n /**\n * Handles the clear button for search\n * @private\n */\n handleClear() {\n this.value = '';\n emitEvent(this, 'kemet-input-input', {\n status: this.appearance,\n validity: this.input.validity,\n element: this,\n value: '',\n });\n }\n\n /**\n * Checks the validity of the character limit for the count component\n * @public\n * @method checkLimitValidity\n * @returns {boolean}\n */\n checkLimitValidity(): boolean {\n if (this.field) {\n const count = this.field.querySelector('kemet-count') as HTMLKemetCountElement;\n if (count) {\n return this.value.length < count.limit;\n }\n }\n\n return true;\n }\n\n\n /**\n * Checks the validity of the standard input\n * @public\n * @method checkValidity\n * @returns {boolean}\n */\n checkValidity(): boolean {\n return this.input?.checkValidity();\n }\n\n /**\n * Focuses the standard input\n * @public\n * @method focus\n * @returns {void}\n */\n focus(): void {\n this.input?.focus();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-input': HTMLKemetInputElement\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 { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-input-height: 50px;\n --kemet-input-color: inherit;\n --kemet-input-border: 1px solid;\n --kemet-input-padding-y: 0.5rem;\n --kemet-input-padding-x: 1rem;\n --kemet-input-icon-gap: 3rem;\n --kemet-input-font-color: var(--kemet-input-color);\n\n\n /* private */\n --_kemet-input-border-radius: 0;\n --_kemet-input-background-color: transparent;\n --_kemet-input-icon-left-padding: var(--kemet-input-padding-x);\n --_kemet-input-icon-right-padding: var(--kemet-input-padding-x);\n\n position: relative;\n display: block;\n}\n\ninput {\n color: var(--kemet-input-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n height: var(--kemet-input-height);\n border: var(--kemet-input-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-input-background-color);\n border-radius: var(--_kemet-input-border-radius);\n padding-left: var(--_kemet-input-icon-left-padding);\n padding-right: var(--_kemet-input-icon-right-padding);\n padding-top: var(--kemet-input-padding-y);\n padding-bottom: var(--kemet-input-padding-y);\n}\n\n:host([polarity=dark]) {\n --kemet-input-color: var(--kemet-color-font-inverse-base);\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([icon-left]) {\n --_kemet-input-icon-left-padding: var(--kemet-input-icon-gap);\n}\n\n:host([icon-right]) {\n --_kemet-input-icon-right-padding: var(--kemet-input-icon-gap);\n}\n\ninput[type=color] {\n min-width: 10rem;\n}\n\ninput[type=search]::-webkit-search-decoration,\ninput[type=search]::-webkit-search-cancel-button,\ninput[type=search]::-webkit-search-results-button,\ninput[type=search]::-webkit-search-results-decoration {\n display: none;\n}\n\n\n\n:host([appearance=brand]) {\n --kemet-input-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error]) {\n --kemet-input-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success]) {\n --kemet-input-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning]) {\n --kemet-input-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link]) {\n --kemet-input-color: var(--kemet-color-font-link);\n}\n\n\n:host([appearance=brand][filled]) {\n --_kemet-input-background-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-input-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-link);\n}\n\n:host([disabled]) {\n --kemet-input-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-input-background-color: var(--kemet-color-background-inverse);\n --kemet-input-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\nkemet-icon,\n::slotted(kemet-icon) {\n color: var(--kemet-input-font-color);\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n\nkemet-icon.left,\n:host([icon-left]) ::slotted(kemet-icon) {\n left: 1rem;\n}\n\nkemet-icon.right,\n:host([icon-right]) ::slotted(kemet-icon) {\n right: 1rem;\n}\n\nkemet-icon.eye,\nkemet-icon.search {\n cursor: pointer;\n}\n`;\n"],"mappings":"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","names":["EnumInputTypes","EnumAriaAutoComplete","EnumAutoComplete","EnumInputModes"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/input/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/input/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { FormSubmitController } from '../../utilities/form-controller';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumAppearances, EnumRoundedSizes } from '../../utilities/constants';\nimport HTMLKemetFieldElement from '../field';\nimport HTMLKemetCountElement from '../count';\nimport styles from './styles.css.ts';\n\nexport enum EnumInputTypes {\n Text = 'text',\n Color = 'color',\n Date = 'date',\n DateTimeLocal = 'datetime-local',\n Email = 'email',\n Password = 'password',\n Hidden = 'hidden',\n Month = 'month',\n Number = 'number',\n Reset = 'reset',\n Search = 'search',\n Tel = 'tel',\n Time = 'time',\n Url = 'url',\n Week = 'week'\n}\n\nexport enum EnumAriaAutoComplete {\n Inline = 'inline',\n List = 'list',\n Both = 'both',\n None = 'none'\n}\n\nexport enum EnumAutoComplete {\n On = 'on',\n Off = 'off',\n AdditionalName = 'additional-name',\n AddressLevel1 = 'address-level1',\n AddressLevel2 = 'address-level2',\n AddressLevel3 = 'address-level3',\n AddressLevel4 = 'address-level4',\n AddressLine1 = 'address-line1',\n AddressLine2 = 'address-line2',\n AddressLine3 = 'address-line3',\n Bday = 'bday',\n BdayYear = 'bday-year',\n BdayDay = 'bday-day',\n BdayMonth = 'bday-month',\n Billing = 'billing',\n CcAdditionalName = 'cc-additional-name'\n}\n\nexport enum EnumInputModes {\n None = 'none',\n Text = 'text',\n Decimal = 'decimal',\n Numeric = 'numeric',\n Tel = 'tel',\n Search = 'search',\n Email = 'email',\n Url = 'url'\n}\n\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-input\n * @summary An enhanced input element.\n * @ssrsafe yes\n *\n * @prop {string} slug - Used for the id of the input. Should match the slug used in a control if applicable.\n * @prop {string} name - The name of the input\n * @prop {string} placeholder - The placeholder attribute\n * @prop {string} minlength - The minlength attribute\n * @prop {string} maxlength - The maxlength attribute\n * @prop {string} min - The min attribute\n * @prop {string} max - The max attribute\n * @prop {string} step - The step attribute\n * @prop {EnumAutoComplete} autocomplete - The autocomplete attribute\n * @prop {string} pattern - The pattern attribute\n * @prop {EnumInputModes} inputmode - The input mode attribute\n * @prop {boolean} autofocus - The autofocus attribute\n * @prop {boolean} disabled - The disable attribute\n * @prop {boolean} readonly - The readonly attribute\n * @prop {boolean} required - The required attribute\n * @prop {string} type - The type of input\n * @prop {string} value - The input's value\n * @prop {boolean} invalid - States whether the input is invalid\n * @prop {string} status - The status of the input\n * @prop {boolean} validateOnBlur - Activates validation on blur\n * @prop {EnumAriaAutoComplete} ariaAutoComplete - Aria Autocomplete\n * @prop {string} ariaControls - Aria Controls\n * @prop {string} ariaActiveDescendant - Aria Active Descendant\n * @prop {EnumRoundedSizes} rounded - Displays rounded corners\n * @prop {boolean} filled - Displays a filled input box\n * @prop {string} iconRight - Custom Icon to the right of the input\n * @prop {string} iconLeft - Custom Icon to the left of the input\n * @prop {number} iconSize - Size of the icons\n * @prop {object} validity - The HTML5 validity object.\n * @prop {boolean} isPasswordVisible - Manages password visibility\n * @prop {string} inputType - Input Type of keypress handled through handleInput(e)\n * @prop {boolean} focused - Determines if the input is focused\n *\n * @slot left - Allows you to place an icon to the left of the input.\n * @slot right - Allows you to place an icon to the right of the input.\n *\n * @csspart input\n *\n * @cssproperty --kemet-input-height - The height of the input.\n * @cssproperty --kemet-input-padding - The padding on the input.\n * @cssproperty --kemet-input-border - The border of the input.\n * @cssproperty --kemet-input-border-color-error - The border of the error state.\n * @cssproperty --kemet-input-border-color-success - The border of the success state.\n * @cssproperty --kemet-input-border-color-warning - The border of the warning state.\n * @cssproperty --kemet-input-icon-left-padding - The icon-left padding.\n * @cssproperty --kemet-input-icon-right-padding - The icon-right padding.\n * @cssproperty --kemet-input-border-radius-rounded - The border radius on rounded.\n * @cssproperty --kemet-input-border-filled - The border on filled.\n * @cssproperty --kemet-input-color-filled - The color on filled.\n * @cssproperty --kemet-input-background-color-filled - The background-color on filled.\n * @cssproperty --kemet-input-background-color-error - The error state background color.\n * @cssproperty --kemet-input-background-color-success - The success state background color.\n * @cssproperty --kemet-input-background-color-warning - The warning state background color.\n *\n * @event kemet-input-focus - Fires when the input receives focus\n * @event kemet-input-blur - Fires when the input loses focus\n * @event kemet-input-appearance-change Fires when there's a change in status. This event includes an object that reports: 1) the status. 2) HTML5 validity object. 3) the component element. Use the validity object to support custom validation messages.\n * @event kemet-input-input - Fires when the input receives input\n *\n */\n\n@customElement('kemet-input')\nexport default class HTMLKemetInputElement 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 = 'input';\n\n @property({ type: String })\n placeholder?: string;\n\n @property({ type: Number })\n minlength?: number;\n\n @property({ type: Number })\n maxlength?: number;\n\n @property({ type: String })\n min?: string;\n\n @property({ type: String })\n max?: string;\n\n @property({ type: Number })\n step?: number;\n\n @property({ type: String })\n autocomplete?: EnumAutoComplete;\n\n @property({ type: String })\n pattern?: string;\n\n @property({ type: String })\n inputmode?: EnumInputModes;\n\n @property({ type: Boolean })\n autofocus: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled?: boolean;\n\n @property({ type: Boolean })\n readonly?: boolean;\n\n @property({ type: Boolean, reflect: true })\n required?: boolean;\n\n @property({ type: String })\n type: EnumInputTypes = EnumInputTypes.Text;\n\n @property({ type: String, reflect: true })\n value: string = '';\n\n @property({ type: Boolean, reflect: true })\n invalid?: boolean;\n\n @property({ type: String, reflect: true })\n appearance: EnumAppearances = EnumAppearances.Neutral;\n\n @property({ type: Boolean, attribute: 'validate-on-blur' })\n validateOnBlur: boolean = false;\n\n @property({ type: String, attribute: 'aria-autocomplete' })\n ariaAutoComplete: EnumAriaAutoComplete = null as any;\n\n @property({ type: String, attribute: 'aria-controls' })\n ariaControls?: string;\n\n @property({ type: String, attribute: 'aria-activedescendant' })\n ariaActiveDescendant?: string;\n\n @property({ type: Boolean, reflect: true })\n filled?: boolean;\n\n @property({ type: Boolean, reflect: true, attribute: 'icon-right' })\n iconRight: boolean = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'icon-left' })\n iconLeft: boolean = false;\n\n @property({ type: Object })\n validity!: object;\n\n @property({ type: Boolean })\n isPasswordVisible: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n focused: boolean = false;\n\n @property({ type: String, 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 field!: HTMLKemetFieldElement;\n\n @state()\n form!: HTMLFormElement;\n\n @state()\n input!: HTMLInputElement;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n updated(changedProperties: Map<string, any>) {\n if (changedProperties.has('appearance')) {\n emitEvent(this, 'kemet-input-appearance-change', {\n appearance: this.appearance,\n element: this,\n });\n }\n }\n\n firstUpdated() {\n // elements\n this.input = this.shadowRoot?.querySelector('input') as HTMLInputElement;\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.form = this.closest('form') as HTMLFormElement;\n this.slug = this.field ? this.field.slug : 'input';\n\n if (this.field) {\n this.field.addEventListener('kemet-appearance-change', (event: Event) => this.handleStatus(event));\n }\n\n emitEvent(this, 'kemet-input-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 <div>\n <slot name=\"left\" @slotchange=${this.handleLeftChange}></slot>\n <input\n part=\"input\"\n id=${this.slug}\n name=${this.name}\n placeholder=${ifDefined(this.placeholder)}\n minlength=${ifDefined(this.minlength)}\n maxlength=${ifDefined(this.maxlength)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n step=${ifDefined(this.step)}\n autocomplete=${ifDefined(this.autocomplete)}\n aria-autocomplete=${ifDefined(this.ariaAutoComplete)}\n aria-controls=${ifDefined(this.ariaControls)}\n aria-activedescendant=${ifDefined(this.ariaActiveDescendant)}\n pattern=${ifDefined(this.pattern)}\n inputmode=${ifDefined(this.inputmode)}\n aria-invalid=${this.invalid ? 'true' : 'false'}\n ?autofocus=${this.autofocus}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n .type=\"${this.type === 'password' && this.isPasswordVisible ? 'text' : this.type}\"\n .value=${live(this.value)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @invalid=${this.handleInvalid}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n />\n <slot name=\"right\" @slotchange=${this.handleRightChange}></slot>\n ${this.makeIconClear()} ${this.makeVisibilityToggle()}\n </div>\n `;\n }\n\n handleLeftChange() {\n const left = this.querySelector('[slot=\"left\"]');\n if (left) this.iconLeft = true;\n }\n\n handleRightChange() {\n const right = this.querySelector('[slot=\"right\"]');\n if (right) this.iconRight = true;\n }\n\n makeIconClear() {\n if (this.type === 'search' && this.value !== '') {\n return html`\n <kemet-icon class=\"search right\" name=\"x-lg\" @click=${() => this.handleClear()}></kemet-icon>\n `;\n }\n\n return null;\n }\n\n makeVisibilityToggle() {\n if (this.type === EnumInputTypes.Password) {\n this.iconRight = true;\n return html`<kemet-icon\n class=\"eye right\"\n name=\"${this.isPasswordVisible ? 'eye' : 'eye-slash'}\"\n @click=${() => this.togglePasswordVisibility()}\n ></kemet-icon>`;\n }\n\n return null;\n }\n\n /**\n * Handles when the input receives focus\n * @private\n */\n handleFocus() {\n this.focused = true;\n emitEvent(this, 'kemet-input-focus', { focused: true, element: this });\n }\n\n /**\n * Handles when the input loses focus\n * @private\n */\n handleBlur() {\n if (this.validateOnBlur && this.form) {\n this.input?.reportValidity();\n this.validity = this.input?.validity;\n }\n\n this.focused = false;\n emitEvent(this, 'kemet-input-blur', { focused: false, element: this });\n }\n\n /**\n * Handles when the input changes value\n * @private\n */\n handleChange(event: Event) {\n this.value = this.input.value;\n\n if (this.input.checkValidity() && this.checkLimitValidity() && this.appearance !== EnumAppearances.Success) {\n this.invalid = false;\n this.validity = this.input.validity;\n\n emitEvent(this, 'kemet-input-appearance-change', {\n appearance: EnumAppearances.Neutral,\n validity: this.input.validity,\n element: this,\n value: (event.target as HTMLInputElement).value,\n });\n }\n }\n\n /**\n * Handles when the input receives input\n * @private\n */\n handleInput(event: InputEvent) {\n this.value = this.input.value;\n this.appearance = EnumAppearances.Neutral;\n\n emitEvent(this, 'kemet-input-input', {\n appearance: this.appearance,\n validity: this.input.validity,\n element: event.target as HTMLInputElement,\n value: (event.target as HTMLInputElement).value,\n });\n }\n\n /**\n * Handles when the input has an error\n * @private\n */\n handleInvalid(event: Event) {\n this.validity = this.input?.validity;\n\n if (this.validateOnBlur) {\n this.invalid = true;\n this.appearance = EnumAppearances.Error;\n\n emitEvent(this, 'kemet-input-appearance-change', {\n appearance: EnumAppearances.Error,\n validity: this.input?.validity,\n element: this,\n value: (event.target as HTMLInputElement).value,\n });\n }\n }\n\n handleStatus(event: Event) {\n this.appearance = (event as CustomEvent).detail.appearance;\n }\n\n /**\n * Toggles password visibility\n * @private\n */\n togglePasswordVisibility() {\n this.isPasswordVisible = !this.isPasswordVisible;\n }\n\n /**\n * Handles the clear button for search\n * @private\n */\n handleClear() {\n this.value = '';\n emitEvent(this, 'kemet-input-input', {\n status: this.appearance,\n validity: this.input.validity,\n element: this,\n value: '',\n });\n }\n\n /**\n * Checks the validity of the character limit for the count component\n * @public\n * @method checkLimitValidity\n * @returns {boolean}\n */\n checkLimitValidity(): boolean {\n if (this.field) {\n const count = this.field.querySelector('kemet-count') as HTMLKemetCountElement;\n if (count) {\n return this.value.length < count.limit;\n }\n }\n\n return true;\n }\n\n\n /**\n * Checks the validity of the standard input\n * @public\n * @method checkValidity\n * @returns {boolean}\n */\n checkValidity(): boolean {\n return this.input?.checkValidity();\n }\n\n /**\n * Focuses the standard input\n * @public\n * @method focus\n * @returns {void}\n */\n focus(): void {\n this.input?.focus();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-input': HTMLKemetInputElement\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { EnumAppearances } from \"./constants\";\n\nexport class FormSubmitController {\n host: any;\n form: HTMLFormElement | null | undefined;\n options: {\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n };\n\n constructor(host: any, options: Partial<{\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n }> = {}) {\n (this.host = host).addController(this);\n\n this.options = {\n form: (input: any) => input.closest('form'),\n name: (input: any) => input.name,\n value: (input: any) => input.value,\n disabled: (input: any) => input.disabled,\n ...options,\n };\n\n this.handleFormData = this.handleFormData.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n\n\n }\n\n hostConnected() {\n this.form = this.options.form(this.host);\n\n if (this.form) {\n this.form.addEventListener('formdata', this.handleFormData);\n this.form.addEventListener('submit', this.handleFormSubmit);\n }\n }\n\n hostDisconnected() {\n if (this.form) {\n this.form.removeEventListener('formdata', this.handleFormData);\n this.form.removeEventListener('submit', this.handleFormSubmit);\n this.form = undefined;\n }\n }\n\n handleFormData(event: FormDataEvent) {\n const disabled = this.options.disabled(this.host);\n const name = this.options.name(this.host);\n const value = this.options.value(this.host);\n\n if (!disabled && typeof name === 'string' && typeof value !== 'undefined') {\n // TODO recreate a scenario where value will be an array\n // if (Array.isArray(value)) {\n // value.forEach((val) => {\n // event.formData?.append(name, val.toString());\n // });\n // } else {\n // event.formData?.append(name, value.toString());\n // }\n event.formData?.append(name, value.toString());\n }\n }\n\n handleFormSubmit(event: SubmitEvent) {\n event.preventDefault();\n event.stopImmediatePropagation();\n\n const disabled = this.options.disabled(this.host);\n this.form = this.options.form(this.host);\n\n if (this.form && !disabled) {\n const components = this.form.querySelectorAll('kemet-input, kemet-textarea, kemet-select, kemet-checkbox, kemet-radios');\n\n\n components.forEach((component: any) => {\n if (component.checkValidity) {\n component.checkValidity();\n\n if (!component.checkValidity()) {\n console.log('invalid', component);\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n detail: {\n appearance: EnumAppearances.Error,\n validity: component.validity ? component.validity : {},\n element: component,\n },\n }),\n );\n }\n\n if (component.checkLimitValidity && !component.checkLimitValidity()) {\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n bubbles: true,\n composed: true,\n detail: {\n status: 'error',\n validity: { passedLimit: true },\n element: component,\n },\n }),\n );\n }\n }\n });\n }\n }\n\n submit() {\n const button = document.createElement('button');\n\n if (this.form) {\n button.type = 'submit';\n button.style.position = 'absolute';\n button.style.width = '0';\n button.style.height = '0';\n button.style.clip = 'rect(0 0 0 0)';\n button.style.clipPath = 'inset(50%)';\n button.style.overflow = 'hidden';\n button.style.whiteSpace = 'nowrap';\n this.form.append(button);\n button.click();\n button.remove();\n }\n }\n}\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-input-height: 50px;\n --kemet-input-color: inherit;\n --kemet-input-border: 1px solid;\n --kemet-input-padding-y: 0.5rem;\n --kemet-input-padding-x: 1rem;\n --kemet-input-icon-gap: 3rem;\n --kemet-input-font-color: var(--kemet-input-color);\n\n\n /* private */\n --_kemet-input-border-radius: 0;\n --_kemet-input-background-color: transparent;\n --_kemet-input-icon-left-padding: var(--kemet-input-padding-x);\n --_kemet-input-icon-right-padding: var(--kemet-input-padding-x);\n\n position: relative;\n display: block;\n}\n\ninput {\n color: var(--kemet-input-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n height: var(--kemet-input-height);\n border: var(--kemet-input-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-input-background-color);\n border-radius: var(--_kemet-input-border-radius);\n padding-left: var(--_kemet-input-icon-left-padding);\n padding-right: var(--_kemet-input-icon-right-padding);\n padding-top: var(--kemet-input-padding-y);\n padding-bottom: var(--kemet-input-padding-y);\n}\n\n:host([polarity=dark]) {\n --kemet-input-color: var(--kemet-color-font-inverse-base);\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([icon-left]) {\n --_kemet-input-icon-left-padding: var(--kemet-input-icon-gap);\n}\n\n:host([icon-right]) {\n --_kemet-input-icon-right-padding: var(--kemet-input-icon-gap);\n}\n\ninput[type=color] {\n min-width: 10rem;\n}\n\ninput[type=search]::-webkit-search-decoration,\ninput[type=search]::-webkit-search-cancel-button,\ninput[type=search]::-webkit-search-results-button,\ninput[type=search]::-webkit-search-results-decoration {\n display: none;\n}\n\n\n\n:host([appearance=brand]) {\n --kemet-input-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]) {\n --kemet-input-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success]) {\n --kemet-input-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning]) {\n --kemet-input-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link]) {\n --kemet-input-color: var(--kemet-color-font-link);\n}\n\n\n:host([appearance=brand][filled]) {\n --_kemet-input-background-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-input-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-link);\n}\n\n:host([disabled]) {\n --kemet-input-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-input-background-color: var(--kemet-color-background-inverse);\n --kemet-input-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\nkemet-icon,\n::slotted(kemet-icon) {\n color: var(--kemet-input-font-color);\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n\nkemet-icon.left,\n:host([icon-left]) ::slotted(kemet-icon) {\n left: 1rem;\n}\n\nkemet-icon.right,\n:host([icon-right]) ::slotted(kemet-icon) {\n right: 1rem;\n}\n\nkemet-icon.eye,\nkemet-icon.search {\n cursor: pointer;\n}\n`;\n"],"mappings":"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","names":["EnumInputTypes","EnumAriaAutoComplete","EnumAutoComplete","EnumInputModes"]}
|
|
@@ -65,7 +65,7 @@ input[type=search]::-webkit-search-results-decoration {
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
:host([appearance=brand]) {
|
|
68
|
-
--kemet-input-color: var(--kemet-color-brand-primary-
|
|
68
|
+
--kemet-input-color: var(--kemet-color-brand-primary-darker);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
:host([appearance=error]) {
|
|
@@ -86,7 +86,7 @@ input[type=search]::-webkit-search-results-decoration {
|
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
:host([appearance=brand][filled]) {
|
|
89
|
-
--_kemet-input-background-color: var(--kemet-color-brand-primary-
|
|
89
|
+
--_kemet-input-background-color: var(--kemet-color-brand-primary-darker);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
:host([appearance=error][filled]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/input/styles.css.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-input-height: 50px;\n --kemet-input-color: inherit;\n --kemet-input-border: 1px solid;\n --kemet-input-padding-y: 0.5rem;\n --kemet-input-padding-x: 1rem;\n --kemet-input-icon-gap: 3rem;\n --kemet-input-font-color: var(--kemet-input-color);\n\n\n /* private */\n --_kemet-input-border-radius: 0;\n --_kemet-input-background-color: transparent;\n --_kemet-input-icon-left-padding: var(--kemet-input-padding-x);\n --_kemet-input-icon-right-padding: var(--kemet-input-padding-x);\n\n position: relative;\n display: block;\n}\n\ninput {\n color: var(--kemet-input-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n height: var(--kemet-input-height);\n border: var(--kemet-input-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-input-background-color);\n border-radius: var(--_kemet-input-border-radius);\n padding-left: var(--_kemet-input-icon-left-padding);\n padding-right: var(--_kemet-input-icon-right-padding);\n padding-top: var(--kemet-input-padding-y);\n padding-bottom: var(--kemet-input-padding-y);\n}\n\n:host([polarity=dark]) {\n --kemet-input-color: var(--kemet-color-font-inverse-base);\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([icon-left]) {\n --_kemet-input-icon-left-padding: var(--kemet-input-icon-gap);\n}\n\n:host([icon-right]) {\n --_kemet-input-icon-right-padding: var(--kemet-input-icon-gap);\n}\n\ninput[type=color] {\n min-width: 10rem;\n}\n\ninput[type=search]::-webkit-search-decoration,\ninput[type=search]::-webkit-search-cancel-button,\ninput[type=search]::-webkit-search-results-button,\ninput[type=search]::-webkit-search-results-decoration {\n display: none;\n}\n\n\n\n:host([appearance=brand]) {\n --kemet-input-color: var(--kemet-color-brand-primary-
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/input/styles.css.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-input-height: 50px;\n --kemet-input-color: inherit;\n --kemet-input-border: 1px solid;\n --kemet-input-padding-y: 0.5rem;\n --kemet-input-padding-x: 1rem;\n --kemet-input-icon-gap: 3rem;\n --kemet-input-font-color: var(--kemet-input-color);\n\n\n /* private */\n --_kemet-input-border-radius: 0;\n --_kemet-input-background-color: transparent;\n --_kemet-input-icon-left-padding: var(--kemet-input-padding-x);\n --_kemet-input-icon-right-padding: var(--kemet-input-padding-x);\n\n position: relative;\n display: block;\n}\n\ninput {\n color: var(--kemet-input-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n height: var(--kemet-input-height);\n border: var(--kemet-input-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-input-background-color);\n border-radius: var(--_kemet-input-border-radius);\n padding-left: var(--_kemet-input-icon-left-padding);\n padding-right: var(--_kemet-input-icon-right-padding);\n padding-top: var(--kemet-input-padding-y);\n padding-bottom: var(--kemet-input-padding-y);\n}\n\n:host([polarity=dark]) {\n --kemet-input-color: var(--kemet-color-font-inverse-base);\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([icon-left]) {\n --_kemet-input-icon-left-padding: var(--kemet-input-icon-gap);\n}\n\n:host([icon-right]) {\n --_kemet-input-icon-right-padding: var(--kemet-input-icon-gap);\n}\n\ninput[type=color] {\n min-width: 10rem;\n}\n\ninput[type=search]::-webkit-search-decoration,\ninput[type=search]::-webkit-search-cancel-button,\ninput[type=search]::-webkit-search-results-button,\ninput[type=search]::-webkit-search-results-decoration {\n display: none;\n}\n\n\n\n:host([appearance=brand]) {\n --kemet-input-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]) {\n --kemet-input-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success]) {\n --kemet-input-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning]) {\n --kemet-input-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link]) {\n --kemet-input-color: var(--kemet-color-font-link);\n}\n\n\n:host([appearance=brand][filled]) {\n --_kemet-input-background-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-input-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-input-background-color: var(--kemet-color-font-link);\n}\n\n:host([disabled]) {\n --kemet-input-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-input-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-input-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-input-background-color: var(--kemet-color-background-inverse);\n --kemet-input-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\nkemet-icon,\n::slotted(kemet-icon) {\n color: var(--kemet-input-font-color);\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n\nkemet-icon.left,\n:host([icon-left]) ::slotted(kemet-icon) {\n left: 1rem;\n}\n\nkemet-icon.right,\n:host([icon-right]) ::slotted(kemet-icon) {\n right: 1rem;\n}\n\nkemet-icon.eye,\nkemet-icon.search {\n cursor: pointer;\n}\n`;\n"],"mappings":";AAAA,SAAS,WAAW;AAEpB,IAAO,qBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as lit_html from 'lit-html';
|
|
2
2
|
import * as lit from 'lit';
|
|
3
3
|
import { LitElement } from 'lit';
|
|
4
|
-
import {
|
|
4
|
+
import { e as EnumRoundedSizes, E as EnumAppearances, H as HTMLKemetFieldElement, K as KemetCombo } from '../../constants-BsAfWV-a.js';
|
|
5
5
|
import '../../form-controller-3q581XcZ.js';
|
|
6
6
|
|
|
7
7
|
interface InterfaceSelections {
|
|
@@ -82,7 +82,7 @@ input {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
:host([appearance=brand]) {
|
|
85
|
-
--kemet-input-combo-color: var(--kemet-color-brand-primary-
|
|
85
|
+
--kemet-input-combo-color: var(--kemet-color-brand-primary-darker);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
:host([appearance=error]) {
|
|
@@ -102,7 +102,7 @@ input {
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
:host([appearance=brand][filled]) {
|
|
105
|
-
--_kemet-input-combo-background-color: var(--kemet-color-brand-primary-
|
|
105
|
+
--_kemet-input-combo-background-color: var(--kemet-color-brand-primary-darker);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
:host([appearance=error][filled]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/input-combo/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/input-combo/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, query, state } from '../../utilities/decorators';\nimport { live } from 'lit/directives/live.js';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumKeyCodes, EnumAppearances, TypeRoundedSizes, TypeAppearance, EnumRoundedSizes } from '../../utilities/constants';\nimport HTMLKemetFieldElement from '../field';\nimport HTMLKemetComboElement from '../combo';\nimport styles from './styles.css.ts';\n\nexport interface InterfaceSelections {\n element: HTMLUListElement;\n text: string;\n id: string;\n}\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-multi-input\n * @summary An input element that accepts multiple items from a combo.\n * @ssrsafe yes\n *\n * @prop {string} slug - Used for the id of the input. Should match the slug used in a control if applicable.\n * @prop {string} name - The name of the input\n * @prop {string} placeholder - The placeholder attribute\n * @prop {boolean} disabled - The disable attribute\n * @prop {boolean} required - The required attribute\n * @prop {string} value - The input's value\n * @prop {boolean} invalid - States whether the input is invalid\n * @prop {string} status - The status of the input\n * @prop {boolean} validateOnBlur - Activates validation on blur\n * @prop {EnumRoundedSizes} rounded - Displays rounded corners\n * @prop {boolean} filled - Displays a filled input box\n * @prop {ValidityState} validity - The HTML5 validity object.\n\n *\n * @csspart input\n *\n * @cssproperty --kemet-input-combo-height - The height of the input.\n * @cssproperty --kemet-input-combo-color - The color of the input.\n * @cssproperty --kemet-input-combo-border - The border of the input.\n * @cssproperty --kemet-input-combo-padding-y - The padding on the input.\n * @cssproperty --kemet-input-combo-padding-x - The padding on the input.\n * @cssproperty --kemet-input-combo-icon-gap - The icon gap of the input.\n * @cssproperty --kemet-input-combo-font-color - The font color of the input.\n * @cssproperty --kemet-input-combo-chip-font-color - The font color of the chip.\n * @cssproperty --kemet-input-combo-chip-background-color - The background color of the chip.\n *\n * @event kemet-input-combo-focus - Fires when the input receives focus\n * @event kemet-input-combo-blur - Fires when the input loses focus\n * @event kemet-input-combo-input - Fires when the input receives input\n * @event kemet-input-combo-change - Fires when the input changes\n * @event kemet-input-combo-invalid - Fires when the input is invalid\n *\n */\n\n@customElement('kemet-input-combo')\nexport default class InputCombo extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n slug: string = 'input';\n\n @property({ type: String })\n placeholder: string = '';\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: Boolean })\n filled: boolean = false;\n\n @property({ type: String,reflect: true })\n rounded?: EnumRoundedSizes;\n\n @property({ type: String })\n name: string = 'input';\n\n @property({ reflect: true })\n appearance?: EnumAppearances;\n\n @property({ type: Boolean })\n required: boolean = false;\n\n @property({ type: Boolean })\n invalid!: boolean;\n\n @property({ type: Boolean, attribute: 'validate-on-blur' })\n validateOnBlur: boolean = false;\n\n @state()\n value: string = '';\n\n @state()\n selections: InterfaceSelections[] = [];\n\n @state()\n paddingLeft!: number;\n\n @state()\n field!: HTMLKemetFieldElement;\n\n @state()\n combo!: HTMLKemetComboElement;\n\n @query('[part=chips]')\n chips!: { offsetWidth: number; };\n\n @query('input')\n input!: HTMLInputElement;\n\n firstUpdated() {\n // elements\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.combo = this.field.querySelector('kemet-combo') as HTMLKemetComboElement;\n\n document.addEventListener('click', this.handleComboClose.bind(this));\n\n if (this.combo) {\n this.combo.addEventListener('kemet-combo-selection', (event: Event) => this.addComboItem(event));\n }\n }\n\n updated() {\n if (this.chips) this.calculatePadding();\n }\n\n render() {\n return html`\n <div>\n <input\n part=\"input\"\n id=${this.slug}\n name=${this.name}\n placeholder=${this.placeholder}\n ?required=${this.required}\n ?disabled=${this.disabled}\n @input=${this.handleInput}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @change=${this.handleChange}\n @invalid=${this.handleInvalid}\n @keydown=${this.handleKeydown}\n .value=${live(this.value)}\n />\n ${this.makeSelections()}\n </div>\n `;\n }\n\n /**\n * Handles when a selection is made from a combo\n * @private\n * @param event\n */\n\n addComboItem(event: Event) {\n this.value = '';\n this.appearance = EnumAppearances.Neutral;\n const isPresent = this.selections.find(selection => selection.id === (event as CustomEvent).detail.id);\n if (!isPresent) this.selections = [...this.selections, (event as CustomEvent).detail];\n }\n\n /**\n * Handles when the input receives input\n * @private\n */\n handleInput(event: Event) {\n this.value = (event.target as HTMLInputElement).value;\n emitEvent(this, 'kemet-input-combo-input', {\n element: this,\n validity: this.input.validity,\n status: this.appearance,\n value: (event.target as HTMLInputElement).value\n });\n }\n\n /**\n * Handles when the input is focused\n */\n handleFocus() {\n emitEvent(this, 'kemet-input-combo-focus', { element: this });\n }\n\n handleBlur() {\n emitEvent(this, 'kemet-input-combo-blur', { element: this });\n if (this.validateOnBlur) {\n this.input.checkValidity();\n }\n }\n\n handleChange(event: Event) {\n emitEvent(this, 'kemet-input-combo-change', {\n element: this,\n validity: this.input.validity,\n status: this.appearance,\n value: (event.target as HTMLInputElement).value\n });\n }\n\n handleInvalid(event: Event) {\n this.appearance = EnumAppearances.Error;\n emitEvent(this, 'kemet-input-combo-invalid', {\n element: this,\n validity: this.input.validity,\n status: this.appearance,\n value: (event.target as HTMLInputElement).value\n });\n }\n\n /**\n * Renders the chips from the selections of the combo\n * @private\n */\n makeSelections() {\n const selections = this.selections.map(selection => html`\n <li part=\"chip\">\n <span>${selection.text}</span>\n <button @click=${this.handleRemoveChip}>×</button>\n </li>\n `);\n\n if (this.selections) {\n return html`<ul part=\"chips\">${selections}</ul>`;\n }\n\n return null;\n }\n\n /**\n * calculates padding to properly place the cursor of the input\n * @private\n */\n calculatePadding() {\n this.paddingLeft = this.chips.offsetWidth + 16;\n }\n\n /**\n * handle removing a chip from the selections\n * @private\n */\n handleRemoveChip(event: MouseEvent) {\n const chip = (event.target as Element).closest('[part=chip]');\n if (chip) {\n const span = chip.querySelector('span');\n if (span) {\n const text = span.innerText;\n this.selections = this.selections.filter(selection => selection.text !== text);\n }\n }\n }\n\n handleComboClose(event: MouseEvent) {\n if (event.target !== this && this.combo) {\n this.combo.show = false;\n }\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (event.key === EnumKeyCodes.ESCAPE) {\n this.combo.show = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-input-combo': InputCombo\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 /* public */\n --kemet-input-combo-height: 50px;\n --kemet-input-combo-color: var(--kemet-color-font-base);\n --kemet-input-combo-border: 1px solid var(--kemet-input-combo-color);\n --kemet-input-combo-padding-y: 0.5rem;\n --kemet-input-combo-padding-x: 1rem;\n --kemet-input-combo-icon-gap: 3rem;\n --kemet-input-combo-font-color: var(--kemet-input-combo-color);\n --kemet-input-combo-chip-font-color: var(--kemet-color-font-inverse-base);\n --kemet-input-combo-chip-background-color: var(--kemet-color-background-inverse);\n\n /* private */\n --_kemet-input-combo-border-radius: var(--kemet-input-combo-border-radius);\n --_kemet-input-combo-background-color: transparent;\n --_kemet-input-combo-icon-left-padding: var(--kemet-input-combo-padding-x);\n --_kemet-input-combo-icon-right-padding: var(--kemet-input-combo-padding-x);\n\n position: relative;\n display: block;\n}\n\ninput {\n color: var(--kemet-input-combo-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n height: var(--kemet-input-combo-height);\n border: var(--kemet-input-combo-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-input-combo-background-color);\n border-radius: var(--_kemet-input-combo-border-radius);\n padding-left: var(--_kemet-input-combo-icon-left-padding);\n padding-right: var(--_kemet-input-combo-icon-right-padding);\n padding-top: var(--kemet-input-combo-padding-y);\n padding-bottom: var(--kemet-input-combo-padding-y);\n}\n\n:host([polarity=dark]) {\n --kemet-input-combo-color: var(--kemet-color-font-inverse-base);\n --kemet-input-combo-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([icon-left]) {\n --_kemet-input-combo-icon-left-padding: var(--kemet-input-combo-icon-gap);\n}\n\n:host([icon-right]) {\n --_kemet-input-combo-icon-right-padding: var(--kemet-input-combo-icon-gap);\n}\n\n:host([appearance=brand]) {\n --kemet-input-combo-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error]) {\n --kemet-input-combo-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success]) {\n --kemet-input-combo-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning]) {\n --kemet-input-combo-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link]) {\n --kemet-input-combo-color: var(--kemet-color-font-link);\n}\n\n:host([appearance=brand][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-brand-primary-base);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-link);\n}\n\n:host([disabled]) {\n --kemet-input-combo-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-input-combo-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-input-combo-background-color: var(--kemet-color-background-inverse);\n --kemet-input-combo-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\nkemet-icon,\n::slotted(kemet-icon) {\n color: var(--kemet-input-combo-font-color);\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n\nkemet-icon.left,\n:host([icon-left]) ::slotted(kemet-icon) {\n left: 1rem;\n}\n\nkemet-icon.right,\n:host([icon-right]) ::slotted(kemet-icon) {\n right: 1rem;\n}\n\n\ndiv {\n display: flex;\n gap: 1rem;\n flex-direction: column;\n}\n\nul {\n display: flex;\n gap: 0.5rem;\n margin: 0;\n padding: 0;\n list-style: none;\n flex-wrap: wrap;\n}\n\nli {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n padding: 0.25rem 0.5rem;\n color: var(--kemet-input-combo-chip-font-color);\n background-color: var(--kemet-input-combo-chip-background-color);\n}\n\n:host([rounded]) li {\n border-radius: var(--_kemet-input-combo-border-radius);\n}\n\nbutton {\n color: inherit;\n cursor: pointer;\n font-size: 1.25rem;\n padding: 0;\n border: 0;\n background-color: transparent\n}\n`;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/input-combo/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/input-combo/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, query, state } from '../../utilities/decorators';\nimport { live } from 'lit/directives/live.js';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumKeyCodes, EnumAppearances, TypeRoundedSizes, TypeAppearance, EnumRoundedSizes } from '../../utilities/constants';\nimport HTMLKemetFieldElement from '../field';\nimport HTMLKemetComboElement from '../combo';\nimport styles from './styles.css.ts';\n\nexport interface InterfaceSelections {\n element: HTMLUListElement;\n text: string;\n id: string;\n}\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-multi-input\n * @summary An input element that accepts multiple items from a combo.\n * @ssrsafe yes\n *\n * @prop {string} slug - Used for the id of the input. Should match the slug used in a control if applicable.\n * @prop {string} name - The name of the input\n * @prop {string} placeholder - The placeholder attribute\n * @prop {boolean} disabled - The disable attribute\n * @prop {boolean} required - The required attribute\n * @prop {string} value - The input's value\n * @prop {boolean} invalid - States whether the input is invalid\n * @prop {string} status - The status of the input\n * @prop {boolean} validateOnBlur - Activates validation on blur\n * @prop {EnumRoundedSizes} rounded - Displays rounded corners\n * @prop {boolean} filled - Displays a filled input box\n * @prop {ValidityState} validity - The HTML5 validity object.\n\n *\n * @csspart input\n *\n * @cssproperty --kemet-input-combo-height - The height of the input.\n * @cssproperty --kemet-input-combo-color - The color of the input.\n * @cssproperty --kemet-input-combo-border - The border of the input.\n * @cssproperty --kemet-input-combo-padding-y - The padding on the input.\n * @cssproperty --kemet-input-combo-padding-x - The padding on the input.\n * @cssproperty --kemet-input-combo-icon-gap - The icon gap of the input.\n * @cssproperty --kemet-input-combo-font-color - The font color of the input.\n * @cssproperty --kemet-input-combo-chip-font-color - The font color of the chip.\n * @cssproperty --kemet-input-combo-chip-background-color - The background color of the chip.\n *\n * @event kemet-input-combo-focus - Fires when the input receives focus\n * @event kemet-input-combo-blur - Fires when the input loses focus\n * @event kemet-input-combo-input - Fires when the input receives input\n * @event kemet-input-combo-change - Fires when the input changes\n * @event kemet-input-combo-invalid - Fires when the input is invalid\n *\n */\n\n@customElement('kemet-input-combo')\nexport default class InputCombo extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n slug: string = 'input';\n\n @property({ type: String })\n placeholder: string = '';\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: Boolean })\n filled: boolean = false;\n\n @property({ type: String,reflect: true })\n rounded?: EnumRoundedSizes;\n\n @property({ type: String })\n name: string = 'input';\n\n @property({ reflect: true })\n appearance?: EnumAppearances;\n\n @property({ type: Boolean })\n required: boolean = false;\n\n @property({ type: Boolean })\n invalid!: boolean;\n\n @property({ type: Boolean, attribute: 'validate-on-blur' })\n validateOnBlur: boolean = false;\n\n @state()\n value: string = '';\n\n @state()\n selections: InterfaceSelections[] = [];\n\n @state()\n paddingLeft!: number;\n\n @state()\n field!: HTMLKemetFieldElement;\n\n @state()\n combo!: HTMLKemetComboElement;\n\n @query('[part=chips]')\n chips!: { offsetWidth: number; };\n\n @query('input')\n input!: HTMLInputElement;\n\n firstUpdated() {\n // elements\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.combo = this.field.querySelector('kemet-combo') as HTMLKemetComboElement;\n\n document.addEventListener('click', this.handleComboClose.bind(this));\n\n if (this.combo) {\n this.combo.addEventListener('kemet-combo-selection', (event: Event) => this.addComboItem(event));\n }\n }\n\n updated() {\n if (this.chips) this.calculatePadding();\n }\n\n render() {\n return html`\n <div>\n <input\n part=\"input\"\n id=${this.slug}\n name=${this.name}\n placeholder=${this.placeholder}\n ?required=${this.required}\n ?disabled=${this.disabled}\n @input=${this.handleInput}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @change=${this.handleChange}\n @invalid=${this.handleInvalid}\n @keydown=${this.handleKeydown}\n .value=${live(this.value)}\n />\n ${this.makeSelections()}\n </div>\n `;\n }\n\n /**\n * Handles when a selection is made from a combo\n * @private\n * @param event\n */\n\n addComboItem(event: Event) {\n this.value = '';\n this.appearance = EnumAppearances.Neutral;\n const isPresent = this.selections.find(selection => selection.id === (event as CustomEvent).detail.id);\n if (!isPresent) this.selections = [...this.selections, (event as CustomEvent).detail];\n }\n\n /**\n * Handles when the input receives input\n * @private\n */\n handleInput(event: Event) {\n this.value = (event.target as HTMLInputElement).value;\n emitEvent(this, 'kemet-input-combo-input', {\n element: this,\n validity: this.input.validity,\n status: this.appearance,\n value: (event.target as HTMLInputElement).value\n });\n }\n\n /**\n * Handles when the input is focused\n */\n handleFocus() {\n emitEvent(this, 'kemet-input-combo-focus', { element: this });\n }\n\n handleBlur() {\n emitEvent(this, 'kemet-input-combo-blur', { element: this });\n if (this.validateOnBlur) {\n this.input.checkValidity();\n }\n }\n\n handleChange(event: Event) {\n emitEvent(this, 'kemet-input-combo-change', {\n element: this,\n validity: this.input.validity,\n status: this.appearance,\n value: (event.target as HTMLInputElement).value\n });\n }\n\n handleInvalid(event: Event) {\n this.appearance = EnumAppearances.Error;\n emitEvent(this, 'kemet-input-combo-invalid', {\n element: this,\n validity: this.input.validity,\n status: this.appearance,\n value: (event.target as HTMLInputElement).value\n });\n }\n\n /**\n * Renders the chips from the selections of the combo\n * @private\n */\n makeSelections() {\n const selections = this.selections.map(selection => html`\n <li part=\"chip\">\n <span>${selection.text}</span>\n <button @click=${this.handleRemoveChip}>×</button>\n </li>\n `);\n\n if (this.selections) {\n return html`<ul part=\"chips\">${selections}</ul>`;\n }\n\n return null;\n }\n\n /**\n * calculates padding to properly place the cursor of the input\n * @private\n */\n calculatePadding() {\n this.paddingLeft = this.chips.offsetWidth + 16;\n }\n\n /**\n * handle removing a chip from the selections\n * @private\n */\n handleRemoveChip(event: MouseEvent) {\n const chip = (event.target as Element).closest('[part=chip]');\n if (chip) {\n const span = chip.querySelector('span');\n if (span) {\n const text = span.innerText;\n this.selections = this.selections.filter(selection => selection.text !== text);\n }\n }\n }\n\n handleComboClose(event: MouseEvent) {\n if (event.target !== this && this.combo) {\n this.combo.show = false;\n }\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (event.key === EnumKeyCodes.ESCAPE) {\n this.combo.show = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-input-combo': InputCombo\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-input-combo-height: 50px;\n --kemet-input-combo-color: var(--kemet-color-font-base);\n --kemet-input-combo-border: 1px solid var(--kemet-input-combo-color);\n --kemet-input-combo-padding-y: 0.5rem;\n --kemet-input-combo-padding-x: 1rem;\n --kemet-input-combo-icon-gap: 3rem;\n --kemet-input-combo-font-color: var(--kemet-input-combo-color);\n --kemet-input-combo-chip-font-color: var(--kemet-color-font-inverse-base);\n --kemet-input-combo-chip-background-color: var(--kemet-color-background-inverse);\n\n /* private */\n --_kemet-input-combo-border-radius: var(--kemet-input-combo-border-radius);\n --_kemet-input-combo-background-color: transparent;\n --_kemet-input-combo-icon-left-padding: var(--kemet-input-combo-padding-x);\n --_kemet-input-combo-icon-right-padding: var(--kemet-input-combo-padding-x);\n\n position: relative;\n display: block;\n}\n\ninput {\n color: var(--kemet-input-combo-font-color);\n display: block;\n font-size: 1rem;\n width: 100%;\n height: var(--kemet-input-combo-height);\n border: var(--kemet-input-combo-border);\n appearance: none;\n box-sizing: border-box;\n background-color: var(--_kemet-input-combo-background-color);\n border-radius: var(--_kemet-input-combo-border-radius);\n padding-left: var(--_kemet-input-combo-icon-left-padding);\n padding-right: var(--_kemet-input-combo-icon-right-padding);\n padding-top: var(--kemet-input-combo-padding-y);\n padding-bottom: var(--kemet-input-combo-padding-y);\n}\n\n:host([polarity=dark]) {\n --kemet-input-combo-color: var(--kemet-color-font-inverse-base);\n --kemet-input-combo-font-color: var(--kemet-color-font-inverse-base);\n}\n\n:host([icon-left]) {\n --_kemet-input-combo-icon-left-padding: var(--kemet-input-combo-icon-gap);\n}\n\n:host([icon-right]) {\n --_kemet-input-combo-icon-right-padding: var(--kemet-input-combo-icon-gap);\n}\n\n:host([appearance=brand]) {\n --kemet-input-combo-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]) {\n --kemet-input-combo-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success]) {\n --kemet-input-combo-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning]) {\n --kemet-input-combo-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link]) {\n --kemet-input-combo-color: var(--kemet-color-font-link);\n}\n\n:host([appearance=brand][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-error);\n}\n\n:host([appearance=success][fiiled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-success);\n}\n\n:host([appearance=warning][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-warning);\n}\n\n:host([appearance=link][filled]) {\n --_kemet-input-combo-background-color: var(--kemet-color-font-link);\n}\n\n:host([disabled]) {\n --kemet-input-combo-color: var(--kemet-color-font-disabled);\n}\n\n:host([rounded]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-input-combo-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([filled]) {\n --kemet-input-combo-font-color: var(--kemet-color-font-inverse-base);\n --_kemet-input-combo-background-color: var(--kemet-color-background-inverse);\n --kemet-input-combo-border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n\nkemet-icon,\n::slotted(kemet-icon) {\n color: var(--kemet-input-combo-font-color);\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n\nkemet-icon.left,\n:host([icon-left]) ::slotted(kemet-icon) {\n left: 1rem;\n}\n\nkemet-icon.right,\n:host([icon-right]) ::slotted(kemet-icon) {\n right: 1rem;\n}\n\n\ndiv {\n display: flex;\n gap: 1rem;\n flex-direction: column;\n}\n\nul {\n display: flex;\n gap: 0.5rem;\n margin: 0;\n padding: 0;\n list-style: none;\n flex-wrap: wrap;\n}\n\nli {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n padding: 0.25rem 0.5rem;\n color: var(--kemet-input-combo-chip-font-color);\n background-color: var(--kemet-input-combo-chip-background-color);\n}\n\n:host([rounded]) li {\n border-radius: var(--_kemet-input-combo-border-radius);\n}\n\nbutton {\n color: inherit;\n cursor: pointer;\n font-size: 1.25rem;\n padding: 0;\n border: 0;\n background-color: transparent\n}\n`;\n"],"mappings":"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","names":[]}
|
|
@@ -53,7 +53,7 @@ input {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
:host([appearance=brand]) {
|
|
56
|
-
--kemet-input-combo-color: var(--kemet-color-brand-primary-
|
|
56
|
+
--kemet-input-combo-color: var(--kemet-color-brand-primary-darker);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
:host([appearance=error]) {
|
|
@@ -73,7 +73,7 @@ input {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
:host([appearance=brand][filled]) {
|
|
76
|
-
--_kemet-input-combo-background-color: var(--kemet-color-brand-primary-
|
|
76
|
+
--_kemet-input-combo-background-color: var(--kemet-color-brand-primary-darker);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
:host([appearance=error][filled]) {
|