@ship-ui/core 0.22.16 → 0.22.17
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/assets/mcp/components.json +181 -39
- package/bin/src/subset.ts +6 -6
- package/bin/src/utilities.ts +14 -14
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs +4 -87
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-accordion.mjs +4 -3
- package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-alert.mjs +1 -4
- package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-blueprint.mjs +8 -10
- package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-checkbox.mjs +3 -2
- package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs +66 -62
- package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-datepicker.mjs +8 -12
- package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-editor.mjs +0 -42
- package/fesm2022/ship-ui-core-ship-editor.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-form-field.mjs +0 -1
- package/fesm2022/ship-ui-core-ship-form-field.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-kbd.mjs +0 -6
- package/fesm2022/ship-ui-core-ship-kbd.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-list-item-swipe.mjs +241 -0
- package/fesm2022/ship-ui-core-ship-list-item-swipe.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-menu.mjs +7 -10
- package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-popover.mjs +1 -20
- package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-radio.mjs +3 -2
- package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-range-slider.mjs +7 -9
- package/fesm2022/ship-ui-core-ship-range-slider.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-select.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-sidenav.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-sidenav.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-sortable.mjs +262 -68
- package/fesm2022/ship-ui-core-ship-sortable.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-spotlight.mjs +0 -11
- package/fesm2022/ship-ui-core-ship-spotlight.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-stepper.mjs +1 -1
- package/fesm2022/ship-ui-core-ship-stepper.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-table.mjs +4 -5
- package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle.mjs +3 -2
- package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-tree.mjs +1 -9
- package/fesm2022/ship-ui-core-ship-tree.mjs.map +1 -1
- package/fesm2022/ship-ui-core.mjs +37 -53
- package/fesm2022/ship-ui-core.mjs.map +1 -1
- package/package.json +5 -1
- package/types/ship-ui-core-ship-a11y-keybindings.d.ts +0 -55
- package/types/ship-ui-core-ship-accordion.d.ts +7 -7
- package/types/ship-ui-core-ship-blueprint.d.ts +1 -1
- package/types/ship-ui-core-ship-checkbox.d.ts +2 -3
- package/types/ship-ui-core-ship-color-picker.d.ts +1 -25
- package/types/ship-ui-core-ship-datepicker.d.ts +0 -3
- package/types/ship-ui-core-ship-editor.d.ts +10 -10
- package/types/ship-ui-core-ship-list-item-swipe.d.ts +25 -0
- package/types/ship-ui-core-ship-menu.d.ts +1 -2
- package/types/ship-ui-core-ship-radio.d.ts +2 -3
- package/types/ship-ui-core-ship-range-slider.d.ts +6 -6
- package/types/ship-ui-core-ship-sortable.d.ts +31 -9
- package/types/ship-ui-core-ship-toggle.d.ts +2 -3
- package/types/ship-ui-core-ship-tree.d.ts +20 -25
- package/types/ship-ui-core.d.ts +17 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-menu.mjs","sources":["../../../projects/ship-ui/ship-menu/ship-menu.ts","../../../projects/ship-ui/ship-menu/ship-ui-core-ship-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, HostListener, inject, input, model, output, Renderer2, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ShipFormField } from '@ship-ui/core/ship-form-field';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipPopover } from '@ship-ui/core/ship-popover';\nimport { createFormInputSignal } from '@ship-ui/core';\nimport { observeChildren } from '@ship-ui/core';\nimport { generateUniqueId } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-menu',\n styleUrl: './ship-menu.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipPopover, ShipFormField, ShipIcon],\n template: `\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close('fromPopover')\"\n [asMultiLayer]=\"asMultiLayer()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <div\n trigger\n [class.is-open]=\"isOpen()\"\n (click)=\"toggleIsOpen($event)\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content />\n\n @if (openIndicator()) {\n <sh-icon class=\"open-indicator\">caret-down</sh-icon>\n }\n\n @if (isSubmenu()) {\n <sh-icon class=\"submenu-indicator\">caret-right</sh-icon>\n }\n </div>\n\n <div class=\"form-field-wrap\">\n <sh-form-field class=\"small stretch\" [class.hidden]=\"searchable() === false\">\n <input\n type=\"text\"\n #inputRef\n placeholder=\"Search\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n aria-autocomplete=\"list\" />\n </sh-form-field>\n </div>\n\n <div\n class=\"options\"\n #optionsRef\n (click)=\"close('active')\"\n [class.searching]=\"searchable() && inputValue() !== ''\"\n role=\"listbox\"\n [id]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content select=\"[menu]\" />\n </div>\n </sh-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'disabled()',\n '[class.has-search]': 'searchable()',\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipMenu {\n #document = inject(DOCUMENT);\n #renderer = inject(Renderer2);\n #keybindings = inject(ShipA11yKeybindingsService);\n\n parentMenu = inject(ShipMenu, { optional: true, skipSelf: true });\n isSubmenu = computed(() => this.parentMenu !== null);\n asMultiLayer = input<boolean>(false);\n openIndicator = input(false);\n disabled = input<boolean>(false);\n customOptionElementSelectors = input<string[]>(['button']);\n keepClickedOptionActive = input<boolean>(false);\n closeOnClick = input<boolean>(true);\n isOpen = model<boolean>(false);\n closed = output<boolean>();\n\n searchable = input<boolean>(false);\n activeOptionIndex = signal<number>(-1);\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n optionsRef = viewChild<ElementRef<HTMLDivElement>>('optionsRef');\n\n private static openMenus: ShipMenu[] = [];\n\n openMenusEffect = effect((onCleanup) => {\n if (this.isOpen()) {\n ShipMenu.openMenus.push(this);\n }\n\n onCleanup(() => {\n const index = ShipMenu.openMenus.indexOf(this);\n if (index > -1) {\n ShipMenu.openMenus.splice(index, 1);\n }\n });\n });\n\n options = observeChildren<HTMLButtonElement>(this.optionsRef, this.customOptionElementSelectors);\n optionsEl = computed(() => {\n const optionsContainer = this.optionsRef()?.nativeElement;\n if (!optionsContainer) return [];\n return this.options.signal().filter((x) => {\n if (x.disabled) return false;\n return x.closest('.options') === optionsContainer;\n });\n });\n inputValue = createFormInputSignal(this.inputRef);\n\n readonly optionsId = generateUniqueId();\n activeOptionId = signal<string | undefined>(undefined);\n\n abortController: AbortController | null = null;\n optionsEffect = effect(() => {\n if (this.abortController !== null) {\n this.abortController.abort();\n this.abortController = null;\n }\n\n if (!this.isOpen()) return;\n\n this.abortController = new AbortController();\n\n const searchable = this.searchable();\n\n if (!searchable) {\n this.#document.documentElement.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n } else {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n }\n }\n\n const inputEl = this.inputRef()?.nativeElement;\n\n if (!inputEl) return;\n\n queueMicrotask(() => inputEl.focus());\n\n if (!this.closeOnClick()) {\n const optionRef = this.optionsRef()?.nativeElement;\n\n optionRef?.addEventListener('click', (e: MouseEvent) => {\n const optionEl = e.target as HTMLButtonElement;\n\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n const clickedOptionIndex = optionElements.findIndex((x) => x === optionEl);\n\n if (clickedOptionIndex > -1) {\n this.activeOptionIndex.set(clickedOptionIndex);\n inputEl.focus();\n }\n });\n }\n });\n\n keyDownEventListener = (e: KeyboardEvent) => {\n // Only handle events if this is the most recently opened menu\n if (ShipMenu.openMenus.at(-1) !== this) return;\n\n const activeOptionIndex = this.activeOptionIndex();\n\n if (this.#keybindings.matches(e, 'menu.next')) {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n } else if (this.#keybindings.matches(e, 'menu.prev')) {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n } else if (this.#keybindings.matches(e, 'menu.open-submenu')) {\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n // For nested menu's\n if (parent?.hasAttribute('trigger')) {\n e.preventDefault();\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n }\n }\n } else if (this.#keybindings.matches(e, 'menu.close-submenu')) {\n if (this.isSubmenu()) {\n e.preventDefault();\n this.close('closed');\n }\n } else if (this.#keybindings.matches(e, 'menu.select')) {\n e.preventDefault();\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n // For nested menu's\n if (parent?.hasAttribute('trigger')) {\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n } else {\n el.click();\n if (!el.querySelector('sh-checkbox')) {\n queueMicrotask(() => this.close('active'));\n }\n }\n }\n } else if (e.key === 'Tab') {\n let optionElements = this.activeElements();\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (e.shiftKey) {\n if (activeOptionIndex <= 0) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n }\n } else {\n if (activeOptionIndex >= optionElements.length - 1) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n }\n }\n }\n };\n\n _lastElementList: HTMLButtonElement[] = [];\n activeElements = signal<HTMLButtonElement[]>([]);\n lastInputValue = '';\n inputValueEffect = effect(() => {\n const searchable = this.searchable();\n\n if (!searchable) {\n this.activeElements.set(this.optionsEl());\n return;\n }\n\n const inputValue = (this.inputValue() ?? '').toLowerCase();\n\n this.#resetActiveOption();\n\n if (!inputValue || inputValue === '') {\n const allOptions = this.optionsEl();\n\n this.activeElements.set(allOptions);\n this._lastElementList = allOptions;\n\n for (let i = 0; i < allOptions.length; i++) {\n this.#renderer.removeStyle(allOptions[i], 'order');\n if (!allOptions[i].id) {\n allOptions[i].id = `${this.optionsId}-option-${i}`;\n }\n allOptions[i].setAttribute('role', 'option');\n }\n\n return;\n }\n\n if (!inputValue || inputValue === '') return;\n\n let optionElements =\n this._lastElementList.length && inputValue.length > this.lastInputValue.length\n ? this._lastElementList\n : this.optionsEl();\n\n this.lastInputValue = inputValue;\n\n for (let i = 0; i < optionElements.length; i++) {\n const el = optionElements[i];\n const textContent = el.textContent?.toLowerCase() || '';\n const score = this.#calculateMatchScore(textContent, inputValue);\n\n (el.value as any) = score;\n }\n\n optionElements = optionElements\n .filter((x) => (x.value as any) > 0)\n .sort((a, b) => (b.value as any) - (a.value as any));\n\n for (let i = 0; i < optionElements.length; i++) {\n this.#renderer.setStyle(optionElements[i], 'order', i);\n }\n\n this.activeElements.set(optionElements);\n this._lastElementList = optionElements;\n\n // Assign IDs to options for ARIA support\n for (let i = 0; i < optionElements.length; i++) {\n if (!optionElements[i].id) {\n optionElements[i].id = `${this.optionsId}-option-${i}`;\n }\n optionElements[i].setAttribute('role', 'option');\n }\n });\n\n toggleIsOpen(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) return;\n\n if (this.isOpen()) {\n this.close('fromPopover');\n } else {\n this.open();\n }\n }\n\n open() {\n if (this.disabled()) return;\n this.isOpen.set(true);\n\n if (this.searchable()) {\n setTimeout(() => this.inputRef()?.nativeElement.focus());\n }\n }\n\n @HostListener('ship-menu-open', ['$event'])\n onShipMenuOpen(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n\n const customEvent = event as CustomEvent;\n if (customEvent.detail?.keyboard) {\n setTimeout(() => {\n this.activeOptionIndex.set(0);\n }, 50);\n }\n }\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n activeOptionIndexEffect = effect(() => {\n const optionElements = this.activeElements();\n const activeOptionIndex = this.activeOptionIndex();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n\n if (activeOptionIndex > -1) {\n const activeOption = optionElements[activeOptionIndex];\n activeOption.scrollIntoView({ block: 'center' });\n activeOption.classList.add('active');\n activeOption.setAttribute('aria-selected', 'true');\n this.activeOptionId.set(activeOption.id);\n } else {\n this.activeOptionId.set(undefined);\n }\n });\n\n nextActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === -1) {\n return 0;\n }\n\n if (activeIndex === optionElements.length - 1) {\n return 0;\n }\n\n const nextIndex = activeIndex + 1;\n\n if (optionElements[nextIndex].disabled) {\n return this.nextActiveIndex(nextIndex);\n }\n\n return nextIndex;\n }\n\n prevActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === 0) {\n return optionElements.length - 1;\n }\n\n if (activeIndex === -1) {\n return optionElements.length - 1;\n }\n\n const prevIndex = activeIndex - 1;\n\n if (optionElements[prevIndex].disabled) {\n return this.prevActiveIndex(prevIndex);\n }\n\n return prevIndex;\n }\n\n close(action: 'fromPopover' | 'closed' | 'active' = 'closed', event?: MouseEvent) {\n this.inputValue.set('');\n\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n }\n\n if (this.closeOnClick()) {\n (!this.keepClickedOptionActive() || action === 'closed') && this.#resetActiveOption();\n\n this.isOpen.set(false);\n this.closed.emit(action === 'active');\n\n if (this.isSubmenu()) {\n const parentInput = this.parentMenu?.inputRef()?.nativeElement;\n if (parentInput) {\n queueMicrotask(() => parentInput.focus());\n }\n }\n }\n }\n\n #resetActiveOption() {\n this.activeOptionIndex.set(-1);\n\n const optionElements = this.optionsEl();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n }\n\n ngOnDestroy() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n const index = ShipMenu.openMenus.indexOf(this);\n if (index > -1) {\n ShipMenu.openMenus.splice(index, 1);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-menu.mjs","sources":["../../../projects/ship-ui/ship-menu/ship-menu.ts","../../../projects/ship-ui/ship-menu/ship-ui-core-ship-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, HostListener, inject, input, model, output, Renderer2, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ShipFormField } from '@ship-ui/core/ship-form-field';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipPopover } from '@ship-ui/core/ship-popover';\nimport { createFormInputSignal } from '@ship-ui/core';\nimport { observeChildren } from '@ship-ui/core';\nimport { generateUniqueId } from '@ship-ui/core';\n\nconst openMenus: ShipMenu[] = [];\n\n@Component({\n selector: 'sh-menu',\n styleUrl: './ship-menu.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipPopover, ShipFormField, ShipIcon],\n template: `\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close('fromPopover')\"\n [asMultiLayer]=\"asMultiLayer()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <div\n trigger\n [class.is-open]=\"isOpen()\"\n (click)=\"toggleIsOpen($event)\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content />\n\n @if (openIndicator()) {\n <sh-icon class=\"open-indicator\">caret-down</sh-icon>\n }\n\n @if (isSubmenu()) {\n <sh-icon class=\"submenu-indicator\">caret-right</sh-icon>\n }\n </div>\n\n <div class=\"form-field-wrap\">\n <sh-form-field class=\"small stretch\" [class.hidden]=\"searchable() === false\">\n <input\n type=\"text\"\n #inputRef\n placeholder=\"Search\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n aria-autocomplete=\"list\" />\n </sh-form-field>\n </div>\n\n <div\n class=\"options\"\n #optionsRef\n (click)=\"close('active')\"\n [class.searching]=\"searchable() && inputValue() !== ''\"\n role=\"listbox\"\n [id]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content select=\"[menu]\" />\n </div>\n </sh-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'disabled()',\n '[class.has-search]': 'searchable()',\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipMenu {\n #document = inject(DOCUMENT);\n #renderer = inject(Renderer2);\n #keybindings = inject(ShipA11yKeybindingsService);\n\n parentMenu = inject(ShipMenu, { optional: true, skipSelf: true });\n isSubmenu = computed(() => this.parentMenu !== null);\n asMultiLayer = input<boolean>(false);\n openIndicator = input(false);\n disabled = input<boolean>(false);\n customOptionElementSelectors = input<string[]>(['button']);\n keepClickedOptionActive = input<boolean>(false);\n closeOnClick = input<boolean>(true);\n isOpen = model<boolean>(false);\n closed = output<boolean>();\n\n searchable = input<boolean>(false);\n activeOptionIndex = signal<number>(-1);\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n optionsRef = viewChild<ElementRef<HTMLDivElement>>('optionsRef');\n\n openMenusEffect = effect((onCleanup) => {\n if (this.isOpen()) {\n openMenus.push(this);\n }\n\n onCleanup(() => {\n const index = openMenus.indexOf(this);\n if (index > -1) {\n openMenus.splice(index, 1);\n }\n });\n });\n\n options = observeChildren<HTMLButtonElement>(this.optionsRef, this.customOptionElementSelectors);\n optionsEl = computed(() => {\n const optionsContainer = this.optionsRef()?.nativeElement;\n if (!optionsContainer) return [];\n return this.options.signal().filter((x) => {\n if (x.disabled) return false;\n return x.closest('.options') === optionsContainer;\n });\n });\n inputValue = createFormInputSignal(this.inputRef);\n\n optionsId = generateUniqueId();\n activeOptionId = signal<string | undefined>(undefined);\n\n abortController: AbortController | null = null;\n optionsEffect = effect(() => {\n if (this.abortController !== null) {\n this.abortController.abort();\n this.abortController = null;\n }\n\n if (!this.isOpen()) return;\n\n this.abortController = new AbortController();\n\n const searchable = this.searchable();\n\n if (!searchable) {\n this.#document.documentElement.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n } else {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n }\n }\n\n const inputEl = this.inputRef()?.nativeElement;\n\n if (!inputEl) return;\n\n queueMicrotask(() => inputEl.focus());\n\n if (!this.closeOnClick()) {\n const optionRef = this.optionsRef()?.nativeElement;\n\n optionRef?.addEventListener('click', (e: MouseEvent) => {\n const optionEl = e.target as HTMLButtonElement;\n\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n const clickedOptionIndex = optionElements.findIndex((x) => x === optionEl);\n\n if (clickedOptionIndex > -1) {\n this.activeOptionIndex.set(clickedOptionIndex);\n inputEl.focus();\n }\n });\n }\n });\n\n keyDownEventListener = (e: KeyboardEvent) => {\n \n if (openMenus.at(-1) !== this) return;\n\n const activeOptionIndex = this.activeOptionIndex();\n\n if (this.#keybindings.matches(e, 'menu.next')) {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n } else if (this.#keybindings.matches(e, 'menu.prev')) {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n } else if (this.#keybindings.matches(e, 'menu.open-submenu')) {\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n \n if (parent?.hasAttribute('trigger')) {\n e.preventDefault();\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n }\n }\n } else if (this.#keybindings.matches(e, 'menu.close-submenu')) {\n if (this.isSubmenu()) {\n e.preventDefault();\n this.close('closed');\n }\n } else if (this.#keybindings.matches(e, 'menu.select')) {\n e.preventDefault();\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n \n if (parent?.hasAttribute('trigger')) {\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n } else {\n el.click();\n if (!el.querySelector('sh-checkbox')) {\n queueMicrotask(() => this.close('active'));\n }\n }\n }\n } else if (e.key === 'Tab') {\n let optionElements = this.activeElements();\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (e.shiftKey) {\n if (activeOptionIndex <= 0) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n }\n } else {\n if (activeOptionIndex >= optionElements.length - 1) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n }\n }\n }\n };\n\n _lastElementList: HTMLButtonElement[] = [];\n activeElements = signal<HTMLButtonElement[]>([]);\n lastInputValue = '';\n inputValueEffect = effect(() => {\n const searchable = this.searchable();\n\n if (!searchable) {\n this.activeElements.set(this.optionsEl());\n return;\n }\n\n const inputValue = (this.inputValue() ?? '').toLowerCase();\n\n this.#resetActiveOption();\n\n if (!inputValue || inputValue === '') {\n const allOptions = this.optionsEl();\n\n this.activeElements.set(allOptions);\n this._lastElementList = allOptions;\n\n for (let i = 0; i < allOptions.length; i++) {\n this.#renderer.removeStyle(allOptions[i], 'order');\n if (!allOptions[i].id) {\n allOptions[i].id = `${this.optionsId}-option-${i}`;\n }\n allOptions[i].setAttribute('role', 'option');\n }\n\n return;\n }\n\n if (!inputValue || inputValue === '') return;\n\n let optionElements =\n this._lastElementList.length && inputValue.length > this.lastInputValue.length\n ? this._lastElementList\n : this.optionsEl();\n\n this.lastInputValue = inputValue;\n\n for (let i = 0; i < optionElements.length; i++) {\n const el = optionElements[i];\n const textContent = el.textContent?.toLowerCase() || '';\n const score = this.#calculateMatchScore(textContent, inputValue);\n\n (el.value as any) = score;\n }\n\n optionElements = optionElements\n .filter((x) => (x.value as any) > 0)\n .sort((a, b) => (b.value as any) - (a.value as any));\n\n for (let i = 0; i < optionElements.length; i++) {\n this.#renderer.setStyle(optionElements[i], 'order', i);\n }\n\n this.activeElements.set(optionElements);\n this._lastElementList = optionElements;\n\n // Assign IDs to options for ARIA support\n for (let i = 0; i < optionElements.length; i++) {\n if (!optionElements[i].id) {\n optionElements[i].id = `${this.optionsId}-option-${i}`;\n }\n optionElements[i].setAttribute('role', 'option');\n }\n });\n\n toggleIsOpen(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) return;\n\n if (this.isOpen()) {\n this.close('fromPopover');\n } else {\n this.open();\n }\n }\n\n open() {\n if (this.disabled()) return;\n this.isOpen.set(true);\n\n if (this.searchable()) {\n setTimeout(() => this.inputRef()?.nativeElement.focus());\n }\n }\n\n @HostListener('ship-menu-open', ['$event'])\n onShipMenuOpen(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n\n const customEvent = event as CustomEvent;\n if (customEvent.detail?.keyboard) {\n setTimeout(() => {\n this.activeOptionIndex.set(0);\n }, 50);\n }\n }\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n activeOptionIndexEffect = effect(() => {\n const optionElements = this.activeElements();\n const activeOptionIndex = this.activeOptionIndex();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n\n if (activeOptionIndex > -1) {\n const activeOption = optionElements[activeOptionIndex];\n activeOption.scrollIntoView({ block: 'center' });\n activeOption.classList.add('active');\n activeOption.setAttribute('aria-selected', 'true');\n this.activeOptionId.set(activeOption.id);\n } else {\n this.activeOptionId.set(undefined);\n }\n });\n\n nextActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === -1) {\n return 0;\n }\n\n if (activeIndex === optionElements.length - 1) {\n return 0;\n }\n\n const nextIndex = activeIndex + 1;\n\n if (optionElements[nextIndex].disabled) {\n return this.nextActiveIndex(nextIndex);\n }\n\n return nextIndex;\n }\n\n prevActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === 0) {\n return optionElements.length - 1;\n }\n\n if (activeIndex === -1) {\n return optionElements.length - 1;\n }\n\n const prevIndex = activeIndex - 1;\n\n if (optionElements[prevIndex].disabled) {\n return this.prevActiveIndex(prevIndex);\n }\n\n return prevIndex;\n }\n\n close(action: 'fromPopover' | 'closed' | 'active' = 'closed', event?: MouseEvent) {\n this.inputValue.set('');\n\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n }\n\n if (this.closeOnClick()) {\n (!this.keepClickedOptionActive() || action === 'closed') && this.#resetActiveOption();\n\n this.isOpen.set(false);\n this.closed.emit(action === 'active');\n\n if (this.isSubmenu()) {\n const parentInput = this.parentMenu?.inputRef()?.nativeElement;\n if (parentInput) {\n queueMicrotask(() => parentInput.focus());\n }\n }\n }\n }\n\n #resetActiveOption() {\n this.activeOptionIndex.set(-1);\n\n const optionElements = this.optionsEl();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n }\n\n ngOnDestroy() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n const index = openMenus.indexOf(this);\n if (index > -1) {\n openMenus.splice(index, 1);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -80,7 +80,7 @@ class ShipPopover {
|
|
|
80
80
|
if (isMobileSheet) {
|
|
81
81
|
this.#originalOverflow = this.#document.body.style.overflow;
|
|
82
82
|
this.#document.body.style.overflow = 'hidden';
|
|
83
|
-
this.menuStyle.set(null);
|
|
83
|
+
this.menuStyle.set(null);
|
|
84
84
|
}
|
|
85
85
|
if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {
|
|
86
86
|
setTimeout(() => {
|
|
@@ -135,58 +135,42 @@ class ShipPopover {
|
|
|
135
135
|
}
|
|
136
136
|
return this.#document.documentElement;
|
|
137
137
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Position generators that mirror the CSS position-try-fallbacks.
|
|
140
|
-
* Each returns { left, top } for the popover-content in fixed coordinates.
|
|
141
|
-
*/
|
|
142
|
-
// bottom span-right: below trigger, left edge aligned with trigger left
|
|
143
138
|
#bottomSpanRight(t, _m) {
|
|
144
139
|
return { left: t.left, top: t.bottom + BASE_SPACE };
|
|
145
140
|
}
|
|
146
|
-
// top span-right: above trigger, left edge aligned with trigger left
|
|
147
141
|
#topSpanRight(t, m) {
|
|
148
142
|
return { left: t.left, top: t.top - m.height - BASE_SPACE };
|
|
149
143
|
}
|
|
150
|
-
// bottom span-left: below trigger, right edge aligned with trigger right
|
|
151
144
|
#bottomSpanLeft(t, m) {
|
|
152
145
|
return { left: t.right - m.width, top: t.bottom + BASE_SPACE };
|
|
153
146
|
}
|
|
154
|
-
// top span-left: above trigger, right edge aligned with trigger right
|
|
155
147
|
#topSpanLeft(t, m) {
|
|
156
148
|
return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };
|
|
157
149
|
}
|
|
158
|
-
// right span-bottom: to the right of trigger, top edge aligned with trigger top
|
|
159
150
|
#rightSpanBottom(t, _m) {
|
|
160
151
|
return { left: t.right + BASE_SPACE, top: t.top };
|
|
161
152
|
}
|
|
162
|
-
// left span-bottom: to the left of trigger, top edge aligned with trigger top
|
|
163
153
|
#leftSpanBottom(t, m) {
|
|
164
154
|
return { left: t.left - m.width - BASE_SPACE, top: t.top };
|
|
165
155
|
}
|
|
166
|
-
// right center: to the right of trigger, vertically centered
|
|
167
156
|
#rightCenter(t, m) {
|
|
168
157
|
return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };
|
|
169
158
|
}
|
|
170
|
-
// left center: to the left of trigger, vertically centered
|
|
171
159
|
#leftCenter(t, m) {
|
|
172
160
|
return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };
|
|
173
161
|
}
|
|
174
|
-
// right span-top: to the right of trigger, bottom edge aligned with trigger bottom
|
|
175
162
|
#rightSpanTop(t, m) {
|
|
176
163
|
return { left: t.right + BASE_SPACE, top: t.bottom - m.height };
|
|
177
164
|
}
|
|
178
|
-
// left span-top: to the left of trigger, bottom edge aligned with trigger bottom
|
|
179
165
|
#leftSpanTop(t, m) {
|
|
180
166
|
return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };
|
|
181
167
|
}
|
|
182
|
-
/** Check if a position fits entirely within the viewport */
|
|
183
168
|
#fitsInViewport(pos, m) {
|
|
184
169
|
return (pos.left >= 0 &&
|
|
185
170
|
pos.top >= 0 &&
|
|
186
171
|
pos.left + m.width <= window.innerWidth &&
|
|
187
172
|
pos.top + m.height <= window.innerHeight);
|
|
188
173
|
}
|
|
189
|
-
/** Clamp a position so the popover stays within the viewport */
|
|
190
174
|
#clampToViewport(pos, m) {
|
|
191
175
|
return {
|
|
192
176
|
left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),
|
|
@@ -198,7 +182,6 @@ class ShipPopover {
|
|
|
198
182
|
const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();
|
|
199
183
|
if (!triggerRect || !menuRect)
|
|
200
184
|
return;
|
|
201
|
-
// Mirror the CSS position-try-fallbacks order
|
|
202
185
|
const tryOrderDefault = [
|
|
203
186
|
this.#bottomSpanRight,
|
|
204
187
|
this.#topSpanRight,
|
|
@@ -224,7 +207,6 @@ class ShipPopover {
|
|
|
224
207
|
this.#topSpanLeft,
|
|
225
208
|
];
|
|
226
209
|
const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;
|
|
227
|
-
// Try each position, use the first one that fits
|
|
228
210
|
for (const positionFn of tryOrder) {
|
|
229
211
|
const pos = positionFn.call(this, triggerRect, menuRect);
|
|
230
212
|
if (this.#fitsInViewport(pos, menuRect)) {
|
|
@@ -232,7 +214,6 @@ class ShipPopover {
|
|
|
232
214
|
return;
|
|
233
215
|
}
|
|
234
216
|
}
|
|
235
|
-
// If nothing fits perfectly, use the first position clamped to viewport
|
|
236
217
|
const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);
|
|
237
218
|
this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });
|
|
238
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-popover.mjs","sources":["../../../projects/ship-ui/ship-popover/ship-popover.ts","../../../projects/ship-ui/ship-popover/ship-ui-core-ship-popover.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { generateUniqueId } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n styleUrl: './ship-popover.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n '[class.as-sheet]': 'asSheetOnMobile()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n #keybindings = inject(ShipA11yKeybindingsService);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n asSheetOnMobile = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n #originalOverflow: string | null = null;\n\n openEffect = effect(() => {\n const open = this.isOpen();\n const popoverEl = this.popoverRef()?.nativeElement;\n\n queueMicrotask(() => {\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'popover.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n if (!popoverEl.isConnected) return;\n\n popoverEl.showPopover();\n const closeShortcut = this.#keybindings.getShortcut('popover.close');\n if (closeShortcut) {\n popoverEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('popover.close') || closeShortcut);\n }\n\n const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;\n if (isMobileSheet) {\n this.#originalOverflow = this.#document.body.style.overflow;\n this.#document.body.style.overflow = 'hidden';\n this.menuStyle.set(null); // Clear any leftover inline styles\n }\n\n if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n popoverEl.hidePopover();\n this.openAbort?.abort();\n this.openAbort = null;\n \n if (this.asSheetOnMobile() && this.#originalOverflow !== null) {\n this.#document.body.style.overflow = this.#originalOverflow;\n this.#originalOverflow = null;\n }\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n /**\n * Position generators that mirror the CSS position-try-fallbacks.\n * Each returns { left, top } for the popover-content in fixed coordinates.\n */\n\n // bottom span-right: below trigger, left edge aligned with trigger left\n #bottomSpanRight(t: DOMRect, _m: DOMRect) {\n return { left: t.left, top: t.bottom + BASE_SPACE };\n }\n\n // top span-right: above trigger, left edge aligned with trigger left\n #topSpanRight(t: DOMRect, m: DOMRect) {\n return { left: t.left, top: t.top - m.height - BASE_SPACE };\n }\n\n // bottom span-left: below trigger, right edge aligned with trigger right\n #bottomSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.bottom + BASE_SPACE };\n }\n\n // top span-left: above trigger, right edge aligned with trigger right\n #topSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };\n }\n\n // right span-bottom: to the right of trigger, top edge aligned with trigger top\n #rightSpanBottom(t: DOMRect, _m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top };\n }\n\n // left span-bottom: to the left of trigger, top edge aligned with trigger top\n #leftSpanBottom(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top };\n }\n\n // right center: to the right of trigger, vertically centered\n #rightCenter(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // left center: to the left of trigger, vertically centered\n #leftCenter(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // right span-top: to the right of trigger, bottom edge aligned with trigger bottom\n #rightSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.bottom - m.height };\n }\n\n // left span-top: to the left of trigger, bottom edge aligned with trigger bottom\n #leftSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };\n }\n\n /** Check if a position fits entirely within the viewport */\n #fitsInViewport(pos: { left: number; top: number }, m: DOMRect): boolean {\n return (\n pos.left >= 0 &&\n pos.top >= 0 &&\n pos.left + m.width <= window.innerWidth &&\n pos.top + m.height <= window.innerHeight\n );\n }\n\n /** Clamp a position so the popover stays within the viewport */\n #clampToViewport(pos: { left: number; top: number }, m: DOMRect): { left: number; top: number } {\n return {\n left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),\n top: Math.max(0, Math.min(pos.top, window.innerHeight - m.height)),\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n if (!triggerRect || !menuRect) return;\n\n // Mirror the CSS position-try-fallbacks order\n const tryOrderDefault = [\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n this.#rightSpanBottom,\n this.#leftSpanBottom,\n this.#rightCenter,\n this.#leftCenter,\n this.#rightSpanTop,\n this.#leftSpanTop,\n ];\n\n const tryOrderMultiLayer = [\n this.#rightSpanBottom,\n this.#rightSpanTop,\n this.#leftSpanBottom,\n this.#leftSpanTop,\n this.#rightCenter,\n this.#leftCenter,\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n ];\n\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n // Try each position, use the first one that fits\n for (const positionFn of tryOrder) {\n const pos = positionFn.call(this, triggerRect, menuRect);\n\n if (this.#fitsInViewport(pos, menuRect)) {\n this.menuStyle.set({ left: pos.left + 'px', top: pos.top + 'px' });\n return;\n }\n }\n\n // If nothing fits perfectly, use the first position clamped to viewport\n const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);\n this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-popover.mjs","sources":["../../../projects/ship-ui/ship-popover/ship-popover.ts","../../../projects/ship-ui/ship-popover/ship-ui-core-ship-popover.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { generateUniqueId } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n styleUrl: './ship-popover.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n '[class.as-sheet]': 'asSheetOnMobile()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n #keybindings = inject(ShipA11yKeybindingsService);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n asSheetOnMobile = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n #originalOverflow: string | null = null;\n\n openEffect = effect(() => {\n const open = this.isOpen();\n const popoverEl = this.popoverRef()?.nativeElement;\n\n queueMicrotask(() => {\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'popover.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n if (!popoverEl.isConnected) return;\n\n popoverEl.showPopover();\n const closeShortcut = this.#keybindings.getShortcut('popover.close');\n if (closeShortcut) {\n popoverEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('popover.close') || closeShortcut);\n }\n\n const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;\n if (isMobileSheet) {\n this.#originalOverflow = this.#document.body.style.overflow;\n this.#document.body.style.overflow = 'hidden';\n this.menuStyle.set(null); \n }\n\n if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n popoverEl.hidePopover();\n this.openAbort?.abort();\n this.openAbort = null;\n \n if (this.asSheetOnMobile() && this.#originalOverflow !== null) {\n this.#document.body.style.overflow = this.#originalOverflow;\n this.#originalOverflow = null;\n }\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n \n\n\n\n\n \n #bottomSpanRight(t: DOMRect, _m: DOMRect) {\n return { left: t.left, top: t.bottom + BASE_SPACE };\n }\n\n \n #topSpanRight(t: DOMRect, m: DOMRect) {\n return { left: t.left, top: t.top - m.height - BASE_SPACE };\n }\n\n \n #bottomSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.bottom + BASE_SPACE };\n }\n\n \n #topSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };\n }\n\n \n #rightSpanBottom(t: DOMRect, _m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top };\n }\n\n \n #leftSpanBottom(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top };\n }\n\n \n #rightCenter(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n \n #leftCenter(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n \n #rightSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.bottom - m.height };\n }\n\n \n #leftSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };\n }\n\n \n #fitsInViewport(pos: { left: number; top: number }, m: DOMRect): boolean {\n return (\n pos.left >= 0 &&\n pos.top >= 0 &&\n pos.left + m.width <= window.innerWidth &&\n pos.top + m.height <= window.innerHeight\n );\n }\n\n \n #clampToViewport(pos: { left: number; top: number }, m: DOMRect): { left: number; top: number } {\n return {\n left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),\n top: Math.max(0, Math.min(pos.top, window.innerHeight - m.height)),\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n if (!triggerRect || !menuRect) return;\n\n \n const tryOrderDefault = [\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n this.#rightSpanBottom,\n this.#leftSpanBottom,\n this.#rightCenter,\n this.#leftCenter,\n this.#rightSpanTop,\n this.#leftSpanTop,\n ];\n\n const tryOrderMultiLayer = [\n this.#rightSpanBottom,\n this.#rightSpanTop,\n this.#leftSpanBottom,\n this.#leftSpanTop,\n this.#rightCenter,\n this.#leftCenter,\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n ];\n\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n \n for (const positionFn of tryOrder) {\n const pos = positionFn.call(this, triggerRect, menuRect);\n\n if (this.#fitsInViewport(pos, menuRect)) {\n this.menuStyle.set({ left: pos.left + 'px', top: pos.top + 'px' });\n return;\n }\n }\n\n \n const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);\n this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings'
|
|
|
5
5
|
|
|
6
6
|
class ShipRadio {
|
|
7
7
|
constructor() {
|
|
8
|
-
this
|
|
8
|
+
this.#elementRef = inject(ElementRef);
|
|
9
9
|
this.#keybindings = inject(ShipA11yKeybindingsService);
|
|
10
10
|
this.internalInput = viewChild('internalInput', /* @ts-ignore */
|
|
11
11
|
...(ngDevMode ? [{ debugName: "internalInput" }] : /* istanbul ignore next */ []));
|
|
@@ -32,6 +32,7 @@ class ShipRadio {
|
|
|
32
32
|
readonly: this.readonly,
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
|
+
#elementRef;
|
|
35
36
|
#keybindings;
|
|
36
37
|
onInternalInputChange(event) {
|
|
37
38
|
if (this.disabled())
|
|
@@ -46,7 +47,7 @@ class ShipRadio {
|
|
|
46
47
|
inputEl.click();
|
|
47
48
|
}
|
|
48
49
|
else {
|
|
49
|
-
this.
|
|
50
|
+
this.#elementRef.nativeElement.click();
|
|
50
51
|
}
|
|
51
52
|
event.preventDefault();
|
|
52
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-radio.mjs","sources":["../../../projects/ship-ui/ship-radio/ship-radio.ts","../../../projects/ship-ui/ship-radio/ship-ui-core-ship-radio.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, input, model, viewChild, ViewEncapsulation } from '@angular/core';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-radio',\n styleUrl: './ship-radio.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"radio sh-sheet\" [class]=\"currentClassList()\"></div>\n\n <ng-content />\n\n @if (projectedInputs().length === 0 && !noInternalInput()) {\n <input\n #internalInput\n type=\"radio\"\n class=\"internal-input\"\n [attr.disabled]=\"disabled() ? '' : null\"\n [checked]=\"checked()\"\n (change)=\"onInternalInputChange($event)\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.role]': 'noInternalInput() ? \"radio\" : null',\n '[attr.aria-checked]': 'noInternalInput() ? checked() : null',\n '[attr.tabindex]': 'noInternalInput() ? (disabled() ? \"-1\" : \"0\") : null',\n },\n})\nexport class ShipRadio {\n
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-radio.mjs","sources":["../../../projects/ship-ui/ship-radio/ship-radio.ts","../../../projects/ship-ui/ship-radio/ship-ui-core-ship-radio.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, input, model, viewChild, ViewEncapsulation } from '@angular/core';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-radio',\n styleUrl: './ship-radio.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"radio sh-sheet\" [class]=\"currentClassList()\"></div>\n\n <ng-content />\n\n @if (projectedInputs().length === 0 && !noInternalInput()) {\n <input\n #internalInput\n type=\"radio\"\n class=\"internal-input\"\n [attr.disabled]=\"disabled() ? '' : null\"\n [checked]=\"checked()\"\n (change)=\"onInternalInputChange($event)\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.role]': 'noInternalInput() ? \"radio\" : null',\n '[attr.aria-checked]': 'noInternalInput() ? checked() : null',\n '[attr.tabindex]': 'noInternalInput() ? (disabled() ? \"-1\" : \"0\") : null',\n },\n})\nexport class ShipRadio {\n #elementRef = inject(ElementRef);\n #keybindings = inject(ShipA11yKeybindingsService);\n\n internalInput = viewChild<ElementRef<HTMLInputElement>>('internalInput');\n projectedInputs = contentProjectionSignal<HTMLInputElement>('input:not(.internal-input)', {\n childList: true,\n attributes: true,\n });\n\n checked = model<boolean>(false);\n currentClassList = classMutationSignal();\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n readonly = input<boolean>(false);\n disabled = input<boolean>(false);\n noInternalInput = input<boolean>(false);\n\n onInternalInputChange(event: Event) {\n if (this.disabled()) return;\n\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n\n hostClasses = shipComponentClasses('radio', {\n color: this.color,\n variant: this.variant,\n readonly: this.readonly,\n });\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (this.#keybindings.matches(event, 'radio.select')) {\n const inputEl = this.internalInput()?.nativeElement;\n if (inputEl && getComputedStyle(inputEl).display !== 'none') {\n inputEl.click();\n } else {\n this.#elementRef.nativeElement.click();\n }\n event.preventDefault();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, input, model,
|
|
2
|
+
import { signal, inject, ElementRef, input, model, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { shipComponentClasses } from '@ship-ui/core';
|
|
4
4
|
|
|
5
5
|
class ShipRangeSlider {
|
|
6
6
|
constructor() {
|
|
7
|
+
this.hasInput = signal(false, /* @ts-ignore */
|
|
8
|
+
...(ngDevMode ? [{ debugName: "hasInput" }] : /* istanbul ignore next */ []));
|
|
7
9
|
this.#selfRef = inject((ElementRef));
|
|
8
10
|
this.#observer = null;
|
|
9
11
|
this.#inputElement = null;
|
|
@@ -66,12 +68,10 @@ class ShipRangeSlider {
|
|
|
66
68
|
#observer;
|
|
67
69
|
#inputElement;
|
|
68
70
|
#initialDefaultValue;
|
|
69
|
-
get hasInputElement() {
|
|
70
|
-
return !!this.#inputElement;
|
|
71
|
-
}
|
|
72
71
|
ngAfterViewInit() {
|
|
73
72
|
this.#inputElement = this.#selfRef.nativeElement.querySelector('input[type="range"]');
|
|
74
73
|
if (this.#inputElement) {
|
|
74
|
+
this.hasInput.set(true);
|
|
75
75
|
this.#createCustomInputEventListener(this.#inputElement);
|
|
76
76
|
this.#inputElement.oninput = () => {
|
|
77
77
|
this.setNewInputValue(this.#inputElement.value);
|
|
@@ -208,7 +208,7 @@ class ShipRangeSlider {
|
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipRangeSlider, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
211
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipRangeSlider, isStandalone: true, selector: "sh-range-slider", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, sharp: { classPropertyName: "sharp", publicName: "sharp", isSignal: true, isRequired: false, transformFunction: null }, alwaysShow: { classPropertyName: "alwaysShow", publicName: "alwaysShow", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.sh-range-slider": "true", "class": "
|
|
211
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipRangeSlider, isStandalone: true, selector: "sh-range-slider", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, sharp: { classPropertyName: "sharp", publicName: "sharp", isSignal: true, isRequired: false, transformFunction: null }, alwaysShow: { classPropertyName: "alwaysShow", publicName: "alwaysShow", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.sh-range-slider": "true", "class.has-input": "hasInput()", "class": "hostClasses()" } }, ngImport: i0, template: `
|
|
212
212
|
<div class="label">
|
|
213
213
|
<ng-content select="label"></ng-content>
|
|
214
214
|
</div>
|
|
@@ -262,12 +262,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
262
262
|
</div>
|
|
263
263
|
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
264
264
|
'[class.sh-range-slider]': 'true',
|
|
265
|
+
'[class.has-input]': 'hasInput()',
|
|
265
266
|
'[class]': 'hostClasses()',
|
|
266
267
|
}, styles: ["sh-range-slider{--rs-h: 2.5rem;--rs-f: var(--paragraph-30);--rs-unit-g: .75rem;--rs-unit-c: var(--base-8);--rst: var(--base-3);--rst-bc: var(--base-1);--rst-bg: var(--base-4);--rst-h: .5rem;--rst-s: calc(var(--shape-2) / 2);--rs-thumb-c: var(--base-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--base-4);--rs-thumb-arrow: var(--rs-thumb-value-bg);--rs-thumb-value-c: var(--base-8);--rs-thumb-si: 1rem;--rs-thumb-w: var(--rs-thumb-si);--rs-thumb-s: calc(var(--rs-thumb-w) / 2);display:flex;flex-direction:column;width:100%;font:var(--rs-f)}sh-range-slider.sharp{--rst-s: .125rem;--rs-thumb-s: .125rem;--rs-thumb-bc: transparent !important}sh-range-slider .label{display:flex;align-items:center;gap:.5rem;padding-bottom:.25rem}sh-range-slider .label>label{display:flex;align-items:center;gap:.25rem}sh-range-slider .label sh-icon{color:var(--grey-500);font-size:1rem}sh-range-slider .label:empty{display:none}sh-range-slider[readonly]:not([readonly=false]),sh-range-slider:has(input[type=range][readonly]:not([readonly=false])),sh-range-slider[disabled]:not([disabled=false]),sh-range-slider:has(input[type=range][disabled]:not([disabled=false])){opacity:.4;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:initial}sh-range-slider:has(input[type=range][readonly]) .thumb .value-indicator,sh-range-slider.always-show .thumb .value-indicator{opacity:1}sh-range-slider input[type=range]{appearance:none;width:100%;height:100%;position:absolute;inset:0;opacity:0;margin:0;z-index:1000}sh-range-slider .input-wrap{display:flex;align-items:center;justify-content:center;width:100%;min-height:var(--rs-h);position:relative;gap:var(--rs-unit-g)}sh-range-slider .thumb-wrap{position:absolute;top:0}sh-range-slider .thumb{position:relative;margin-top:calc(-1 * var(--rs-thumb-si) / 4);width:var(--rs-thumb-w);height:var(--rs-thumb-si);border-radius:var(--rs-thumb-s);background-color:var(--rs-thumb-c);border:1px solid var(--rs-thumb-bc);box-shadow:var(--box-shadow-20);transform:translate(-50%)}sh-range-slider .track-wrap{position:relative;width:100%;height:var(--rst-h)}sh-range-slider .track{position:relative;width:100%;height:var(--rst-h);border-radius:var(--rst-s);background-color:var(--rst);border:1px solid var(--rst-bc);overflow:hidden}sh-range-slider .track-filled{position:absolute;top:0;left:0;bottom:0;background:var(--rst-bg);width:0}sh-range-slider .min-indicator,sh-range-slider .max-indicator{white-space:nowrap;color:var(--rs-unit-c)}sh-range-slider input[type=range]:hover~.thumb-wrap .value-indicator,sh-range-slider input[type=range]:focus~.thumb-wrap .value-indicator{opacity:1}sh-range-slider .value-indicator{position:absolute;top:-1.875rem;height:1.5rem;min-width:1.5rem;border-radius:var(--shape-2);left:50%;margin:auto;transform:translate(-50%);padding:.25rem .5rem;background:var(--rs-thumb-value-bg);color:var(--rs-thumb-value-c);white-space:nowrap;opacity:0;transition:opacity 125ms linear;-webkit-user-select:none;user-select:none;pointer-events:none}sh-range-slider .value-indicator:after{content:\"\";border-top:.3125rem solid var(--rs-thumb-arrow);border-left:.3125rem solid transparent;border-right:.3125rem solid transparent;position:absolute;top:calc(100% - 1px);left:50%;margin-left:-.3125rem}sh-range-slider.primary{--rst-bg: var(--primary-8);--rs-thumb-arrow: var(--primary-8);--rs-thumb-value-bg: var(--primary-8);--rs-thumb-value-c: #fff}sh-range-slider.accent{--rst-bg: var(--accent-8);--rs-thumb-arrow: var(--accent-8);--rs-thumb-value-bg: var(--accent-8);--rs-thumb-value-c: #fff}sh-range-slider.warn{--rst-bg: var(--warn-8);--rs-thumb-arrow: var(--warn-8);--rs-thumb-value-bg: var(--warn-8);--rs-thumb-value-c: #fff}sh-range-slider.error{--rst-bg: var(--error-8);--rs-thumb-arrow: var(--error-8);--rs-thumb-value-bg: var(--error-8);--rs-thumb-value-c: #fff}sh-range-slider.success{--rst-bg: var(--success-8);--rs-thumb-arrow: var(--success-8);--rs-thumb-value-bg: var(--success-8);--rs-thumb-value-c: #fff}sh-range-slider.simple{--rst-h: 1rem;--rst-s: var(--shape-2)}sh-range-slider.simple .thumb{width:1px;height:var(--rst-h);margin-top:0;border-radius:0;border:none;box-shadow:none}sh-range-slider.simple.primary{--rst-bg: var(--primary-8);--rst: var(--primary-2);--rs-thumb-c: var(--primary-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--primary-8);--rs-thumb-value-c: var(--primary-2)}sh-range-slider.simple.accent{--rst-bg: var(--accent-8);--rst: var(--accent-2);--rs-thumb-c: var(--accent-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--accent-8);--rs-thumb-value-c: var(--accent-2)}sh-range-slider.simple.warn{--rst-bg: var(--warn-8);--rst: var(--warn-2);--rs-thumb-c: var(--warn-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--warn-8);--rs-thumb-value-c: var(--warn-2)}sh-range-slider.simple.error{--rst-bg: var(--error-8);--rst: var(--error-2);--rs-thumb-c: var(--error-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--error-8);--rs-thumb-value-c: var(--error-2)}sh-range-slider.simple.success{--rst-bg: var(--success-8);--rst: var(--success-2);--rs-thumb-c: var(--success-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--success-8);--rs-thumb-value-c: var(--success-2)}sh-range-slider.outlined{--rst: var(--base-1);--rst-bc: var(--base-4);--rs-thumb-c: var(--base-6);--rs-thumb-bc: var(--base-1);--rs-thumb-arrow: var(--base-4)}sh-range-slider.outlined.primary,sh-range-slider.outlined.accent,sh-range-slider.outlined.warn,sh-range-slider.outlined.error,sh-range-slider.outlined.success{--rst: var(--base-2)}sh-range-slider.outlined.primary{--rst-bg: var(--primary-4);--rst-bc: var(--primary-8);--rs-thumb-c: var(--primary-8);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--primary-4);--rs-thumb-value-c: var(--primary-8);--rs-thumb-arrow: var(--primary-4)}sh-range-slider.outlined.accent{--rs-thumb-c: var(--accent-4);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--accent-4);--rs-thumb-value-c: var(--accent-8);--rs-thumb-arrow: var(--accent-4)}sh-range-slider.outlined.warn{--rs-thumb-c: var(--warn-4);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--warn-4);--rs-thumb-value-c: var(--warn-8);--rs-thumb-arrow: var(--warn-4)}sh-range-slider.outlined.error{--rs-thumb-c: var(--error-4);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--error-4);--rs-thumb-value-c: var(--error-8);--rs-thumb-arrow: var(--error-4)}sh-range-slider.outlined.success{--rs-thumb-c: var(--success-4);--rs-thumb-bc: var(--base-1);--rs-thumb-value-bg: var(--success-4);--rs-thumb-value-c: var(--success-8);--rs-thumb-arrow: var(--success-4)}sh-range-slider.flat{--rs-thumb-c: #fff;--rs-thumb-bc: var(--base-4)}sh-range-slider.flat.primary,sh-range-slider.flat.accent,sh-range-slider.flat.warn,sh-range-slider.flat.error,sh-range-slider.flat.success{--rst: var(--base-3);--rs-thumb-c: #fff;--rs-thumb-bc: var(--base-4);--rs-thumb-value-bg: var(--base-8);--rs-thumb-value-c: #fff}sh-range-slider.flat.primary{--rst-bg: var(--primary-8);--rs-thumb-value-bg: var(--primary-8)}sh-range-slider.flat.accent{--rst-bg: var(--accent-8);--rs-thumb-value-bg: var(--accent-8)}sh-range-slider.flat.warn{--rst-bg: var(--warn-8);--rs-thumb-value-bg: var(--warn-8)}sh-range-slider.flat.error{--rst-bg: var(--error-8);--rs-thumb-value-bg: var(--error-8)}sh-range-slider.flat.success{--rst-bg: var(--success-8);--rs-thumb-value-bg: var(--success-8)}sh-range-slider.raised{--rst-bg: var(--base-g2);--rs-thumb-c: #fff;--rs-thumb-bc: var(--base-4)}sh-range-slider.raised.primary,sh-range-slider.raised.accent,sh-range-slider.raised.warn,sh-range-slider.raised.error,sh-range-slider.raised.success{--rst: var(--base-3);--rs-thumb-c: #fff;--rs-thumb-bc: var(--base-4);--rs-thumb-value-bg: var(--base-g6);--rs-thumb-value-c: #fff}sh-range-slider.raised.primary{--rst-bg: var(--primary-g2);--rs-thumb-arrow: var(--primary-8);--rs-thumb-value-bg: var(--primary-g3)}sh-range-slider.raised.accent{--rst-bg: var(--accent-g2);--rs-thumb-arrow: var(--accent-8);--rs-thumb-value-bg: var(--accent-8)}sh-range-slider.raised.warn{--rst-bg: var(--warn-g2);--rs-thumb-arrow: var(--warn-8);--rs-thumb-value-bg: var(--warn-8)}sh-range-slider.raised.error{--rst-bg: var(--error-g2);--rs-thumb-arrow: var(--error-8);--rs-thumb-value-bg: var(--error-8)}sh-range-slider.raised.success{--rst-bg: var(--success-g2);--rs-thumb-arrow: var(--success-8);--rs-thumb-value-bg: var(--success-8)}\n"] }]
|
|
267
|
-
}], propDecorators: { unit: [{ type: i0.Input, args: [{ isSignal: true, alias: "unit", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], sharp: [{ type: i0.Input, args: [{ isSignal: true, alias: "sharp", required: false }] }], alwaysShow: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysShow", required: false }] }]
|
|
268
|
-
type: HostBinding,
|
|
269
|
-
args: ['class.has-input']
|
|
270
|
-
}] } });
|
|
268
|
+
}], propDecorators: { unit: [{ type: i0.Input, args: [{ isSignal: true, alias: "unit", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], sharp: [{ type: i0.Input, args: [{ isSignal: true, alias: "sharp", required: false }] }], alwaysShow: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysShow", required: false }] }] } });
|
|
271
269
|
|
|
272
270
|
/**
|
|
273
271
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-range-slider.mjs","sources":["../../../projects/ship-ui/ship-range-slider/ship-range-slider.ts","../../../projects/ship-ui/ship-range-slider/ship-ui-core-ship-range-slider.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, HostBinding, inject, input, model, signal, ViewEncapsulation } from '@angular/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSize, ShipRangeSliderVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-range-slider',\n styleUrl: './ship-range-slider.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"label\">\n <ng-content select=\"label\"></ng-content>\n </div>\n\n <div class=\"input-wrap\">\n <div class=\"min-indicator\">{{ inputState().min }}{{ unit() }}</div>\n\n <div class=\"track-wrap\" (click)=\"trackEvent($event)\">\n <ng-content select=\"input[type=range]\"></ng-content>\n\n <div class=\"track\">\n <div class=\"track-filled\" [style.width.%]=\"trackFilledPercentage()\"></div>\n </div>\n\n <div class=\"thumb-wrap\" [style.left.%]=\"thumbPositionPercentage()\">\n <div class=\"thumb\">\n <div class=\"value-indicator\">{{ value() }}{{ unit() }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"max-indicator\">{{ inputState().max }}{{ unit() }}</div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.sh-range-slider]': 'true',\n '[class]': 'hostClasses()',\n },\n})\nexport class ShipRangeSlider {\n #selfRef = inject(ElementRef<HTMLElement>);\n #observer: MutationObserver | null = null;\n #inputElement: HTMLInputElement | null = null;\n #initialDefaultValue = 0;\n\n unit = input<string>('');\n value = model<number>(this.#initialDefaultValue);\n\n inputState = signal({\n min: 0,\n max: 100,\n step: 1,\n });\n\n readonly color = input<ShipColor | null>(null);\n readonly variant = input<ShipRangeSliderVariant | null>(null);\n readonly size = input<ShipSize | null>(null);\n readonly sharp = input<boolean | undefined>(undefined);\n readonly alwaysShow = input<boolean | undefined>(undefined);\n\n hostClasses = shipComponentClasses('rangeSlider', {\n color: this.color,\n variant: this.variant,\n size: this.size,\n sharp: this.sharp,\n alwaysShow: this.alwaysShow,\n });\n\n valuePercentage = computed(() => {\n const { min, max } = this.inputState();\n const currentValue = this.value() ?? min;\n if (isNaN(currentValue)) return 0;\n\n const range = max - min;\n if (range === 0) return 0;\n\n const percentage = ((currentValue - min) / range) * 100;\n return Math.max(0, Math.min(100, percentage));\n });\n\n trackFilledPercentage = computed(() => this.valuePercentage());\n thumbPositionPercentage = computed(() => this.valuePercentage());\n\n syncModelToInputEffect = effect(() => {\n const modelValue = this.value();\n if (this.#inputElement) {\n const currentInputValue = parseFloat(this.#inputElement.value);\n if (isNaN(currentInputValue) || String(currentInputValue) !== String(modelValue)) {\n this.#inputElement.value = String(modelValue);\n }\n }\n });\n\n @HostBinding('class.has-input')\n get hasInputElement(): boolean {\n return !!this.#inputElement;\n }\n\n ngAfterViewInit() {\n this.#inputElement = this.#selfRef.nativeElement.querySelector('input[type=\"range\"]');\n\n if (this.#inputElement) {\n this.#createCustomInputEventListener(this.#inputElement);\n\n this.#inputElement.oninput = () => {\n this.setNewInputValue(this.#inputElement!.value);\n };\n\n this.#inputElement.addEventListener('inputValueChanged', (event: any) => {\n this.setNewInputValue(event.detail.value);\n });\n\n queueMicrotask(() => this.#updateStateFromInput(true));\n\n this.#setupMutationObserver();\n } else {\n console.error('ShipRangeSlider: No <input type=\"range\"> element found projected inside.');\n }\n }\n\n setNewInputValue(value: string) {\n const inputValue = parseFloat(value ?? '0');\n\n if (!isNaN(inputValue)) {\n const { min, max } = this.inputState();\n this.value.set(Math.max(min, Math.min(max, inputValue)));\n }\n }\n\n trackEvent(e: MouseEvent) {\n if (!this.#inputElement || this.#inputElement.readOnly || this.#inputElement.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n if (\n e.target === this.#inputElement ||\n (e.target as HTMLElement)?.closest('.thumb, .min-indicator, .max-indicator')\n ) {\n return;\n }\n\n const trackWrap = e.currentTarget as HTMLElement;\n const rect = trackWrap.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const width = rect.width;\n const { min, max, step } = this.inputState();\n const range = max - min;\n\n if (width > 0 && range !== 0 && step > 0) {\n let proportionalValue = (clickX / width) * range + min;\n const numSteps = (proportionalValue - min) / step;\n let nearestStepValue = min + Math.round(numSteps) * step;\n\n const decimals = this.#countDecimals(step);\n nearestStepValue = parseFloat(nearestStepValue.toFixed(decimals));\n\n const clampedValue = Math.max(min, Math.min(max, nearestStepValue));\n\n this.value.set(clampedValue);\n }\n }\n\n #updateStateFromInput(isInitialCall = false) {\n if (!this.#inputElement) return;\n\n const min = parseFloat(this.#inputElement.min ?? '0') ?? 0;\n const max = parseFloat(this.#inputElement.max ?? '100') ?? 100;\n const stepAttr = this.#inputElement.step;\n let step = 1;\n if (stepAttr && stepAttr.toLowerCase() !== 'any') {\n const parsedStep = parseFloat(stepAttr);\n if (!isNaN(parsedStep) && parsedStep > 0) {\n step = parsedStep;\n }\n }\n\n this.inputState.set({ min, max, step });\n\n const inputElementValue = parseFloat(this.#inputElement.value ?? String(min)) ?? min;\n\n if (isInitialCall && this.value() !== this.#initialDefaultValue) {\n const modelValue = this.value();\n const clampedModelValue = Math.max(min, Math.min(max, modelValue));\n\n if (inputElementValue !== clampedModelValue) {\n this.#inputElement.value = String(clampedModelValue);\n }\n if (modelValue !== clampedModelValue) {\n this.value.set(clampedModelValue);\n }\n } else {\n const clampedInputElementValue = Math.max(min, Math.min(max, inputElementValue));\n if (this.value() !== clampedInputElementValue) {\n this.value.set(clampedInputElementValue);\n }\n }\n }\n\n #setupMutationObserver() {\n if (!this.#inputElement || typeof MutationObserver === 'undefined') {\n return;\n }\n\n const MUTATION_ATTRIBUTES = ['min', 'max', 'step', 'value', 'readonly', 'disabled'];\n\n this.#observer = new MutationObserver((mutationList) => {\n let needsStateUpdate = false;\n for (const mutation of mutationList) {\n if (mutation.type === 'attributes' && MUTATION_ATTRIBUTES.includes(mutation.attributeName ?? '')) {\n needsStateUpdate = true;\n break;\n }\n }\n if (needsStateUpdate) {\n this.#updateStateFromInput(false);\n }\n });\n\n this.#observer.observe(this.#inputElement, { attributes: true, attributeFilter: MUTATION_ATTRIBUTES });\n }\n\n #countDecimals(value: number): number {\n if (isNaN(value) || Math.floor(value) === value) return 0;\n const str = value.toString();\n const decimalPart = str.split('.')[1];\n return decimalPart ? decimalPart.length : 0;\n }\n\n #createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n }\n\n ngOnDestroy() {\n if (this.#observer) {\n this.#observer.disconnect();\n }\n if (this.#inputElement) {\n this.#inputElement.oninput = null;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-range-slider.mjs","sources":["../../../projects/ship-ui/ship-range-slider/ship-range-slider.ts","../../../projects/ship-ui/ship-range-slider/ship-ui-core-ship-range-slider.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, signal, ViewEncapsulation } from '@angular/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSize, ShipRangeSliderVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-range-slider',\n styleUrl: './ship-range-slider.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"label\">\n <ng-content select=\"label\"></ng-content>\n </div>\n\n <div class=\"input-wrap\">\n <div class=\"min-indicator\">{{ inputState().min }}{{ unit() }}</div>\n\n <div class=\"track-wrap\" (click)=\"trackEvent($event)\">\n <ng-content select=\"input[type=range]\"></ng-content>\n\n <div class=\"track\">\n <div class=\"track-filled\" [style.width.%]=\"trackFilledPercentage()\"></div>\n </div>\n\n <div class=\"thumb-wrap\" [style.left.%]=\"thumbPositionPercentage()\">\n <div class=\"thumb\">\n <div class=\"value-indicator\">{{ value() }}{{ unit() }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"max-indicator\">{{ inputState().max }}{{ unit() }}</div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.sh-range-slider]': 'true',\n '[class.has-input]': 'hasInput()',\n '[class]': 'hostClasses()',\n },\n})\nexport class ShipRangeSlider {\n hasInput = signal(false);\n #selfRef = inject(ElementRef<HTMLElement>);\n #observer: MutationObserver | null = null;\n #inputElement: HTMLInputElement | null = null;\n #initialDefaultValue = 0;\n\n unit = input<string>('');\n value = model<number>(this.#initialDefaultValue);\n\n inputState = signal({\n min: 0,\n max: 100,\n step: 1,\n });\n\n color = input<ShipColor | null>(null);\n variant = input<ShipRangeSliderVariant | null>(null);\n size = input<ShipSize | null>(null);\n sharp = input<boolean | undefined>(undefined);\n alwaysShow = input<boolean | undefined>(undefined);\n\n hostClasses = shipComponentClasses('rangeSlider', {\n color: this.color,\n variant: this.variant,\n size: this.size,\n sharp: this.sharp,\n alwaysShow: this.alwaysShow,\n });\n\n valuePercentage = computed(() => {\n const { min, max } = this.inputState();\n const currentValue = this.value() ?? min;\n if (isNaN(currentValue)) return 0;\n\n const range = max - min;\n if (range === 0) return 0;\n\n const percentage = ((currentValue - min) / range) * 100;\n return Math.max(0, Math.min(100, percentage));\n });\n\n trackFilledPercentage = computed(() => this.valuePercentage());\n thumbPositionPercentage = computed(() => this.valuePercentage());\n\n syncModelToInputEffect = effect(() => {\n const modelValue = this.value();\n if (this.#inputElement) {\n const currentInputValue = parseFloat(this.#inputElement.value);\n if (isNaN(currentInputValue) || String(currentInputValue) !== String(modelValue)) {\n this.#inputElement.value = String(modelValue);\n }\n }\n });\n\n\n\n ngAfterViewInit() {\n this.#inputElement = this.#selfRef.nativeElement.querySelector('input[type=\"range\"]');\n\n if (this.#inputElement) {\n this.hasInput.set(true);\n this.#createCustomInputEventListener(this.#inputElement);\n\n this.#inputElement.oninput = () => {\n this.setNewInputValue(this.#inputElement!.value);\n };\n\n this.#inputElement.addEventListener('inputValueChanged', (event: any) => {\n this.setNewInputValue(event.detail.value);\n });\n\n queueMicrotask(() => this.#updateStateFromInput(true));\n\n this.#setupMutationObserver();\n } else {\n console.error('ShipRangeSlider: No <input type=\"range\"> element found projected inside.');\n }\n }\n\n setNewInputValue(value: string) {\n const inputValue = parseFloat(value ?? '0');\n\n if (!isNaN(inputValue)) {\n const { min, max } = this.inputState();\n this.value.set(Math.max(min, Math.min(max, inputValue)));\n }\n }\n\n trackEvent(e: MouseEvent) {\n if (!this.#inputElement || this.#inputElement.readOnly || this.#inputElement.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n if (\n e.target === this.#inputElement ||\n (e.target as HTMLElement)?.closest('.thumb, .min-indicator, .max-indicator')\n ) {\n return;\n }\n\n const trackWrap = e.currentTarget as HTMLElement;\n const rect = trackWrap.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const width = rect.width;\n const { min, max, step } = this.inputState();\n const range = max - min;\n\n if (width > 0 && range !== 0 && step > 0) {\n let proportionalValue = (clickX / width) * range + min;\n const numSteps = (proportionalValue - min) / step;\n let nearestStepValue = min + Math.round(numSteps) * step;\n\n const decimals = this.#countDecimals(step);\n nearestStepValue = parseFloat(nearestStepValue.toFixed(decimals));\n\n const clampedValue = Math.max(min, Math.min(max, nearestStepValue));\n\n this.value.set(clampedValue);\n }\n }\n\n #updateStateFromInput(isInitialCall = false) {\n if (!this.#inputElement) return;\n\n const min = parseFloat(this.#inputElement.min ?? '0') ?? 0;\n const max = parseFloat(this.#inputElement.max ?? '100') ?? 100;\n const stepAttr = this.#inputElement.step;\n let step = 1;\n if (stepAttr && stepAttr.toLowerCase() !== 'any') {\n const parsedStep = parseFloat(stepAttr);\n if (!isNaN(parsedStep) && parsedStep > 0) {\n step = parsedStep;\n }\n }\n\n this.inputState.set({ min, max, step });\n\n const inputElementValue = parseFloat(this.#inputElement.value ?? String(min)) ?? min;\n\n if (isInitialCall && this.value() !== this.#initialDefaultValue) {\n const modelValue = this.value();\n const clampedModelValue = Math.max(min, Math.min(max, modelValue));\n\n if (inputElementValue !== clampedModelValue) {\n this.#inputElement.value = String(clampedModelValue);\n }\n if (modelValue !== clampedModelValue) {\n this.value.set(clampedModelValue);\n }\n } else {\n const clampedInputElementValue = Math.max(min, Math.min(max, inputElementValue));\n if (this.value() !== clampedInputElementValue) {\n this.value.set(clampedInputElementValue);\n }\n }\n }\n\n #setupMutationObserver() {\n if (!this.#inputElement || typeof MutationObserver === 'undefined') {\n return;\n }\n\n const MUTATION_ATTRIBUTES = ['min', 'max', 'step', 'value', 'readonly', 'disabled'];\n\n this.#observer = new MutationObserver((mutationList) => {\n let needsStateUpdate = false;\n for (const mutation of mutationList) {\n if (mutation.type === 'attributes' && MUTATION_ATTRIBUTES.includes(mutation.attributeName ?? '')) {\n needsStateUpdate = true;\n break;\n }\n }\n if (needsStateUpdate) {\n this.#updateStateFromInput(false);\n }\n });\n\n this.#observer.observe(this.#inputElement, { attributes: true, attributeFilter: MUTATION_ATTRIBUTES });\n }\n\n #countDecimals(value: number): number {\n if (isNaN(value) || Math.floor(value) === value) return 0;\n const str = value.toString();\n const decimalPart = str.split('.')[1];\n return decimalPart ? decimalPart.length : 0;\n }\n\n #createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n }\n\n ngOnDestroy() {\n if (this.#observer) {\n this.#observer.disconnect();\n }\n if (this.#inputElement) {\n this.#inputElement.oninput = null;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|