@govtechsg/sgds-web-component 3.29.0 → 3.29.1-rc.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 (37) hide show
  1. package/base/dropdown-list-element.d.ts +3 -3
  2. package/base/dropdown-list-element.js.map +1 -1
  3. package/components/Appnav/index.umd.min.js.map +1 -1
  4. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  5. package/components/ComboBox/combo-box.js +1 -1
  6. package/components/ComboBox/combo-box.js.map +1 -1
  7. package/components/ComboBox/index.umd.min.js +28 -19
  8. package/components/ComboBox/index.umd.min.js.map +1 -1
  9. package/components/ComboBox/sgds-combo-box.d.ts +23 -2
  10. package/components/ComboBox/sgds-combo-box.js +97 -6
  11. package/components/ComboBox/sgds-combo-box.js.map +1 -1
  12. package/components/ComboBox/types.d.ts +3 -0
  13. package/components/Dropdown/index.umd.min.js.map +1 -1
  14. package/components/Mainnav/index.umd.min.js.map +1 -1
  15. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  16. package/components/Select/index.umd.min.js.map +1 -1
  17. package/components/index.umd.min.js +14 -5
  18. package/components/index.umd.min.js.map +1 -1
  19. package/custom-elements.json +155 -34
  20. package/index.umd.min.js +711 -702
  21. package/index.umd.min.js.map +1 -1
  22. package/package.json +1 -1
  23. package/react/base/dropdown-list-element.cjs.js.map +1 -1
  24. package/react/base/dropdown-list-element.js.map +1 -1
  25. package/react/combo-box/index.cjs.js +1 -0
  26. package/react/combo-box/index.cjs.js.map +1 -1
  27. package/react/combo-box/index.js +1 -0
  28. package/react/combo-box/index.js.map +1 -1
  29. package/react/components/ComboBox/combo-box.cjs.js +1 -1
  30. package/react/components/ComboBox/combo-box.cjs.js.map +1 -1
  31. package/react/components/ComboBox/combo-box.js +1 -1
  32. package/react/components/ComboBox/combo-box.js.map +1 -1
  33. package/react/components/ComboBox/sgds-combo-box.cjs.js +97 -6
  34. package/react/components/ComboBox/sgds-combo-box.cjs.js.map +1 -1
  35. package/react/components/ComboBox/sgds-combo-box.js +97 -6
  36. package/react/components/ComboBox/sgds-combo-box.js.map +1 -1
  37. package/types/react.d.ts +7 -0
@@ -19,9 +19,9 @@ export declare class DropdownListElement extends DropdownElement {
19
19
  protected handleSelectSlot(e: KeyboardEvent | MouseEvent): void;
20
20
  private _resetMenu;
21
21
  protected _handleKeyboardMenuItemsEvent(e: KeyboardEvent): void;
22
- private _getMenuItems;
23
- private _getActiveMenuItems;
24
- private _setMenuItem;
22
+ protected _getMenuItems(): SgdsDropdownItem[];
23
+ protected _getActiveMenuItems(): SgdsDropdownItem[];
24
+ protected _setMenuItem(currentItemIdx: number): void;
25
25
  }
26
26
  export interface IDropdownListElement {
27
27
  item: SgdsDropdownItem;
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-list-element.js","names":[],"sources":["../../src/base/dropdown-list-element.ts"],"sourcesContent":["import { property, query, state } from \"lit/decorators.js\";\nimport { DropdownElement } from \"./dropdown-element\";\nimport { SgdsDropdownItem } from \"../components\";\nimport { PropertyValueMap } from \"lit\";\n\nconst TAB = \"Tab\";\nconst ARROW_DOWN = \"ArrowDown\";\nconst ARROW_UP = \"ArrowUp\";\nconst ENTER = \"Enter\";\nconst ESCAPE = \"Escape\";\n\n/**\n * @event sgds-select - Emitted when a dropdown item is selected. `event.detail.item` is the clicked `SgdsDropdownItem` element.\n */\nexport class DropdownListElement extends DropdownElement {\n static styles = DropdownElement.styles;\n\n /**@internal */\n @query(\"ul.dropdown-menu\")\n private menu: HTMLUListElement;\n\n /** @internal */\n @state()\n nextDropdownItemNo = 0;\n\n /** @internal */\n @state()\n prevDropdownItemNo = -1;\n\n @property({ type: Boolean, reflect: true })\n hidden = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"sgds-hide\", this._resetMenu);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"sgds-hide\", this._resetMenu);\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n this.addEventListener(\"keydown\", this._handleKeyboardMenuItemsEvent);\n }\n\n protected handleSelectSlot(e: KeyboardEvent | MouseEvent) {\n const items = this._getActiveMenuItems();\n\n const selectedItem = items.find(item => e.composedPath().includes(item));\n if (!selectedItem) return;\n\n const currentItemNo = items.indexOf(selectedItem);\n this.nextDropdownItemNo = currentItemNo + 1;\n this.prevDropdownItemNo = currentItemNo <= 0 ? items.length - 1 : currentItemNo - 1;\n\n /** Emitted event from SgdsDropdown element when a slot item is selected */\n if (!selectedItem.disabled) {\n this.emit(\"sgds-select\", { detail: { item: selectedItem } });\n if (this.close !== \"outside\") {\n this.hideMenu(); // <-- Use new API\n }\n }\n }\n\n private _resetMenu() {\n this.nextDropdownItemNo = 0;\n this.prevDropdownItemNo = -1;\n // reset the tabindex\n const items = this._getMenuItems();\n items.forEach(item => {\n const dropdownItem = item?.shadowRoot?.querySelector(\".dropdown-item\") as HTMLAnchorElement;\n dropdownItem && dropdownItem.removeAttribute(\"tabindex\");\n });\n }\n protected _handleKeyboardMenuItemsEvent(e: KeyboardEvent) {\n if (this.readonly) return;\n const menuItems = this._getActiveMenuItems();\n if (menuItems.length === 0) return;\n\n switch (e.key) {\n case ARROW_DOWN:\n e.preventDefault();\n this._setMenuItem(this.nextDropdownItemNo);\n break;\n case ARROW_UP:\n e.preventDefault();\n this._setMenuItem(this.prevDropdownItemNo);\n break;\n case TAB:\n if (!this.menuIsOpen) return;\n e.preventDefault();\n if (e.shiftKey) {\n this._setMenuItem(this.prevDropdownItemNo);\n } else {\n this._setMenuItem(this.nextDropdownItemNo);\n }\n break;\n case ESCAPE:\n if (this.menuIsOpen) {\n e.preventDefault();\n this.hideMenu();\n }\n break;\n case ENTER: {\n const target = menuItems.find(item => e.composedPath().includes(item));\n if (target) {\n this.handleSelectSlot(e);\n }\n break;\n }\n default:\n break;\n }\n }\n\n private _getMenuItems(): SgdsDropdownItem[] {\n const defaultSlot = this.shadowRoot.querySelector(\"slot#default\");\n // for case when default slot is used e.g. dropdown, mainnavdropdown\n if (defaultSlot) {\n const defaultSlotItems = (this.shadowRoot.querySelector(\"slot#default\") as HTMLSlotElement)\n ?.assignedElements({\n flatten: true\n })\n .filter(\n el =>\n el.getAttribute(\"role\") === \"menuitem\" && !el.classList.contains(\"empty-menu\") && !el.hasAttribute(\"hidden\")\n ) as SgdsDropdownItem[];\n return defaultSlotItems;\n }\n // for case when there is no slot e.g. combobox\n if (this.menu?.hasChildNodes()) {\n const menuItems = Array.from(this.menu.children);\n return [...menuItems] as SgdsDropdownItem[];\n }\n\n return [];\n }\n\n private _getActiveMenuItems(): SgdsDropdownItem[] {\n return this._getMenuItems().filter(item => !item.disabled && !item.hidden && !item.readonly);\n }\n private _setMenuItem(currentItemIdx: number) {\n const items = this._getActiveMenuItems();\n if (items.length === 0) return;\n\n // Use modulo for looping\n const idx = ((currentItemIdx % items.length) + items.length) % items.length;\n const activeItem = items[idx];\n this.emit(\"i-sgds-option-focus\", { detail: { option: activeItem } });\n this.nextDropdownItemNo = (idx + 1) % items.length;\n this.prevDropdownItemNo = (idx - 1 + items.length) % items.length;\n\n items.forEach(item => {\n const dropdownItem = item.shadowRoot.querySelector(\".dropdown-item\") as HTMLAnchorElement;\n dropdownItem.setAttribute(\"tabindex\", item === activeItem ? \"0\" : \"-1\");\n if (item === activeItem) dropdownItem.focus();\n });\n }\n}\n\nexport interface IDropdownListElement {\n item: SgdsDropdownItem;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown-list-element.js","names":[],"sources":["../../src/base/dropdown-list-element.ts"],"sourcesContent":["import { property, query, state } from \"lit/decorators.js\";\nimport { DropdownElement } from \"./dropdown-element\";\nimport { SgdsDropdownItem } from \"../components\";\nimport { PropertyValueMap } from \"lit\";\n\nconst TAB = \"Tab\";\nconst ARROW_DOWN = \"ArrowDown\";\nconst ARROW_UP = \"ArrowUp\";\nconst ENTER = \"Enter\";\nconst ESCAPE = \"Escape\";\n\n/**\n * @event sgds-select - Emitted when a dropdown item is selected. `event.detail.item` is the clicked `SgdsDropdownItem` element.\n */\nexport class DropdownListElement extends DropdownElement {\n static styles = DropdownElement.styles;\n\n /**@internal */\n @query(\"ul.dropdown-menu\")\n private menu: HTMLUListElement;\n\n /** @internal */\n @state()\n nextDropdownItemNo = 0;\n\n /** @internal */\n @state()\n prevDropdownItemNo = -1;\n\n @property({ type: Boolean, reflect: true })\n hidden = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"sgds-hide\", this._resetMenu);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"sgds-hide\", this._resetMenu);\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n this.addEventListener(\"keydown\", this._handleKeyboardMenuItemsEvent);\n }\n\n protected handleSelectSlot(e: KeyboardEvent | MouseEvent) {\n const items = this._getActiveMenuItems();\n\n const selectedItem = items.find(item => e.composedPath().includes(item));\n if (!selectedItem) return;\n\n const currentItemNo = items.indexOf(selectedItem);\n this.nextDropdownItemNo = currentItemNo + 1;\n this.prevDropdownItemNo = currentItemNo <= 0 ? items.length - 1 : currentItemNo - 1;\n\n /** Emitted event from SgdsDropdown element when a slot item is selected */\n if (!selectedItem.disabled) {\n this.emit(\"sgds-select\", { detail: { item: selectedItem } });\n if (this.close !== \"outside\") {\n this.hideMenu(); // <-- Use new API\n }\n }\n }\n\n private _resetMenu() {\n this.nextDropdownItemNo = 0;\n this.prevDropdownItemNo = -1;\n // reset the tabindex\n const items = this._getMenuItems();\n items.forEach(item => {\n const dropdownItem = item?.shadowRoot?.querySelector(\".dropdown-item\") as HTMLAnchorElement;\n dropdownItem && dropdownItem.removeAttribute(\"tabindex\");\n });\n }\n protected _handleKeyboardMenuItemsEvent(e: KeyboardEvent) {\n if (this.readonly) return;\n const menuItems = this._getActiveMenuItems();\n if (menuItems.length === 0) return;\n\n switch (e.key) {\n case ARROW_DOWN:\n e.preventDefault();\n this._setMenuItem(this.nextDropdownItemNo);\n break;\n case ARROW_UP:\n e.preventDefault();\n this._setMenuItem(this.prevDropdownItemNo);\n break;\n case TAB:\n if (!this.menuIsOpen) return;\n e.preventDefault();\n if (e.shiftKey) {\n this._setMenuItem(this.prevDropdownItemNo);\n } else {\n this._setMenuItem(this.nextDropdownItemNo);\n }\n break;\n case ESCAPE:\n if (this.menuIsOpen) {\n e.preventDefault();\n this.hideMenu();\n }\n break;\n case ENTER: {\n const target = menuItems.find(item => e.composedPath().includes(item));\n if (target) {\n this.handleSelectSlot(e);\n }\n break;\n }\n default:\n break;\n }\n }\n\n protected _getMenuItems(): SgdsDropdownItem[] {\n const defaultSlot = this.shadowRoot.querySelector(\"slot#default\");\n // for case when default slot is used e.g. dropdown, mainnavdropdown\n if (defaultSlot) {\n const defaultSlotItems = (this.shadowRoot.querySelector(\"slot#default\") as HTMLSlotElement)\n ?.assignedElements({\n flatten: true\n })\n .filter(\n el =>\n el.getAttribute(\"role\") === \"menuitem\" && !el.classList.contains(\"empty-menu\") && !el.hasAttribute(\"hidden\")\n ) as SgdsDropdownItem[];\n return defaultSlotItems;\n }\n // for case when there is no slot e.g. combobox\n if (this.menu?.hasChildNodes()) {\n const menuItems = Array.from(this.menu.children);\n return [...menuItems] as SgdsDropdownItem[];\n }\n\n return [];\n }\n\n protected _getActiveMenuItems(): SgdsDropdownItem[] {\n return this._getMenuItems().filter(item => !item.disabled && !item.hidden && !item.readonly);\n }\n protected _setMenuItem(currentItemIdx: number) {\n const items = this._getActiveMenuItems();\n if (items.length === 0) return;\n\n // Use modulo for looping\n const idx = ((currentItemIdx % items.length) + items.length) % items.length;\n const activeItem = items[idx];\n this.emit(\"i-sgds-option-focus\", { detail: { option: activeItem } });\n this.nextDropdownItemNo = (idx + 1) % items.length;\n this.prevDropdownItemNo = (idx - 1 + items.length) % items.length;\n\n items.forEach(item => {\n const dropdownItem = item.shadowRoot.querySelector(\".dropdown-item\") as HTMLAnchorElement;\n dropdownItem.setAttribute(\"tabindex\", item === activeItem ? \"0\" : \"-1\");\n if (item === activeItem) dropdownItem.focus();\n });\n }\n}\n\nexport interface IDropdownListElement {\n item: SgdsDropdownItem;\n}\n"],"mappings":"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"}