kemet-ui 5.0.4 → 5.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1575 -1579
- package/dist/{constants-C4-3KYlX.d.ts → constants-BsAfWV-a.d.ts} +4 -3
- 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.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.map +1 -1
- package/dist/elements/button/index.d.ts +1 -1
- package/dist/elements/button/index.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 +2 -6
- package/dist/elements/checkbox/index.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.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 +13 -8
- package/dist/elements/input/index.js.map +1 -1
- package/dist/elements/input-combo/index.d.ts +1 -1
- package/dist/elements/input-combo/index.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.map +1 -1
- package/dist/elements/radios/index.d.ts +1 -1
- package/dist/elements/radios/index.js +2 -6
- 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 +11 -6
- package/dist/elements/select/index.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 +12 -7
- package/dist/elements/textarea/index.js.map +1 -1
- package/dist/elements/textarea/styles.css.js +1 -1
- 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 +2 -6
- 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 +46 -23
- package/dist/wrappers/react.js.map +1 -1
- package/package.json +1 -1
|
@@ -36,10 +36,8 @@ var FormSubmitController = class {
|
|
|
36
36
|
this.handleFormSubmit = this.handleFormSubmit.bind(this);
|
|
37
37
|
}
|
|
38
38
|
hostConnected() {
|
|
39
|
-
console.log("what?!");
|
|
40
39
|
this.form = this.options.form(this.host);
|
|
41
40
|
if (this.form) {
|
|
42
|
-
console.log("Adding form listeners");
|
|
43
41
|
this.form.addEventListener("formdata", this.handleFormData);
|
|
44
42
|
this.form.addEventListener("submit", this.handleFormSubmit);
|
|
45
43
|
}
|
|
@@ -60,7 +58,6 @@ var FormSubmitController = class {
|
|
|
60
58
|
}
|
|
61
59
|
}
|
|
62
60
|
handleFormSubmit(event) {
|
|
63
|
-
console.log("~~Form submitted~~");
|
|
64
61
|
event.preventDefault();
|
|
65
62
|
event.stopImmediatePropagation();
|
|
66
63
|
const disabled = this.options.disabled(this.host);
|
|
@@ -71,14 +68,13 @@ var FormSubmitController = class {
|
|
|
71
68
|
if (component.checkValidity) {
|
|
72
69
|
component.checkValidity();
|
|
73
70
|
if (!component.checkValidity()) {
|
|
71
|
+
console.log("invalid", component);
|
|
74
72
|
component.appearance = "error" /* Error */;
|
|
75
73
|
component.invalid = true;
|
|
76
74
|
component.dispatchEvent(
|
|
77
75
|
new CustomEvent("kemet-input-status", {
|
|
78
|
-
bubbles: true,
|
|
79
|
-
composed: true,
|
|
80
76
|
detail: {
|
|
81
|
-
|
|
77
|
+
appearance: "error" /* Error */,
|
|
82
78
|
validity: component.validity ? component.validity : {},
|
|
83
79
|
element: component
|
|
84
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/checkbox/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/checkbox/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, query } 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 } from '../../utilities/constants';\nimport styles from './styles.css.ts';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-checkbox\n * @summary An enhanced checkbox.\n * @ssrsafe yes\n *\n * @prop {string} label - Label text for the checkbox\n * @prop {boolean} checked - Determines if the checkbox is selected\n * @prop {boolean} indeterminate - An indeterminate selection status\n * @prop {string} name - Name of the checkbox\n * @prop {string} value - Value of the checkbox\n * @prop {boolean} disabled - Determines if a checkbox is disabled\n * @prop {boolean} required - Determines if a checkbox is required\n * @prop {boolean} focused - Is true when the checkbox is focused\n * @prop {boolean} rounded - Gives the checkbox rounded edges\n * @prop {boolean} filled - Fills the checkbox with color\n * @prop {EnumAppearances} appearance - The status of the checkbox\n * @prop {string} message - Message associated with checkbox status\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @csspart label - The label element.\n * @csspart text - The label's text.\n * @csspart mark - The icon of the check mark.\n *\n * @cssproperty --kemet-checkbox-size - The width and height of the checkbox.\n * @cssproperty --kemet-checkbox-color - The color of the checkbox mark.\n * @cssproperty --kemet-checkbox-border - The border of the checkbox.\n * @cssproperty --kemet-checkbox-border-radius - The border radius of the checkbox.\n * @cssproperty --kemet-checkbox-filled-color - The filled color of the checkbox mark.\n * @cssproperty --kemet-checkbox-filled-background-color - The filled background color.\n *\n * @fires kemet-change - Fires when the state of the checkbox changes\n * @details {KemetCheckbox} element - The checkbox element\n *\n * @fires kemet-focus - Fires when the checkbox receives focus\n * @details {KemetCheckbox} element - The checkbox element\n *\n * @fires kemet-blur - Fires when the checkbox loses focus\n * @details {KemetCheckbox} element - The checkbox element\n *\n * @fires kemet-checkbox-mounted - Fires when the checkbox is mounted to the dom\n * @details {KemetCheckbox} element -The checkbox element\n *\n */\n\n@customElement('kemet-checkbox')\nexport default class KemetCheckbox extends LitElement {\n /** @internal */\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Boolean, reflect: true })\n checked: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n indeterminate: boolean = false;\n\n @property({ type: String })\n name: string = 'checkbox';\n\n @property({ type: Boolean })\n value: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n required: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n focused: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n rounded: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n filled: boolean = false;\n\n @property({ type: String, reflect: true })\n appearance!: EnumAppearances;\n\n @property({ type: String })\n message: 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 @query('input')\n input!: HTMLInputElement;\n\n firstUpdated() {\n emitEvent(this, 'kemet-checkbox-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n constructor() {\n super();\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n render() {\n return html`\n <label part=\"label\">\n <input\n type=\"checkbox\"\n name=${ifDefined(this.name)}\n .value=${this.value}\n .indeterminate=${live(this.indeterminate)}\n .checked=${live(this.checked)}\n .disabled=${this.disabled}\n .required=${this.required}\n aria-checked=${this.checked ? 'true' : 'false'}\n @click=${() => this.handleClick()}\n @blur=${() => this.handleBlur()}\n @focus=${() => this.handleFocus()}\n @change=${() => this.handleChange()}\n />\n <button part=\"checkbox\" aria-label=${this.label}>\n ${this.makeCheckMark()}\n </button>\n <span part=\"text\">${this.label}</span>\n </label>\n ${this.makeMessage()}\n `;\n }\n\n /**\n * Simulates a click on the input element.\n * @public\n * @method click\n * @returns {void}\n */\n click(): void {\n this.input.click();\n }\n\n handleClick() {\n this.checked = !this.checked;\n this.indeterminate = false;\n emitEvent(this, 'kemet-change', { element: this });\n }\n\n handleBlur() {\n this.focused = false;\n emitEvent(this, 'kemet-blur', { element: this });\n }\n\n handleFocus() {\n this.focused = true;\n emitEvent(this, 'kemet-focus', { element: this });\n }\n\n handleChange() {\n this.value = this.checked;\n }\n\n makeMessage() {\n if (this.appearance === EnumAppearances.Error || this.appearance === EnumAppearances.Warning) {\n return html`<span part=\"message\">${this.message}</span>`;\n }\n\n return null;\n }\n\n makeCheckMark() {\n if (this.checked) {\n return html`\n <span part=\"mark\">\n <svg viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n <g stroke=\"currentColor\" stroke-width=\"2\">\n <g transform=\"translate(3.428571, 3.428571)\">\n <path d=\"M0,5.71428571 L3.42857143,9.14285714\"></path>\n <path d=\"M9.14285714,0 L3.42857143,9.14285714\"></path>\n </g>\n </g>\n </g>\n </svg>\n </span>\n `;\n }\n\n if (!this.checked && this.indeterminate) {\n return html`\n <span part=\"mark\">\n <svg viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n <g stroke=\"currentColor\" stroke-width=\"2\">\n <g transform=\"translate(2.285714, 6.857143)\">\n <path d=\"M10.2857143,1.14285714 L1.14285714,1.14285714\"></path>\n </g>\n </g>\n </g>\n </svg>\n </span>\n `;\n }\n\n return null;\n }\n\n checkValidity() {\n return this.input.checkValidity();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-checkbox': KemetCheckbox\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { EnumAppearances } from \"./constants\";\n\nexport class FormSubmitController {\n host: any;\n form: HTMLFormElement | null | undefined;\n options: {\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n };\n\n constructor(host: any, options: Partial<{\n form: (input: any) => HTMLFormElement | null | undefined;\n name: (input: any) => string;\n value: (input: any) => any;\n disabled: (input: any) => boolean;\n }> = {}) {\n (this.host = host).addController(this);\n\n this.options = {\n form: (input: any) => input.closest('form'),\n name: (input: any) => input.name,\n value: (input: any) => input.value,\n disabled: (input: any) => input.disabled,\n ...options,\n };\n\n this.handleFormData = this.handleFormData.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n\n\n }\n\n hostConnected() {\n console.log('what?!');\n this.form = this.options.form(this.host);\n\n if (this.form) {\n console.log('Adding form listeners');\n this.form.addEventListener('formdata', this.handleFormData);\n this.form.addEventListener('submit', this.handleFormSubmit);\n }\n }\n\n hostDisconnected() {\n if (this.form) {\n this.form.removeEventListener('formdata', this.handleFormData);\n this.form.removeEventListener('submit', this.handleFormSubmit);\n this.form = undefined;\n }\n }\n\n handleFormData(event: FormDataEvent) {\n const disabled = this.options.disabled(this.host);\n const name = this.options.name(this.host);\n const value = this.options.value(this.host);\n\n if (!disabled && typeof name === 'string' && typeof value !== 'undefined') {\n // TODO recreate a scenario where value will be an array\n // if (Array.isArray(value)) {\n // value.forEach((val) => {\n // event.formData?.append(name, val.toString());\n // });\n // } else {\n // event.formData?.append(name, value.toString());\n // }\n event.formData?.append(name, value.toString());\n }\n }\n\n handleFormSubmit(event: SubmitEvent) {\n console.log('~~Form submitted~~');\n event.preventDefault();\n event.stopImmediatePropagation();\n\n const disabled = this.options.disabled(this.host);\n this.form = this.options.form(this.host);\n\n if (this.form && !disabled) {\n const components = this.form.querySelectorAll('kemet-input, kemet-textarea, kemet-select, kemet-checkbox, kemet-radios');\n\n components.forEach((component: any) => {\n if (component.checkValidity) {\n component.checkValidity();\n\n if (!component.checkValidity()) {\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n bubbles: true,\n composed: true,\n detail: {\n status: EnumAppearances.Error,\n validity: component.validity ? component.validity : {},\n element: component,\n },\n }),\n );\n }\n\n if (component.checkLimitValidity && !component.checkLimitValidity()) {\n component.appearance = EnumAppearances.Error;\n component.invalid = true;\n\n component.dispatchEvent(\n new CustomEvent('kemet-input-status', {\n bubbles: true,\n composed: true,\n detail: {\n status: 'error',\n validity: { passedLimit: true },\n element: component,\n },\n }),\n );\n }\n }\n });\n }\n }\n\n submit() {\n const button = document.createElement('button');\n\n if (this.form) {\n button.type = 'submit';\n button.style.position = 'absolute';\n button.style.width = '0';\n button.style.height = '0';\n button.style.clip = 'rect(0 0 0 0)';\n button.style.clipPath = 'inset(50%)';\n button.style.overflow = 'hidden';\n button.style.whiteSpace = 'nowrap';\n this.form.append(button);\n button.click();\n button.remove();\n }\n }\n}\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n /* public */\n --kemet-checkbox-size: 18px;\n --kemet-checkbox-color: var(--kemet-color-background-inverse);\n --kemet-checkbox-mark-color: var(--kemet-checkbox-color);\n --kemet-checkbox-border: 1px solid var(--kemet-checkbox-color);\n --kemet-checkbox-border-radius: 0;\n\n /* private */\n --_kemet-checkbox-background-color: transparent;\n\n display: inline-block;\n}\n\n:host([disabled]) {\n --kemet-checkbox-color: var(--kemet-color-background-disabled)\n}\n\nlabel {\n display: inline-flex;\n gap: 0.5rem;\n align-items: center;\n}\n\ninput {\n cursor: pointer;\n margin: 0;\n padding: 0;\n width: var(--kemet-checkbox-size);\n height: var(--kemet-checkbox-size);\n position: relative;\n z-index: 99;\n opacity: 0;\n}\n\nbutton {\n margin: 0;\n border: none;\n background: none;\n}\n\n[part=checkbox] {\n color: var(--kemet-checkbox-mark-color);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--kemet-checkbox-size);\n height: var(--kemet-checkbox-size);\n border: var(--kemet-checkbox-border);\n border-radius: var(--kemet-checkbox-border-radius);\n background-color: var(--_kemet-checkbox-background-color);\n position: absolute;\n}\n\n:host([rounded]) [part=checkbox] {\n --kemet-checkbox-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([filled]) {\n --kemet-checkbox-mark-color: var(--kemet-color-font-inverse-base);\n --kemet-checkbox-border: 1px solid var(--kemet-checkbox-color);\n --_kemet-checkbox-background-color: var(--kemet-checkbox-color);\n}\n\n\n[part=mark] {\n display: flex;\n width: calc(var(--kemet-checkbox-size) - 4px);\n height: calc(var(--kemet-checkbox-size) - 4px);\n}\n\n:host([filled][checked]) [part=mark],\n:host([filled][indeterminate]) [part=mark] {\n --kemet-checkbox-mark-color: var(--kemet-color-font-base-inverse);\n}\n\n[part=message] {\n display: block;\n margin-top: 0.5rem;\n}\n\n:host([appearance=brand]) {\n --kemet-checkbox-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]) {\n --kemet-checkbox-color: var(--kemet-color-background-error);\n}\n\n:host([appearance=warning]) {\n --kemet-checkbox-color: var(--kemet-color-background-warning);\n}\n\n:host([appearance=info]) {\n --kemet-checkbox-color: var(--kemet-color-background-info);\n}\n\n:host([appearance=link]) {\n --kemet-checkbox-color: var(--kemet-color-background-link);\n}\n`;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/checkbox/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/form-controller.ts","../../../src/utilities/events.ts","../../../src/elements/checkbox/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, query } 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 } from '../../utilities/constants';\nimport styles from './styles.css.ts';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-checkbox\n * @summary An enhanced checkbox.\n * @ssrsafe yes\n *\n * @prop {string} label - Label text for the checkbox\n * @prop {boolean} checked - Determines if the checkbox is selected\n * @prop {boolean} indeterminate - An indeterminate selection status\n * @prop {string} name - Name of the checkbox\n * @prop {string} value - Value of the checkbox\n * @prop {boolean} disabled - Determines if a checkbox is disabled\n * @prop {boolean} required - Determines if a checkbox is required\n * @prop {boolean} focused - Is true when the checkbox is focused\n * @prop {boolean} rounded - Gives the checkbox rounded edges\n * @prop {boolean} filled - Fills the checkbox with color\n * @prop {EnumAppearances} appearance - The status of the checkbox\n * @prop {string} message - Message associated with checkbox status\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @csspart label - The label element.\n * @csspart text - The label's text.\n * @csspart mark - The icon of the check mark.\n *\n * @cssproperty --kemet-checkbox-size - The width and height of the checkbox.\n * @cssproperty --kemet-checkbox-color - The color of the checkbox mark.\n * @cssproperty --kemet-checkbox-border - The border of the checkbox.\n * @cssproperty --kemet-checkbox-border-radius - The border radius of the checkbox.\n * @cssproperty --kemet-checkbox-filled-color - The filled color of the checkbox mark.\n * @cssproperty --kemet-checkbox-filled-background-color - The filled background color.\n *\n * @fires kemet-change - Fires when the state of the checkbox changes\n * @details {KemetCheckbox} element - The checkbox element\n *\n * @fires kemet-focus - Fires when the checkbox receives focus\n * @details {KemetCheckbox} element - The checkbox element\n *\n * @fires kemet-blur - Fires when the checkbox loses focus\n * @details {KemetCheckbox} element - The checkbox element\n *\n * @fires kemet-checkbox-mounted - Fires when the checkbox is mounted to the dom\n * @details {KemetCheckbox} element -The checkbox element\n *\n */\n\n@customElement('kemet-checkbox')\nexport default class KemetCheckbox extends LitElement {\n /** @internal */\n formSubmitController: FormSubmitController;\n\n static styles = [styles];\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Boolean, reflect: true })\n checked: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n indeterminate: boolean = false;\n\n @property({ type: String })\n name: string = 'checkbox';\n\n @property({ type: Boolean })\n value: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n required: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n focused: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n rounded: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n filled: boolean = false;\n\n @property({ type: String, reflect: true })\n appearance!: EnumAppearances;\n\n @property({ type: String })\n message: 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 @query('input')\n input!: HTMLInputElement;\n\n firstUpdated() {\n emitEvent(this, 'kemet-checkbox-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n constructor() {\n super();\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n render() {\n return html`\n <label part=\"label\">\n <input\n type=\"checkbox\"\n name=${ifDefined(this.name)}\n .value=${this.value}\n .indeterminate=${live(this.indeterminate)}\n .checked=${live(this.checked)}\n .disabled=${this.disabled}\n .required=${this.required}\n aria-checked=${this.checked ? 'true' : 'false'}\n @click=${() => this.handleClick()}\n @blur=${() => this.handleBlur()}\n @focus=${() => this.handleFocus()}\n @change=${() => this.handleChange()}\n />\n <button part=\"checkbox\" aria-label=${this.label}>\n ${this.makeCheckMark()}\n </button>\n <span part=\"text\">${this.label}</span>\n </label>\n ${this.makeMessage()}\n `;\n }\n\n /**\n * Simulates a click on the input element.\n * @public\n * @method click\n * @returns {void}\n */\n click(): void {\n this.input.click();\n }\n\n handleClick() {\n this.checked = !this.checked;\n this.indeterminate = false;\n emitEvent(this, 'kemet-change', { element: this });\n }\n\n handleBlur() {\n this.focused = false;\n emitEvent(this, 'kemet-blur', { element: this });\n }\n\n handleFocus() {\n this.focused = true;\n emitEvent(this, 'kemet-focus', { element: this });\n }\n\n handleChange() {\n this.value = this.checked;\n }\n\n makeMessage() {\n if (this.appearance === EnumAppearances.Error || this.appearance === EnumAppearances.Warning) {\n return html`<span part=\"message\">${this.message}</span>`;\n }\n\n return null;\n }\n\n makeCheckMark() {\n if (this.checked) {\n return html`\n <span part=\"mark\">\n <svg viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n <g stroke=\"currentColor\" stroke-width=\"2\">\n <g transform=\"translate(3.428571, 3.428571)\">\n <path d=\"M0,5.71428571 L3.42857143,9.14285714\"></path>\n <path d=\"M9.14285714,0 L3.42857143,9.14285714\"></path>\n </g>\n </g>\n </g>\n </svg>\n </span>\n `;\n }\n\n if (!this.checked && this.indeterminate) {\n return html`\n <span part=\"mark\">\n <svg viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n <g stroke=\"currentColor\" stroke-width=\"2\">\n <g transform=\"translate(2.285714, 6.857143)\">\n <path d=\"M10.2857143,1.14285714 L1.14285714,1.14285714\"></path>\n </g>\n </g>\n </g>\n </svg>\n </span>\n `;\n }\n\n return null;\n }\n\n checkValidity() {\n return this.input.checkValidity();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-checkbox': KemetCheckbox\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-checkbox-size: 18px;\n --kemet-checkbox-color: var(--kemet-color-background-inverse);\n --kemet-checkbox-mark-color: var(--kemet-checkbox-color);\n --kemet-checkbox-border: 1px solid var(--kemet-checkbox-color);\n --kemet-checkbox-border-radius: 0;\n\n /* private */\n --_kemet-checkbox-background-color: transparent;\n\n display: inline-block;\n}\n\n:host([disabled]) {\n --kemet-checkbox-color: var(--kemet-color-background-disabled)\n}\n\nlabel {\n display: inline-flex;\n gap: 0.5rem;\n align-items: center;\n}\n\ninput {\n cursor: pointer;\n margin: 0;\n padding: 0;\n width: var(--kemet-checkbox-size);\n height: var(--kemet-checkbox-size);\n position: relative;\n z-index: 99;\n opacity: 0;\n}\n\nbutton {\n margin: 0;\n border: none;\n background: none;\n}\n\n[part=checkbox] {\n color: var(--kemet-checkbox-mark-color);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--kemet-checkbox-size);\n height: var(--kemet-checkbox-size);\n border: var(--kemet-checkbox-border);\n border-radius: var(--kemet-checkbox-border-radius);\n background-color: var(--_kemet-checkbox-background-color);\n position: absolute;\n}\n\n:host([rounded]) [part=checkbox] {\n --kemet-checkbox-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([filled]) {\n --kemet-checkbox-mark-color: var(--kemet-color-font-inverse-base);\n --kemet-checkbox-border: 1px solid var(--kemet-checkbox-color);\n --_kemet-checkbox-background-color: var(--kemet-checkbox-color);\n}\n\n\n[part=mark] {\n display: flex;\n width: calc(var(--kemet-checkbox-size) - 4px);\n height: calc(var(--kemet-checkbox-size) - 4px);\n}\n\n:host([filled][checked]) [part=mark],\n:host([filled][indeterminate]) [part=mark] {\n --kemet-checkbox-mark-color: var(--kemet-color-font-base-inverse);\n}\n\n[part=message] {\n display: block;\n margin-top: 0.5rem;\n}\n\n:host([appearance=brand]) {\n --kemet-checkbox-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]) {\n --kemet-checkbox-color: var(--kemet-color-background-error);\n}\n\n:host([appearance=warning]) {\n --kemet-checkbox-color: var(--kemet-color-background-warning);\n}\n\n:host([appearance=info]) {\n --kemet-checkbox-color: var(--kemet-color-background-info);\n}\n\n:host([appearance=link]) {\n --kemet-checkbox-color: var(--kemet-color-background-link);\n}\n`;\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'lit-html';
|
|
2
2
|
import 'lit';
|
|
3
|
-
export { I as InterfaceKemetSelectionEvent, K as default } from '../../constants-
|
|
3
|
+
export { I as InterfaceKemetSelectionEvent, K as default } from '../../constants-BsAfWV-a.js';
|
|
4
4
|
import '../../form-controller-3q581XcZ.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/combo/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/combo/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport type HTMLKemetFieldElement from '../field';\nimport styles from './styles.css.ts';\n\nexport interface InterfaceKemetSelectionEvent {\n element: KemetCombo;\n text: string;\n id: string;\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-combo\n * @summary Allows the user to select a choice filtered through an Input. May only be used as a component of Field.\n * @ssrsafe yes\n *\n * @prop {string} slug - Uniquely identifies the component. Should match the slug used in a control.\n * @prop {array} options - An array of items listed for the combo box\n * @prop {boolean} show - Controls the display of the combo box\n *\n * @csspart combobox - The combo's container element.\n * @csspart listbox - The list element in the combo.\n *\n * @cssproperty --kemet-combo-width - The width of the combo box.\n * @cssproperty --kemet-combo-margin - The margins on the combo box.\n * @cssproperty --kemet-combo-max-height - The max height of the combo box.\n * @cssproperty --kemet-combo-border - The border of the combo box.\n * @cssproperty --kemet-combo-border-radius - The border radius of the combo box.\n * @cssproperty --kemet-combo-background-color - The background color of the combo box.\n * @cssproperty --kemet-combo-shadow - The shadow of the combo box.\n * @cssproperty --kemet-combo-hover-color - The hover item's text color.\n * @cssproperty --kemet-combo-hover-background-color - The hover item's background color.\n *\n * @event kemet-combo-selection - Fires when a selection has been made\n *\n */\n\n\n@customElement('kemet-combo')\nexport default class KemetCombo extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n slug?: string;\n\n @property({ type: Array })\n options: string[] = [];\n\n @property({ type: Boolean, reflect: true })\n show!: boolean;\n\n @state()\n filteredOptions: string[] = [];\n\n @state()\n field!: HTMLKemetFieldElement;\n\n @state()\n input!: HTMLInputElement;\n\n firstUpdated() {\n // standard properties\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.input = this.field.querySelector('[slot=\"input\"]') as HTMLInputElement;\n\n // managed properties\n this.slug = this.field.slug || 'slug';\n\n // events listeners\n this.input.addEventListener('kemet-input-input', this.handleInput.bind(this));\n this.input.addEventListener('kemet-input-focus', this.handleFocus.bind(this));\n this.input.addEventListener('kemet-input-combo-input', this.handleInput.bind(this));\n this.input.addEventListener('kemet-input-combo-focus', this.handleFocus.bind(this));\n this.input.addEventListener('keydown', event => this.handleInputKeyDown(event));\n }\n\n render() {\n return html`\n <div\n role=\"combobox\"\n part=\"combobox\"\n aria-expanded=${this.show}\n aria-controls=\"${this.slug}-listbox\"\n aria-haspopup=\"listbox\"\n id=\"${this.slug}-combobox\"\n aria-label=\"${this.field?.label}\"\n >\n <ul role=\"listbox\" aria-labelledby=\"${this.slug}-label\" id=\"${this.slug}-listbox\" part=\"listbox\">\n ${this.makeOptions()}\n </ul>\n </div>\n `;\n }\n\n makeOptions() {\n if (this.input) {\n this.filteredOptions = this.options.filter(\n option => option.toLowerCase().indexOf(this.input.value?.toLowerCase()) !== -1,\n );\n\n if (this.filteredOptions.length < 1) {\n this.show = false;\n return null;\n }\n\n return this.filteredOptions.map(\n (option, index) => html`<li\n id=\"${this.slug}-option-${index}\"\n role=\"option\"\n tabindex=\"0\"\n aria-selected=\"false\"\n @click=${(event: KeyboardEvent) => this.handleSelection(event)}\n @keydown=${(event: KeyboardEvent) => this.handleOptionKeyDown(event)}\n >\n ${option}\n </li>`,\n );\n }\n\n return null;\n }\n\n handleInput(event: Event) {\n this.makeOptions();\n this.show = (event as CustomEvent).detail.value.length > 0;\n }\n\n handleFocus() {\n this.makeOptions();\n this.show = true;\n }\n\n handleSelection(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n this.input.value = target.innerText;\n this.show = false;\n\n emitEvent(this, 'kemet-combo-selection', {\n element: target,\n text: target.innerText,\n id: target.getAttribute('id'),\n });\n }\n\n handleOptionKeyDown(event: KeyboardEvent) {\n event.preventDefault();\n const target = event.target as HTMLElement;\n\n if (event.code === 'ArrowDown') {\n const next = target.nextElementSibling as HTMLElement;\n\n if (next) {\n next.focus();\n } else {\n this.shadowRoot?.querySelector('li')?.focus();\n }\n }\n\n if (event.code === 'ArrowUp') {\n const previous = target.previousElementSibling as HTMLElement;\n const lastChild = this.shadowRoot?.querySelector('li:last-child') as HTMLElement;\n\n if (previous) {\n previous.focus();\n } else {\n lastChild.focus();\n }\n }\n\n if (event.code === 'Escape' || event.code === 'Tab') {\n this.show = false;\n this.input.focus();\n }\n\n if (event.code === 'Enter' || event.code === 'Space') {\n this.handleSelection(event);\n }\n }\n\n handleInputKeyDown(event: KeyboardEvent) {\n if (event.code === 'ArrowDown') {\n this.shadowRoot?.querySelector('li')?.focus();\n }\n\n if (event.code === 'Escape') {\n this.show = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-combo': KemetCombo\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-combo-width: calc(100% - 2px);\n --kemet-combo-margin: 1rem auto;\n --kemet-combo-max-height: calc(5 * 3rem);\n --kemet-combo-border: 1px solid;\n --kemet-combo-border-radius: var(--kemet-border-radius-md);\n --kemet-combo-shadow: var(--kemet-elevation-layer-5);\n --kemet-combo-font-color: var(--kemet-color-font-base);\n --kemet-combo-background-color: var(--kemet-color-background-base);\n --kemet-combo-item-background-color: var(--kemet-color-background-base);\n\n\n opacity: 0;\n width: var(--kemet-combo-width);\n margin: var(--kemet-combo-margin);\n pointer-events: none;\n display: block;\n position: relative;\n transition: opacity 0.3s ease-in-out;\n}\n\n:host([show]) {\n opacity: 1;\n pointer-events: auto;\n}\n\nul {\n width: 100%;\n max-height: var(--kemet-combo-max-height);\n position: absolute;\n z-index: 1;\n list-style: none;\n margin: 0;\n padding: 0;\n overflow-y: auto;\n border: var(--kemet-combo-border);\n border-radius: var(--kemet-combo-border-radius);\n box-shadow: var(--kemet-combo-shadow);\n background-color: var(--kemet-combo-background-color);\n}\n\nli {\n color: var(--kemet-combo-font-color);\n line-height: 3rem;\n padding: 0 1.5rem;\n cursor: pointer;\n background-color: var(--kemet-combo-item-background-color);\n}\n\nli:hover,\nli:focus {\n --kemet-combo-font-color: var(--kemet-color-font-inverse-base);\n --kemet-combo-item-background-color: var(--kemet-color-background-inverse);\n outline: none;\n}\n`;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/combo/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/combo/styles.css.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport type HTMLKemetFieldElement from '../field';\nimport styles from './styles.css.ts';\n\nexport interface InterfaceKemetSelectionEvent {\n element: KemetCombo;\n text: string;\n id: string;\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-combo\n * @summary Allows the user to select a choice filtered through an Input. May only be used as a component of Field.\n * @ssrsafe yes\n *\n * @prop {string} slug - Uniquely identifies the component. Should match the slug used in a control.\n * @prop {array} options - An array of items listed for the combo box\n * @prop {boolean} show - Controls the display of the combo box\n *\n * @csspart combobox - The combo's container element.\n * @csspart listbox - The list element in the combo.\n *\n * @cssproperty --kemet-combo-width - The width of the combo box.\n * @cssproperty --kemet-combo-margin - The margins on the combo box.\n * @cssproperty --kemet-combo-max-height - The max height of the combo box.\n * @cssproperty --kemet-combo-border - The border of the combo box.\n * @cssproperty --kemet-combo-border-radius - The border radius of the combo box.\n * @cssproperty --kemet-combo-background-color - The background color of the combo box.\n * @cssproperty --kemet-combo-shadow - The shadow of the combo box.\n * @cssproperty --kemet-combo-hover-color - The hover item's text color.\n * @cssproperty --kemet-combo-hover-background-color - The hover item's background color.\n *\n * @event kemet-combo-selection - Fires when a selection has been made\n *\n */\n\n\n@customElement('kemet-combo')\nexport default class KemetCombo extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n slug?: string;\n\n @property({ type: Array })\n options: string[] = [];\n\n @property({ type: Boolean, reflect: true })\n show!: boolean;\n\n @state()\n filteredOptions: string[] = [];\n\n @state()\n field!: HTMLKemetFieldElement;\n\n @state()\n input!: HTMLInputElement;\n\n firstUpdated() {\n // standard properties\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.input = this.field.querySelector('[slot=\"input\"]') as HTMLInputElement;\n\n // managed properties\n this.slug = this.field.slug || 'slug';\n\n // events listeners\n this.input.addEventListener('kemet-input-input', this.handleInput.bind(this));\n this.input.addEventListener('kemet-input-focus', this.handleFocus.bind(this));\n this.input.addEventListener('kemet-input-combo-input', this.handleInput.bind(this));\n this.input.addEventListener('kemet-input-combo-focus', this.handleFocus.bind(this));\n this.input.addEventListener('keydown', event => this.handleInputKeyDown(event));\n }\n\n render() {\n return html`\n <div\n role=\"combobox\"\n part=\"combobox\"\n aria-expanded=${this.show}\n aria-controls=\"${this.slug}-listbox\"\n aria-haspopup=\"listbox\"\n id=\"${this.slug}-combobox\"\n aria-label=\"${this.field?.label}\"\n >\n <ul role=\"listbox\" aria-labelledby=\"${this.slug}-label\" id=\"${this.slug}-listbox\" part=\"listbox\">\n ${this.makeOptions()}\n </ul>\n </div>\n `;\n }\n\n makeOptions() {\n if (this.input) {\n this.filteredOptions = this.options.filter(\n option => option.toLowerCase().indexOf(this.input.value?.toLowerCase()) !== -1,\n );\n\n if (this.filteredOptions.length < 1) {\n this.show = false;\n return null;\n }\n\n return this.filteredOptions.map(\n (option, index) => html`<li\n id=\"${this.slug}-option-${index}\"\n role=\"option\"\n tabindex=\"0\"\n aria-selected=\"false\"\n @click=${(event: KeyboardEvent) => this.handleSelection(event)}\n @keydown=${(event: KeyboardEvent) => this.handleOptionKeyDown(event)}\n >\n ${option}\n </li>`,\n );\n }\n\n return null;\n }\n\n handleInput(event: Event) {\n this.makeOptions();\n this.show = (event as CustomEvent).detail.value.length > 0;\n }\n\n handleFocus() {\n this.makeOptions();\n this.show = true;\n }\n\n handleSelection(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n this.input.value = target.innerText;\n this.show = false;\n\n emitEvent(this, 'kemet-combo-selection', {\n element: target,\n text: target.innerText,\n id: target.getAttribute('id'),\n });\n }\n\n handleOptionKeyDown(event: KeyboardEvent) {\n event.preventDefault();\n const target = event.target as HTMLElement;\n\n if (event.code === 'ArrowDown') {\n const next = target.nextElementSibling as HTMLElement;\n\n if (next) {\n next.focus();\n } else {\n this.shadowRoot?.querySelector('li')?.focus();\n }\n }\n\n if (event.code === 'ArrowUp') {\n const previous = target.previousElementSibling as HTMLElement;\n const lastChild = this.shadowRoot?.querySelector('li:last-child') as HTMLElement;\n\n if (previous) {\n previous.focus();\n } else {\n lastChild.focus();\n }\n }\n\n if (event.code === 'Escape' || event.code === 'Tab') {\n this.show = false;\n this.input.focus();\n }\n\n if (event.code === 'Enter' || event.code === 'Space') {\n this.handleSelection(event);\n }\n }\n\n handleInputKeyDown(event: KeyboardEvent) {\n if (event.code === 'ArrowDown') {\n this.shadowRoot?.querySelector('li')?.focus();\n }\n\n if (event.code === 'Escape') {\n this.show = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-combo': KemetCombo\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-combo-width: calc(100% - 2px);\n --kemet-combo-margin: 1rem auto;\n --kemet-combo-max-height: calc(5 * 3rem);\n --kemet-combo-border: 1px solid;\n --kemet-combo-border-radius: var(--kemet-border-radius-md);\n --kemet-combo-shadow: var(--kemet-elevation-layer-5);\n --kemet-combo-font-color: var(--kemet-color-font-base);\n --kemet-combo-background-color: var(--kemet-color-background-base);\n --kemet-combo-item-background-color: var(--kemet-color-background-base);\n\n\n opacity: 0;\n width: var(--kemet-combo-width);\n margin: var(--kemet-combo-margin);\n pointer-events: none;\n display: block;\n position: relative;\n transition: opacity 0.3s ease-in-out;\n}\n\n:host([show]) {\n opacity: 1;\n pointer-events: auto;\n}\n\nul {\n width: 100%;\n max-height: var(--kemet-combo-max-height);\n position: absolute;\n z-index: 1;\n list-style: none;\n margin: 0;\n padding: 0;\n overflow-y: auto;\n border: var(--kemet-combo-border);\n border-radius: var(--kemet-combo-border-radius);\n box-shadow: var(--kemet-combo-shadow);\n background-color: var(--kemet-combo-background-color);\n}\n\nli {\n color: var(--kemet-combo-font-color);\n line-height: 3rem;\n padding: 0 1.5rem;\n cursor: pointer;\n background-color: var(--kemet-combo-item-background-color);\n}\n\nli:hover,\nli:focus {\n --kemet-combo-font-color: var(--kemet-color-font-inverse-base);\n --kemet-combo-item-background-color: var(--kemet-color-background-inverse);\n outline: none;\n}\n`;\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'lit-html';
|
|
2
2
|
import 'lit';
|
|
3
|
-
export { m as InterfaceAppearanceChangeEvent, a as default } from '../../constants-
|
|
3
|
+
export { m as InterfaceAppearanceChangeEvent, a as default } from '../../constants-BsAfWV-a.js';
|
|
4
4
|
import '../../form-controller-3q581XcZ.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/count/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, css, LitElement } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport HTMLKemetFieldElement from '../field';\nimport HTMLKemetInputElement from '../input';\nimport HTMLKemetTextareaElement from '../textarea';\nimport { EnumAppearances } from '../../utilities/constants';\n\nexport interface InterfaceAppearanceChangeEvent {\n appearance: EnumAppearances;\n validity: ValidityState;\n element: HTMLKemetFieldElement;\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-count\n * @summary Maintains a character count for an input field. Is to be used only in the component slot of a Field component.\n * @ssrsafe yes\n *\n * @prop {string} message - The text label shown to users\n * @prop {number} remaining - The number of characters remaining\n * @prop {number} limit - The maximum number of characters allowed\n * @prop {boolean} validateImmediately - Set to true if the field should validate as soon as the character limit is reached\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @cssproperty --kemet-count-font-size - The font size. Default: 90%.\n *\n * @fires kemet-count-appearance-change - Fires when there's a change in status.\n *\n * @fires kemet-count-mounted - Fired when the count is mounted to the DOM\n * @detail {HTMLElement} element - The count element\n *\n */\n\n@customElement('kemet-count')\nexport default class KemetCount extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n font-size: var(--kemet-count-font-size, 90%);\n margin-top: 0.8rem;\n }\n `,\n ];\n\n @property({ type: String })\n message!: string;\n\n @property({ type: Number })\n limit!: number;\n\n @property({ type: Boolean, attribute: 'validate-immediately' })\n validateImmediately!: boolean;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n remaining!: number;\n\n @state()\n field!: HTMLKemetFieldElement;\n\n @state()\n inputSlot!: HTMLKemetInputElement | HTMLKemetTextareaElement;\n\n @state()\n input!: HTMLInputElement | null;\n\n @state()\n textarea!: HTMLTextAreaElement | null;\n\n firstUpdated() {\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.inputSlot = this.field.querySelector('[slot=\"input\"]') as HTMLKemetInputElement | HTMLKemetTextareaElement;\n this.remaining = this.limit - this.field.length;\n\n this.field.addEventListener('kemet-input-input', (event: Event) => this.handleInput(event));\n this.field.addEventListener('kemet-textarea-input', (event: Event) => this.handleInput(event));\n\n this.input = this.inputSlot?.shadowRoot?.querySelector('input') || null;\n this.textarea = this.inputSlot?.shadowRoot?.querySelector('textarea') || null;\n\n emitEvent(this, 'kemet-count-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n if (isNaN(this.remaining)) {\n this.remaining = this.limit;\n }\n return html`${this.remaining} ${this.message}`;\n }\n\n handleInput(event: Event) {\n console.log('event detail', (event as CustomEvent).detail);\n this.remaining = this.limit - (event as CustomEvent).detail.value.length;\n console.log('remaining', this.remaining);\n\n const nativeElement = this.input || this.textarea;\n\n if (nativeElement) {\n if (this.remaining < 0) {\n if (this.validateImmediately) {\n (this.inputSlot as any).appearance = EnumAppearances.Error;\n (this.inputSlot as any).invalid = true;\n\n emitEvent(this, 'kemet-count-appearance-change', {\n status: EnumAppearances.Error,\n validity: nativeElement.validity,\n element: this.inputSlot,\n });\n }\n } else {\n (this.inputSlot as any).appearance = EnumAppearances.Neutral;\n nativeElement.checkValidity();\n\n emitEvent(this, 'kemet-count-appearance-change', {\n appearance: EnumAppearances.Neutral,\n validity: nativeElement.validity,\n element: this.inputSlot,\n });\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-count': KemetCount\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,MAAM,KAAK,kBAAkB;;;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/count/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, css, LitElement } from 'lit';\nimport { customElement, property, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport HTMLKemetFieldElement from '../field';\nimport HTMLKemetInputElement from '../input';\nimport HTMLKemetTextareaElement from '../textarea';\nimport { EnumAppearances } from '../../utilities/constants';\n\nexport interface InterfaceAppearanceChangeEvent {\n appearance: EnumAppearances;\n validity: ValidityState;\n element: HTMLKemetFieldElement;\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-count\n * @summary Maintains a character count for an input field. Is to be used only in the component slot of a Field component.\n * @ssrsafe yes\n *\n * @prop {string} message - The text label shown to users\n * @prop {number} remaining - The number of characters remaining\n * @prop {number} limit - The maximum number of characters allowed\n * @prop {boolean} validateImmediately - Set to true if the field should validate as soon as the character limit is reached\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @cssproperty --kemet-count-font-size - The font size. Default: 90%.\n *\n * @fires kemet-count-appearance-change - Fires when there's a change in status.\n *\n * @fires kemet-count-mounted - Fired when the count is mounted to the DOM\n * @detail {HTMLElement} element - The count element\n *\n */\n\n@customElement('kemet-count')\nexport default class KemetCount extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n font-size: var(--kemet-count-font-size, 90%);\n margin-top: 0.8rem;\n }\n `,\n ];\n\n @property({ type: String })\n message!: string;\n\n @property({ type: Number })\n limit!: number;\n\n @property({ type: Boolean, attribute: 'validate-immediately' })\n validateImmediately!: boolean;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n remaining!: number;\n\n @state()\n field!: HTMLKemetFieldElement;\n\n @state()\n inputSlot!: HTMLKemetInputElement | HTMLKemetTextareaElement;\n\n @state()\n input!: HTMLInputElement | null;\n\n @state()\n textarea!: HTMLTextAreaElement | null;\n\n firstUpdated() {\n this.field = this.closest('kemet-field') as HTMLKemetFieldElement;\n this.inputSlot = this.field.querySelector('[slot=\"input\"]') as HTMLKemetInputElement | HTMLKemetTextareaElement;\n this.remaining = this.limit - this.field.length;\n\n this.field.addEventListener('kemet-input-input', (event: Event) => this.handleInput(event));\n this.field.addEventListener('kemet-textarea-input', (event: Event) => this.handleInput(event));\n\n this.input = this.inputSlot?.shadowRoot?.querySelector('input') || null;\n this.textarea = this.inputSlot?.shadowRoot?.querySelector('textarea') || null;\n\n emitEvent(this, 'kemet-count-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n if (isNaN(this.remaining)) {\n this.remaining = this.limit;\n }\n return html`${this.remaining} ${this.message}`;\n }\n\n handleInput(event: Event) {\n console.log('event detail', (event as CustomEvent).detail);\n this.remaining = this.limit - (event as CustomEvent).detail.value.length;\n console.log('remaining', this.remaining);\n\n const nativeElement = this.input || this.textarea;\n\n if (nativeElement) {\n if (this.remaining < 0) {\n if (this.validateImmediately) {\n (this.inputSlot as any).appearance = EnumAppearances.Error;\n (this.inputSlot as any).invalid = true;\n\n emitEvent(this, 'kemet-count-appearance-change', {\n status: EnumAppearances.Error,\n validity: nativeElement.validity,\n element: this.inputSlot,\n });\n }\n } else {\n (this.inputSlot as any).appearance = EnumAppearances.Neutral;\n nativeElement.checkValidity();\n\n emitEvent(this, 'kemet-count-appearance-change', {\n appearance: EnumAppearances.Neutral,\n validity: nativeElement.validity,\n element: this.inputSlot,\n });\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-count': KemetCount\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","export const emitEvent = (element: HTMLElement, name: string, detail: any, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -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 } from '../../constants-BsAfWV-a.js';
|
|
5
5
|
import '../../form-controller-3q581XcZ.js';
|
|
6
6
|
|
|
7
7
|
declare enum EnumEffects {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/dialog/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/dialog/styles.css.ts","../../../src/elements/dialog/effects.css.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, query, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumRoundedSizes } from '../../utilities/constants';\nimport styles from './styles.css.ts';\nimport stylesEffects from './effects.css.ts';\n\nexport enum EnumEffects {\n FadeinScaleup = 'fadein-scaleup',\n SlideRight = 'slide-right',\n SlideBottom = 'slide-bottom',\n Newspaper = 'newspaper',\n Fall = 'fall',\n SideFall = 'side-fall',\n FlipHorizontal = 'flip-horizontal',\n FlipVertical = 'flip-vertical',\n Sign3d = 'sign-3d',\n SuperScaled = 'super-scaled',\n Slit = 'slit',\n RotateBottom = 'rotate-bottom',\n RotateLeft = 'rotate-left'\n}\n\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-dialog\n * @summary A dialog that has many built-in effects and flexible styles.\n * @ssrsafe yes\n *\n * @prop {boolean} opened\n * @prop {string} effect\n * @prop {boolean} closeOnClick\n * @prop {string} breakpoint\n * @prop {boolean} mobile\n * @prop {EnumRoundedSizes} rounded\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @csspart dialog - The main contents of the dialog.\n * @csspart overlay - The surrounding scrim of the dialog.\n *\n * @cssproperty --kemet-modal-radius - The mount of rounding for rounded corners\n * @cssproperty --kemet-modal-dialog-min-width - The minimum width of the dialog.\n * @cssproperty --kemet-modal-dialog-max-width - The maximum width of the dialog.\n * @cssproperty --kemet-modal-dialog-background-color - The background color of the dialog.\n * @cssproperty --kemet-modal-dialog-mobile-width - The width of the mobile dialog.\n * @cssproperty --kemet-modal-dialog-mobile-margin - The margins of the mobile dialog.\n * @cssproperty --kemet-modal-dialog-mobile-padding - The padding of the mobile dialog.\n * @cssproperty --kemet-modal-overlay-background-color - The color of the backdrop overlay.\n * @cssproperty --kemet-modal-radius - The mount of rounding for rounded corners\n *\n * @event kemet-dialog-opened - Fires when the dialog opens\n * @event kemet-dialog-closed - Fires when the dialog closes\n *\n */\n\n@customElement('kemet-dialog')\nexport default class Dialog extends LitElement {\n static styles = [styles, stylesEffects];\n\n @property({ type: Boolean, reflect: true })\n opened: boolean = false;\n\n @property({ type: String, reflect: true })\n effect?: EnumEffects;\n\n @property({ type: Boolean, attribute: 'close-on-click' })\n closeOnClick: boolean = false;\n\n @property({ type: String })\n breakpoint: string = '600px';\n\n @property({ type: Boolean, reflect: true })\n mobile!: boolean;\n\n @property({ reflect: true })\n rounded?: EnumRoundedSizes;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n /** @internal */\n @query('dialog')\n dialogElement!: HTMLDialogElement;\n\n /** @internal */\n @state()\n focusableSelector!: string;\n\n /** @internal */\n @state()\n focusableElements!: NodeListOf<Element>;\n\n constructor() {\n super();\n\n // bindings\n this.addEventListener('kemet-dialog-close-pressed', () => { this.handleClose(); });\n }\n\n firstUpdated() {\n // standard properties\n /** @internal */\n this.focusableSelector = 'body, a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';\n this.focusableElements = this.querySelectorAll(this.focusableSelector);\n\n // events\n this.addEventListener('keyup', (event) => {\n if (event.key === 'Escape') {\n this.handleClose();\n }\n });\n\n this.addEventListener('click', (event) => {\n const targetElement = event.target as HTMLElement;\n if (this.opened && this.closeOnClick && targetElement.tagName.toLowerCase() === 'kemet-dialog') {\n this.handleClose();\n }\n });\n\n window.addEventListener('resize', () => {\n this.isMobile();\n });\n\n this.focusableElements.forEach((element) => {\n (element as HTMLElement).addEventListener('keydown', (event: KeyboardEvent) => this.handleFocusableDown(event));\n });\n\n emitEvent(this, 'kemet-dialog-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(prevProps: Map<string, never>) {\n if (!prevProps.get('opened') && this.opened === true) {\n this.handleOpen();\n }\n\n if (prevProps.get('opened') && this.opened === false) {\n this.handleClose();\n }\n\n this.isMobile();\n }\n\n render() {\n return html`\n <dialog part=\"dialog\" @close=${() => this.handleClose()}>\n <slot></slot>\n </dialog>\n <div class=\"overlay\" part=\"overlay\"></div>\n `;\n }\n\n isMobile() {\n const mediaQuery = window.matchMedia(`(max-width: ${this.breakpoint})`);\n this.mobile = mediaQuery.matches;\n }\n\n handleOpen() {\n this.opened = true;\n if (this.dialogElement?.showModal) this.dialogElement.showModal();\n emitEvent(this, 'kemet-dialog-opened', { element: this });\n }\n\n handleClose() {\n this.opened = false;\n if (this.dialogElement?.close) this.dialogElement.close();\n emitEvent(this, 'kemet-dialog-closed', { element: this });\n }\n\n handleFocusableDown(event: KeyboardEvent) {\n const firstFocusable = this.focusableElements[0] as HTMLElement;\n const lastFocusable = this.focusableElements[this.focusableElements.length - 1] as HTMLElement;\n\n if (event.key === 'Tab') {\n if (event.shiftKey && document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n } else if (!event.shiftKey && document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-dialog': Dialog\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-dialog-transition-speed: 0.3s;\n --kemet-dialog-min-width: 0;\n --kemet-dialog-max-width: none;\n --kemet-dialog-mobile-width: calc(100% - 2rem);\n --kemet-dialog-mobile-margin: 0 auto;\n --kemet-dialog-mobile-padding: 1rem;\n --kemet-dialog-font-color: var(--kemet-color-font-base);\n --kemet-dialog-background-color: var(--kemet-color-background-base);\n --kemet-dialog-overlay-color: rgb(0 0 0 / 80%);\n\n /* private */\n --kemet-dialog-radius: 0;\n\n position: fixed;\n display: flex;\n top: 0;\n left: 0;\n z-index: 99;\n width: 100%;\n height: 100vh;\n visibility: hidden;\n backface-visibility: hidden;\n}\n\n:host([opened]) {\n visibility: visible;\n}\n\ndialog {\n color: var(--kemet-dialog-font-color);\n display: block;\n z-index: 3;\n margin: auto;\n min-width: var(--kemet-dialog-min-width);\n max-width: var(--kemet-dialog-max-width);\n border: 0;\n border-radius: var(--kemet-dialog-radius);\n background: var(--kemet-dialog-background-color);\n}\n\ndialog::backdrop {\n background: none;\n}\n\n:host([mobile]) dialog {\n margin: var(--kemet-dialog-mobile-margin);\n width: var(--kemet-dialog-mobile-width);\n padding: var(--kemet-dialog-mobile-padding);\n inset-block-start: auto;\n}\n\n:host([rounded]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-pill);\n}\n\n:host([rounded][mobile]) dialog {\n border-top-left-radius: var(--kemet-dialog-radius);\n border-top-right-radius: var(--kemet-dialog-radius);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n[part=overlay] {\n position: fixed;\n width: 100%;\n height: 100%;\n visibility: hidden;\n top: 0;\n left: 0;\n z-index: 1;\n opacity: 0;\n background: var(--kemet-dialog-overlay-color);\n transition: all var(--kemet-dialog-transition-speed);\n}\n\n:host([opened]) [part=overlay] {\n opacity: 1;\n visibility: visible;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`/* default */\n:host([effect]) dialog {\n transform: scale(0.7);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n/* fadein-scaleup */\n:host([effect=\"fadein-scaleup\"]) dialog {\n transform: scale(0.7);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"fadein-scaleup\"][opened]) dialog {\n transform: scale(1);\n opacity: 1;\n}\n\n/* slide-right */\n:host([effect=\"slide-right\"]) dialog {\n transform: translateX(20%);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed) cubic-bezier(0.25, 0.5, 0.5, 0.9);\n}\n\n:host([effect=\"slide-right\"][opened]) dialog {\n transform: translateX(0);\n opacity: 1;\n}\n\n/* slide-bottom */\n:host([effect=\"slide-bottom\"]) dialog {\n transform: translateY(20%);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"slide-bottom\"][opened]) dialog {\n transform: translateY(0);\n opacity: 1;\n}\n\n/* newspaper */\n:host([effect=\"newspaper\"]) dialog {\n transform: scale(0) rotate(720deg);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"newspaper\"][opened]) dialog {\n transform: scale(1) rotate(0deg);\n opacity: 1;\n}\n\n/* fall */\n:host([effect=\"fall\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"fall\"]) dialog {\n transform-style: preserve-3d;\n transform: translateZ(600px) rotateX(20deg);\n opacity: 0;\n}\n\n:host([effect=\"fall\"][opened]) dialog {\n transition: all var(--kemet-modal-transition-speed) ease-in;\n transform: translateZ(0px) rotateX(0deg);\n opacity: 1;\n}\n\n/* side-fall */\n:host([effect=\"side-fall\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"side-fall\"]) dialog {\n transform-style: preserve-3d;\n transform: translate(30%) translateZ(600px) rotate(10deg);\n opacity: 0;\n}\n\n:host([effect=\"side-fall\"][opened]) dialog {\n transition: all var(--kemet-modal-transition-speed) ease-in;\n transform: translate(0%) translateZ(0) rotate(0deg);\n opacity: 1;\n}\n\n/* flip-horizontal */\n:host([effect=\"flip-horizontal\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"flip-horizontal\"]) dialog {\n transform-style: preserve-3d;\n transform: rotateY(-70deg);\n transition: all var(--kemet-modal-transition-speed);\n opacity: 0;\n}\n\n:host([effect=\"flip-horizontal\"][opened]) dialog {\n transform: rotateY(0deg);\n opacity: 1;\n}\n\n/* flip-vertical */\n:host([effect=\"flip-vertical\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"flip-vertical\"]) dialog {\n transform-style: preserve-3d;\n transform: rotateX(-70deg);\n transition: all var(--kemet-modal-transition-speed);\n opacity: 0;\n}\n\n:host([effect=\"flip-vertical\"][opened]) dialog {\n transform: rotateX(0deg);\n opacity: 1;\n}\n\n/* sign-3d */\n:host([effect=\"sign-3d\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"sign-3d\"]) dialog {\n transform-style: preserve-3d;\n transform: rotateX(-60deg);\n transform-origin: 50% 0;\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"sign-3d\"][opened]) dialog {\n transform: rotateX(0deg);\n opacity: 1;\n}\n\n/* super-scaled */\n:host([effect=\"super-scaled\"]) dialog {\n transform: scale(2);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"super-scaled\"][opened]) dialog {\n transform: scale(1);\n opacity: 1;\n}\n\n/* slit */\n:host([effect=\"slit\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"slit\"]) dialog {\n transform-style: preserve-3d;\n transform: translateZ(-3000px) rotateY(90deg);\n opacity: 0;\n}\n\n:host([effect=\"slit\"][opened]) dialog {\n animation: slit .7s forwards ease-out;\n}\n\n@keyframes slit {\n 50% {\n transform: translateZ(-250px) rotateY(89deg);\n opacity: 1;\n animation-timing-function: ease-in;}\n 100% {\n transform: translateZ(0) rotateY(0deg);\n opacity: 1;\n }\n}\n\n/* rotate-bottom */\n:host([effect=\"rotate-bottom\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"rotate-bottom\"]) dialog {\n transform-style: preserve-3d;\n transform: translateY(100%) rotateX(90deg);\n transform-origin: 0 100%;\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed) ease-out;\n}\n\n:host([effect=\"rotate-bottom\"][opened]) dialog {\n transform: translateY(0%) rotateX(0deg);\n opacity: 1;\n}\n\n/* rotate-left */\n:host([effect=\"rotate-left\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"rotate-left\"]) dialog {\n transform-style: preserve-3d;\n transform: translateZ(100px) translateX(-30%) rotateY(90deg);\n transform-origin: 0 100%;\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"rotate-left\"][opened]) dialog {\n transform: translateZ(0px) translateX(0%) rotateY(0deg);\n opacity: 1;\n}\n`;\n"],"mappings":"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","names":["css","EnumEffects"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/dialog/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/dialog/styles.css.ts","../../../src/elements/dialog/effects.css.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, query, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumRoundedSizes } from '../../utilities/constants';\nimport styles from './styles.css.ts';\nimport stylesEffects from './effects.css.ts';\n\nexport enum EnumEffects {\n FadeinScaleup = 'fadein-scaleup',\n SlideRight = 'slide-right',\n SlideBottom = 'slide-bottom',\n Newspaper = 'newspaper',\n Fall = 'fall',\n SideFall = 'side-fall',\n FlipHorizontal = 'flip-horizontal',\n FlipVertical = 'flip-vertical',\n Sign3d = 'sign-3d',\n SuperScaled = 'super-scaled',\n Slit = 'slit',\n RotateBottom = 'rotate-bottom',\n RotateLeft = 'rotate-left'\n}\n\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-dialog\n * @summary A dialog that has many built-in effects and flexible styles.\n * @ssrsafe yes\n *\n * @prop {boolean} opened\n * @prop {string} effect\n * @prop {boolean} closeOnClick\n * @prop {string} breakpoint\n * @prop {boolean} mobile\n * @prop {EnumRoundedSizes} rounded\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @csspart dialog - The main contents of the dialog.\n * @csspart overlay - The surrounding scrim of the dialog.\n *\n * @cssproperty --kemet-modal-radius - The mount of rounding for rounded corners\n * @cssproperty --kemet-modal-dialog-min-width - The minimum width of the dialog.\n * @cssproperty --kemet-modal-dialog-max-width - The maximum width of the dialog.\n * @cssproperty --kemet-modal-dialog-background-color - The background color of the dialog.\n * @cssproperty --kemet-modal-dialog-mobile-width - The width of the mobile dialog.\n * @cssproperty --kemet-modal-dialog-mobile-margin - The margins of the mobile dialog.\n * @cssproperty --kemet-modal-dialog-mobile-padding - The padding of the mobile dialog.\n * @cssproperty --kemet-modal-overlay-background-color - The color of the backdrop overlay.\n * @cssproperty --kemet-modal-radius - The mount of rounding for rounded corners\n *\n * @event kemet-dialog-opened - Fires when the dialog opens\n * @event kemet-dialog-closed - Fires when the dialog closes\n *\n */\n\n@customElement('kemet-dialog')\nexport default class Dialog extends LitElement {\n static styles = [styles, stylesEffects];\n\n @property({ type: Boolean, reflect: true })\n opened: boolean = false;\n\n @property({ type: String, reflect: true })\n effect?: EnumEffects;\n\n @property({ type: Boolean, attribute: 'close-on-click' })\n closeOnClick: boolean = false;\n\n @property({ type: String })\n breakpoint: string = '600px';\n\n @property({ type: Boolean, reflect: true })\n mobile!: boolean;\n\n @property({ reflect: true })\n rounded?: EnumRoundedSizes;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n /** @internal */\n @query('dialog')\n dialogElement!: HTMLDialogElement;\n\n /** @internal */\n @state()\n focusableSelector!: string;\n\n /** @internal */\n @state()\n focusableElements!: NodeListOf<Element>;\n\n constructor() {\n super();\n\n // bindings\n this.addEventListener('kemet-dialog-close-pressed', () => { this.handleClose(); });\n }\n\n firstUpdated() {\n // standard properties\n /** @internal */\n this.focusableSelector = 'body, a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';\n this.focusableElements = this.querySelectorAll(this.focusableSelector);\n\n // events\n this.addEventListener('keyup', (event) => {\n if (event.key === 'Escape') {\n this.handleClose();\n }\n });\n\n this.addEventListener('click', (event) => {\n const targetElement = event.target as HTMLElement;\n if (this.opened && this.closeOnClick && targetElement.tagName.toLowerCase() === 'kemet-dialog') {\n this.handleClose();\n }\n });\n\n window.addEventListener('resize', () => {\n this.isMobile();\n });\n\n this.focusableElements.forEach((element) => {\n (element as HTMLElement).addEventListener('keydown', (event: KeyboardEvent) => this.handleFocusableDown(event));\n });\n\n emitEvent(this, 'kemet-dialog-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(prevProps: Map<string, never>) {\n if (!prevProps.get('opened') && this.opened === true) {\n this.handleOpen();\n }\n\n if (prevProps.get('opened') && this.opened === false) {\n this.handleClose();\n }\n\n this.isMobile();\n }\n\n render() {\n return html`\n <dialog part=\"dialog\" @close=${() => this.handleClose()}>\n <slot></slot>\n </dialog>\n <div class=\"overlay\" part=\"overlay\"></div>\n `;\n }\n\n isMobile() {\n const mediaQuery = window.matchMedia(`(max-width: ${this.breakpoint})`);\n this.mobile = mediaQuery.matches;\n }\n\n handleOpen() {\n this.opened = true;\n if (this.dialogElement?.showModal) this.dialogElement.showModal();\n emitEvent(this, 'kemet-dialog-opened', { element: this });\n }\n\n handleClose() {\n this.opened = false;\n if (this.dialogElement?.close) this.dialogElement.close();\n emitEvent(this, 'kemet-dialog-closed', { element: this });\n }\n\n handleFocusableDown(event: KeyboardEvent) {\n const firstFocusable = this.focusableElements[0] as HTMLElement;\n const lastFocusable = this.focusableElements[this.focusableElements.length - 1] as HTMLElement;\n\n if (event.key === 'Tab') {\n if (event.shiftKey && document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n } else if (!event.shiftKey && document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-dialog': Dialog\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-dialog-transition-speed: 0.3s;\n --kemet-dialog-min-width: 0;\n --kemet-dialog-max-width: none;\n --kemet-dialog-mobile-width: calc(100% - 2rem);\n --kemet-dialog-mobile-margin: 0 auto;\n --kemet-dialog-mobile-padding: 1rem;\n --kemet-dialog-font-color: var(--kemet-color-font-base);\n --kemet-dialog-background-color: var(--kemet-color-background-base);\n --kemet-dialog-overlay-color: rgb(0 0 0 / 80%);\n\n /* private */\n --kemet-dialog-radius: 0;\n\n position: fixed;\n display: flex;\n top: 0;\n left: 0;\n z-index: 99;\n width: 100%;\n height: 100vh;\n visibility: hidden;\n backface-visibility: hidden;\n}\n\n:host([opened]) {\n visibility: visible;\n}\n\ndialog {\n color: var(--kemet-dialog-font-color);\n display: block;\n z-index: 3;\n margin: auto;\n min-width: var(--kemet-dialog-min-width);\n max-width: var(--kemet-dialog-max-width);\n border: 0;\n border-radius: var(--kemet-dialog-radius);\n background: var(--kemet-dialog-background-color);\n}\n\ndialog::backdrop {\n background: none;\n}\n\n:host([mobile]) dialog {\n margin: var(--kemet-dialog-mobile-margin);\n width: var(--kemet-dialog-mobile-width);\n padding: var(--kemet-dialog-mobile-padding);\n inset-block-start: auto;\n}\n\n:host([rounded]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) dialog {\n --kemet-dialog-radius: var(--kemet-border-radius-pill);\n}\n\n:host([rounded][mobile]) dialog {\n border-top-left-radius: var(--kemet-dialog-radius);\n border-top-right-radius: var(--kemet-dialog-radius);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n[part=overlay] {\n position: fixed;\n width: 100%;\n height: 100%;\n visibility: hidden;\n top: 0;\n left: 0;\n z-index: 1;\n opacity: 0;\n background: var(--kemet-dialog-overlay-color);\n transition: all var(--kemet-dialog-transition-speed);\n}\n\n:host([opened]) [part=overlay] {\n opacity: 1;\n visibility: visible;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`/* default */\n:host([effect]) dialog {\n transform: scale(0.7);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n/* fadein-scaleup */\n:host([effect=\"fadein-scaleup\"]) dialog {\n transform: scale(0.7);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"fadein-scaleup\"][opened]) dialog {\n transform: scale(1);\n opacity: 1;\n}\n\n/* slide-right */\n:host([effect=\"slide-right\"]) dialog {\n transform: translateX(20%);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed) cubic-bezier(0.25, 0.5, 0.5, 0.9);\n}\n\n:host([effect=\"slide-right\"][opened]) dialog {\n transform: translateX(0);\n opacity: 1;\n}\n\n/* slide-bottom */\n:host([effect=\"slide-bottom\"]) dialog {\n transform: translateY(20%);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"slide-bottom\"][opened]) dialog {\n transform: translateY(0);\n opacity: 1;\n}\n\n/* newspaper */\n:host([effect=\"newspaper\"]) dialog {\n transform: scale(0) rotate(720deg);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"newspaper\"][opened]) dialog {\n transform: scale(1) rotate(0deg);\n opacity: 1;\n}\n\n/* fall */\n:host([effect=\"fall\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"fall\"]) dialog {\n transform-style: preserve-3d;\n transform: translateZ(600px) rotateX(20deg);\n opacity: 0;\n}\n\n:host([effect=\"fall\"][opened]) dialog {\n transition: all var(--kemet-modal-transition-speed) ease-in;\n transform: translateZ(0px) rotateX(0deg);\n opacity: 1;\n}\n\n/* side-fall */\n:host([effect=\"side-fall\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"side-fall\"]) dialog {\n transform-style: preserve-3d;\n transform: translate(30%) translateZ(600px) rotate(10deg);\n opacity: 0;\n}\n\n:host([effect=\"side-fall\"][opened]) dialog {\n transition: all var(--kemet-modal-transition-speed) ease-in;\n transform: translate(0%) translateZ(0) rotate(0deg);\n opacity: 1;\n}\n\n/* flip-horizontal */\n:host([effect=\"flip-horizontal\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"flip-horizontal\"]) dialog {\n transform-style: preserve-3d;\n transform: rotateY(-70deg);\n transition: all var(--kemet-modal-transition-speed);\n opacity: 0;\n}\n\n:host([effect=\"flip-horizontal\"][opened]) dialog {\n transform: rotateY(0deg);\n opacity: 1;\n}\n\n/* flip-vertical */\n:host([effect=\"flip-vertical\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"flip-vertical\"]) dialog {\n transform-style: preserve-3d;\n transform: rotateX(-70deg);\n transition: all var(--kemet-modal-transition-speed);\n opacity: 0;\n}\n\n:host([effect=\"flip-vertical\"][opened]) dialog {\n transform: rotateX(0deg);\n opacity: 1;\n}\n\n/* sign-3d */\n:host([effect=\"sign-3d\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"sign-3d\"]) dialog {\n transform-style: preserve-3d;\n transform: rotateX(-60deg);\n transform-origin: 50% 0;\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"sign-3d\"][opened]) dialog {\n transform: rotateX(0deg);\n opacity: 1;\n}\n\n/* super-scaled */\n:host([effect=\"super-scaled\"]) dialog {\n transform: scale(2);\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"super-scaled\"][opened]) dialog {\n transform: scale(1);\n opacity: 1;\n}\n\n/* slit */\n:host([effect=\"slit\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"slit\"]) dialog {\n transform-style: preserve-3d;\n transform: translateZ(-3000px) rotateY(90deg);\n opacity: 0;\n}\n\n:host([effect=\"slit\"][opened]) dialog {\n animation: slit .7s forwards ease-out;\n}\n\n@keyframes slit {\n 50% {\n transform: translateZ(-250px) rotateY(89deg);\n opacity: 1;\n animation-timing-function: ease-in;}\n 100% {\n transform: translateZ(0) rotateY(0deg);\n opacity: 1;\n }\n}\n\n/* rotate-bottom */\n:host([effect=\"rotate-bottom\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"rotate-bottom\"]) dialog {\n transform-style: preserve-3d;\n transform: translateY(100%) rotateX(90deg);\n transform-origin: 0 100%;\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed) ease-out;\n}\n\n:host([effect=\"rotate-bottom\"][opened]) dialog {\n transform: translateY(0%) rotateX(0deg);\n opacity: 1;\n}\n\n/* rotate-left */\n:host([effect=\"rotate-left\"]) {\n perspective: 1300px;\n}\n\n:host([effect=\"rotate-left\"]) dialog {\n transform-style: preserve-3d;\n transform: translateZ(100px) translateX(-30%) rotateY(90deg);\n transform-origin: 0 100%;\n opacity: 0;\n transition: all var(--kemet-modal-transition-speed);\n}\n\n:host([effect=\"rotate-left\"][opened]) dialog {\n transform: translateZ(0px) translateX(0%) rotateY(0deg);\n opacity: 1;\n}\n`;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,MAAM,kBAAkB;;;ACAjC,SAAS,UAAU,OAAO,OAAO,gBAAgB;AACjD,SAAS,iBAAiB,wBAAwB;AAO3C,IAAM,gBAAgB,CAAC,YAAoB,CAAC,sBACjD,OAAO,mBAAmB,eAAe,CAAC,eAAe,IAAI,OAAO,IAChE,iBAAiB,OAAO,EAAE,iBAAiB,IAC3C;;;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;;;ACJA,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;;;ACFf,SAAS,OAAAA,YAAW;AAEpB,IAAO,sBAAQA;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;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;;;AJKR,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,mBAAgB;AAChB,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,oBAAiB;AACjB,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AAbH,SAAAA;AAAA,GAAA;AAqDZ,IAAqB,SAArB,cAAoC,WAAW;AAAA,EAuC7C,cAAc;AACZ,UAAM;AApCR,kBAAkB;AAMlB,wBAAwB;AAGxB,sBAAqB;AAYrB,eAAc;AAkBZ,SAAK,iBAAiB,8BAA8B,MAAM;AAAE,WAAK,YAAY;AAAA,IAAG,CAAC;AAAA,EACnF;AAAA,EAEA,eAAe;AAGb,SAAK,oBAAoB;AACzB,SAAK,oBAAoB,KAAK,iBAAiB,KAAK,iBAAiB;AAGrE,SAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,UAAI,MAAM,QAAQ,UAAU;AAC1B,aAAK,YAAY;AAAA,MACnB;AAAA,IACF,CAAC;AAED,SAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,YAAM,gBAAgB,MAAM;AAC5B,UAAI,KAAK,UAAU,KAAK,gBAAgB,cAAc,QAAQ,YAAY,MAAM,gBAAgB;AAC9F,aAAK,YAAY;AAAA,MACnB;AAAA,IACF,CAAC;AAED,WAAO,iBAAiB,UAAU,MAAM;AACtC,WAAK,SAAS;AAAA,IAChB,CAAC;AAED,SAAK,kBAAkB,QAAQ,CAAC,YAAY;AAC1C,MAAC,QAAwB,iBAAiB,WAAW,CAAC,UAAyB,KAAK,oBAAoB,KAAK,CAAC;AAAA,IAChH,CAAC;AAED,cAAU,MAAM,wBAAwB;AAAA,MACtC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,QAAQ,WAA+B;AACrC,QAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,KAAK,WAAW,MAAM;AACpD,WAAK,WAAW;AAAA,IAClB;AAEA,QAAI,UAAU,IAAI,QAAQ,KAAK,KAAK,WAAW,OAAO;AACpD,WAAK,YAAY;AAAA,IACnB;AAEA,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,qCAC0B,MAAM,KAAK,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3D;AAAA,EAEA,WAAW;AACT,UAAM,aAAa,OAAO,WAAW,eAAe,KAAK,UAAU,GAAG;AACtE,SAAK,SAAS,WAAW;AAAA,EAC3B;AAAA,EAEA,aAAa;AACX,SAAK,SAAS;AACd,QAAI,KAAK,eAAe,UAAW,MAAK,cAAc,UAAU;AAChE,cAAU,MAAM,uBAAuB,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEA,cAAc;AACZ,SAAK,SAAS;AACd,QAAI,KAAK,eAAe,MAAO,MAAK,cAAc,MAAM;AACxD,cAAU,MAAM,uBAAuB,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEA,oBAAoB,OAAsB;AACxC,UAAM,iBAAiB,KAAK,kBAAkB,CAAC;AAC/C,UAAM,gBAAgB,KAAK,kBAAkB,KAAK,kBAAkB,SAAS,CAAC;AAE9E,QAAI,MAAM,QAAQ,OAAO;AACvB,UAAI,MAAM,YAAY,SAAS,kBAAkB,gBAAgB;AAC/D,cAAM,eAAe;AACrB,sBAAc,MAAM;AAAA,MACtB,WAAW,CAAC,MAAM,YAAY,SAAS,kBAAkB,eAAe;AACtE,cAAM,eAAe;AACrB,uBAAe,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;AAxIqB,OACZ,SAAS,CAAC,oBAAQ,mBAAa;AAGtC;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAHvB,OAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,OAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,iBAAiB,CAAC;AAAA,GATrC,OAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAZP,OAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAfvB,OAgBnB;AAGA;AAAA,EADC,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GAlBR,OAmBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GArBtB,OAsBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAxBtB,OAyBnB;AAIA;AAAA,EADC,MAAM,QAAQ;AAAA,GA5BI,OA6BnB;AAIA;AAAA,EADC,MAAM;AAAA,GAhCY,OAiCnB;AAIA;AAAA,EADC,MAAM;AAAA,GApCY,OAqCnB;AArCmB,SAArB;AAAA,EADC,cAAc,cAAc;AAAA,GACR;","names":["css","EnumEffects"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/dialog-close/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { css, html, LitElement } 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-dialog-close\n * @summary A close button for a dialog.\n * @ssrsafe yes\n *\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @event kemet-dialog-close-pressed - Fires when the close button is pressed\n *\n * @fires kemet-dialog-close-mounted - Fired when the dialog close button is mounted to the DOM\n * @detail {HTMLElement} element - The dialog close button element\n *\n */\n\n@customElement('kemet-dialog-close')\nexport default class DialogClose extends LitElement {\n static styles = [\n css`\n :host {\n color: inherit;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n border-radius: var(--kemet-border-radius-circle);\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-dialog-close-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 @keyup=${() => this.close()} @click=${() => this.close()}></slot>\n `;\n }\n\n close() {\n emitEvent(this, 'kemet-dialog-close-pressed', { element: this });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-dialog-close': DialogClose\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,KAAK,MAAM,kBAAkB;;;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/dialog-close/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { css, html, LitElement } 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-dialog-close\n * @summary A close button for a dialog.\n * @ssrsafe yes\n *\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @event kemet-dialog-close-pressed - Fires when the close button is pressed\n *\n * @fires kemet-dialog-close-mounted - Fired when the dialog close button is mounted to the DOM\n * @detail {HTMLElement} element - The dialog close button element\n *\n */\n\n@customElement('kemet-dialog-close')\nexport default class DialogClose extends LitElement {\n static styles = [\n css`\n :host {\n color: inherit;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n border-radius: var(--kemet-border-radius-circle);\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-dialog-close-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 @keyup=${() => this.close()} @click=${() => this.close()}></slot>\n `;\n }\n\n close() {\n emitEvent(this, 'kemet-dialog-close-pressed', { element: this });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-dialog-close': DialogClose\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,KAAK,MAAM,kBAAkB;;;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;;;AFmBA,IAAqB,cAArB,cAAyC,WAAW;AAAA,EAApD;AAAA;AAkBE,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,cAAU,MAAM,8BAA8B;AAAA,MAC5C,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,qBACU,MAAM,KAAK,MAAM,CAAC,WAAW,MAAM,KAAK,MAAM,CAAC;AAAA;AAAA,EAElE;AAAA,EAEA,QAAQ;AACN,cAAU,MAAM,8BAA8B,EAAE,SAAS,KAAK,CAAC;AAAA,EACjE;AACF;AAxCqB,YACZ,SAAS;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUF;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAdtB,YAenB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAjBtB,YAkBnB;AAlBmB,cAArB;AAAA,EADC,cAAc,oBAAoB;AAAA,GACd;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/drawer/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/utilities/constants.ts","../../../src/elements/drawer/effects.ts","../../../src/elements/drawer/styles.css.ts"],"sourcesContent":["import { LitElement, css, html, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumDirections } from '../../utilities/constants';\nimport effectsStyles from './effects';\nimport styles from './styles.css.ts';\n\n\nexport enum EnumEffects {\n Slide = 'slide',\n Reveal = 'reveal',\n Push = 'push',\n Scale = 'scale'\n}\n\nconst effects = Object.values(EnumEffects) as string[];\nconst directions = Object.values(EnumDirections) as string[];\n\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-drawer\n * @summary A component that adds an off-canvas menu with different effects.\n * @ssrsafe yes\n *\n * @prop {boolean} opened - Determines if the drawer is opened or not.\n * @prop {string} effect - The animation effect for opening and closing the drawer. Values include: (slide | reveal | push | scale)\n * @prop {EnumDirection} side - Allows you to control which side the drawer opens from. Values include: (left | right | top | bottom)\n * @prop {boolean} overlay - Adds an overlay over the content section of the Drawer when opened\n * @prop {boolean} fillViewport - Makes the drawer fill the viewport height\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 sidebar - The off-screen nav area of your app or site\n * @slot body - The main content area of your app or site.\n *\n * @csspart container\n * @csspart drawer\n * @csspart pusher\n * @csspart content\n * @csspart wrapper\n *\n * @cssproperty --kemet-drawer-width - The width of the drawer.\n * @cssproperty --kemet-drawer-height - The height of the drawer.\n * @cssproperty --kemet-drawer-color - The text color of the drawer.\n * @cssproperty --kemet-drawer-background-color - The background color of the drawer.\n * @cssproperty --kemet-drawer-overlay-color - The color of the overlay.\n *\n * @event kemet-drawer-opened - Fires when the drawer opens.\n * @event kemet-drawer-closed - Fires when the drawer closes.\n *\n * @fires kemet-drawer-mounted - Fired when the button is mounted to the DOM\n * @detail {HTMLElement} element - The button element\n *\n */\n\n@customElement('kemet-drawer')\nexport default class KemetDrawer extends LitElement {\n static styles = [styles, effectsStyles];\n\n @property({ type: Boolean, reflect: true })\n opened: boolean = false;\n\n @property({ type: String, reflect: true })\n effect: typeof effects[number] = EnumEffects.Slide;\n\n @property({ type: String, reflect: true })\n side: typeof directions[number] = EnumDirections.Left;\n\n @property({ type: Boolean, reflect: true })\n overlay: boolean = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'fill-viewport' })\n fillViewport: boolean = false;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n firstUpdated() {\n this.addEventListener('click', (event) => {\n const targetElement = event.target as HTMLElement;\n if (this.opened && targetElement.tagName.toLowerCase() === 'kemet-drawer') {\n this.opened = false;\n }\n });\n\n emitEvent(this, 'kemet-drawer-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(prevProps: Map<string, never>) {\n if (!prevProps.get('opened') && this.opened === true) {\n emitEvent(this, 'kemet-drawer-opened', { element: this });\n }\n\n if (prevProps.get('opened') && this.opened === false) {\n emitEvent(this, 'kemet-drawer-closed', { element: this });\n }\n }\n\n render() {\n return html`\n <section part=\"container\">\n <div part=\"drawer\" title=\"Drawer\">\n <slot name=\"sidebar\"></slot>\n </div>\n <div part=\"pusher\">\n <div part=\"content\">\n <div part=\"wrapper\">\n <slot name=\"body\"></slot>\n </div>\n </div>\n </div>\n </section>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-drawer': KemetDrawer\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 KemetCount from \"../elements/count\";\nimport HTMLKemetInputElement from \"../elements/input\";\n\nexport enum EnumKeyCodes {\n ESCAPE = 'Escape',\n ENTER = 'Enter',\n SPACE = 'Space',\n BACKSPACE = 'Backspace',\n DELETE = 'Delete'\n}\n\nexport const directions = ['none','top', 'right', 'bottom', 'left'] as const;\nexport enum EnumDirections {\n None = 'none',\n Top = 'top',\n Right = 'right',\n Bottom = 'bottom',\n Left = 'left'\n}\nexport type TypeDirection = typeof directions[number];\n\nexport const appearances = ['neutral', 'brand', 'success', 'warning', 'error'] as const;\nexport enum EnumAppearances {\n Neutral = 'neutral',\n Brand = 'brand',\n Success = 'success',\n Warning = 'warning',\n Error = 'error',\n Info = 'info',\n Link = 'link'\n}\nexport type TypeAppearance = typeof appearances[number];\n\nexport const axis = ['horizontal', 'vertical'] as const;\nexport enum EnumAxis {\n Horizontal = 'horizontal',\n Vertical = 'vertical'\n}\nexport type TypeAxis = typeof axis[number];\n\nexport const roundedSizes = ['sm', 'md', 'lg', 'xl', 'circle', 'pill'] as const;\nexport enum EnumRoundedSizes {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n XL = 'xl',\n Circle = 'circle',\n Pill = 'pill'\n}\nexport type TypeRoundedSizes = typeof roundedSizes[number];\n\nexport interface InterfaceInputDetails {\n status: TypeAppearance;\n validity: ValidityState;\n element: HTMLElement | KemetCount | HTMLKemetInputElement;\n value?: string;\n}\n","import { css, unsafeCSS } from 'lit';\n\nconst documentHeight = typeof document !== 'undefined' ? `${document.documentElement.scrollHeight}px` : '100vh';\n\n\nexport default css`\n /* slide */\n :host([effect='slide']) [part=drawer] {\n visibility: visible;\n transform: translate3d(-100%, 0, 0);\n }\n\n :host([effect='slide'][opened]) [part=drawer] {\n visibility: visible;\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='slide']) [part=drawer]:after {\n display: none;\n }\n\n :host([effect='slide'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='slide'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='slide'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='slide'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='slide'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='slide'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n\n /* reveal */\n :host([effect='reveal'][opened]) [part=pusher] {\n transform: translate3d(var(--kemet-drawer-width), 0, 0);\n }\n\n :host([effect='reveal']) [part=drawer] {\n z-index: 1;\n }\n\n :host([effect='reveal'][opened]) [part=drawer] {\n visibility: visible;\n transition: transform 0.5s;\n }\n\n :host([effect='reveal']) [part=drawer]::after {\n display: none;\n }\n\n :host([effect='reveal'][side='right'][opened]) [part=pusher] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='reveal'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='reveal'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='reveal'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='reveal'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='reveal'][side='top'][opened]) [part=pusher] {\n transform: translate3d(0, var(--kemet-drawer-height), 0);\n }\n\n :host([effect='reveal'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='reveal'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n\n :host([effect='reveal'][side='bottom'][opened]) [part=pusher] {\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n /* push */\n :host([effect='push'][opened]) [part=pusher] {\n transform: translate3d(var(--kemet-drawer-width), 0, 0);\n }\n\n :host([effect='push']) [part=drawer] {\n transform: translate3d(-100%, 0, 0);\n }\n\n :host([effect='push'][opened]) [part=drawer] {\n visibility: visible;\n transition: transform 0.5s;\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='push']) [part=drawer]::after {\n display: none;\n }\n\n :host([effect='push'][side='right'][opened]) [part=pusher] {\n transform: translate3d(calc(var(--kemet-drawer-width) * -1), 0, 0);\n }\n\n :host([effect='push'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='push'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='push'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='push'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='push'][side='top'][opened]) [part=pusher] {\n transform: translate3d(0, var(--kemet-drawer-height), 0);\n }\n\n :host([effect='push'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='push'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n\n :host([effect='push'][side='bottom'][opened]) [part=pusher] {\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n /* scale */\n :host([effect='scale']) [part=pusher] {\n transform-style: preserve-3d;\n }\n\n :host([effect='scale'][opened]) [part=pusher] {\n transform: translate3d(0, 0, 0) scale(0.75);\n }\n\n :host([effect='scale']) [part=drawer] {\n opacity: 1;\n transform: translate3d(-100%, 0, 0);\n }\n\n :host([effect='scale'][opened]) [part=drawer] {\n visibility: visible;\n transition: transform 0.5s;\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='scale']) [part=drawer]::after {\n display: none;\n }\n\n :host([effect='scale'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='scale'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='scale'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='scale'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='scale'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='scale'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-drawer-overlay-color: rgb(0 0 0 / 20%);\n --kemet-drawer-width: 300px;\n --kemet-drawer-height: 100%;\n --kemet-drawer-font-color: var(--kemet-color-font-inverse-base);\n --kemet-drawer-background-color: var(--kemet-color-background-inverse);\n\n width: 100%;\n display: block;\n}\n\n[part=container] {\n position: relative;\n overflow: hidden;\n}\n\n[part=drawer] {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 100;\n visibility: hidden;\n height: 100%;\n overflow: auto;\n transition: all 0.5s;\n}\n\n[part=drawer]::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.2);\n content: '';\n opacity: 1;\n transition: opacity 0.5s;\n}\n\n:host([opened]) [part=drawer]::after {\n width: 0;\n height: 0;\n opacity: 0;\n transition: opacity 0.5s, width 0.1s 0.5s, height 0.1s 0.5s;\n}\n\n[part=pusher] {\n position: relative;\n left: 0;\n z-index: 99;\n height: 100%;\n transition: transform 0.5s;\n}\n\n:host([overlay]) [part=pusher]::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 0;\n height: 0;\n background: var(--kemet-drawer-overlay-color);\n content: '';\n opacity: 0;\n transition: opacity 0.5s, width 0.1s 0.5s, height 0.1s 0.5s;\n}\n\n:host([opened]) [part=pusher]::after {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition: opacity 0.5s;\n transform: scale(2);\n}\n\n:host([fill-viewport]) [part=content] {\n min-height: 100vh;\n}\n\n[part=wrapper]{\n position: relative;\n}\n\n::slotted([slot=content]) {\n min-height: 100vh;\n}\n\n[part=drawer] {\n width: var(--kemet-drawer-width);\n height: var(--kemet-drawer-height);\n color: var(--kemet-drawer-font-color);\n background: var(--kemet-drawer-background-color);\n}\n`;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAiB,YAAuB;;;ACAjD,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,SAAS,MAAM,QAAQ,UAAU,MAAM,WAAW,SAAS;AACnF,UAAQ;AAAA,IACN,IAAI,YAAY,MAAM,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,EACrD;AACF;;;ACQO,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,SAAM;AACN,EAAAA,gBAAA,WAAQ;AACR,EAAAA,gBAAA,YAAS;AACT,EAAAA,gBAAA,UAAO;AALG,SAAAA;AAAA,GAAA;;;ACZZ,SAAS,KAAK,iBAAiB;AAE/B,IAAM,iBAAiB,OAAO,aAAa,cAAc,GAAG,SAAS,gBAAgB,YAAY,OAAO;AAGxG,IAAO,kBAAQ;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,gCAqCiB,UAAU,cAAc,CAAC;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,gCAsDzB,UAAU,cAAc,CAAC;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,gCA2DzB,UAAU,cAAc,CAAC;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,gCAwDzB,UAAU,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACnNzD,SAAS,OAAAC,YAAW;AAEpB,IAAO,qBAAQA;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;;;ALMR,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,WAAQ;AAJE,SAAAA;AAAA,GAAA;AAOZ,IAAM,UAAU,OAAO,OAAO,WAAW;AACzC,IAAM,aAAa,OAAO,OAAO,cAAc;AA2C/C,IAAqB,cAArB,cAAyC,WAAW;AAAA,EAApD;AAAA;AAIE,kBAAkB;AAGlB,kBAAiC;AAGjC;AAGA,mBAAmB;AAGnB,wBAAwB;AAMxB,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,SAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,YAAM,gBAAgB,MAAM;AAC5B,UAAI,KAAK,UAAU,cAAc,QAAQ,YAAY,MAAM,gBAAgB;AACzE,aAAK,SAAS;AAAA,MAChB;AAAA,IACF,CAAC;AAED,cAAU,MAAM,wBAAwB;AAAA,MACtC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,QAAQ,WAA+B;AACrC,QAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,KAAK,WAAW,MAAM;AACpD,gBAAU,MAAM,uBAAuB,EAAE,SAAS,KAAK,CAAC;AAAA,IAC1D;AAEA,QAAI,UAAU,IAAI,QAAQ,KAAK,KAAK,WAAW,OAAO;AACpD,gBAAU,MAAM,uBAAuB,EAAE,SAAS,KAAK,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcT;AACF;AApEqB,YACZ,SAAS,CAAC,oBAAQ,eAAa;AAGtC;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAHvB,YAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,YAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,YAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAZvB,YAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,WAAW,gBAAgB,CAAC;AAAA,GAfnD,YAgBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAlBtB,YAmBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GArBtB,YAsBnB;AAtBmB,cAArB;AAAA,EADC,cAAc,cAAc;AAAA,GACR;","names":["EnumDirections","css","EnumEffects"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/drawer/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/utilities/constants.ts","../../../src/elements/drawer/effects.ts","../../../src/elements/drawer/styles.css.ts"],"sourcesContent":["import { LitElement, css, html, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumDirections } from '../../utilities/constants';\nimport effectsStyles from './effects';\nimport styles from './styles.css.ts';\n\n\nexport enum EnumEffects {\n Slide = 'slide',\n Reveal = 'reveal',\n Push = 'push',\n Scale = 'scale'\n}\n\nconst effects = Object.values(EnumEffects) as string[];\nconst directions = Object.values(EnumDirections) as string[];\n\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-drawer\n * @summary A component that adds an off-canvas menu with different effects.\n * @ssrsafe yes\n *\n * @prop {boolean} opened - Determines if the drawer is opened or not.\n * @prop {string} effect - The animation effect for opening and closing the drawer. Values include: (slide | reveal | push | scale)\n * @prop {EnumDirection} side - Allows you to control which side the drawer opens from. Values include: (left | right | top | bottom)\n * @prop {boolean} overlay - Adds an overlay over the content section of the Drawer when opened\n * @prop {boolean} fillViewport - Makes the drawer fill the viewport height\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 sidebar - The off-screen nav area of your app or site\n * @slot body - The main content area of your app or site.\n *\n * @csspart container\n * @csspart drawer\n * @csspart pusher\n * @csspart content\n * @csspart wrapper\n *\n * @cssproperty --kemet-drawer-width - The width of the drawer.\n * @cssproperty --kemet-drawer-height - The height of the drawer.\n * @cssproperty --kemet-drawer-color - The text color of the drawer.\n * @cssproperty --kemet-drawer-background-color - The background color of the drawer.\n * @cssproperty --kemet-drawer-overlay-color - The color of the overlay.\n *\n * @event kemet-drawer-opened - Fires when the drawer opens.\n * @event kemet-drawer-closed - Fires when the drawer closes.\n *\n * @fires kemet-drawer-mounted - Fired when the button is mounted to the DOM\n * @detail {HTMLElement} element - The button element\n *\n */\n\n@customElement('kemet-drawer')\nexport default class KemetDrawer extends LitElement {\n static styles = [styles, effectsStyles];\n\n @property({ type: Boolean, reflect: true })\n opened: boolean = false;\n\n @property({ type: String, reflect: true })\n effect: typeof effects[number] = EnumEffects.Slide;\n\n @property({ type: String, reflect: true })\n side: typeof directions[number] = EnumDirections.Left;\n\n @property({ type: Boolean, reflect: true })\n overlay: boolean = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'fill-viewport' })\n fillViewport: boolean = false;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n firstUpdated() {\n this.addEventListener('click', (event) => {\n const targetElement = event.target as HTMLElement;\n if (this.opened && targetElement.tagName.toLowerCase() === 'kemet-drawer') {\n this.opened = false;\n }\n });\n\n emitEvent(this, 'kemet-drawer-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated(prevProps: Map<string, never>) {\n if (!prevProps.get('opened') && this.opened === true) {\n emitEvent(this, 'kemet-drawer-opened', { element: this });\n }\n\n if (prevProps.get('opened') && this.opened === false) {\n emitEvent(this, 'kemet-drawer-closed', { element: this });\n }\n }\n\n render() {\n return html`\n <section part=\"container\">\n <div part=\"drawer\" title=\"Drawer\">\n <slot name=\"sidebar\"></slot>\n </div>\n <div part=\"pusher\">\n <div part=\"content\">\n <div part=\"wrapper\">\n <slot name=\"body\"></slot>\n </div>\n </div>\n </div>\n </section>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-drawer': KemetDrawer\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 KemetCount from \"../elements/count\";\nimport HTMLKemetInputElement from \"../elements/input\";\n\nexport enum EnumKeyCodes {\n ESCAPE = 'Escape',\n ENTER = 'Enter',\n SPACE = 'Space',\n BACKSPACE = 'Backspace',\n DELETE = 'Delete'\n}\n\nexport const directions = ['none','top', 'right', 'bottom', 'left'] as const;\nexport enum EnumDirections {\n None = 'none',\n Top = 'top',\n Right = 'right',\n Bottom = 'bottom',\n Left = 'left'\n}\nexport type TypeDirection = typeof directions[number];\n\nexport const appearances = ['neutral', 'brand', 'success', 'warning', 'error'] as const;\nexport enum EnumAppearances {\n Neutral = 'neutral',\n Brand = 'brand',\n Success = 'success',\n Warning = 'warning',\n Error = 'error',\n Info = 'info',\n Link = 'link'\n}\nexport type TypeAppearance = typeof appearances[number];\n\nexport const axis = ['horizontal', 'vertical'] as const;\nexport enum EnumAxis {\n Horizontal = 'horizontal',\n Vertical = 'vertical'\n}\nexport type TypeAxis = typeof axis[number];\n\nexport const roundedSizes = ['sm', 'md', 'lg', 'xl', 'circle', 'pill'] as const;\nexport enum EnumRoundedSizes {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n XL = 'xl',\n Circle = 'circle',\n Pill = 'pill'\n}\nexport type TypeRoundedSizes = typeof roundedSizes[number];\n\nexport interface InterfaceInputDetails {\n status: TypeAppearance;\n validity: ValidityState;\n element: HTMLElement | KemetCount | HTMLKemetInputElement;\n value?: string;\n}\n","import { css, unsafeCSS } from 'lit';\n\nconst documentHeight = typeof document !== 'undefined' ? `${document.documentElement.scrollHeight}px` : '100vh';\n\n\nexport default css`\n /* slide */\n :host([effect='slide']) [part=drawer] {\n visibility: visible;\n transform: translate3d(-100%, 0, 0);\n }\n\n :host([effect='slide'][opened]) [part=drawer] {\n visibility: visible;\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='slide']) [part=drawer]:after {\n display: none;\n }\n\n :host([effect='slide'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='slide'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='slide'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='slide'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='slide'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='slide'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n\n /* reveal */\n :host([effect='reveal'][opened]) [part=pusher] {\n transform: translate3d(var(--kemet-drawer-width), 0, 0);\n }\n\n :host([effect='reveal']) [part=drawer] {\n z-index: 1;\n }\n\n :host([effect='reveal'][opened]) [part=drawer] {\n visibility: visible;\n transition: transform 0.5s;\n }\n\n :host([effect='reveal']) [part=drawer]::after {\n display: none;\n }\n\n :host([effect='reveal'][side='right'][opened]) [part=pusher] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='reveal'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='reveal'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='reveal'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='reveal'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='reveal'][side='top'][opened]) [part=pusher] {\n transform: translate3d(0, var(--kemet-drawer-height), 0);\n }\n\n :host([effect='reveal'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='reveal'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n\n :host([effect='reveal'][side='bottom'][opened]) [part=pusher] {\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n /* push */\n :host([effect='push'][opened]) [part=pusher] {\n transform: translate3d(var(--kemet-drawer-width), 0, 0);\n }\n\n :host([effect='push']) [part=drawer] {\n transform: translate3d(-100%, 0, 0);\n }\n\n :host([effect='push'][opened]) [part=drawer] {\n visibility: visible;\n transition: transform 0.5s;\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='push']) [part=drawer]::after {\n display: none;\n }\n\n :host([effect='push'][side='right'][opened]) [part=pusher] {\n transform: translate3d(calc(var(--kemet-drawer-width) * -1), 0, 0);\n }\n\n :host([effect='push'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='push'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='push'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='push'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='push'][side='top'][opened]) [part=pusher] {\n transform: translate3d(0, var(--kemet-drawer-height), 0);\n }\n\n :host([effect='push'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='push'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n\n :host([effect='push'][side='bottom'][opened]) [part=pusher] {\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n /* scale */\n :host([effect='scale']) [part=pusher] {\n transform-style: preserve-3d;\n }\n\n :host([effect='scale'][opened]) [part=pusher] {\n transform: translate3d(0, 0, 0) scale(0.75);\n }\n\n :host([effect='scale']) [part=drawer] {\n opacity: 1;\n transform: translate3d(-100%, 0, 0);\n }\n\n :host([effect='scale'][opened]) [part=drawer] {\n visibility: visible;\n transition: transform 0.5s;\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='scale']) [part=drawer]::after {\n display: none;\n }\n\n :host([effect='scale'][side='right']) [part=drawer] {\n transform: translate3d(100vw, 0, 0);\n }\n\n :host([effect='scale'][side='right'][opened]) [part=drawer] {\n transform: translate3d(calc(100vw - var(--kemet-drawer-width)), 0, 0);\n }\n\n :host([effect='scale'][side='top']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, calc(var(--kemet-drawer-height) * -1), 0);\n }\n\n :host([effect='scale'][side='top'][opened]) [part=drawer] {\n transform: translate3d(0, 0, 0);\n }\n\n :host([effect='scale'][side='bottom']) [part=drawer] {\n width: 100vw;\n height: var(--kemet-drawer-height, 100vh);\n transform: translate3d(0, ${unsafeCSS(documentHeight)}, 0);\n }\n\n :host([effect='scale'][side='bottom'][opened]) [part=drawer] {\n transform: translate3d(0, calc(100vh - var(--kemet-drawer-height)), 0);\n }\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-drawer-overlay-color: rgb(0 0 0 / 20%);\n --kemet-drawer-width: 300px;\n --kemet-drawer-height: 100%;\n --kemet-drawer-font-color: var(--kemet-color-font-inverse-base);\n --kemet-drawer-background-color: var(--kemet-color-background-inverse);\n\n width: 100%;\n display: block;\n}\n\n[part=container] {\n position: relative;\n overflow: hidden;\n}\n\n[part=drawer] {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 100;\n visibility: hidden;\n height: 100%;\n overflow: auto;\n transition: all 0.5s;\n}\n\n[part=drawer]::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.2);\n content: '';\n opacity: 1;\n transition: opacity 0.5s;\n}\n\n:host([opened]) [part=drawer]::after {\n width: 0;\n height: 0;\n opacity: 0;\n transition: opacity 0.5s, width 0.1s 0.5s, height 0.1s 0.5s;\n}\n\n[part=pusher] {\n position: relative;\n left: 0;\n z-index: 99;\n height: 100%;\n transition: transform 0.5s;\n}\n\n:host([overlay]) [part=pusher]::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 0;\n height: 0;\n background: var(--kemet-drawer-overlay-color);\n content: '';\n opacity: 0;\n transition: opacity 0.5s, width 0.1s 0.5s, height 0.1s 0.5s;\n}\n\n:host([opened]) [part=pusher]::after {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition: opacity 0.5s;\n transform: scale(2);\n}\n\n:host([fill-viewport]) [part=content] {\n min-height: 100vh;\n}\n\n[part=wrapper]{\n position: relative;\n}\n\n::slotted([slot=content]) {\n min-height: 100vh;\n}\n\n[part=drawer] {\n width: var(--kemet-drawer-width);\n height: var(--kemet-drawer-height);\n color: var(--kemet-drawer-font-color);\n background: var(--kemet-drawer-background-color);\n}\n`;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAiB,YAAuB;;;ACAjD,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;;;ACQO,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,SAAM;AACN,EAAAA,gBAAA,WAAQ;AACR,EAAAA,gBAAA,YAAS;AACT,EAAAA,gBAAA,UAAO;AALG,SAAAA;AAAA,GAAA;;;ACZZ,SAAS,KAAK,iBAAiB;AAE/B,IAAM,iBAAiB,OAAO,aAAa,cAAc,GAAG,SAAS,gBAAgB,YAAY,OAAO;AAGxG,IAAO,kBAAQ;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,gCAqCiB,UAAU,cAAc,CAAC;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,gCAsDzB,UAAU,cAAc,CAAC;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,gCA2DzB,UAAU,cAAc,CAAC;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,gCAwDzB,UAAU,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACnNzD,SAAS,OAAAC,YAAW;AAEpB,IAAO,qBAAQA;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;;;ALMR,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,WAAQ;AAJE,SAAAA;AAAA,GAAA;AAOZ,IAAM,UAAU,OAAO,OAAO,WAAW;AACzC,IAAM,aAAa,OAAO,OAAO,cAAc;AA2C/C,IAAqB,cAArB,cAAyC,WAAW;AAAA,EAApD;AAAA;AAIE,kBAAkB;AAGlB,kBAAiC;AAGjC;AAGA,mBAAmB;AAGnB,wBAAwB;AAMxB,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,SAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,YAAM,gBAAgB,MAAM;AAC5B,UAAI,KAAK,UAAU,cAAc,QAAQ,YAAY,MAAM,gBAAgB;AACzE,aAAK,SAAS;AAAA,MAChB;AAAA,IACF,CAAC;AAED,cAAU,MAAM,wBAAwB;AAAA,MACtC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,QAAQ,WAA+B;AACrC,QAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,KAAK,WAAW,MAAM;AACpD,gBAAU,MAAM,uBAAuB,EAAE,SAAS,KAAK,CAAC;AAAA,IAC1D;AAEA,QAAI,UAAU,IAAI,QAAQ,KAAK,KAAK,WAAW,OAAO;AACpD,gBAAU,MAAM,uBAAuB,EAAE,SAAS,KAAK,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcT;AACF;AApEqB,YACZ,SAAS,CAAC,oBAAQ,eAAa;AAGtC;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAHvB,YAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GANtB,YAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GATtB,YAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAZvB,YAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,WAAW,gBAAgB,CAAC;AAAA,GAfnD,YAgBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAlBtB,YAmBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GArBtB,YAsBnB;AAtBmB,cAArB;AAAA,EADC,cAAc,cAAc;AAAA,GACR;","names":["EnumDirections","css","EnumEffects"]}
|
|
@@ -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 } from '../../constants-BsAfWV-a.js';
|
|
5
5
|
import '../../form-controller-3q581XcZ.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/fab/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/fab/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport { EnumAppearances, EnumRoundedSizes } from '../../utilities/constants';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.2.0\n * @status stable\n *\n * @tagname kemet-fab\n * @summary The FAB, or Floating Action Button, performs a primary action on a page.\n * @ssrsafe yes\n *\n * @prop {boolean} expanded - The expanded state of the button.\n * @prop {boolean} outlined - Outline style for a button.\n * @prop {boolean} disabled - Determines whether not a button is disabled.\n * @prop {EnumRoundedSizes} rounded - Displays the fab with rounded corners.\n * @prop {EnumAppearances} appearance - The appearance of the fab.\n * @prop {number} expandPoint - The distance, in pixels, where the fab should automatically expand.\n * @prop {number} collapsePoint - The distance, in pixels, where the fab should automatically collapse.\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 Icon - A slot for an icon to display.\n * @slot default - The text for the FAB.\n * *\n * @cssproperty --kemet-fab-size - The width and height of the fab.\n * @cssproperty --kemet-fab-color - The text color of the fab.\n * @cssproperty --kemet-fab-icon-color - The color of the fab icon.\n * @cssproperty --kemet-fab-label-color - The color of the fab label.\n * @cssproperty --kemet-fab-padding - The padding of the fab.\n * @cssproperty --kemet-fab-border - The border of the fab.\n *\n * @csspart button - The button's container.\n * @csspart icon - The FAB icon.\n * @csspart label - The text in the FAB.\n *\n */\n\n@customElement('kemet-fab')\nexport default class KemetFAB extends LitElement {\n static styles = [styles];\n\n @property({ type: Boolean, reflect: true })\n expanded: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n outlined: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property({ type: String, reflect: true })\n rounded?: EnumRoundedSizes;\n\n @property({ type: String, reflect: true })\n appearance?: EnumAppearances;\n\n @property({ type: Number, attribute: 'expand-point' })\n expandPoint: number = 0;\n\n @property({ type: Number, attribute: 'collapse-point' })\n collapsePoint: number = 0;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n\n firstUpdated() {\n // events\n window.addEventListener('scroll', this.handleScroll.bind(this));\n this.addEventListener('mouseover', this.handleMouseOver.bind(this));\n this.addEventListener('mouseout', this.handleMouseOut.bind(this));\n\n emitEvent(this, 'kemet-fab-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 <button class=\"button\" part=\"button\" ?disabled=${this.disabled}>\n <span part=\"icon\">\n <slot name=\"icon\"></slot>\n </span>\n <span part=\"label\">\n <slot></slot>\n </span>\n </button>\n `;\n }\n\n handleMouseOver() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n\n handleMouseOut() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n\n handleScroll() {\n if (window.scrollY > this.expandPoint && window.scrollY < this.collapsePoint) {\n this.expanded = true;\n } else {\n this.expanded = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-fab': KemetFAB\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 /* public */\n --kemet-fab-size: 50px;\n --kemet-fab-color: var(--kemet-color-background-inverse);\n --kemet-fab-icon-color: var(--kemet-color-font-inverse-base);\n --kemet-fab-label-color: var(--kemet-color-font-inverse-base);\n --kemet-fab-padding: 0 1.35rem 0 0.25rem;\n --kemet-fab-border: 1px solid var(--kemet-fab-color);\n\n /* private */\n --_kemet-fab-border-radius: 0;\n --_kemet-fab-background-color: var(--kemet-fab-color);\n\n display: inline-block;\n position: relative;\n}\n\nbutton {\n color: var(--kemet-fab-icon-color);\n font-size: inherit;\n display: inline-flex;\n padding: 0;\n position: relative;\n min-height: var(--kemet-fab-size);\n min-width: var(--kemet-fab-size);\n max-width: var(--kemet-fab-size);\n align-items: center;\n justify-content: flex-start;\n transition: all 0.4s ease;\n border: var(--kemet-fab-border);\n border-radius: var(--_kemet-button-border-radius);\n background-color: var(--_kemet-fab-background-color);\n}\n\n:host([outlined]) {\n --kemet-fab-icon-color: var(--kemet-fab-color);\n --kemet-fab-label-color: var(--kemet-fab-color);\n --_kemet-fab-background-color: transparent;\n}\n\n:host([rounded]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([appearance=brand]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-error);\n}\n\n:host([appearance=success]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-success);\n}\n\n:host([appearance=warning]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-warning);\n}\n\n:host([appearance=info]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-info);\n}\n\n:host([appearance=link]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-link);\n}\n\n\n\nbutton::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n border-radius: var(--_kemet-button-border-radius);\n transition: background-color 0.3s ease-in-out;\n background-color: var(--_kemet-fab-background-color);\n}\n\n:host([expanded]) button {\n max-width: 99rem;\n padding: 0 1.35rem 0 0.25rem;\n}\n\n:host([disabled]) {\n --kemet-fab-color: var(--kemet-color-background-disabled);\n}\n\n[part=icon] {\n width: var(--kemet-fab-size);\n height: var(--kemet-fab-size);\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n}\n\n[part=label] {\n color: var(--kemet-fab-label-color);\n z-index: 1;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n}\n\n:host([expanded]) [part=label] {\n opacity: 1;\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/fab/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/fab/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport { EnumAppearances, EnumRoundedSizes } from '../../utilities/constants';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.2.0\n * @status stable\n *\n * @tagname kemet-fab\n * @summary The FAB, or Floating Action Button, performs a primary action on a page.\n * @ssrsafe yes\n *\n * @prop {boolean} expanded - The expanded state of the button.\n * @prop {boolean} outlined - Outline style for a button.\n * @prop {boolean} disabled - Determines whether not a button is disabled.\n * @prop {EnumRoundedSizes} rounded - Displays the fab with rounded corners.\n * @prop {EnumAppearances} appearance - The appearance of the fab.\n * @prop {number} expandPoint - The distance, in pixels, where the fab should automatically expand.\n * @prop {number} collapsePoint - The distance, in pixels, where the fab should automatically collapse.\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 Icon - A slot for an icon to display.\n * @slot default - The text for the FAB.\n * *\n * @cssproperty --kemet-fab-size - The width and height of the fab.\n * @cssproperty --kemet-fab-color - The text color of the fab.\n * @cssproperty --kemet-fab-icon-color - The color of the fab icon.\n * @cssproperty --kemet-fab-label-color - The color of the fab label.\n * @cssproperty --kemet-fab-padding - The padding of the fab.\n * @cssproperty --kemet-fab-border - The border of the fab.\n *\n * @csspart button - The button's container.\n * @csspart icon - The FAB icon.\n * @csspart label - The text in the FAB.\n *\n */\n\n@customElement('kemet-fab')\nexport default class KemetFAB extends LitElement {\n static styles = [styles];\n\n @property({ type: Boolean, reflect: true })\n expanded: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n outlined: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property({ type: String, reflect: true })\n rounded?: EnumRoundedSizes;\n\n @property({ type: String, reflect: true })\n appearance?: EnumAppearances;\n\n @property({ type: Number, attribute: 'expand-point' })\n expandPoint: number = 0;\n\n @property({ type: Number, attribute: 'collapse-point' })\n collapsePoint: number = 0;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n\n firstUpdated() {\n // events\n window.addEventListener('scroll', this.handleScroll.bind(this));\n this.addEventListener('mouseover', this.handleMouseOver.bind(this));\n this.addEventListener('mouseout', this.handleMouseOut.bind(this));\n\n emitEvent(this, 'kemet-fab-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 <button class=\"button\" part=\"button\" ?disabled=${this.disabled}>\n <span part=\"icon\">\n <slot name=\"icon\"></slot>\n </span>\n <span part=\"label\">\n <slot></slot>\n </span>\n </button>\n `;\n }\n\n handleMouseOver() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n\n handleMouseOut() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n\n handleScroll() {\n if (window.scrollY > this.expandPoint && window.scrollY < this.collapsePoint) {\n this.expanded = true;\n } else {\n this.expanded = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-fab': KemetFAB\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 /* public */\n --kemet-fab-size: 50px;\n --kemet-fab-color: var(--kemet-color-background-inverse);\n --kemet-fab-icon-color: var(--kemet-color-font-inverse-base);\n --kemet-fab-label-color: var(--kemet-color-font-inverse-base);\n --kemet-fab-padding: 0 1.35rem 0 0.25rem;\n --kemet-fab-border: 1px solid var(--kemet-fab-color);\n\n /* private */\n --_kemet-fab-border-radius: 0;\n --_kemet-fab-background-color: var(--kemet-fab-color);\n\n display: inline-block;\n position: relative;\n}\n\nbutton {\n color: var(--kemet-fab-icon-color);\n font-size: inherit;\n display: inline-flex;\n padding: 0;\n position: relative;\n min-height: var(--kemet-fab-size);\n min-width: var(--kemet-fab-size);\n max-width: var(--kemet-fab-size);\n align-items: center;\n justify-content: flex-start;\n transition: all 0.4s ease;\n border: var(--kemet-fab-border);\n border-radius: var(--_kemet-button-border-radius);\n background-color: var(--_kemet-fab-background-color);\n}\n\n:host([outlined]) {\n --kemet-fab-icon-color: var(--kemet-fab-color);\n --kemet-fab-label-color: var(--kemet-fab-color);\n --_kemet-fab-background-color: transparent;\n}\n\n:host([rounded]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-md);\n}\n\n:host([rounded=sm]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-sm);\n}\n\n:host([rounded=lg]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-lg);\n}\n\n:host([rounded=xl]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-xl);\n}\n\n:host([rounded=circle]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-circle);\n}\n\n:host([rounded=pill]) {\n --_kemet-button-border-radius: var(--kemet-border-radius-pill);\n}\n\n:host([appearance=brand]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-brand-primary-darker);\n}\n\n:host([appearance=error]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-error);\n}\n\n:host([appearance=success]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-success);\n}\n\n:host([appearance=warning]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-warning);\n}\n\n:host([appearance=info]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-info);\n}\n\n:host([appearance=link]:not([disabled])) {\n --kemet-fab-color: var(--kemet-color-background-link);\n}\n\n\n\nbutton::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n border-radius: var(--_kemet-button-border-radius);\n transition: background-color 0.3s ease-in-out;\n background-color: var(--_kemet-fab-background-color);\n}\n\n:host([expanded]) button {\n max-width: 99rem;\n padding: 0 1.35rem 0 0.25rem;\n}\n\n:host([disabled]) {\n --kemet-fab-color: var(--kemet-color-background-disabled);\n}\n\n[part=icon] {\n width: var(--kemet-fab-size);\n height: var(--kemet-fab-size);\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n}\n\n[part=label] {\n color: var(--kemet-fab-label-color);\n z-index: 1;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n}\n\n:host([expanded]) [part=label] {\n opacity: 1;\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":"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","names":[]}
|