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.
Files changed (135) hide show
  1. package/custom-elements.json +657 -715
  2. package/dist/components/kemet-accordion/kemet-accordion-panel.d.ts +2 -2
  3. package/dist/components/kemet-accordion/kemet-accordion-panel.js +1 -1
  4. package/dist/components/kemet-accordion/kemet-accordion-panel.js.map +1 -1
  5. package/dist/components/kemet-accordion/kemet-accordion.d.ts +3 -3
  6. package/dist/components/kemet-accordion/kemet-accordion.js +2 -1
  7. package/dist/components/kemet-accordion/kemet-accordion.js.map +1 -1
  8. package/dist/components/kemet-alert/kemet-alert.d.ts +2 -2
  9. package/dist/components/kemet-alert/kemet-alert.js.map +1 -1
  10. package/dist/components/kemet-badge/kemet-badge.js.map +1 -1
  11. package/dist/components/kemet-button/kemet-button.d.ts +2 -2
  12. package/dist/components/kemet-button/kemet-button.js +1 -1
  13. package/dist/components/kemet-button/kemet-button.js.map +1 -1
  14. package/dist/components/kemet-card/kemet-card.d.ts +1 -1
  15. package/dist/components/kemet-card/kemet-card.js +1 -1
  16. package/dist/components/kemet-card/kemet-card.js.map +1 -1
  17. package/dist/components/kemet-carousel/kemet-carousel-current.d.ts +1 -1
  18. package/dist/components/kemet-carousel/kemet-carousel-current.js.map +1 -1
  19. package/dist/components/kemet-carousel/kemet-carousel-last.d.ts +1 -1
  20. package/dist/components/kemet-carousel/kemet-carousel-last.js +1 -1
  21. package/dist/components/kemet-carousel/kemet-carousel-last.js.map +1 -1
  22. package/dist/components/kemet-carousel/kemet-carousel.d.ts +18 -14
  23. package/dist/components/kemet-carousel/kemet-carousel.js +32 -13
  24. package/dist/components/kemet-carousel/kemet-carousel.js.map +1 -1
  25. package/dist/components/kemet-checkbox/kemet-checkbox.d.ts +4 -4
  26. package/dist/components/kemet-checkbox/kemet-checkbox.js +4 -4
  27. package/dist/components/kemet-checkbox/kemet-checkbox.js.map +1 -1
  28. package/dist/components/kemet-combo/kemet-combo.d.ts +8 -8
  29. package/dist/components/kemet-combo/kemet-combo.js +13 -17
  30. package/dist/components/kemet-combo/kemet-combo.js.map +1 -1
  31. package/dist/components/kemet-count/kemet-count.d.ts +1 -1
  32. package/dist/components/kemet-count/kemet-count.js +1 -1
  33. package/dist/components/kemet-count/kemet-count.js.map +1 -1
  34. package/dist/components/kemet-draggable/kemet-draggable.d.ts +3 -3
  35. package/dist/components/kemet-draggable/kemet-draggable.js +6 -5
  36. package/dist/components/kemet-draggable/kemet-draggable.js.map +1 -1
  37. package/dist/components/kemet-drawer/kemet-drawer.d.ts +2 -2
  38. package/dist/components/kemet-drawer/kemet-drawer.js +2 -2
  39. package/dist/components/kemet-drawer/kemet-drawer.js.map +1 -1
  40. package/dist/components/kemet-drawer/styles.js +1 -0
  41. package/dist/components/kemet-drawer/styles.js.map +1 -1
  42. package/dist/components/kemet-fab/kemet-fab.d.ts +1 -1
  43. package/dist/components/kemet-fab/kemet-fab.js +1 -1
  44. package/dist/components/kemet-fab/kemet-fab.js.map +1 -1
  45. package/dist/components/kemet-field/kemet-field.d.ts +7 -7
  46. package/dist/components/kemet-field/kemet-field.js +9 -14
  47. package/dist/components/kemet-field/kemet-field.js.map +1 -1
  48. package/dist/components/kemet-flipcard/kemet-flipcard-trigger.d.ts +1 -1
  49. package/dist/components/kemet-flipcard/kemet-flipcard-trigger.js +2 -3
  50. package/dist/components/kemet-flipcard/kemet-flipcard-trigger.js.map +1 -1
  51. package/dist/components/kemet-flipcard/kemet-flipcard.d.ts +2 -2
  52. package/dist/components/kemet-flipcard/kemet-flipcard.js +3 -5
  53. package/dist/components/kemet-flipcard/kemet-flipcard.js.map +1 -1
  54. package/dist/components/kemet-input/kemet-input.d.ts +3 -22
  55. package/dist/components/kemet-input/kemet-input.js +3 -23
  56. package/dist/components/kemet-input/kemet-input.js.map +1 -1
  57. package/dist/components/kemet-modal/kemet-modal.d.ts +4 -4
  58. package/dist/components/kemet-modal/kemet-modal.js +3 -3
  59. package/dist/components/kemet-modal/kemet-modal.js.map +1 -1
  60. package/dist/components/kemet-password/kemet-password.d.ts +14 -8
  61. package/dist/components/kemet-password/kemet-password.js +4 -33
  62. package/dist/components/kemet-password/kemet-password.js.map +1 -1
  63. package/dist/components/kemet-popper/kemet-popper-close.d.ts +1 -1
  64. package/dist/components/kemet-popper/kemet-popper-close.js +2 -3
  65. package/dist/components/kemet-popper/kemet-popper-close.js.map +1 -1
  66. package/dist/components/kemet-popper/kemet-popper.d.ts +18 -7
  67. package/dist/components/kemet-popper/kemet-popper.js +21 -25
  68. package/dist/components/kemet-popper/kemet-popper.js.map +1 -1
  69. package/dist/components/kemet-radio/kemet-radios.d.ts +5 -4
  70. package/dist/components/kemet-radio/kemet-radios.js +10 -4
  71. package/dist/components/kemet-radio/kemet-radios.js.map +1 -1
  72. package/dist/components/kemet-rotator/kemet-rotator.d.ts +1 -1
  73. package/dist/components/kemet-rotator/kemet-rotator.js +1 -2
  74. package/dist/components/kemet-rotator/kemet-rotator.js.map +1 -1
  75. package/dist/components/kemet-scroll-link/kemet-scroll-link.d.ts +2 -2
  76. package/dist/components/kemet-scroll-link/kemet-scroll-link.js +11 -10
  77. package/dist/components/kemet-scroll-link/kemet-scroll-link.js.map +1 -1
  78. package/dist/components/kemet-scroll-nav/kemet-scroll-nav.d.ts +2 -2
  79. package/dist/components/kemet-scroll-nav/kemet-scroll-nav.js +2 -7
  80. package/dist/components/kemet-scroll-nav/kemet-scroll-nav.js.map +1 -1
  81. package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.d.ts +5 -4
  82. package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.js +1 -1
  83. package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.js.map +1 -1
  84. package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.d.ts +1 -1
  85. package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.js +1 -1
  86. package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.js.map +1 -1
  87. package/dist/components/kemet-scroll-snap/kemet-scroll-snap.d.ts +3 -2
  88. package/dist/components/kemet-scroll-snap/kemet-scroll-snap.js +2 -7
  89. package/dist/components/kemet-scroll-snap/kemet-scroll-snap.js.map +1 -1
  90. package/dist/components/kemet-select/kemet-option.d.ts +1 -1
  91. package/dist/components/kemet-select/kemet-option.js +1 -1
  92. package/dist/components/kemet-select/kemet-option.js.map +1 -1
  93. package/dist/components/kemet-select/kemet-select.d.ts +19 -10
  94. package/dist/components/kemet-select/kemet-select.js +3 -44
  95. package/dist/components/kemet-select/kemet-select.js.map +1 -1
  96. package/dist/components/kemet-sortable/kemet-sortable.d.ts +5 -5
  97. package/dist/components/kemet-sortable/kemet-sortable.js +5 -5
  98. package/dist/components/kemet-sortable/kemet-sortable.js.map +1 -1
  99. package/dist/components/kemet-svgs/kemet-svgs.d.ts +1 -1
  100. package/dist/components/kemet-svgs/kemet-svgs.js +1 -1
  101. package/dist/components/kemet-svgs/kemet-svgs.js.map +1 -1
  102. package/dist/components/kemet-tabs/kemet-tab-panel.d.ts +1 -0
  103. package/dist/components/kemet-tabs/kemet-tab-panel.js +3 -0
  104. package/dist/components/kemet-tabs/kemet-tab-panel.js.map +1 -1
  105. package/dist/components/kemet-tabs/kemet-tab.d.ts +1 -0
  106. package/dist/components/kemet-tabs/kemet-tab.js +4 -1
  107. package/dist/components/kemet-tabs/kemet-tab.js.map +1 -1
  108. package/dist/components/kemet-tabs/kemet-tabs.d.ts +23 -14
  109. package/dist/components/kemet-tabs/kemet-tabs.js +3 -47
  110. package/dist/components/kemet-tabs/kemet-tabs.js.map +1 -1
  111. package/dist/components/kemet-textarea/kemet-textarea.js.map +1 -1
  112. package/dist/components/kemet-toggle/kemet-toggle.d.ts +3 -3
  113. package/dist/components/kemet-toggle/kemet-toggle.js +3 -3
  114. package/dist/components/kemet-toggle/kemet-toggle.js.map +1 -1
  115. package/dist/components/kemet-tooltip/kemet-tooltip.d.ts +2 -2
  116. package/dist/components/kemet-tooltip/kemet-tooltip.js +13 -12
  117. package/dist/components/kemet-tooltip/kemet-tooltip.js.map +1 -1
  118. package/dist/components/kemet-tracker/kemet-tracker-step.d.ts +2 -2
  119. package/dist/components/kemet-tracker/kemet-tracker-step.js +2 -2
  120. package/dist/components/kemet-tracker/kemet-tracker-step.js.map +1 -1
  121. package/dist/components/kemet-tracker/kemet-tracker.d.ts +2 -1
  122. package/dist/components/kemet-tracker/kemet-tracker.js.map +1 -1
  123. package/dist/components/kemet-upload/kemet-upload-file.js +1 -2
  124. package/dist/components/kemet-upload/kemet-upload-file.js.map +1 -1
  125. package/dist/components/kemet-upload/kemet-upload.d.ts +3 -3
  126. package/dist/components/kemet-upload/kemet-upload.js +3 -8
  127. package/dist/components/kemet-upload/kemet-upload.js.map +1 -1
  128. package/dist/kemet-components.bundle.js +98 -86
  129. package/dist/kemet-components.bundle.js.map +1 -1
  130. package/dist/kemet-components.cjs +8680 -8803
  131. package/dist/kemet-components.js +8680 -8803
  132. package/dist/styles/kemet.core.css +1 -561
  133. package/dist/styles/kemet.core.css.map +1 -1
  134. package/dist/tsconfig.tsbuildinfo +1 -1
  135. 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 in effects and flexible styles.
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: any;
45
+ focusableElements: NodeListOf<Element>;
46
46
  constructor();
47
47
  firstUpdated(): void;
48
- updated(prevProps: any): void;
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: any): void;
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 in effects and flexible styles.
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":"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","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, query, state } 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: any;\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 => this.handleFocusableDown(event));\n });\n }\n\n updated(prevProps) {\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) {\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-modal': KemetModal\n }\n}\n"]}
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: any[];
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(): import("lit-html").TemplateResult<1>;
47
+ render(): TemplateResult<1>;
43
48
  /**
44
49
  * Makes the list of rules
45
50
  * @private
46
- * @returns {templateResults} the criteria rules
51
+ * @returns {TemplateResult<1>[]} the criteria rules
47
52
  */
48
- makeRules(): import("lit-html").TemplateResult<1>[];
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 {templateResults} an icon component
58
+ * @returns {TemplateResult} an icon component
54
59
  */
55
- makeCheckIcon(meetsCriteria: any): import("lit-html").TemplateResult<1>;
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: any): void;
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 {templateResults} the criteria rules
46
+ * @returns {TemplateResult<1>[]} the criteria rules
70
47
  */
71
48
  makeRules() {
72
49
  if (this.input) {
73
- const rules = this.rules.map((rule, index) => {
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 {templateResults} an icon component
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
- if (this.value.length > 0) {
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":"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","sourcesContent":["import { html, LitElement } 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\n@customElement('kemet-password')\nexport default class KemetPassword extends LitElement {\n static styles = [stylesBase];\n\n @property({ type: Array })\n rules: any[] = [\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 {templateResults} the criteria rules\n */\n makeRules() {\n if (this.input) {\n const rules = 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 return rules;\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 {templateResults} an icon component\n */\n makeCheckIcon(meetsCriteria) {\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) {\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 if (this.value.length > 0) {\n this.show = true;\n } else {\n this.show = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-password': KemetPassword\n }\n}\n"]}
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: any): void;
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.keyCode === keyCodes.SPACE || event.keyCode === keyCodes.ENTER) {
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;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D;;;;;;;;;GASG;AAGH,IAAqB,gBAAgB,GAArC,MAAqB,gBAAiB,SAAQ,UAAU;IAatD,MAAM;QACJ,OAAO,IAAI,CAAA;uBACQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;;KAGlF,CAAC;IACJ,CAAC;IAED,KAAK;QACH,SAAS,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,KAAK;QAClB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,KAAK,EAAE;YACxE,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';\nimport { keyCodes } from '../../utilities/misc/constants';\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 => 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) {\n event.preventDefault();\n\n if (event.keyCode === keyCodes.SPACE || event.keyCode === keyCodes.ENTER) {\n this.close();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-popper-close': KemetPopperClose\n }\n}\n"]}
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 the Popper is opened or closed
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: any;
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: any;
57
+ focusableElements: NodeListOf<Element>;
47
58
  constructor();
48
59
  firstUpdated(): void;
49
- updated(prevProps: any): void;
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: any): void;
54
- handleKeyUp(event: any): void;
55
- handleFocusableDown(event: any): void;
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 the Popper is opened or closed
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 isSlotTrigger = event.target.getAttribute('slot') === 'trigger';
108
- const isPartTrigger = event.target.getAttribute('part') === 'trigger';
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
- if (this.opened) {
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.keyCode === keyCodes.ESC) {
116
+ if (event.key === 'Escape') {
121
117
  this.opened = false;
122
118
  }
123
- if (event.keyCode === keyCodes.ENTER || event.keyCode === keyCodes.SPACE) {
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":"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","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 or not the radio button set is required
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: any;
36
+ radios: NodeListOf<KemetRadio>;
36
37
  constructor();
37
38
  firstUpdated(): void;
38
39
  render(): import("lit-html").TemplateResult<1>;
39
- handleClick(event: any): void;
40
- handleKeyDown(event: any): void;
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 or not the radio button set is required
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 { target } = event;
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 = checkedIndex + shift;
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;