kemet-ui 3.0.0 → 3.0.1
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 +657 -715
- package/dist/components/kemet-accordion/kemet-accordion-panel.d.ts +2 -2
- package/dist/components/kemet-accordion/kemet-accordion-panel.js +1 -1
- package/dist/components/kemet-accordion/kemet-accordion-panel.js.map +1 -1
- package/dist/components/kemet-accordion/kemet-accordion.d.ts +3 -3
- package/dist/components/kemet-accordion/kemet-accordion.js +2 -1
- package/dist/components/kemet-accordion/kemet-accordion.js.map +1 -1
- package/dist/components/kemet-alert/kemet-alert.d.ts +2 -2
- package/dist/components/kemet-alert/kemet-alert.js.map +1 -1
- package/dist/components/kemet-badge/kemet-badge.js.map +1 -1
- package/dist/components/kemet-button/kemet-button.d.ts +2 -2
- package/dist/components/kemet-button/kemet-button.js +1 -1
- package/dist/components/kemet-button/kemet-button.js.map +1 -1
- package/dist/components/kemet-card/kemet-card.d.ts +1 -1
- package/dist/components/kemet-card/kemet-card.js +1 -1
- package/dist/components/kemet-card/kemet-card.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-current.d.ts +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-current.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-last.d.ts +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-last.js +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-last.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel.d.ts +18 -14
- package/dist/components/kemet-carousel/kemet-carousel.js +32 -13
- package/dist/components/kemet-carousel/kemet-carousel.js.map +1 -1
- package/dist/components/kemet-checkbox/kemet-checkbox.d.ts +4 -4
- package/dist/components/kemet-checkbox/kemet-checkbox.js +4 -4
- package/dist/components/kemet-checkbox/kemet-checkbox.js.map +1 -1
- package/dist/components/kemet-combo/kemet-combo.d.ts +8 -8
- package/dist/components/kemet-combo/kemet-combo.js +13 -17
- package/dist/components/kemet-combo/kemet-combo.js.map +1 -1
- package/dist/components/kemet-count/kemet-count.d.ts +1 -1
- package/dist/components/kemet-count/kemet-count.js +1 -1
- package/dist/components/kemet-count/kemet-count.js.map +1 -1
- package/dist/components/kemet-draggable/kemet-draggable.d.ts +3 -3
- package/dist/components/kemet-draggable/kemet-draggable.js +6 -5
- package/dist/components/kemet-draggable/kemet-draggable.js.map +1 -1
- package/dist/components/kemet-drawer/kemet-drawer.d.ts +2 -2
- package/dist/components/kemet-drawer/kemet-drawer.js +2 -2
- package/dist/components/kemet-drawer/kemet-drawer.js.map +1 -1
- package/dist/components/kemet-drawer/styles.js +1 -0
- package/dist/components/kemet-drawer/styles.js.map +1 -1
- package/dist/components/kemet-fab/kemet-fab.d.ts +1 -1
- package/dist/components/kemet-fab/kemet-fab.js +1 -1
- package/dist/components/kemet-fab/kemet-fab.js.map +1 -1
- package/dist/components/kemet-field/kemet-field.d.ts +7 -7
- package/dist/components/kemet-field/kemet-field.js +9 -14
- package/dist/components/kemet-field/kemet-field.js.map +1 -1
- package/dist/components/kemet-flipcard/kemet-flipcard-trigger.d.ts +1 -1
- package/dist/components/kemet-flipcard/kemet-flipcard-trigger.js +2 -3
- package/dist/components/kemet-flipcard/kemet-flipcard-trigger.js.map +1 -1
- package/dist/components/kemet-flipcard/kemet-flipcard.d.ts +2 -2
- package/dist/components/kemet-flipcard/kemet-flipcard.js +3 -5
- package/dist/components/kemet-flipcard/kemet-flipcard.js.map +1 -1
- package/dist/components/kemet-input/kemet-input.d.ts +3 -22
- package/dist/components/kemet-input/kemet-input.js +3 -23
- package/dist/components/kemet-input/kemet-input.js.map +1 -1
- package/dist/components/kemet-modal/kemet-modal.d.ts +4 -4
- package/dist/components/kemet-modal/kemet-modal.js +3 -3
- package/dist/components/kemet-modal/kemet-modal.js.map +1 -1
- package/dist/components/kemet-password/kemet-password.d.ts +14 -8
- package/dist/components/kemet-password/kemet-password.js +4 -33
- package/dist/components/kemet-password/kemet-password.js.map +1 -1
- package/dist/components/kemet-popper/kemet-popper-close.d.ts +1 -1
- package/dist/components/kemet-popper/kemet-popper-close.js +2 -3
- package/dist/components/kemet-popper/kemet-popper-close.js.map +1 -1
- package/dist/components/kemet-popper/kemet-popper.d.ts +18 -7
- package/dist/components/kemet-popper/kemet-popper.js +21 -25
- package/dist/components/kemet-popper/kemet-popper.js.map +1 -1
- package/dist/components/kemet-radio/kemet-radios.d.ts +5 -4
- package/dist/components/kemet-radio/kemet-radios.js +10 -4
- package/dist/components/kemet-radio/kemet-radios.js.map +1 -1
- package/dist/components/kemet-rotator/kemet-rotator.d.ts +1 -1
- package/dist/components/kemet-rotator/kemet-rotator.js +1 -2
- package/dist/components/kemet-rotator/kemet-rotator.js.map +1 -1
- package/dist/components/kemet-scroll-link/kemet-scroll-link.d.ts +2 -2
- package/dist/components/kemet-scroll-link/kemet-scroll-link.js +11 -10
- package/dist/components/kemet-scroll-link/kemet-scroll-link.js.map +1 -1
- package/dist/components/kemet-scroll-nav/kemet-scroll-nav.d.ts +2 -2
- package/dist/components/kemet-scroll-nav/kemet-scroll-nav.js +2 -7
- package/dist/components/kemet-scroll-nav/kemet-scroll-nav.js.map +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.d.ts +5 -4
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.js +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.js.map +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.d.ts +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.js +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.js.map +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap.d.ts +3 -2
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap.js +2 -7
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap.js.map +1 -1
- package/dist/components/kemet-select/kemet-option.d.ts +1 -1
- package/dist/components/kemet-select/kemet-option.js +1 -1
- package/dist/components/kemet-select/kemet-option.js.map +1 -1
- package/dist/components/kemet-select/kemet-select.d.ts +19 -10
- package/dist/components/kemet-select/kemet-select.js +3 -44
- package/dist/components/kemet-select/kemet-select.js.map +1 -1
- package/dist/components/kemet-sortable/kemet-sortable.d.ts +5 -5
- package/dist/components/kemet-sortable/kemet-sortable.js +5 -5
- package/dist/components/kemet-sortable/kemet-sortable.js.map +1 -1
- package/dist/components/kemet-svgs/kemet-svgs.d.ts +1 -1
- package/dist/components/kemet-svgs/kemet-svgs.js +1 -1
- package/dist/components/kemet-svgs/kemet-svgs.js.map +1 -1
- package/dist/components/kemet-tabs/kemet-tab-panel.d.ts +1 -0
- package/dist/components/kemet-tabs/kemet-tab-panel.js +3 -0
- package/dist/components/kemet-tabs/kemet-tab-panel.js.map +1 -1
- package/dist/components/kemet-tabs/kemet-tab.d.ts +1 -0
- package/dist/components/kemet-tabs/kemet-tab.js +4 -1
- package/dist/components/kemet-tabs/kemet-tab.js.map +1 -1
- package/dist/components/kemet-tabs/kemet-tabs.d.ts +23 -14
- package/dist/components/kemet-tabs/kemet-tabs.js +3 -47
- package/dist/components/kemet-tabs/kemet-tabs.js.map +1 -1
- package/dist/components/kemet-textarea/kemet-textarea.js.map +1 -1
- package/dist/components/kemet-toggle/kemet-toggle.d.ts +3 -3
- package/dist/components/kemet-toggle/kemet-toggle.js +3 -3
- package/dist/components/kemet-toggle/kemet-toggle.js.map +1 -1
- package/dist/components/kemet-tooltip/kemet-tooltip.d.ts +2 -2
- package/dist/components/kemet-tooltip/kemet-tooltip.js +13 -12
- package/dist/components/kemet-tooltip/kemet-tooltip.js.map +1 -1
- package/dist/components/kemet-tracker/kemet-tracker-step.d.ts +2 -2
- package/dist/components/kemet-tracker/kemet-tracker-step.js +2 -2
- package/dist/components/kemet-tracker/kemet-tracker-step.js.map +1 -1
- package/dist/components/kemet-tracker/kemet-tracker.d.ts +2 -1
- package/dist/components/kemet-tracker/kemet-tracker.js.map +1 -1
- package/dist/components/kemet-upload/kemet-upload-file.js +1 -2
- package/dist/components/kemet-upload/kemet-upload-file.js.map +1 -1
- package/dist/components/kemet-upload/kemet-upload.d.ts +3 -3
- package/dist/components/kemet-upload/kemet-upload.js +3 -8
- package/dist/components/kemet-upload/kemet-upload.js.map +1 -1
- package/dist/kemet-components.bundle.js +98 -86
- package/dist/kemet-components.bundle.js.map +1 -1
- package/dist/kemet-components.cjs +8680 -8803
- package/dist/kemet-components.js +8680 -8803
- package/dist/styles/kemet.core.css +1 -561
- package/dist/styles/kemet.core.css.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -3
|
@@ -5,7 +5,7 @@ import { TypeEffect } from './types';
|
|
|
5
5
|
* @status stable
|
|
6
6
|
*
|
|
7
7
|
* @tagname kemet-modal
|
|
8
|
-
* @summary A dialog that has many built
|
|
8
|
+
* @summary A dialog that has many built-in effects and flexible styles.
|
|
9
9
|
*
|
|
10
10
|
* @prop {boolean} opened
|
|
11
11
|
* @prop {string} effect
|
|
@@ -42,15 +42,15 @@ export default class KemetModal extends LitElement {
|
|
|
42
42
|
/** @internal */
|
|
43
43
|
focusableSelector: string;
|
|
44
44
|
/** @internal */
|
|
45
|
-
focusableElements:
|
|
45
|
+
focusableElements: NodeListOf<Element>;
|
|
46
46
|
constructor();
|
|
47
47
|
firstUpdated(): void;
|
|
48
|
-
updated(prevProps:
|
|
48
|
+
updated(prevProps: Map<string, never>): void;
|
|
49
49
|
render(): import("lit-html").TemplateResult<1>;
|
|
50
50
|
isMobile(): void;
|
|
51
51
|
handleOpen(): void;
|
|
52
52
|
handleClose(): void;
|
|
53
|
-
handleFocusableDown(event:
|
|
53
|
+
handleFocusableDown(event: KeyboardEvent): void;
|
|
54
54
|
}
|
|
55
55
|
declare global {
|
|
56
56
|
interface HTMLElementTagNameMap {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { html, LitElement } from 'lit';
|
|
3
|
-
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
3
|
+
import { customElement, property, query, state, } from 'lit/decorators.js';
|
|
4
4
|
import { stylesBase, stylesEffects } from './styles';
|
|
5
5
|
import { emitEvent } from '../../utilities/misc/events';
|
|
6
6
|
/**
|
|
@@ -8,7 +8,7 @@ import { emitEvent } from '../../utilities/misc/events';
|
|
|
8
8
|
* @status stable
|
|
9
9
|
*
|
|
10
10
|
* @tagname kemet-modal
|
|
11
|
-
* @summary A dialog that has many built
|
|
11
|
+
* @summary A dialog that has many built-in effects and flexible styles.
|
|
12
12
|
*
|
|
13
13
|
* @prop {boolean} opened
|
|
14
14
|
* @prop {string} effect
|
|
@@ -62,7 +62,7 @@ let KemetModal = class KemetModal extends LitElement {
|
|
|
62
62
|
this.isMobile();
|
|
63
63
|
});
|
|
64
64
|
this.focusableElements.forEach((element) => {
|
|
65
|
-
element.addEventListener('keydown', event => this.handleFocusableDown(event));
|
|
65
|
+
element.addEventListener('keydown', (event) => this.handleFocusableDown(event));
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
updated(prevProps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kemet-modal.js","sourceRoot":"","sources":["../../../src/components/kemet-modal/kemet-modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"kemet-modal.js","sourceRoot":"","sources":["../../../src/components/kemet-modal/kemet-modal.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement } from 'lit';\nimport {\n customElement, property, query, state,\n} from 'lit/decorators.js';\nimport { stylesBase, stylesEffects } from './styles';\nimport { emitEvent } from '../../utilities/misc/events';\nimport { TypeEffect } from './types';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-modal\n * @summary A dialog that has many built-in effects and flexible styles.\n *\n * @prop {boolean} opened\n * @prop {string} effect\n * @prop {boolean} closeOnClick\n * @prop {string} breakpoint\n * @prop {boolean} mobile\n *\n * @csspart dialog - The main contents of the modal.\n * @csspart overlay - The surrounding scrim of the modal.\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 *\n * @event kemet-modal-opened - Fires when the modal opens\n * @event kemet-modal-closed - Fires when the modal closes\n *\n */\n\n@customElement('kemet-modal')\nexport default class KemetModal extends LitElement {\n static styles = [stylesBase, stylesEffects];\n\n @property({ type: Boolean, reflect: true })\n opened: boolean = false;\n\n @property({ type: String, reflect: true })\n effect: TypeEffect;\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({ type: Boolean, reflect: true })\n rounded: boolean;\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-modal-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-modal') {\n this.handleClose();\n }\n });\n\n window.addEventListener('resize', () => {\n this.isMobile();\n });\n\n this.focusableElements.forEach((element) => {\n element.addEventListener('keydown', (event: KeyboardEvent) => this.handleFocusableDown(event));\n });\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-modal-opened', this);\n }\n\n handleClose() {\n this.opened = false;\n if (this.dialogElement?.close) this.dialogElement.close();\n emitEvent(this, 'kemet-modal-closed', 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-modal': KemetModal\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
1
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
2
2
|
import { KemetFieldInterface } from '../kemet-field/types';
|
|
3
3
|
import { KemetInputInterface } from '../kemet-input/types';
|
|
4
4
|
import { KemetTextareaInterface } from '../kemet-textarea/types';
|
|
@@ -26,9 +26,14 @@ import { TypeStatus } from './types';
|
|
|
26
26
|
* @csspart rules - A description of rules to follow.
|
|
27
27
|
*
|
|
28
28
|
*/
|
|
29
|
+
interface IOptions {
|
|
30
|
+
pattern: string;
|
|
31
|
+
message: string;
|
|
32
|
+
meetsCriteria?: boolean;
|
|
33
|
+
}
|
|
29
34
|
export default class KemetPassword extends LitElement {
|
|
30
35
|
static styles: import("lit").CSSResult[];
|
|
31
|
-
rules:
|
|
36
|
+
rules: IOptions[];
|
|
32
37
|
show: boolean;
|
|
33
38
|
value: string;
|
|
34
39
|
message: string;
|
|
@@ -39,26 +44,26 @@ export default class KemetPassword extends LitElement {
|
|
|
39
44
|
field: KemetFieldInterface;
|
|
40
45
|
input: KemetInputInterface | KemetTextareaInterface;
|
|
41
46
|
firstUpdated(): void;
|
|
42
|
-
render():
|
|
47
|
+
render(): TemplateResult<1>;
|
|
43
48
|
/**
|
|
44
49
|
* Makes the list of rules
|
|
45
50
|
* @private
|
|
46
|
-
* @returns {
|
|
51
|
+
* @returns {TemplateResult<1>[]} the criteria rules
|
|
47
52
|
*/
|
|
48
|
-
makeRules():
|
|
53
|
+
makeRules(): TemplateResult<1>[];
|
|
49
54
|
/**
|
|
50
55
|
* Makes the check icon if the criteria has been met
|
|
51
56
|
* @param {boolean} meetsCriteria
|
|
52
57
|
* @private
|
|
53
|
-
* @returns {
|
|
58
|
+
* @returns {TemplateResult} an icon component
|
|
54
59
|
*/
|
|
55
|
-
makeCheckIcon(meetsCriteria:
|
|
60
|
+
makeCheckIcon(meetsCriteria: boolean): TemplateResult;
|
|
56
61
|
/**
|
|
57
62
|
* Handles the kemet-input-input event
|
|
58
63
|
* @param {*} event
|
|
59
64
|
* @private
|
|
60
65
|
*/
|
|
61
|
-
handleInput(event:
|
|
66
|
+
handleInput(event: CustomEvent): void;
|
|
62
67
|
/**
|
|
63
68
|
* Determines the strength of the password
|
|
64
69
|
* @private
|
|
@@ -75,3 +80,4 @@ declare global {
|
|
|
75
80
|
'kemet-password': KemetPassword;
|
|
76
81
|
}
|
|
77
82
|
}
|
|
83
|
+
export {};
|
|
@@ -3,29 +3,6 @@ import { html, LitElement } from 'lit';
|
|
|
3
3
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
4
|
import { emitEvent } from '../../utilities/misc/events';
|
|
5
5
|
import { stylesBase } from './styles';
|
|
6
|
-
/**
|
|
7
|
-
* @since 1.2.0
|
|
8
|
-
* @status stable
|
|
9
|
-
*
|
|
10
|
-
* @tagname kemet-password
|
|
11
|
-
* @summary Gauges the strength of a password entered by the user.
|
|
12
|
-
*
|
|
13
|
-
* @prop {array} rules - An array of objects containing the rules the password must meet.
|
|
14
|
-
* @prop {boolean} show - Controls the display of the component.
|
|
15
|
-
* @prop {string} value - The value of the input component.
|
|
16
|
-
* @prop {string} message - A message that is above the rules.
|
|
17
|
-
* @prop {string} strength - The strength of the password. Weak | Better | Strong.
|
|
18
|
-
* @prop {string} icon
|
|
19
|
-
* @prop {number} iconSize
|
|
20
|
-
*
|
|
21
|
-
* @event kemet-password-status - Fires when there's a change in status.
|
|
22
|
-
*
|
|
23
|
-
* @csspart status - The status message.
|
|
24
|
-
* @csspart indicator - The strength indicator bars.
|
|
25
|
-
* @csspart message - A message to display to the user.
|
|
26
|
-
* @csspart rules - A description of rules to follow.
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
6
|
let KemetPassword = class KemetPassword extends LitElement {
|
|
30
7
|
constructor() {
|
|
31
8
|
super(...arguments);
|
|
@@ -66,17 +43,16 @@ let KemetPassword = class KemetPassword extends LitElement {
|
|
|
66
43
|
/**
|
|
67
44
|
* Makes the list of rules
|
|
68
45
|
* @private
|
|
69
|
-
* @returns {
|
|
46
|
+
* @returns {TemplateResult<1>[]} the criteria rules
|
|
70
47
|
*/
|
|
71
48
|
makeRules() {
|
|
72
49
|
if (this.input) {
|
|
73
|
-
|
|
50
|
+
return this.rules.map((rule, index) => {
|
|
74
51
|
const regExp = new RegExp(rule.pattern);
|
|
75
52
|
const meetsCriteria = regExp.test(this.input.value);
|
|
76
53
|
this.rules[index].meetsCriteria = meetsCriteria;
|
|
77
54
|
return html `<li>${this.makeCheckIcon(meetsCriteria)} ${rule.message}</li>`;
|
|
78
55
|
});
|
|
79
|
-
return rules;
|
|
80
56
|
}
|
|
81
57
|
return null;
|
|
82
58
|
}
|
|
@@ -84,7 +60,7 @@ let KemetPassword = class KemetPassword extends LitElement {
|
|
|
84
60
|
* Makes the check icon if the criteria has been met
|
|
85
61
|
* @param {boolean} meetsCriteria
|
|
86
62
|
* @private
|
|
87
|
-
* @returns {
|
|
63
|
+
* @returns {TemplateResult} an icon component
|
|
88
64
|
*/
|
|
89
65
|
makeCheckIcon(meetsCriteria) {
|
|
90
66
|
if (meetsCriteria) {
|
|
@@ -138,12 +114,7 @@ let KemetPassword = class KemetPassword extends LitElement {
|
|
|
138
114
|
* @private
|
|
139
115
|
*/
|
|
140
116
|
visibility() {
|
|
141
|
-
|
|
142
|
-
this.show = true;
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
this.show = false;
|
|
146
|
-
}
|
|
117
|
+
this.show = this.value.length > 0;
|
|
147
118
|
}
|
|
148
119
|
};
|
|
149
120
|
KemetPassword.styles = [stylesBase];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kemet-password.js","sourceRoot":"","sources":["../../../src/components/kemet-password/kemet-password.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"kemet-password.js","sourceRoot":"","sources":["../../../src/components/kemet-password/kemet-password.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { emitEvent } from '../../utilities/misc/events';\nimport { KemetFieldInterface } from '../kemet-field/types';\nimport { KemetInputInterface } from '../kemet-input/types';\nimport { KemetTextareaInterface } from '../kemet-textarea/types';\nimport { stylesBase } from './styles';\nimport { TypeStatus } from './types';\n\n/**\n * @since 1.2.0\n * @status stable\n *\n * @tagname kemet-password\n * @summary Gauges the strength of a password entered by the user.\n *\n * @prop {array} rules - An array of objects containing the rules the password must meet.\n * @prop {boolean} show - Controls the display of the component.\n * @prop {string} value - The value of the input component.\n * @prop {string} message - A message that is above the rules.\n * @prop {string} strength - The strength of the password. Weak | Better | Strong.\n * @prop {string} icon\n * @prop {number} iconSize\n *\n * @event kemet-password-status - Fires when there's a change in status.\n *\n * @csspart status - The status message.\n * @csspart indicator - The strength indicator bars.\n * @csspart message - A message to display to the user.\n * @csspart rules - A description of rules to follow.\n *\n */\n\ninterface IOptions {\n pattern: string;\n message: string;\n meetsCriteria?: boolean;\n}\n\n@customElement('kemet-password')\nexport default class KemetPassword extends LitElement {\n static styles = [stylesBase];\n\n @property({ type: Array })\n rules: IOptions[] = [\n { pattern: '(?=.{8,}$)', message: 'At least 8 characters long' },\n { pattern: '(?=.*[a-z])(?=.*[A-Z])', message: 'Uppercase and lowercase' },\n { pattern: '(?=.*[0-9])', message: 'At least one number (0-9)' },\n ];\n\n @property({ type: Boolean, reflect: true })\n show: boolean;\n\n @property({ type: String })\n value: string;\n\n @property({ type: String })\n message: string = 'Please make sure you meet all the requirements.';\n\n @property({ type: String })\n strength: string;\n\n @property({ type: String })\n icon: string = 'check2';\n\n @property({ type: Number })\n iconSize: number = 16;\n\n @state()\n status: TypeStatus;\n\n @state()\n field: KemetFieldInterface;\n\n @state()\n input: KemetInputInterface | KemetTextareaInterface;\n\n firstUpdated() {\n // elements\n this.field = this.closest('kemet-field');\n this.input = this.field.querySelector('[slot=\"input\"]');\n\n // events listeners\n this.input.addEventListener('kemet-input-input', this.handleInput.bind(this));\n }\n\n render() {\n return html`\n <div role=\"alert\" aria-live=\"assertive\">\n <div class=\"status status--${this.strength}\" part=\"status\">\n <span>${this.strength}</span>\n <ul class=\"indicator\" part=\"indicator\">\n <li></li>\n <li></li>\n <li></li>\n </ul>\n </div>\n <p class=\"message\" part=\"message\">${this.message}</p>\n <ul class=\"rules\" part=\"rules\">\n ${this.makeRules()}\n </ul>\n </div>\n `;\n }\n\n /**\n * Makes the list of rules\n * @private\n * @returns {TemplateResult<1>[]} the criteria rules\n */\n makeRules(): TemplateResult<1>[] {\n if (this.input) {\n return this.rules.map((rule, index) => {\n const regExp = new RegExp(rule.pattern);\n const meetsCriteria = regExp.test(this.input.value);\n this.rules[index].meetsCriteria = meetsCriteria;\n return html`<li>${this.makeCheckIcon(meetsCriteria)} ${rule.message}</li>`;\n });\n }\n\n return null;\n }\n\n /**\n * Makes the check icon if the criteria has been met\n * @param {boolean} meetsCriteria\n * @private\n * @returns {TemplateResult} an icon component\n */\n makeCheckIcon(meetsCriteria: boolean): TemplateResult {\n if (meetsCriteria) {\n return html`<kemet-icon icon=${this.icon} size=${this.iconSize}></kemet-icon>`;\n }\n\n return null;\n }\n\n /**\n * Handles the kemet-input-input event\n * @param {*} event\n * @private\n */\n handleInput(event: CustomEvent) {\n this.value = event.detail;\n this.setStrength();\n this.visibility();\n }\n\n /**\n * Determines the strength of the password\n * @private\n */\n setStrength() {\n // We use a setTimeout here because makeRules adds the meetsCriteria\n // property to the rules. We need that to be set by render() before\n // setting the Strength because the percentage calc is based on it\n setTimeout(() => {\n const totalRules = this.rules.length;\n const metRules = this.rules.filter(rule => rule.meetsCriteria).length;\n const metRulesPercentage = Math.round((metRules / totalRules) * 100) / 100;\n\n if (metRulesPercentage <= 0.33) {\n this.strength = 'weak';\n this.status = 'error';\n }\n\n if (metRulesPercentage > 0.33 && metRulesPercentage <= 0.67) {\n this.strength = 'better';\n this.status = 'error';\n }\n\n if (metRulesPercentage > 0.67) {\n this.strength = 'strong';\n this.status = 'success';\n }\n\n emitEvent(this, 'kemet-password-status', {\n status: this.status,\n validity: { meetsPasswordCriteria: this.status === 'success' },\n element: this,\n });\n }, 1);\n }\n\n /**\n * Determines whether to show or hide the component\n * @private\n */\n visibility() {\n this.show = this.value.length > 0;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-password': KemetPassword\n }\n}\n"]}
|
|
@@ -13,7 +13,7 @@ export default class KemetPopperClose extends LitElement {
|
|
|
13
13
|
static styles: import("lit").CSSResult[];
|
|
14
14
|
render(): import("lit-html").TemplateResult<1>;
|
|
15
15
|
close(): void;
|
|
16
|
-
handleKeyboard(event:
|
|
16
|
+
handleKeyboard(event: KeyboardEvent): void;
|
|
17
17
|
}
|
|
18
18
|
declare global {
|
|
19
19
|
interface HTMLElementTagNameMap {
|
|
@@ -2,7 +2,6 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { html, css, LitElement } from 'lit';
|
|
3
3
|
import { customElement } from 'lit/decorators.js';
|
|
4
4
|
import { emitEvent } from '../../utilities/misc/events';
|
|
5
|
-
import { keyCodes } from '../../utilities/misc/constants';
|
|
6
5
|
/**
|
|
7
6
|
* @since 2.0.0
|
|
8
7
|
* @status stable
|
|
@@ -16,7 +15,7 @@ import { keyCodes } from '../../utilities/misc/constants';
|
|
|
16
15
|
let KemetPopperClose = class KemetPopperClose extends LitElement {
|
|
17
16
|
render() {
|
|
18
17
|
return html `
|
|
19
|
-
<button @click=${() => this.close()} @keyup=${event => this.handleKeyboard(event)}>
|
|
18
|
+
<button @click=${() => this.close()} @keyup=${(event) => this.handleKeyboard(event)}>
|
|
20
19
|
<slot></slot>
|
|
21
20
|
</button>
|
|
22
21
|
`;
|
|
@@ -26,7 +25,7 @@ let KemetPopperClose = class KemetPopperClose extends LitElement {
|
|
|
26
25
|
}
|
|
27
26
|
handleKeyboard(event) {
|
|
28
27
|
event.preventDefault();
|
|
29
|
-
if (event.
|
|
28
|
+
if (event.code === 'Space' || event.key === 'Enter') {
|
|
30
29
|
this.close();
|
|
31
30
|
}
|
|
32
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kemet-popper-close.js","sourceRoot":"","sources":["../../../src/components/kemet-popper/kemet-popper-close.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"kemet-popper-close.js","sourceRoot":"","sources":["../../../src/components/kemet-popper/kemet-popper-close.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD;;;;;;;;;GASG;AAGH,IAAqB,gBAAgB,GAArC,MAAqB,gBAAiB,SAAQ,UAAU;IAatD,MAAM;QACJ,OAAO,IAAI,CAAA;uBACQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;;KAGnG,CAAC;IACJ,CAAC;IAED,KAAK;QACH,SAAS,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,KAAoB;QACjC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACnD,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;IACH,CAAC;CACF,CAAA;AA/BQ,uBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;KAQF;CACF,CAAC;AAXiB,gBAAgB;IADpC,aAAa,CAAC,oBAAoB,CAAC;GACf,gBAAgB,CAgCpC;eAhCoB,gBAAgB","sourcesContent":["import { html, css, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { emitEvent } from '../../utilities/misc/events';\n\n/**\n * @since 2.0.0\n * @status stable\n *\n * @tagname kemet-popper-close\n * @summary A close button for the popper\n *\n * @event kemet-popper-close-btn\n *\n */\n\n@customElement('kemet-popper-close')\nexport default class KemetPopperClose extends LitElement {\n static styles = [\n css`\n button {\n font: inherit;\n color: inherit;\n cursor: pointer;\n border: 0;\n background: transparent;\n }\n `,\n ];\n\n render() {\n return html`\n <button @click=${() => this.close()} @keyup=${(event: KeyboardEvent) => this.handleKeyboard(event)}>\n <slot></slot>\n </button>\n `;\n }\n\n close() {\n emitEvent(this, 'kemet-popper-close-btn', this);\n }\n\n handleKeyboard(event: KeyboardEvent) {\n event.preventDefault();\n\n if (event.code === 'Space' || event.key === 'Enter') {\n this.close();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-popper-close': KemetPopperClose\n }\n}\n"]}
|
|
@@ -21,7 +21,7 @@ import { TypeFireOn, TypePlacement } from './types';
|
|
|
21
21
|
* @cssproperty --kemet-popper-background-color - The background color of the content.
|
|
22
22
|
*
|
|
23
23
|
* @prop {TypePlacement} placement - The position of the popper over the trigger.
|
|
24
|
-
* @prop {boolean} opened - Determines if the
|
|
24
|
+
* @prop {boolean} opened - Determines if the Popper is opened or closed
|
|
25
25
|
* @prop {TypeFireOn} fireOn - Activate the Popper on Click or Hover
|
|
26
26
|
* @prop {string} strategy - Sets the strategy option in Popper's api
|
|
27
27
|
* @prop {number} skidding - Sets an offset to the Popper from the trigger
|
|
@@ -37,22 +37,33 @@ export default class KemetPopper extends LitElement {
|
|
|
37
37
|
skidding: number;
|
|
38
38
|
distance: number;
|
|
39
39
|
/** @internal */
|
|
40
|
-
popperInstance:
|
|
40
|
+
popperInstance: {
|
|
41
|
+
setOptions: (arg0: {
|
|
42
|
+
placement: TypePlacement;
|
|
43
|
+
strategy: 'fixed' | 'absolute';
|
|
44
|
+
modifiers: {
|
|
45
|
+
name: string;
|
|
46
|
+
options: {
|
|
47
|
+
offset: number[];
|
|
48
|
+
};
|
|
49
|
+
}[];
|
|
50
|
+
}) => void;
|
|
51
|
+
};
|
|
41
52
|
/** @internal */
|
|
42
53
|
triggerElement: HTMLElement;
|
|
43
54
|
/** @internal */
|
|
44
55
|
contentElement: HTMLElement;
|
|
45
56
|
/** @internal */
|
|
46
|
-
focusableElements:
|
|
57
|
+
focusableElements: NodeListOf<Element>;
|
|
47
58
|
constructor();
|
|
48
59
|
firstUpdated(): void;
|
|
49
|
-
updated(prevProps:
|
|
60
|
+
updated(prevProps: Map<string, never>): void;
|
|
50
61
|
render(): import("lit-html").TemplateResult<1>;
|
|
51
62
|
refresh(): void;
|
|
52
63
|
makePopper(): void;
|
|
53
|
-
toggle(event:
|
|
54
|
-
handleKeyUp(event:
|
|
55
|
-
handleFocusableDown(event:
|
|
64
|
+
toggle(event: MouseEvent | KeyboardEvent): void;
|
|
65
|
+
handleKeyUp(event: KeyboardEvent): void;
|
|
66
|
+
handleFocusableDown(event: KeyboardEvent): void;
|
|
56
67
|
}
|
|
57
68
|
declare global {
|
|
58
69
|
interface HTMLElementTagNameMap {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { html, LitElement } from 'lit';
|
|
3
|
-
import { customElement, property, query, queryAll, state } from 'lit/decorators.js';
|
|
3
|
+
import { customElement, property, query, queryAll, state, } from 'lit/decorators.js';
|
|
4
4
|
import { createPopper } from '@popperjs/core/dist/esm';
|
|
5
5
|
import { emitEvent } from '../../utilities/misc/events';
|
|
6
|
-
import { keyCodes } from '../../utilities/misc/constants';
|
|
7
6
|
import { stylesPopper } from './styles';
|
|
8
7
|
// import { stylesPopperFade, stylesPopperScale, stylesPopperSlide, stylesPopperFall, stylesPopperFlipHorizontal, stylesPopperFlipVertical, stylesPopperSign, stylesPopperSuperScaled } from './styles.effects';
|
|
9
8
|
/**
|
|
@@ -27,7 +26,7 @@ import { stylesPopper } from './styles';
|
|
|
27
26
|
* @cssproperty --kemet-popper-background-color - The background color of the content.
|
|
28
27
|
*
|
|
29
28
|
* @prop {TypePlacement} placement - The position of the popper over the trigger.
|
|
30
|
-
* @prop {boolean} opened - Determines if the
|
|
29
|
+
* @prop {boolean} opened - Determines if the Popper is opened or closed
|
|
31
30
|
* @prop {TypeFireOn} fireOn - Activate the Popper on Click or Hover
|
|
32
31
|
* @prop {string} strategy - Sets the strategy option in Popper's api
|
|
33
32
|
* @prop {number} skidding - Sets an offset to the Popper from the trigger
|
|
@@ -42,12 +41,12 @@ let KemetPopper = class KemetPopper extends LitElement {
|
|
|
42
41
|
this.strategy = 'fixed';
|
|
43
42
|
this.skidding = 0;
|
|
44
43
|
this.distance = 0;
|
|
45
|
-
this.addEventListener('kemet-popper-close-btn', () => this.opened = false);
|
|
44
|
+
this.addEventListener('kemet-popper-close-btn', () => { this.opened = false; });
|
|
46
45
|
}
|
|
47
46
|
firstUpdated() {
|
|
48
47
|
if (this.fireOn === 'click') {
|
|
49
48
|
this.focusableElements.forEach((element) => {
|
|
50
|
-
element.addEventListener('keydown', event => this.handleFocusableDown(event));
|
|
49
|
+
element.addEventListener('keydown', (event) => this.handleFocusableDown(event));
|
|
51
50
|
});
|
|
52
51
|
}
|
|
53
52
|
}
|
|
@@ -61,24 +60,25 @@ let KemetPopper = class KemetPopper extends LitElement {
|
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
render() {
|
|
63
|
+
// eslint-disable-next-line lit-a11y/mouse-events-have-key-events
|
|
64
64
|
return html `
|
|
65
65
|
<div
|
|
66
66
|
id="trigger"
|
|
67
67
|
part="trigger"
|
|
68
68
|
tabIndex="0"
|
|
69
|
-
@click=${this.fireOn === 'click' ? event => this.toggle(event) : null}
|
|
70
|
-
@keyup=${this.fireOn === 'click' ? event => this.handleKeyUp(event) : null}
|
|
71
|
-
@mouseover=${this.fireOn !== 'click' ? () => this.opened = true : null}
|
|
72
|
-
@focus=${this.fireOn !== 'click' ? () => this.opened = true : null}
|
|
73
|
-
@mouseout=${this.fireOn !== 'click' ? () => this.opened = false : null}
|
|
74
|
-
@blur=${this.fireOn !== 'click' ? () => this.opened = false : null}
|
|
69
|
+
@click=${this.fireOn === 'click' ? (event) => this.toggle(event) : null}
|
|
70
|
+
@keyup=${this.fireOn === 'click' ? (event) => this.handleKeyUp(event) : null}
|
|
71
|
+
@mouseover=${this.fireOn !== 'click' ? () => { this.opened = true; } : null}
|
|
72
|
+
@focus=${this.fireOn !== 'click' ? () => { this.opened = true; } : null}
|
|
73
|
+
@mouseout=${this.fireOn !== 'click' ? () => { this.opened = false; } : null}
|
|
74
|
+
@blur=${this.fireOn !== 'click' ? () => { this.opened = false; } : null}
|
|
75
75
|
>
|
|
76
76
|
<slot name="trigger"></slot>
|
|
77
77
|
</div>
|
|
78
78
|
<div
|
|
79
79
|
id="content"
|
|
80
|
-
@mouseover=${this.fireOn !== 'click' ? () => this.opened = true : null}
|
|
81
|
-
@mouseout=${this.fireOn !== 'click' ? () => this.opened = false : null}
|
|
80
|
+
@mouseover=${this.fireOn !== 'click' ? () => { this.opened = true; } : null}
|
|
81
|
+
@mouseout=${this.fireOn !== 'click' ? () => { this.opened = false; } : null}
|
|
82
82
|
>
|
|
83
83
|
<slot name="content" @slotchange=${() => this.makePopper()}></slot>
|
|
84
84
|
</div>
|
|
@@ -90,7 +90,7 @@ let KemetPopper = class KemetPopper extends LitElement {
|
|
|
90
90
|
placement: this.placement,
|
|
91
91
|
strategy: this.strategy,
|
|
92
92
|
modifiers: [
|
|
93
|
-
{ name: 'offset', options: { offset: [this.skidding, this.distance] } }
|
|
93
|
+
{ name: 'offset', options: { offset: [this.skidding, this.distance] } },
|
|
94
94
|
],
|
|
95
95
|
});
|
|
96
96
|
}
|
|
@@ -99,28 +99,24 @@ let KemetPopper = class KemetPopper extends LitElement {
|
|
|
99
99
|
placement: this.placement,
|
|
100
100
|
strategy: this.strategy,
|
|
101
101
|
modifiers: [
|
|
102
|
-
{ name: 'offset', options: { offset: [this.skidding, this.distance] } }
|
|
102
|
+
{ name: 'offset', options: { offset: [this.skidding, this.distance] } },
|
|
103
103
|
],
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
toggle(event) {
|
|
107
|
-
const
|
|
108
|
-
const
|
|
107
|
+
const target = event.target;
|
|
108
|
+
const isSlotTrigger = target.getAttribute('slot') === 'trigger';
|
|
109
|
+
const isPartTrigger = target.getAttribute('part') === 'trigger';
|
|
109
110
|
if (isSlotTrigger || isPartTrigger) {
|
|
110
|
-
|
|
111
|
-
this.opened = false;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.opened = true;
|
|
115
|
-
}
|
|
111
|
+
this.opened = !this.opened;
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
114
|
handleKeyUp(event) {
|
|
119
115
|
event.preventDefault();
|
|
120
|
-
if (event.
|
|
116
|
+
if (event.key === 'Escape') {
|
|
121
117
|
this.opened = false;
|
|
122
118
|
}
|
|
123
|
-
if (event.
|
|
119
|
+
if (event.key === 'Enter' || event.code === 'Space') {
|
|
124
120
|
this.toggle(event);
|
|
125
121
|
}
|
|
126
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kemet-popper.js","sourceRoot":"","sources":["../../../src/components/kemet-popper/kemet-popper.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, query, queryAll, state } from 'lit/decorators.js';\nimport { createPopper } from '@popperjs/core/dist/esm';\nimport { emitEvent } from '../../utilities/misc/events';\nimport { keyCodes } from '../../utilities/misc/constants';\nimport { TypeEffect, TypeFireOn, TypePlacement } from './types';\nimport { stylesPopper } from './styles';\n// import { stylesPopperFade, stylesPopperScale, stylesPopperSlide, stylesPopperFall, stylesPopperFlipHorizontal, stylesPopperFlipVertical, stylesPopperSign, stylesPopperSuperScaled } from './styles.effects';\n\n/**\n * @since 2.0.0\n * @status stable\n *\n * @tagname kemet-popper\n * @summary A wrapper component for the popper.js lib.\n *\n * @event kemet-popper-opened - Fires when the popper opens\n * @event kemet-popper-closed - Fires when the popper closes\n *\n * @slot trigger - Controls opening and closing the popover.\n * @slot content - The contents of the popover.\n *\n * @csspart trigger - Contains the trigger for the popover.\n * @csspart content - Contains the content for the popover.\n *\n * @cssproperty --kemet-popper-padding - The padding in the content slot.\n * @cssproperty --kemet-popper-border-color - The border color of the content.\n * @cssproperty --kemet-popper-background-color - The background color of the content.\n *\n * @prop {TypePlacement} placement - The position of the popper over the trigger.\n * @prop {boolean} opened - Determines if the the Popper is opened or closed\n * @prop {TypeFireOn} fireOn - Activate the Popper on Click or Hover\n * @prop {string} strategy - Sets the strategy option in Popper's api\n * @prop {number} skidding - Sets an offset to the Popper from the trigger\n * @prop {number} distance - Sets spacing between the Popper and the trigger\n *\n */\n\n@customElement('kemet-popper')\nexport default class KemetPopper extends LitElement {\n static styles = [stylesPopper];\n\n @property({ type: String, reflect: true })\n placement: TypePlacement = 'top';\n\n @property({ type: Boolean, reflect: true })\n opened: boolean;\n\n @property({ type: String, attribute: 'fire-on' })\n fireOn: TypeFireOn = 'hover';\n\n @property({ type: String })\n strategy: 'fixed' | 'absolute' = 'fixed';\n\n @property({ type: Number })\n skidding: number = 0;\n\n @property({ type: Number })\n distance: number = 0;\n\n /** @internal */\n @state()\n popperInstance: any;\n\n /** @internal */\n @query('#trigger')\n triggerElement: HTMLElement;\n\n /** @internal */\n @query('#content')\n contentElement: HTMLElement;\n\n /** @internal */\n @queryAll('body, a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable], kemet-popper-close')\n focusableElements: any;\n\n constructor() {\n super();\n this.addEventListener('kemet-popper-close-btn', () => this.opened = false);\n }\n\n firstUpdated() {\n if (this.fireOn === 'click') {\n this.focusableElements.forEach((element) => {\n element.addEventListener('keydown', event => this.handleFocusableDown(event));\n });\n }\n }\n\n updated(prevProps) {\n this.refresh();\n\n if (!prevProps.get('opened') && this.opened === true) {\n emitEvent(this, 'kemet-popper-opened', this);\n }\n\n if (prevProps.get('opened') && this.opened === false) {\n emitEvent(this, 'kemet-popper-closed', this);\n }\n }\n\n render() {\n return html`\n <div\n id=\"trigger\"\n part=\"trigger\"\n tabIndex=\"0\"\n @click=${this.fireOn === 'click' ? event => this.toggle(event) : null}\n @keyup=${this.fireOn === 'click' ? event => this.handleKeyUp(event) : null}\n @mouseover=${this.fireOn !== 'click' ? () => this.opened = true : null}\n @focus=${this.fireOn !== 'click' ? () => this.opened = true : null}\n @mouseout=${this.fireOn !== 'click' ? () => this.opened = false : null}\n @blur=${this.fireOn !== 'click' ? () => this.opened = false : null}\n >\n <slot name=\"trigger\"></slot>\n </div>\n <div\n id=\"content\"\n @mouseover=${this.fireOn !== 'click' ? () => this.opened = true : null}\n @mouseout=${this.fireOn !== 'click' ? () => this.opened = false : null}\n >\n <slot name=\"content\" @slotchange=${() => this.makePopper()}></slot>\n </div>\n `;\n }\n\n refresh() {\n this.popperInstance?.setOptions({\n placement: this.placement,\n strategy: this.strategy,\n modifiers: [\n { name: 'offset', options: { offset: [this.skidding, this.distance] }}\n ],\n });\n }\n\n makePopper() {\n this.popperInstance = createPopper(this.triggerElement, this.contentElement, {\n placement: this.placement,\n strategy: this.strategy,\n modifiers: [\n { name: 'offset', options: { offset: [this.skidding, this.distance] }}\n ],\n });\n }\n\n toggle(event) {\n const isSlotTrigger = event.target.getAttribute('slot') === 'trigger';\n const isPartTrigger = event.target.getAttribute('part') === 'trigger';\n\n if (isSlotTrigger || isPartTrigger) {\n if (this.opened) {\n this.opened = false;\n } else {\n this.opened = true;\n }\n }\n }\n\n handleKeyUp(event) {\n event.preventDefault();\n\n if (event.keyCode === keyCodes.ESC) {\n this.opened = false;\n }\n\n if (event.keyCode === keyCodes.ENTER || event.keyCode === keyCodes.SPACE) {\n this.toggle(event);\n }\n }\n\n handleFocusableDown(event) {\n const firstFocusable = this.focusableElements[0];\n const lastFocusable = this.focusableElements[this.focusableElements.length - 1];\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-popper': KemetPopper\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"kemet-popper.js","sourceRoot":"","sources":["../../../src/components/kemet-popper/kemet-popper.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EACL,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAChD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,gNAAgN;AAEhN;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,IAAqB,WAAW,GAAhC,MAAqB,WAAY,SAAQ,UAAU;IAqCjD;QACE,KAAK,EAAE,CAAC;QAlCV,cAAS,GAAkB,KAAK,CAAC;QAMjC,WAAM,GAAe,OAAO,CAAC;QAG7B,aAAQ,GAAyB,OAAO,CAAC;QAGzC,aAAQ,GAAW,CAAC,CAAC;QAGrB,aAAQ,GAAW,CAAC,CAAC;QAoBnB,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;YAC3B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACzC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YACjG,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,OAAO,CAAC,SAA6B;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACpD,SAAS,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;SAC9C;QAED,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;YACpD,SAAS,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;SAC9C;IACH,CAAC;IAED,MAAM;QACJ,iEAAiE;QACjE,OAAO,IAAI,CAAA;;;;;iBAKE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC1E,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;qBAC9E,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBAClE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC3D,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBACnE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;;;;;;qBAM1D,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC/D,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;;2CAExC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;;KAE7D,CAAC;IACJ,CAAC;IAED,OAAO;;QACL,MAAA,IAAI,CAAC,cAAc,0CAAE,UAAU,CAAC;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;aACxE;SACF,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;YAC3E,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;aACxE;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAiC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;QAChE,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;QAEhE,IAAI,aAAa,IAAI,aAAa,EAAE;YAClC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;SAC5B;IACH,CAAC;IAED,WAAW,CAAC,KAAoB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACpB;IACH,CAAC;IAED,mBAAmB,CAAC,KAAoB;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAgB,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAgB,CAAC;QAE/F,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACvB,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE;gBAC/D,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,aAAa,CAAC,KAAK,EAAE,CAAC;aACvB;iBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE;gBACtE,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,cAAc,CAAC,KAAK,EAAE,CAAC;aACxB;SACF;IACH,CAAC;CACD,CAAA;AA/IO,kBAAM,GAAG,CAAC,YAAY,CAAC,CAAC;AAG/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8CACT;AAGjC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CAC3B;AAGhB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;2CACpB;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACc;AAGzC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACN;AAGrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACN;AAIrB;IADC,KAAK,EAAE;mDACuK;AAI/K;IADC,KAAK,CAAC,UAAU,CAAC;mDACU;AAI5B;IADC,KAAK,CAAC,UAAU,CAAC;mDACU;AAI5B;IADC,QAAQ,CAAC,wMAAwM,CAAC;sDAC5K;AAnCpB,WAAW;IAD/B,aAAa,CAAC,cAAc,CAAC;GACT,WAAW,CAgJ9B;eAhJmB,WAAW","sourcesContent":["import { html, LitElement } from 'lit';\nimport {\n customElement, property, query, queryAll, state,\n} from 'lit/decorators.js';\nimport { createPopper } from '@popperjs/core/dist/esm';\nimport { emitEvent } from '../../utilities/misc/events';\nimport { TypeFireOn, TypePlacement } from './types';\nimport { stylesPopper } from './styles';\n// import { stylesPopperFade, stylesPopperScale, stylesPopperSlide, stylesPopperFall, stylesPopperFlipHorizontal, stylesPopperFlipVertical, stylesPopperSign, stylesPopperSuperScaled } from './styles.effects';\n\n/**\n * @since 2.0.0\n * @status stable\n *\n * @tagname kemet-popper\n * @summary A wrapper component for the popper.js lib.\n *\n * @event kemet-popper-opened - Fires when the popper opens\n * @event kemet-popper-closed - Fires when the popper closes\n *\n * @slot trigger - Controls opening and closing the popover.\n * @slot content - The contents of the popover.\n *\n * @csspart trigger - Contains the trigger for the popover.\n * @csspart content - Contains the content for the popover.\n *\n * @cssproperty --kemet-popper-padding - The padding in the content slot.\n * @cssproperty --kemet-popper-border-color - The border color of the content.\n * @cssproperty --kemet-popper-background-color - The background color of the content.\n *\n * @prop {TypePlacement} placement - The position of the popper over the trigger.\n * @prop {boolean} opened - Determines if the Popper is opened or closed\n * @prop {TypeFireOn} fireOn - Activate the Popper on Click or Hover\n * @prop {string} strategy - Sets the strategy option in Popper's api\n * @prop {number} skidding - Sets an offset to the Popper from the trigger\n * @prop {number} distance - Sets spacing between the Popper and the trigger\n *\n */\n\n@customElement('kemet-popper')\nexport default class KemetPopper extends LitElement {\n static styles = [stylesPopper];\n\n @property({ type: String, reflect: true })\n placement: TypePlacement = 'top';\n\n @property({ type: Boolean, reflect: true })\n opened: boolean;\n\n @property({ type: String, attribute: 'fire-on' })\n fireOn: TypeFireOn = 'hover';\n\n @property({ type: String })\n strategy: 'fixed' | 'absolute' = 'fixed';\n\n @property({ type: Number })\n skidding: number = 0;\n\n @property({ type: Number })\n distance: number = 0;\n\n /** @internal */\n @state()\n popperInstance: { setOptions: (arg0: { placement: TypePlacement; strategy: 'fixed' | 'absolute'; modifiers: { name: string; options: { offset: number[]; }; }[]; }) => void; };\n\n /** @internal */\n @query('#trigger')\n triggerElement: HTMLElement;\n\n /** @internal */\n @query('#content')\n contentElement: HTMLElement;\n\n /** @internal */\n @queryAll('body, a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable], kemet-popper-close')\n focusableElements: NodeListOf<Element>;\n\n constructor() {\n super();\n this.addEventListener('kemet-popper-close-btn', () => { this.opened = false; });\n }\n\n firstUpdated() {\n if (this.fireOn === 'click') {\n this.focusableElements.forEach((element) => {\n element.addEventListener('keydown', (event: KeyboardEvent) => this.handleFocusableDown(event));\n });\n }\n }\n\n updated(prevProps: Map<string, never>) {\n this.refresh();\n\n if (!prevProps.get('opened') && this.opened === true) {\n emitEvent(this, 'kemet-popper-opened', this);\n }\n\n if (prevProps.get('opened') && this.opened === false) {\n emitEvent(this, 'kemet-popper-closed', this);\n }\n }\n\n render() {\n // eslint-disable-next-line lit-a11y/mouse-events-have-key-events\n return html`\n <div\n id=\"trigger\"\n part=\"trigger\"\n tabIndex=\"0\"\n @click=${this.fireOn === 'click' ? (event: MouseEvent) => this.toggle(event) : null}\n @keyup=${this.fireOn === 'click' ? (event: KeyboardEvent) => this.handleKeyUp(event) : null}\n @mouseover=${this.fireOn !== 'click' ? () => { this.opened = true; } : null}\n @focus=${this.fireOn !== 'click' ? () => { this.opened = true; } : null}\n @mouseout=${this.fireOn !== 'click' ? () => { this.opened = false; } : null}\n @blur=${this.fireOn !== 'click' ? () => { this.opened = false; } : null}\n >\n <slot name=\"trigger\"></slot>\n </div>\n <div\n id=\"content\"\n @mouseover=${this.fireOn !== 'click' ? () => { this.opened = true; } : null}\n @mouseout=${this.fireOn !== 'click' ? () => { this.opened = false; } : null}\n >\n <slot name=\"content\" @slotchange=${() => this.makePopper()}></slot>\n </div>\n `;\n }\n\n refresh() {\n this.popperInstance?.setOptions({\n placement: this.placement,\n strategy: this.strategy,\n modifiers: [\n { name: 'offset', options: { offset: [this.skidding, this.distance] } },\n ],\n });\n }\n\n makePopper() {\n this.popperInstance = createPopper(this.triggerElement, this.contentElement, {\n placement: this.placement,\n strategy: this.strategy,\n modifiers: [\n { name: 'offset', options: { offset: [this.skidding, this.distance] } },\n ],\n });\n }\n\n toggle(event: MouseEvent | KeyboardEvent) {\n const target = event.target as HTMLElement;\n const isSlotTrigger = target.getAttribute('slot') === 'trigger';\n const isPartTrigger = target.getAttribute('part') === 'trigger';\n\n if (isSlotTrigger || isPartTrigger) {\n this.opened = !this.opened;\n }\n }\n\n handleKeyUp(event: KeyboardEvent) {\n event.preventDefault();\n\n if (event.key === 'Escape') {\n this.opened = false;\n }\n\n if (event.key === 'Enter' || event.code === 'Space') {\n this.toggle(event);\n }\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-popper': KemetPopper\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
import { FormSubmitController } from '../../utilities/controllers/forms';
|
|
3
3
|
import { TypeAxis, TypeStatus } from './types';
|
|
4
|
+
import type KemetRadio from './kemet-radio';
|
|
4
5
|
/**
|
|
5
6
|
* @since 1.0.0
|
|
6
7
|
* @status stable
|
|
@@ -14,7 +15,7 @@ import { TypeAxis, TypeStatus } from './types';
|
|
|
14
15
|
* @prop {string} name - The name of the radio button set
|
|
15
16
|
* @prop {string} status - The status of the radio button set
|
|
16
17
|
* @prop {string} message - Validation message for the user
|
|
17
|
-
* @prop {boolean} required - Determines whether
|
|
18
|
+
* @prop {boolean} required - Determines whether the radio button set is required
|
|
18
19
|
*
|
|
19
20
|
* @csspart fieldset - The fieldset element.
|
|
20
21
|
* @csspart legend - The legend element.
|
|
@@ -32,12 +33,12 @@ export default class KemetRadios extends LitElement {
|
|
|
32
33
|
status: TypeStatus;
|
|
33
34
|
message: string;
|
|
34
35
|
required: boolean;
|
|
35
|
-
radios:
|
|
36
|
+
radios: NodeListOf<KemetRadio>;
|
|
36
37
|
constructor();
|
|
37
38
|
firstUpdated(): void;
|
|
38
39
|
render(): import("lit-html").TemplateResult<1>;
|
|
39
|
-
handleClick(event:
|
|
40
|
-
handleKeyDown(event:
|
|
40
|
+
handleClick(event: MouseEvent): void;
|
|
41
|
+
handleKeyDown(event: KeyboardEvent): void;
|
|
41
42
|
handleSlotChange(): void;
|
|
42
43
|
makeMessage(): import("lit-html").TemplateResult<1>;
|
|
43
44
|
checkValidity(): boolean;
|
|
@@ -17,7 +17,7 @@ import { stylesRadios } from './styles';
|
|
|
17
17
|
* @prop {string} name - The name of the radio button set
|
|
18
18
|
* @prop {string} status - The status of the radio button set
|
|
19
19
|
* @prop {string} message - Validation message for the user
|
|
20
|
-
* @prop {boolean} required - Determines whether
|
|
20
|
+
* @prop {boolean} required - Determines whether the radio button set is required
|
|
21
21
|
*
|
|
22
22
|
* @csspart fieldset - The fieldset element.
|
|
23
23
|
* @csspart legend - The legend element.
|
|
@@ -43,13 +43,13 @@ let KemetRadios = class KemetRadios extends LitElement {
|
|
|
43
43
|
return html `
|
|
44
44
|
<fieldset part="fieldset">
|
|
45
45
|
${this.legend !== '' ? html `<legend part="legend">${this.legend}</legend>` : null}
|
|
46
|
-
<slot @click=${event => this.handleClick(event)} @keydown=${event => this.handleKeyDown(event)} @slotchange=${() => this.handleSlotChange()}></slot>
|
|
46
|
+
<slot @click=${(event) => this.handleClick(event)} @keydown=${(event) => this.handleKeyDown(event)} @slotchange=${() => this.handleSlotChange()}></slot>
|
|
47
47
|
</fieldset>
|
|
48
48
|
${this.makeMessage()}
|
|
49
49
|
`;
|
|
50
50
|
}
|
|
51
51
|
handleClick(event) {
|
|
52
|
-
const
|
|
52
|
+
const target = event.target;
|
|
53
53
|
this.radios.forEach((radio) => {
|
|
54
54
|
radio.checked = false;
|
|
55
55
|
radio.tabIndex = radio === target ? 0 : -1;
|
|
@@ -70,7 +70,13 @@ let KemetRadios = class KemetRadios extends LitElement {
|
|
|
70
70
|
const forwardKeys = ['ArrowRight', 'ArrowDown'];
|
|
71
71
|
const shift = forwardKeys.includes(event.key) ? 1 : -1;
|
|
72
72
|
const checkedIndex = (_a = radios.findIndex((radio) => radio.checked)) !== null && _a !== void 0 ? _a : radios[0];
|
|
73
|
-
let index
|
|
73
|
+
let index;
|
|
74
|
+
if (typeof checkedIndex === 'number') {
|
|
75
|
+
index = checkedIndex + shift;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
index = shift;
|
|
79
|
+
}
|
|
74
80
|
if (arrowKeys.includes(event.key)) {
|
|
75
81
|
if (index < 0) {
|
|
76
82
|
index = radios.length - 1;
|