@ship-ui/core 0.22.12 → 0.22.15
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/README.md +46 -0
- package/assets/mcp/components.json +579 -2
- package/bin/src/scanner.zig +9 -18
- package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs +17 -2
- package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs +433 -0
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-accordion.mjs +1 -0
- package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-alert.mjs +3 -2
- package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-blueprint.mjs +14 -9
- package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-checkbox.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs +3 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-datepicker.mjs +51 -29
- package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-dialog.mjs +10 -5
- package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-divider.mjs +4 -2
- package/fesm2022/ship-ui-core-ship-divider.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-editor.mjs +2673 -0
- package/fesm2022/ship-ui-core-ship-editor.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-icon.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-icon.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-list.mjs +4 -2
- package/fesm2022/ship-ui-core-ship-list.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-menu.mjs +8 -5
- package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-popover.mjs +10 -5
- package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-progress-bar.mjs +5 -1
- package/fesm2022/ship-ui-core-ship-progress-bar.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-radio.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-select.mjs +9 -9
- 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-spinner.mjs +3 -1
- package/fesm2022/ship-ui-core-ship-spinner.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-spotlight.mjs +77 -24
- package/fesm2022/ship-ui-core-ship-spotlight.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-table.mjs +139 -139
- package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-theme-toggle.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-theme-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle-card.mjs +24 -3
- package/fesm2022/ship-ui-core-ship-toggle-card.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-tree.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-tree.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ship-ui-core.mjs +36 -23
- package/fesm2022/ship-ui-core.mjs.map +1 -1
- package/package.json +33 -2
- package/types/ship-ui-core-sh-form-field-experimental.d.ts +2 -0
- package/types/ship-ui-core-ship-a11y-keybindings.d.ts +102 -0
- package/types/ship-ui-core-ship-blueprint.d.ts +1 -1
- package/types/ship-ui-core-ship-checkbox.d.ts +2 -1
- package/types/ship-ui-core-ship-editor.d.ts +168 -0
- package/types/ship-ui-core-ship-radio.d.ts +2 -1
- package/types/ship-ui-core-ship-spotlight.d.ts +1 -1
- package/types/ship-ui-core-ship-table.d.ts +2 -0
- package/types/ship-ui-core-ship-toggle-card.d.ts +1 -0
- package/types/ship-ui-core-ship-toggle.d.ts +2 -1
- package/types/ship-ui-core.d.ts +3 -0
- package/bin/ship-fg-scanner +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core.mjs","sources":["../../../projects/ship-ui/src/lib/directives/ship-file-drag-drop.directive.ts","../../../projects/ship-ui/src/lib/directives/ship-input-mask.ts","../../../projects/ship-ui/src/lib/directives/ship-prevent-wheel.directive.ts","../../../projects/ship-ui/src/lib/utilities/random-id.ts","../../../projects/ship-ui/src/lib/directives/ship-tooltip.directive.ts","../../../projects/ship-ui/src/lib/utilities/class-mutation-signal.ts","../../../projects/ship-ui/src/lib/utilities/color-conversions.ts","../../../projects/ship-ui/src/lib/utilities/content-projection-signal.ts","../../../projects/ship-ui/src/lib/utilities/observe-elements.ts","../../../projects/ship-ui/src/lib/utilities/create-form-input-signal.ts","../../../projects/ship-ui/src/lib/utilities/create-input-signal.ts","../../../projects/ship-ui/src/lib/utilities/ship-config.ts","../../../projects/ship-ui/src/lib/utilities/ship-component.ts","../../../projects/ship-ui/src/lib/utilities/ship-selection-group.ts","../../../projects/ship-ui/src/lib/utilities/ship-types.ts","../../../projects/ship-ui/src/public-api.ts","../../../projects/ship-ui/src/ship-ui-core.ts"],"sourcesContent":["import { Directive, HostListener, output, signal } from '@angular/core';\n\n@Directive({\n selector: '[shDragDrop]',\n standalone: true,\n host: {\n '[class.filesover]': 'filesOver()',\n },\n})\nexport class ShipFileDragDrop {\n filesOver = signal(false);\n filesDropped = output<FileList>();\n\n @HostListener('dragover', ['$event']) onDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n this.filesOver.set(true);\n }\n\n @HostListener('dragleave', ['$event']) onDragLeave(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n this.filesOver.set(false);\n }\n\n @HostListener('drop', ['$event']) ondrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n this.filesOver.set(false);\n const files = e.dataTransfer?.files;\n\n if (files && files.length > 0) {\n this.filesDropped.emit(files);\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject, input, Renderer2 } from '@angular/core';\n\ntype MaskingFunction = (cleanValue: string) => string | null;\n\n@Directive({\n selector: '[shInputMask]',\n standalone: true,\n})\nexport class ShipInputMask {\n #selfRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n #renderer: Renderer2 = inject(Renderer2);\n\n shInputMask = input<string | MaskingFunction>('(999) 999-9999');\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const inputElement = this.#selfRef.nativeElement;\n const oldRawValue = inputElement.value;\n const newRawValue = (event.target as HTMLInputElement).value;\n const oldCursorPos = inputElement.selectionStart ?? 0;\n\n const newCleanValue = this.#cleanValue(newRawValue);\n const maskedValue = this.#applyMask(newCleanValue);\n\n this.#renderer.setProperty(inputElement, 'value', maskedValue);\n\n const newCursorPos = this.#getNewCursorPosition(maskedValue, oldRawValue, oldCursorPos);\n inputElement.setSelectionRange(newCursorPos, newCursorPos);\n }\n\n #getNewCursorPosition(maskedValue: string, oldRawValue: string, oldCursorPos: number): number {\n let digitsBeforeCursor = 0;\n\n for (let i = 0; i < oldCursorPos; i++) {\n if (oldRawValue[i] && oldRawValue[i].match(/\\d/)) {\n digitsBeforeCursor++;\n }\n }\n\n let newCursorPos = 0;\n let digitsFound = 0;\n\n while (newCursorPos < maskedValue.length && digitsFound < digitsBeforeCursor) {\n if (maskedValue[newCursorPos].match(/\\d/)) {\n digitsFound++;\n }\n\n newCursorPos++;\n }\n\n return newCursorPos;\n }\n\n #cleanValue(value: string | null): string {\n if (!value) return '';\n return value.replace(/\\D/g, '');\n }\n\n #applyMask(cleanValue: string): string {\n const inputMask = this.shInputMask();\n\n if (typeof inputMask === 'function') {\n return inputMask(cleanValue) ?? '';\n }\n\n const pattern = inputMask;\n let masked = '';\n let digitIndex = 0;\n\n for (let i = 0; i < pattern.length && digitIndex < cleanValue.length; i++) {\n const maskChar = pattern[i];\n const digitChar = cleanValue[digitIndex];\n\n if (maskChar === '9') {\n masked += digitChar;\n digitIndex++;\n } else {\n masked += maskChar;\n }\n }\n return masked;\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[shPreventWheel]',\n standalone: true,\n})\nexport class ShipPreventWheel {\n @HostListener('wheel', ['$event']) wheel(event: WheelEvent) {\n event.preventDefault();\n }\n}\n","export function generateUniqueId() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n computed,\n Directive,\n DOCUMENT,\n effect,\n ElementRef,\n EnvironmentInjector,\n HostListener,\n inject,\n input,\n OnDestroy,\n Renderer2,\n signal,\n TemplateRef,\n untracked,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\n\ntype Timeout = ReturnType<typeof setTimeout>;\n\n@Component({\n selector: 'ship-tooltip-wrapper',\n standalone: true,\n styleUrl: './ship-tooltip.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet],\n template: `\n <div class=\"tooltip-content\">\n @if (isTemplate()) {\n <ng-container *ngTemplateOutlet=\"$any(content()); context: { $implicit: tooltipContext }\" />\n } @else {\n {{ content() }}\n }\n </div>\n `,\n\n host: {\n role: 'tooltip',\n '[attr.popover]': '\"manual\"',\n '[style.position-anchor]': 'positionAnchorName()',\n '[class.below]': 'isBelow()',\n },\n})\nexport class ShipTooltipWrapper {\n positionAnchorName = input.required<string>();\n anchorEl = input.required<ElementRef<HTMLElement>>();\n isOpen = input<boolean>(false);\n content = input<string | TemplateRef<any> | null | undefined>();\n close = input<() => void>(() => {});\n\n protected tooltipContext = {\n close: () => this.close()(),\n };\n\n isTemplate = computed(() => this.content() instanceof TemplateRef);\n\n #document = inject(DOCUMENT);\n #selfRef = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #positionAbort: AbortController | null = null;\n\n readonly SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n isBelow = signal<boolean>(false);\n\n openEffect = effect(() => {\n if (this.isOpen()) {\n queueMicrotask(() => {\n const tooltipEl = this.#selfRef.nativeElement;\n if (!tooltipEl || !tooltipEl.isConnected) return;\n\n if (this.#positionAbort) {\n this.#positionAbort.abort();\n }\n this.#positionAbort = new AbortController();\n\n tooltipEl.showPopover();\n\n if (!this.SUPPORTS_ANCHOR) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(tooltipEl);\n\n scrollableParent.addEventListener('scroll', () => this.calculateTooltipPosition(), {\n signal: this.#positionAbort?.signal,\n passive: true,\n });\n window?.addEventListener('resize', () => this.calculateTooltipPosition(), {\n signal: this.#positionAbort?.signal,\n passive: true,\n });\n\n this.calculateTooltipPosition();\n });\n }\n });\n } else {\n const tooltipEl = this.#selfRef.nativeElement;\n if (tooltipEl) {\n try {\n if (tooltipEl.matches(':popover-open')) {\n tooltipEl.hidePopover();\n }\n } catch (e) {\n // Ignore if already hidden or other errors\n }\n }\n this.#positionAbort?.abort();\n this.#positionAbort = null;\n }\n });\n\n ngOnDestroy(): void {\n this.#positionAbort?.abort();\n this.#positionAbort = null;\n }\n\n #findScrollableParent(element: HTMLElement) {\n const SCROLLABLE_STYLES = ['scroll', 'auto'];\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 private calculateTooltipPosition = (): void => {\n if (!this.anchorEl()) return;\n\n const hostRect = this.anchorEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.#selfRef.nativeElement;\n const tooltipRect = tooltipEl.getBoundingClientRect();\n\n if (tooltipRect.width === 0 && tooltipRect.height === 0) return;\n\n const BASE_SPACE = 8;\n\n // Position generators\n const topCenter = (t: DOMRect, m: DOMRect) => ({\n left: t.left + t.width / 2 - m.width / 2,\n top: t.top - m.height - BASE_SPACE,\n });\n const bottomCenter = (t: DOMRect, m: DOMRect) => ({\n left: t.left + t.width / 2 - m.width / 2,\n top: t.bottom + BASE_SPACE,\n });\n\n const topSpanLeft = (t: DOMRect, m: DOMRect) => ({ left: t.right - m.width, top: t.top - m.height - BASE_SPACE });\n const topSpanRight = (t: DOMRect, m: DOMRect) => ({ left: t.left, top: t.top - m.height - BASE_SPACE });\n const bottomSpanLeft = (t: DOMRect, m: DOMRect) => ({ left: t.right - m.width, top: t.bottom + BASE_SPACE });\n const bottomSpanRight = (t: DOMRect, m: DOMRect) => ({ left: t.left, top: t.bottom + BASE_SPACE });\n\n const tryOrder = [topCenter, topSpanLeft, topSpanRight, bottomCenter, bottomSpanLeft, bottomSpanRight];\n\n for (const positionFn of tryOrder) {\n const pos = positionFn(hostRect, tooltipRect);\n if (this.#fitsInViewport(pos, tooltipRect)) {\n this.#applyPosition(pos, tooltipEl);\n this.isBelow.set(pos.top > hostRect.top);\n return;\n }\n }\n\n const fallback = this.#clampToViewport(topCenter(hostRect, tooltipRect), tooltipRect);\n this.#applyPosition(fallback, tooltipEl);\n this.isBelow.set(fallback.top > hostRect.top);\n };\n\n #applyPosition(pos: { left: number; top: number }, element: HTMLElement) {\n this.#renderer.setStyle(element, 'left', `${pos.left}px`);\n this.#renderer.setStyle(element, 'top', `${pos.top}px`);\n this.#renderer.setStyle(element, 'position', 'fixed');\n this.#renderer.setStyle(element, 'margin', '0');\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 #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\nlet openRef: {\n wrapperComponentRef: ComponentRef<ShipTooltipWrapper>;\n component: ShipTooltip;\n} | null = null;\n\n@Directive({\n selector: '[shTooltip]',\n standalone: true,\n host: {\n class: 'tooltip',\n '[style.anchor-name]': 'anchorName',\n '[class.active]': 'isOpen()',\n },\n})\nexport class ShipTooltip implements OnDestroy {\n shTooltip = input.required<string | TemplateRef<any> | null | undefined>();\n\n #contentReplacedEffect = effect(() => {\n const content = this.shTooltip();\n\n untracked(() => {\n if (this.isOpen() && openRef?.component === this && openRef?.wrapperComponentRef) {\n openRef.wrapperComponentRef.setInput('content', content);\n openRef.wrapperComponentRef.changeDetectorRef.detectChanges();\n }\n });\n });\n\n #elementRef = inject(ElementRef<HTMLElement>);\n #viewContainerRef = inject(ViewContainerRef);\n #environmentInjector = inject(EnvironmentInjector);\n\n private debounceTimer: Timeout | null = null;\n private readonly DEBOUNCE_DELAY = 50;\n\n readonly anchorName = `--${generateUniqueId()}`;\n isOpen = signal<boolean>(false);\n\n @HostListener('mouseenter', ['$event'])\n onMouseEnter(event: MouseEvent) {\n event.stopPropagation();\n\n if (openRef?.component.anchorName !== this.anchorName) {\n this.cleanupTooltip();\n } else {\n this.cancelCleanupTimer();\n }\n\n this.showTooltip();\n // queueMicrotask(() => );\n }\n\n @HostListener('mouseleave', ['$event'])\n onMouseLeave(event: MouseEvent) {\n event.stopPropagation();\n this.startCleanupTimer();\n }\n\n ngOnDestroy() {\n this.cancelCleanupTimer();\n this.cleanupTooltip();\n }\n\n private startCleanupTimer() {\n this.cancelCleanupTimer();\n this.debounceTimer = setTimeout(() => {\n this.cleanupTooltip();\n }, this.DEBOUNCE_DELAY);\n }\n\n private cancelCleanupTimer() {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n if (this.destroyTimeout) {\n clearTimeout(this.destroyTimeout);\n this.destroyTimeout = null;\n }\n }\n\n private showTooltip() {\n if (openRef?.wrapperComponentRef || !this.shTooltip()) {\n if (openRef?.component === this && openRef?.wrapperComponentRef) {\n openRef.wrapperComponentRef.setInput('content', this.shTooltip());\n }\n return;\n }\n\n openRef = {\n wrapperComponentRef: this.#viewContainerRef.createComponent(ShipTooltipWrapper, {\n environmentInjector: this.#environmentInjector,\n }),\n component: this,\n };\n\n openRef.wrapperComponentRef.setInput('positionAnchorName', this.anchorName);\n openRef.wrapperComponentRef.setInput('anchorEl', this.#elementRef);\n openRef.wrapperComponentRef.setInput('isOpen', this.isOpen);\n openRef.wrapperComponentRef.setInput('content', this.shTooltip());\n openRef.wrapperComponentRef.setInput('close', () => this.cleanupTooltip());\n openRef.wrapperComponentRef.changeDetectorRef.detectChanges();\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseenter', (event: MouseEvent) => {\n event.stopPropagation();\n this.cancelCleanupTimer();\n });\n\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseleave', (event: MouseEvent) => {\n event.stopPropagation();\n this.startCleanupTimer();\n });\n\n setTimeout(() => {\n this.isOpen.set(true);\n });\n }\n\n destroyTimeout: Timeout | null = null;\n\n private cleanupTooltip(): void {\n if (openRef?.wrapperComponentRef) {\n openRef.component.cancelCleanupTimer();\n openRef.component.isOpen.set(false);\n openRef!.wrapperComponentRef.location.nativeElement.hidePopover();\n\n this.destroyTimeout = setTimeout(() => {\n queueMicrotask(() => {\n openRef?.wrapperComponentRef.destroy();\n openRef = null;\n });\n }, this.DEBOUNCE_DELAY);\n }\n }\n}\n","import { DestroyRef, ElementRef, inject, signal, Signal, WritableSignal } from '@angular/core';\n\nexport function classMutationSignal(_element: HTMLElement | null = null): Signal<string> {\n const element = _element ?? (inject(ElementRef).nativeElement as HTMLElement);\n\n if (!element) return signal('');\n\n const classListSignal: WritableSignal<string> = signal(element.className);\n\n if (typeof MutationObserver === 'undefined') return classListSignal.asReadonly();\n\n const destroyRef = inject(DestroyRef);\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n const target = mutation.target as HTMLElement;\n classListSignal.set(target.className);\n }\n }\n });\n\n observer.observe(element, { attributes: true, attributeFilter: ['class'] });\n destroyRef.onDestroy(() => observer.disconnect());\n\n return classListSignal.asReadonly();\n}\n","export function hslToRgbExact(h: number, s: number, l: number): [number, number, number] {\n s /= 100;\n l /= 100;\n const k = (n: number) => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = (n: number) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return [Math.round(255 * f(0)), Math.round(255 * f(8)), Math.round(255 * f(4))];\n}\n\nexport function hsvToRgbExact(h: number, s: number, v: number): [number, number, number] {\n const sNorm = s / 100;\n const vNorm = v / 100;\n const c = vNorm * sNorm;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = vNorm - c;\n let r = 0,\n g = 0,\n b = 0;\n if (h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n return [Math.round((r + m) * 255), Math.round((g + m) * 255), Math.round((b + m) * 255)];\n}\n\nexport function rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n if (max !== min) {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h * 360, s: s * 100, v: v * 100 };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n}\n\nexport function rgbaToHex8(r: number, g: number, b: number, a: number): string {\n const alphaHex = Math.round(a * 255)\n .toString(16)\n .padStart(2, '0');\n return rgbToHex(r, g, b) + alphaHex;\n}\n\nexport function rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number; string: string } {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h = 0,\n s = 0,\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n const hDeg = Math.floor(h * 360);\n const sPct = Math.round(s * 100);\n const lPct = Math.round(l * 100);\n\n return {\n h: hDeg,\n s: sPct,\n l: lPct,\n string: `hsl(${hDeg}, ${sPct}%, ${lPct}%)`,\n };\n}\n\nexport function rgbToOklch(r: number, g: number, b: number): { l: number; c: number; h: number } {\n // Convert sRGB to Linear sRGB\n const toLinear = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n const lr = toLinear(r);\n const lg = toLinear(g);\n const lb = toLinear(b);\n\n // Convert Linear sRGB to LMS (Oklab intermediate)\n const l = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb;\n const m = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb;\n const s = 0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb;\n\n // Cube root of LMS\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n // Convert LMS to OKLAB\n const oklabL = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\n const oklabA = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\n const oklabB = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\n\n // Convert OKLAB to OKLCH\n const chroma = Math.sqrt(oklabA * oklabA + oklabB * oklabB);\n let hue = Math.atan2(oklabB, oklabA) * (180 / Math.PI);\n if (hue < 0) hue += 360;\n\n return { l: oklabL, c: chroma, h: hue };\n}\n\nexport function hslToOklch(h: number, s: number, l: number): { l: number; c: number; h: number } {\n const [r, g, b] = hslToRgbExact(h, s, l);\n return rgbToOklch(r, g, b);\n}\n","import { DestroyRef, ElementRef, inject, signal, Signal, WritableSignal } from '@angular/core';\n\nexport function contentProjectionSignal<T = HTMLElement>(\n querySelector: string,\n options: MutationObserverInit = { childList: true }\n): Signal<T[]> {\n const hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n const destroyRef = inject(DestroyRef);\n\n const projectedElementsSignal: WritableSignal<T[]> = signal([]);\n const updateElements = () => {\n projectedElementsSignal.set(Array.from(hostElement.querySelectorAll(querySelector)) as T[]);\n };\n\n updateElements();\n\n if (typeof MutationObserver === 'undefined') return projectedElementsSignal.asReadonly();\n\n const observer = new MutationObserver((mutations) => {\n const hasChildListChanges = mutations.some((mutation) => mutation.type === 'childList');\n if (hasChildListChanges) {\n updateElements();\n }\n });\n\n observer.observe(hostElement, options);\n destroyRef.onDestroy(() => observer.disconnect());\n\n return projectedElementsSignal.asReadonly();\n}\n","import { isPlatformServer } from '@angular/common';\nimport {\n DestroyRef,\n effect,\n EffectRef,\n ElementRef,\n inject,\n Injector,\n isSignal,\n PLATFORM_ID,\n Signal,\n signal,\n} from '@angular/core';\n\nexport function observeFirstChild<T extends HTMLElement>(\n parentEl: ElementRef<HTMLElement>,\n elementTags: string[]\n): Signal<ElementRef<T> | null> {\n const elementSignal = signal<ElementRef<T> | null>(null);\n const _upperCaseElementTags = elementTags.map((tag) => tag.toUpperCase());\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n\n if (isPlatformServer(injector.get(PLATFORM_ID)) || typeof MutationObserver === 'undefined')\n return elementSignal.asReadonly();\n\n const initialElement = _upperCaseElementTags.find((tag) => parentEl.nativeElement.querySelector(tag));\n\n if (initialElement) {\n elementSignal.set(new ElementRef(parentEl.nativeElement.querySelector(elementTags[0]) as T));\n return elementSignal.asReadonly();\n }\n\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.addedNodes) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE && _upperCaseElementTags.includes(node.nodeName)) {\n elementSignal.set(new ElementRef(node as T));\n observer.disconnect();\n return;\n }\n }\n }\n }\n });\n\n observer.observe(parentEl.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return elementSignal.asReadonly();\n}\n\nexport function observeChildren<T extends HTMLElement>(\n parentEl: ElementRef<HTMLElement> | Signal<ElementRef<HTMLElement> | null | undefined>,\n elementTags: string[] | Signal<string[]>\n) {\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n const elementsSignal = signal<T[]>([]);\n\n let effectOnSignal: EffectRef | null = null;\n let observer: MutationObserver | null = null;\n\n const setupObserver = (el: ElementRef<HTMLElement>, elementTags: string[]) => {\n if (observer) {\n observer.disconnect();\n }\n\n const foundElements = Array.from(el.nativeElement.querySelectorAll(elementTags.join(',')));\n\n elementsSignal.set(foundElements as T[]);\n\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((_) => {\n queueMicrotask(() => {\n const foundElements = Array.from(el.nativeElement.querySelectorAll(elementTags.join(',')));\n\n elementsSignal.set(foundElements as T[]);\n });\n });\n\n observer.observe(el.nativeElement, {\n childList: true,\n subtree: true,\n });\n }\n\n destroyRef.onDestroy(() => destroySelf());\n };\n\n effectOnSignal = effect(\n () => {\n const el =\n typeof parentEl === 'function' && isSignal(parentEl) ? parentEl() : (parentEl as ElementRef<HTMLElement>);\n const tags = typeof elementTags === 'function' ? elementTags() : elementTags;\n\n if (el && tags?.length > 0) {\n setupObserver(el, tags);\n } else {\n elementsSignal.set([]);\n\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n }\n },\n { injector }\n );\n\n function destroySelf() {\n if (effectOnSignal) {\n effectOnSignal.destroy();\n }\n\n if (observer) {\n observer.disconnect();\n }\n }\n\n return {\n signal: elementsSignal.asReadonly(),\n destroy: destroySelf,\n };\n}\n","import {\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injector,\n signal,\n type Signal,\n type WritableSignal,\n} from '@angular/core';\nimport { observeFirstChild } from './observe-elements';\n\nexport function createFormInputSignal<T extends HTMLInputElement | HTMLTextAreaElement>(\n formEl?: Signal<ElementRef<T> | undefined>,\n elementTags: string[] = ['input', 'textarea']\n): WritableSignal<string | undefined> {\n const elementRefSignal = formEl ? formEl : observeFirstChild<T>(inject(ElementRef), elementTags);\n const valueSignal: WritableSignal<string | undefined> = signal(undefined);\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n const firstInputEl = signal<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n effect(\n (onCleanup) => {\n const elRef = elementRefSignal();\n\n if (!elRef) return;\n\n const inputEl = elRef.nativeElement;\n\n if (!inputEl) return;\n\n createCustomInputEventListener(inputEl);\n\n firstInputEl.set(inputEl);\n valueSignal.set(inputEl.value ?? '');\n\n onCleanup(() => {\n firstInputEl.set(null);\n });\n },\n { injector }\n );\n\n let removeListener: (() => void) | null = null;\n\n effect(\n () => {\n const inputEl = firstInputEl();\n\n if (!inputEl) return;\n\n if (removeListener) {\n removeListener();\n removeListener = null;\n }\n\n const inputChangedListener = (event: Event) => {\n valueSignal.set((event as CustomEvent<{ value: string }>).detail.value);\n };\n\n const inputListener = (event: Event) => {\n valueSignal.set((event.target as HTMLInputElement | HTMLTextAreaElement).value);\n };\n\n inputEl.addEventListener('input', inputListener as EventListener);\n inputEl.addEventListener('inputValueChanged', inputChangedListener as EventListener);\n\n valueSignal.set(inputEl.value);\n\n removeListener = () => {\n inputEl.removeEventListener('input', inputListener as EventListener);\n inputEl.removeEventListener('inputValueChanged', inputChangedListener as EventListener);\n };\n\n destroyRef.onDestroy(() => {\n if (removeListener) removeListener();\n });\n },\n { injector }\n );\n\n effect(\n () => {\n const inputEl = firstInputEl();\n\n if (!inputEl) return;\n\n const inputValue = valueSignal();\n\n if (!inputValue) return;\n\n inputEl.value = inputValue;\n inputEl.dispatchEvent(new Event('input'));\n },\n { injector }\n );\n\n return valueSignal;\n}\n\nfunction 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 return input;\n}\n","import {\n DestroyRef,\n ElementRef,\n Injector,\n Signal,\n WritableSignal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\n\ninterface InputSignalOptions<T> {\n debounce?: number;\n initialValue?: T | null | undefined;\n transform?: (value: string) => T | null | undefined;\n compare?: (prev: T | null | undefined, curr: T | null | undefined) => boolean;\n forceType?: 'number' | 'boolean' | 'string';\n injector?: Injector;\n returnPreviousValue?: boolean;\n}\n\nexport function createInputSignal<T>(\n input: Signal<ElementRef<HTMLInputElement | HTMLTextAreaElement> | undefined>,\n options?: InputSignalOptions<T>\n): WritableSignal<T | null | undefined> {\n const injector = options?.injector || (assertInInjectionContext(createInputSignal), inject(Injector));\n const {\n debounce = 0,\n initialValue = undefined,\n transform = (value: string) => value as unknown as T,\n compare = (a: T | null | undefined, b: T | null | undefined) => a === b,\n forceType = undefined,\n returnPreviousValue = true,\n } = options || {};\n\n const valueSignal = signal<T | null | undefined>(initialValue);\n const destroyRef = injector.get(DestroyRef);\n const inputElementRef = computed(() => {\n const inputElement = input()?.nativeElement;\n\n if (!(inputElement instanceof HTMLInputElement || inputElement instanceof HTMLTextAreaElement)) {\n return;\n }\n\n return createCustomInputEventListener(inputElement);\n });\n\n let isUpdating = false;\n let previousValue: string | undefined;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n effect(\n () => {\n const inputElement = inputElementRef();\n\n if (!inputElement) {\n return valueSignal.set(returnPreviousValue && previousValue ? transform(previousValue) : undefined);\n }\n\n if (initialValue !== undefined && inputElement.value === '') {\n valueSignal.set(initialValue);\n } else if (inputElement.value !== '') {\n syncValueFromInput();\n }\n\n const inputHandler = (e: any) => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n syncValueFromInput();\n }, debounce);\n };\n\n inputElement.addEventListener('input', inputHandler);\n inputElement.addEventListener('inputValueChanged', inputHandler);\n\n destroyRef.onDestroy(() => {\n inputElement!.removeEventListener('input', inputHandler);\n inputElement!.removeEventListener('inputValueChanged', inputHandler);\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n });\n },\n { injector }\n );\n\n effect(\n () => {\n const inputElement = inputElementRef();\n\n if (!inputElement) return;\n\n const currentValue = valueSignal() ?? '';\n\n let domValue = currentValue === null || currentValue === undefined ? '' : String(currentValue);\n\n if (inputElement.value !== domValue) {\n previousValue = domValue;\n inputElement.value = domValue;\n inputElement.dispatchEvent(new Event('input'));\n }\n },\n { injector }\n );\n\n return valueSignal;\n\n function syncValueFromInput() {\n if (isUpdating) return;\n\n isUpdating = true;\n try {\n const inputElement = inputElementRef();\n if (!inputElement) return;\n\n const inputValue = inputElement.value;\n const transformedValue = forceType ? forceTransform(inputValue, forceType) : transform(inputValue);\n previousValue = inputValue;\n\n if (!compare(valueSignal(), transformedValue)) {\n valueSignal.set(transformedValue);\n }\n } finally {\n isUpdating = false;\n }\n }\n\n function createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value'); // Use Object.getPrototypeOf\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value'); // Use Object.getPrototypeOf\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 return input;\n }\n\n function forceTransform(value: string, type: 'number' | 'boolean' | 'string'): T | null | undefined {\n switch (type) {\n case 'string':\n return value.toString() as unknown as T;\n case 'number':\n const num = Number(value);\n return isNaN(num) ? undefined : (num as unknown as T);\n case 'boolean':\n return (value.toLowerCase() === 'true'\n ? true\n : value.toLowerCase() === 'false'\n ? false\n : undefined) as unknown as T;\n default:\n return value as unknown as T;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ShipColor, ShipSize, ShipVariant } from './ship-types';\n\nexport const defaultThemeColors: Record<string, string> = {\n primary: 'hsl(217, 91%, 60%)',\n accent: 'hsl(258, 90%, 66%)',\n warn: 'hsl(37, 92%, 50%)',\n error: 'hsl(0, 84%, 60%)',\n success: 'hsl(159, 84%, 39%)',\n base: 'hsl(0, 0%, 46%)'\n};\n\nexport const SHIP_CONFIG = new InjectionToken<ShipConfig>('Ship UI Config');\n\nexport interface ShipComponentConfig {\n variant?: ShipVariant | string;\n size?: ShipSize | string;\n color?: ShipColor | string;\n}\n\nexport interface ShipChipConfig extends ShipComponentConfig {\n sharp?: boolean;\n dynamic?: boolean;\n}\n\nexport interface ShipRangeSliderConfig extends ShipComponentConfig {\n sharp?: boolean;\n alwaysShow?: boolean;\n}\n\nexport interface ShipIconConfig extends ShipComponentConfig {\n disableUnfocus?: boolean;\n}\n\nexport interface ShipConfigColors {\n primary?: string;\n accent?: string;\n warn?: string;\n error?: string;\n success?: string;\n base?: string;\n}\n\nexport interface ShipConfigDistributions {\n primary?: number;\n accent?: number;\n warn?: number;\n error?: number;\n success?: number;\n base?: number;\n}\n\nexport interface ShipConfig {\n fontSize?: number;\n colors?: ShipConfigColors;\n distribution?: ShipConfigDistributions;\n borderRadius?: number;\n borderWidth?: number;\n button?: ShipComponentConfig;\n chip?: ShipChipConfig;\n alert?: ShipComponentConfig;\n progressBar?: ShipComponentConfig;\n spinner?: ShipComponentConfig;\n card?: ShipComponentConfig;\n table?: ShipComponentConfig;\n buttonGroup?: ShipComponentConfig;\n checkbox?: ShipComponentConfig;\n radio?: ShipComponentConfig;\n toggle?: ShipComponentConfig;\n formField?: ShipComponentConfig;\n icon?: ShipIconConfig;\n stepper?: ShipComponentConfig;\n select?: ShipComponentConfig;\n accordion?: ShipComponentConfig;\n tabs?: ShipComponentConfig;\n 'event-card'?: ShipComponentConfig;\n datepicker?: ShipComponentConfig;\n rangeSlider?: ShipRangeSliderConfig;\n\n // Existing properties for backward compatibility\n alertVariant?: '' | 'simple' | 'outlined' | 'flat' | 'raised';\n cardType?: '' | 'type-b' | 'type-c';\n dialogType?: 'type-b';\n tableType?: 'type-b';\n sidenavType?: 'overlay' | 'simple';\n}\n","import { computed, inject, Signal } from '@angular/core';\nimport { SHIP_CONFIG } from './ship-config';\n\nexport function shipComponentClasses(\n componentName: string,\n inputs: {\n color?: Signal<any>;\n variant?: Signal<any>;\n size?: Signal<any>;\n sharp?: Signal<any>;\n dynamic?: Signal<any>;\n readonly?: Signal<any>;\n alwaysShow?: Signal<any>;\n }\n) {\n const config = inject(SHIP_CONFIG, { optional: true });\n\n return computed(() => {\n const componentConfig = (config as any)?.[componentName];\n\n // Resolve variant (Input > Component Config > Global Legacy Mappings > empty)\n let variant = inputs.variant?.();\n if (!variant) {\n variant = componentConfig?.variant;\n }\n\n // Legacy mapping for alert\n if (!variant && componentName === 'alert' && config?.alertVariant) {\n variant = config.alertVariant;\n }\n\n // Legacy mapping for card\n if (!variant && componentName === 'card' && config?.cardType) {\n variant = config.cardType;\n }\n\n // Legacy mapping for table\n if (!variant && componentName === 'table' && config?.tableType) {\n variant = config.tableType;\n }\n\n // Resolve color (Input > Component Config > empty)\n const color = inputs.color?.() || componentConfig?.color;\n\n if (!variant) {\n variant = 'base';\n }\n\n // Resolve size (Input > Component Config > empty)\n const size = inputs.size?.() || componentConfig?.size;\n\n // Resolve sharp (Input > Component Config > false)\n const sharp = (inputs.sharp?.() ?? componentConfig?.sharp) || false;\n\n // Resolve dynamic (Input > Component Config > false)\n const dynamic = (inputs.dynamic?.() ?? componentConfig?.dynamic) || false;\n\n // Resolve readonly (Input > Component Config > false)\n const readonly = (inputs.readonly?.() ?? componentConfig?.readonly) || false;\n\n // Resolve alwaysShow (Input > Component Config > false)\n const alwaysShow = (inputs.alwaysShow?.() ?? componentConfig?.alwaysShow) || false;\n\n const classList: string[] = [];\n\n if (color) classList.push(color);\n if (variant) {\n // Handle type-a, type-b etc. If it doesn't already have the prefix but it's meant to be one of those\n if (['a', 'b', 'c', 'd'].includes(variant)) {\n classList.push(`type-${variant}`);\n } else {\n classList.push(variant);\n }\n }\n if (size) classList.push(size);\n if (sharp) classList.push('sharp');\n if (dynamic) classList.push('dynamic');\n if (readonly) classList.push('readonly');\n if (alwaysShow) classList.push('always-show');\n\n return classList.join(' ');\n });\n}\n","import { Directive, ElementRef, HostListener, effect, inject, model, input, booleanAttribute } from '@angular/core';\nimport { contentProjectionSignal } from './content-projection-signal';\n\n@Directive()\nexport abstract class ShipSelectionGroup<T = any> {\n protected readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n protected items: import('@angular/core').Signal<HTMLElement[]>;\n\n readonly value = model<T | null>(null);\n readonly closable = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n readonly manualActivation = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n\n constructor(\n protected readonly itemSelector: string,\n protected readonly activeClass: string,\n protected readonly options?: { hostRole?: string; itemRole?: string }\n ) {\n if (this.options?.hostRole) {\n this.hostElement.setAttribute('role', this.options.hostRole);\n }\n\n this.items = contentProjectionSignal<HTMLElement>(this.itemSelector, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n effect(() => {\n const selectedValue = this.value();\n const activeClass = this.activeClass;\n const items = this.items();\n \n let hasSelection = false;\n items.forEach((item) => {\n const itemValue = item.getAttribute('value');\n if (itemValue === null && !item.hasAttribute('value')) return;\n if (itemValue === String(selectedValue) || (itemValue === '' && (selectedValue === null || selectedValue === ''))) {\n hasSelection = true;\n }\n });\n\n items.forEach((item) => {\n if (this.options?.itemRole && !item.hasAttribute('role')) {\n item.setAttribute('role', this.options.itemRole);\n }\n\n const itemValue = item.getAttribute('value');\n // If the item doesn't have a value attribute, it's not participate in the selection\n if (itemValue === null && !item.hasAttribute('value')) return;\n \n // Exact match or handle empty string matching properly\n if (itemValue === String(selectedValue) || (itemValue === '' && (selectedValue === null || selectedValue === ''))) {\n item.classList.add(activeClass);\n item.setAttribute('aria-selected', 'true');\n item.setAttribute('tabindex', '0');\n } else {\n item.classList.remove(activeClass);\n item.setAttribute('aria-selected', 'false');\n if (hasSelection) {\n item.setAttribute('tabindex', '-1');\n } else {\n item.removeAttribute('tabindex');\n }\n }\n });\n });\n }\n\n @HostListener('click', ['$event.target'])\n protected onClick(target: EventTarget | null) {\n const targetEl = target as HTMLElement;\n if (!targetEl || !targetEl.closest) return;\n const item = targetEl.closest(this.itemSelector) as HTMLElement;\n if (item && this.hostElement.contains(item)) {\n if (item.hasAttribute('value')) {\n const value = item.getAttribute('value') as unknown as T;\n if (this.closable() && String(this.value()) === String(value)) {\n this.value.set(null);\n } else {\n this.value.set(value);\n }\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent) {\n const targetEl = event.target as HTMLElement;\n\n if (event.key === 'Enter' || event.key === ' ') {\n const item = targetEl?.closest?.(this.itemSelector) as HTMLElement;\n if (item && this.hostElement.contains(item) && item.hasAttribute('value')) {\n // Only prevent default for space to avoid scrolling, let enter naturally click if it's a link/button\n if (event.key === ' ') event.preventDefault();\n \n const value = item.getAttribute('value') as unknown as T;\n if (this.closable() && String(this.value()) === String(value)) {\n this.value.set(null);\n } else {\n this.value.set(value);\n }\n }\n return;\n }\n\n const items = this.items().filter(item => item.hasAttribute('value'));\n if (!items.length) return;\n\n let activeIndex = items.findIndex((item) => item === document.activeElement || item.contains(document.activeElement as Node));\n if (activeIndex === -1) {\n activeIndex = items.findIndex((item) => item.classList.contains(this.activeClass));\n }\n if (activeIndex === -1) activeIndex = 0;\n\n let nextIndex = activeIndex;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = activeIndex >= items.length - 1 ? 0 : activeIndex + 1;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = activeIndex <= 0 ? items.length - 1 : activeIndex - 1;\n break;\n default:\n return; // Let other keys propagate natively\n }\n\n event.preventDefault();\n const nextItem = items[nextIndex];\n if (nextItem) {\n if (!this.manualActivation()) {\n const value = nextItem.getAttribute('value') as unknown as T;\n this.value.set(value);\n }\n nextItem.focus();\n }\n }\n}\n","export const __SHIP_COLORS = ['primary', 'accent', 'warn', 'error', 'success', ''] as const;\nexport type ShipColor = (typeof __SHIP_COLORS)[number];\n\nexport const __SHIP_SIZES = ['small', 'xsmall', ''] as const;\nexport type ShipSize = (typeof __SHIP_SIZES)[number];\n\nexport const __SHIP_BUTTON_SIZES = ['small', 'xsmall', ''] as const;\nexport type ShipButtonSize = (typeof __SHIP_BUTTON_SIZES)[number];\n\nexport const __SHIP_ICON_SIZES = ['small', 'large', ''] as const;\nexport type ShipIconSize = (typeof __SHIP_ICON_SIZES)[number];\n\nexport const __SHIP_SHEET_VARIANTS = ['simple', 'outlined', 'flat', 'raised', ''] as const;\nexport type ShipSheetVariant = (typeof __SHIP_SHEET_VARIANTS)[number];\n\nexport const __SHIP_TYPE_VARIANTS = ['type-a', 'type-b', 'type-c', 'type-d', ''] as const;\nexport type ShipTypeVariant = (typeof __SHIP_TYPE_VARIANTS)[number];\n\nexport const __SHIP_TABLE_VARIANTS = ['type-a', 'type-b', ''] as const;\nexport type ShipTableVariant = (typeof __SHIP_TABLE_VARIANTS)[number];\n\nexport const __SHIP_CARD_VARIANTS = ['type-a', 'type-b', 'type-c', ''] as const;\nexport type ShipCardVariant = (typeof __SHIP_CARD_VARIANTS)[number];\n\nexport const __SHIP_BUTTON_GROUP_VARIANTS = [''] as const;\nexport type ShipButtonGroupVariant = (typeof __SHIP_BUTTON_GROUP_VARIANTS)[number];\n\nexport const __SHIP_FORM_FIELD_VARIANTS = ['base', 'horizontal', 'auto-width', 'autosize', ''] as const;\nexport type ShipFormFieldVariant = (typeof __SHIP_FORM_FIELD_VARIANTS)[number];\n\nexport const __SHIP_RANGE_SLIDER_VARIANTS = ['simple', 'base', 'thick', 'outlined', 'flat', 'raised', ''] as const;\nexport type ShipRangeSliderVariant = (typeof __SHIP_RANGE_SLIDER_VARIANTS)[number];\n\nexport type ShipVariant = ShipSheetVariant | ShipTypeVariant;\n","/*\n * Public API Surface of ship-ui (Core utilities, directives, and configs)\n */\n\n// Global directives\nexport * from './lib/directives/ship-file-drag-drop.directive';\nexport * from './lib/directives/ship-input-mask';\nexport * from './lib/directives/ship-prevent-wheel.directive';\nexport * from './lib/directives/ship-tooltip.directive';\n\n// Global utilities & config\nexport * from './lib/utilities/class-mutation-signal';\nexport * from './lib/utilities/color-conversions';\nexport * from './lib/utilities/content-projection-signal';\nexport * from './lib/utilities/create-form-input-signal';\nexport * from './lib/utilities/create-input-signal';\nexport * from './lib/utilities/observe-elements';\nexport * from './lib/utilities/random-id';\nexport * from './lib/utilities/ship-component';\nexport * from './lib/utilities/ship-config';\nexport * from './lib/utilities/ship-selection-group';\nexport * from './lib/utilities/ship-types';\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.mjs","sources":["../../../projects/ship-ui/src/lib/directives/ship-file-drag-drop.directive.ts","../../../projects/ship-ui/src/lib/directives/ship-input-mask.ts","../../../projects/ship-ui/src/lib/directives/ship-prevent-wheel.directive.ts","../../../projects/ship-ui/src/lib/utilities/random-id.ts","../../../projects/ship-ui/src/lib/directives/ship-tooltip.directive.ts","../../../projects/ship-ui/src/lib/utilities/class-mutation-signal.ts","../../../projects/ship-ui/src/lib/utilities/color-conversions.ts","../../../projects/ship-ui/src/lib/utilities/content-projection-signal.ts","../../../projects/ship-ui/src/lib/utilities/observe-elements.ts","../../../projects/ship-ui/src/lib/utilities/create-form-input-signal.ts","../../../projects/ship-ui/src/lib/utilities/create-input-signal.ts","../../../projects/ship-ui/src/lib/utilities/ship-config.ts","../../../projects/ship-ui/src/lib/utilities/ship-component.ts","../../../projects/ship-ui/src/lib/utilities/ship-selection-group.ts","../../../projects/ship-ui/src/lib/utilities/ship-types.ts","../../../projects/ship-ui/src/public-api.ts","../../../projects/ship-ui/src/ship-ui-core.ts"],"sourcesContent":["import { Directive, HostListener, output, signal } from '@angular/core';\n\n@Directive({\n selector: '[shDragDrop]',\n standalone: true,\n host: {\n '[class.filesover]': 'filesOver()',\n },\n})\nexport class ShipFileDragDrop {\n filesOver = signal(false);\n filesDropped = output<FileList>();\n\n @HostListener('dragover', ['$event']) onDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n this.filesOver.set(true);\n }\n\n @HostListener('dragleave', ['$event']) onDragLeave(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n this.filesOver.set(false);\n }\n\n @HostListener('drop', ['$event']) ondrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n this.filesOver.set(false);\n const files = e.dataTransfer?.files;\n\n if (files && files.length > 0) {\n this.filesDropped.emit(files);\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject, input, Renderer2 } from '@angular/core';\n\ntype MaskingFunction = (cleanValue: string) => string | null;\n\n@Directive({\n selector: '[shInputMask]',\n standalone: true,\n})\nexport class ShipInputMask {\n #selfRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n #renderer: Renderer2 = inject(Renderer2);\n\n shInputMask = input<string | MaskingFunction>('(999) 999-9999');\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const inputElement = this.#selfRef.nativeElement;\n const oldRawValue = inputElement.value;\n const newRawValue = (event.target as HTMLInputElement).value;\n const oldCursorPos = inputElement.selectionStart ?? 0;\n\n const newCleanValue = this.#cleanValue(newRawValue);\n const maskedValue = this.#applyMask(newCleanValue);\n\n this.#renderer.setProperty(inputElement, 'value', maskedValue);\n\n const newCursorPos = this.#getNewCursorPosition(maskedValue, oldRawValue, oldCursorPos);\n inputElement.setSelectionRange(newCursorPos, newCursorPos);\n }\n\n #getNewCursorPosition(maskedValue: string, oldRawValue: string, oldCursorPos: number): number {\n let digitsBeforeCursor = 0;\n\n for (let i = 0; i < oldCursorPos; i++) {\n if (oldRawValue[i] && oldRawValue[i].match(/\\d/)) {\n digitsBeforeCursor++;\n }\n }\n\n let newCursorPos = 0;\n let digitsFound = 0;\n\n while (newCursorPos < maskedValue.length && digitsFound < digitsBeforeCursor) {\n if (maskedValue[newCursorPos].match(/\\d/)) {\n digitsFound++;\n }\n\n newCursorPos++;\n }\n\n return newCursorPos;\n }\n\n #cleanValue(value: string | null): string {\n if (!value) return '';\n return value.replace(/\\D/g, '');\n }\n\n #applyMask(cleanValue: string): string {\n const inputMask = this.shInputMask();\n\n if (typeof inputMask === 'function') {\n return inputMask(cleanValue) ?? '';\n }\n\n const pattern = inputMask;\n let masked = '';\n let digitIndex = 0;\n\n for (let i = 0; i < pattern.length && digitIndex < cleanValue.length; i++) {\n const maskChar = pattern[i];\n const digitChar = cleanValue[digitIndex];\n\n if (maskChar === '9') {\n masked += digitChar;\n digitIndex++;\n } else {\n masked += maskChar;\n }\n }\n return masked;\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[shPreventWheel]',\n standalone: true,\n})\nexport class ShipPreventWheel {\n @HostListener('wheel', ['$event']) wheel(event: WheelEvent) {\n event.preventDefault();\n }\n}\n","export function generateUniqueId() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n computed,\n Directive,\n DOCUMENT,\n effect,\n ElementRef,\n EnvironmentInjector,\n HostListener,\n inject,\n input,\n OnDestroy,\n Renderer2,\n signal,\n TemplateRef,\n untracked,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\n\ntype Timeout = ReturnType<typeof setTimeout>;\n\n@Component({\n selector: 'ship-tooltip-wrapper',\n standalone: true,\n styleUrl: './ship-tooltip.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet],\n template: `\n <div class=\"tooltip-content\">\n @if (isTemplate()) {\n <ng-container *ngTemplateOutlet=\"$any(content()); context: { $implicit: tooltipContext }\" />\n } @else {\n {{ content() }}\n }\n </div>\n `,\n\n host: {\n role: 'tooltip',\n '[attr.popover]': '\"manual\"',\n '[style.position-anchor]': 'positionAnchorName()',\n '[class.below]': 'isBelow()',\n },\n})\nexport class ShipTooltipWrapper {\n positionAnchorName = input.required<string>();\n anchorEl = input.required<ElementRef<HTMLElement>>();\n isOpen = input<boolean>(false);\n content = input<string | TemplateRef<any> | null | undefined>();\n close = input<() => void>(() => {});\n\n protected tooltipContext = {\n close: () => this.close()(),\n };\n\n isTemplate = computed(() => this.content() instanceof TemplateRef);\n\n #document = inject(DOCUMENT);\n #selfRef = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #positionAbort: AbortController | null = null;\n\n readonly SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n isBelow = signal<boolean>(false);\n\n openEffect = effect(() => {\n if (this.isOpen()) {\n queueMicrotask(() => {\n const tooltipEl = this.#selfRef.nativeElement;\n if (!tooltipEl || !tooltipEl.isConnected) return;\n\n if (this.#positionAbort) {\n this.#positionAbort.abort();\n }\n this.#positionAbort = new AbortController();\n\n tooltipEl.showPopover();\n\n if (!this.SUPPORTS_ANCHOR) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(tooltipEl);\n\n scrollableParent.addEventListener('scroll', () => this.calculateTooltipPosition(), {\n signal: this.#positionAbort?.signal,\n passive: true,\n });\n window?.addEventListener('resize', () => this.calculateTooltipPosition(), {\n signal: this.#positionAbort?.signal,\n passive: true,\n });\n\n this.calculateTooltipPosition();\n });\n }\n });\n } else {\n const tooltipEl = this.#selfRef.nativeElement;\n if (tooltipEl) {\n try {\n if (tooltipEl.matches(':popover-open')) {\n tooltipEl.hidePopover();\n }\n } catch (e) {\n // Ignore if already hidden or other errors\n }\n }\n this.#positionAbort?.abort();\n this.#positionAbort = null;\n }\n });\n\n ngOnDestroy(): void {\n this.#positionAbort?.abort();\n this.#positionAbort = null;\n }\n\n #findScrollableParent(element: HTMLElement) {\n const SCROLLABLE_STYLES = ['scroll', 'auto'];\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 private calculateTooltipPosition = (): void => {\n if (!this.anchorEl()) return;\n\n const hostRect = this.anchorEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.#selfRef.nativeElement;\n const tooltipRect = tooltipEl.getBoundingClientRect();\n\n if (tooltipRect.width === 0 && tooltipRect.height === 0) return;\n\n const BASE_SPACE = 8;\n\n // Position generators\n const topCenter = (t: DOMRect, m: DOMRect) => ({\n left: t.left + t.width / 2 - m.width / 2,\n top: t.top - m.height - BASE_SPACE,\n });\n const bottomCenter = (t: DOMRect, m: DOMRect) => ({\n left: t.left + t.width / 2 - m.width / 2,\n top: t.bottom + BASE_SPACE,\n });\n\n const topSpanLeft = (t: DOMRect, m: DOMRect) => ({ left: t.right - m.width, top: t.top - m.height - BASE_SPACE });\n const topSpanRight = (t: DOMRect, m: DOMRect) => ({ left: t.left, top: t.top - m.height - BASE_SPACE });\n const bottomSpanLeft = (t: DOMRect, m: DOMRect) => ({ left: t.right - m.width, top: t.bottom + BASE_SPACE });\n const bottomSpanRight = (t: DOMRect, m: DOMRect) => ({ left: t.left, top: t.bottom + BASE_SPACE });\n\n const tryOrder = [topCenter, topSpanLeft, topSpanRight, bottomCenter, bottomSpanLeft, bottomSpanRight];\n\n for (const positionFn of tryOrder) {\n const pos = positionFn(hostRect, tooltipRect);\n if (this.#fitsInViewport(pos, tooltipRect)) {\n this.#applyPosition(pos, tooltipEl);\n this.isBelow.set(pos.top > hostRect.top);\n return;\n }\n }\n\n const fallback = this.#clampToViewport(topCenter(hostRect, tooltipRect), tooltipRect);\n this.#applyPosition(fallback, tooltipEl);\n this.isBelow.set(fallback.top > hostRect.top);\n };\n\n #applyPosition(pos: { left: number; top: number }, element: HTMLElement) {\n this.#renderer.setStyle(element, 'left', `${pos.left}px`);\n this.#renderer.setStyle(element, 'top', `${pos.top}px`);\n this.#renderer.setStyle(element, 'position', 'fixed');\n this.#renderer.setStyle(element, 'margin', '0');\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 #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\nlet openRef: {\n wrapperComponentRef: ComponentRef<ShipTooltipWrapper>;\n component: ShipTooltip;\n} | null = null;\n\n@Directive({\n selector: '[shTooltip]',\n standalone: true,\n host: {\n class: 'tooltip',\n '[style.anchor-name]': 'anchorName',\n '[class.active]': 'isOpen()',\n },\n})\nexport class ShipTooltip implements OnDestroy {\n shTooltip = input.required<string | TemplateRef<any> | null | undefined>();\n\n #contentReplacedEffect = effect(() => {\n const content = this.shTooltip();\n\n untracked(() => {\n if (this.isOpen() && openRef?.component === this && openRef?.wrapperComponentRef) {\n openRef.wrapperComponentRef.setInput('content', content);\n openRef.wrapperComponentRef.changeDetectorRef.detectChanges();\n }\n });\n });\n\n #elementRef = inject(ElementRef<HTMLElement>);\n #viewContainerRef = inject(ViewContainerRef);\n #environmentInjector = inject(EnvironmentInjector);\n\n private debounceTimer: Timeout | null = null;\n private readonly DEBOUNCE_DELAY = 50;\n\n readonly anchorName = `--${generateUniqueId()}`;\n isOpen = signal<boolean>(false);\n\n @HostListener('mouseenter', ['$event'])\n onMouseEnter(event: MouseEvent) {\n event.stopPropagation();\n\n if (openRef?.component.anchorName !== this.anchorName) {\n this.cleanupTooltip();\n } else {\n this.cancelCleanupTimer();\n }\n\n this.showTooltip();\n // queueMicrotask(() => );\n }\n\n @HostListener('mouseleave', ['$event'])\n onMouseLeave(event: MouseEvent) {\n event.stopPropagation();\n this.startCleanupTimer();\n }\n\n ngOnDestroy() {\n this.cancelCleanupTimer();\n this.cleanupTooltip();\n }\n\n private startCleanupTimer() {\n this.cancelCleanupTimer();\n this.debounceTimer = setTimeout(() => {\n this.cleanupTooltip();\n }, this.DEBOUNCE_DELAY);\n }\n\n private cancelCleanupTimer() {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n if (this.destroyTimeout) {\n clearTimeout(this.destroyTimeout);\n this.destroyTimeout = null;\n }\n }\n\n private showTooltip() {\n if (openRef?.wrapperComponentRef || !this.shTooltip()) {\n if (openRef?.component === this && openRef?.wrapperComponentRef) {\n openRef.wrapperComponentRef.setInput('content', this.shTooltip());\n }\n return;\n }\n\n openRef = {\n wrapperComponentRef: this.#viewContainerRef.createComponent(ShipTooltipWrapper, {\n environmentInjector: this.#environmentInjector,\n }),\n component: this,\n };\n\n openRef.wrapperComponentRef.setInput('positionAnchorName', this.anchorName);\n openRef.wrapperComponentRef.setInput('anchorEl', this.#elementRef);\n openRef.wrapperComponentRef.setInput('isOpen', this.isOpen);\n openRef.wrapperComponentRef.setInput('content', this.shTooltip());\n openRef.wrapperComponentRef.setInput('close', () => this.cleanupTooltip());\n openRef.wrapperComponentRef.changeDetectorRef.detectChanges();\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseenter', (event: MouseEvent) => {\n event.stopPropagation();\n this.cancelCleanupTimer();\n });\n\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseleave', (event: MouseEvent) => {\n event.stopPropagation();\n this.startCleanupTimer();\n });\n\n setTimeout(() => {\n this.isOpen.set(true);\n });\n }\n\n destroyTimeout: Timeout | null = null;\n\n private cleanupTooltip(): void {\n if (openRef?.wrapperComponentRef) {\n openRef.component.cancelCleanupTimer();\n openRef.component.isOpen.set(false);\n openRef!.wrapperComponentRef.location.nativeElement.hidePopover();\n\n this.destroyTimeout = setTimeout(() => {\n queueMicrotask(() => {\n openRef?.wrapperComponentRef.destroy();\n openRef = null;\n });\n }, this.DEBOUNCE_DELAY);\n }\n }\n}\n","import { DestroyRef, ElementRef, inject, signal, Signal, WritableSignal } from '@angular/core';\n\nexport function classMutationSignal(_element: HTMLElement | null = null): Signal<string> {\n const element = _element ?? (inject(ElementRef).nativeElement as HTMLElement);\n\n if (!element) return signal('');\n\n const classListSignal: WritableSignal<string> = signal(element.className);\n\n if (typeof MutationObserver === 'undefined') return classListSignal.asReadonly();\n\n const destroyRef = inject(DestroyRef);\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n const target = mutation.target as HTMLElement;\n classListSignal.set(target.className);\n }\n }\n });\n\n observer.observe(element, { attributes: true, attributeFilter: ['class'] });\n destroyRef.onDestroy(() => observer.disconnect());\n\n return classListSignal.asReadonly();\n}\n","export function hslToRgbExact(h: number, s: number, l: number): [number, number, number] {\n s /= 100;\n l /= 100;\n const k = (n: number) => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = (n: number) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return [Math.round(255 * f(0)), Math.round(255 * f(8)), Math.round(255 * f(4))];\n}\n\nexport function hsvToRgbExact(h: number, s: number, v: number): [number, number, number] {\n const sNorm = s / 100;\n const vNorm = v / 100;\n const c = vNorm * sNorm;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = vNorm - c;\n let r = 0,\n g = 0,\n b = 0;\n if (h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n return [Math.round((r + m) * 255), Math.round((g + m) * 255), Math.round((b + m) * 255)];\n}\n\nexport function rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n if (max !== min) {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h * 360, s: s * 100, v: v * 100 };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n}\n\nexport function rgbaToHex8(r: number, g: number, b: number, a: number): string {\n const alphaHex = Math.round(a * 255)\n .toString(16)\n .padStart(2, '0');\n return rgbToHex(r, g, b) + alphaHex;\n}\n\nexport function rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number; string: string } {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h = 0,\n s = 0,\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n const hDeg = Math.floor(h * 360);\n const sPct = Math.round(s * 100);\n const lPct = Math.round(l * 100);\n\n return {\n h: hDeg,\n s: sPct,\n l: lPct,\n string: `hsl(${hDeg}, ${sPct}%, ${lPct}%)`,\n };\n}\n\nexport function rgbToOklch(r: number, g: number, b: number): { l: number; c: number; h: number } {\n // Convert sRGB to Linear sRGB\n const toLinear = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n const lr = toLinear(r);\n const lg = toLinear(g);\n const lb = toLinear(b);\n\n // Convert Linear sRGB to LMS (Oklab intermediate)\n const l = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb;\n const m = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb;\n const s = 0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb;\n\n // Cube root of LMS\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n // Convert LMS to OKLAB\n const oklabL = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\n const oklabA = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\n const oklabB = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\n\n // Convert OKLAB to OKLCH\n const chroma = Math.sqrt(oklabA * oklabA + oklabB * oklabB);\n let hue = Math.atan2(oklabB, oklabA) * (180 / Math.PI);\n if (hue < 0) hue += 360;\n\n return { l: oklabL, c: chroma, h: hue };\n}\n\nexport function hslToOklch(h: number, s: number, l: number): { l: number; c: number; h: number } {\n const [r, g, b] = hslToRgbExact(h, s, l);\n return rgbToOklch(r, g, b);\n}\n","import { DestroyRef, ElementRef, inject, signal, Signal, WritableSignal } from '@angular/core';\n\nexport function contentProjectionSignal<T = HTMLElement>(\n querySelector: string,\n options: MutationObserverInit = { childList: true }\n): Signal<T[]> {\n const hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n const destroyRef = inject(DestroyRef);\n\n const projectedElementsSignal: WritableSignal<T[]> = signal([]);\n const updateElements = () => {\n projectedElementsSignal.set(Array.from(hostElement.querySelectorAll(querySelector)) as T[]);\n };\n\n updateElements();\n\n if (typeof MutationObserver === 'undefined') return projectedElementsSignal.asReadonly();\n\n const observer = new MutationObserver((mutations) => {\n const hasChildListChanges = mutations.some((mutation) => mutation.type === 'childList');\n if (hasChildListChanges) {\n updateElements();\n }\n });\n\n observer.observe(hostElement, options);\n destroyRef.onDestroy(() => observer.disconnect());\n\n return projectedElementsSignal.asReadonly();\n}\n","import { isPlatformServer } from '@angular/common';\nimport {\n DestroyRef,\n effect,\n EffectRef,\n ElementRef,\n inject,\n Injector,\n isSignal,\n PLATFORM_ID,\n Signal,\n signal,\n} from '@angular/core';\n\nexport function observeFirstChild<T extends HTMLElement>(\n parentEl: ElementRef<HTMLElement>,\n elementTags: string[]\n): Signal<ElementRef<T> | null> {\n const elementSignal = signal<ElementRef<T> | null>(null);\n const _upperCaseElementTags = elementTags.map((tag) => tag.toUpperCase());\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n\n if (isPlatformServer(injector.get(PLATFORM_ID)) || typeof MutationObserver === 'undefined')\n return elementSignal.asReadonly();\n\n const initialElement = _upperCaseElementTags.find((tag) => parentEl.nativeElement.querySelector(tag));\n\n if (initialElement) {\n elementSignal.set(new ElementRef(parentEl.nativeElement.querySelector(elementTags[0]) as T));\n return elementSignal.asReadonly();\n }\n\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.addedNodes) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE && _upperCaseElementTags.includes(node.nodeName)) {\n elementSignal.set(new ElementRef(node as T));\n observer.disconnect();\n return;\n }\n }\n }\n }\n });\n\n observer.observe(parentEl.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n destroyRef.onDestroy(() => observer.disconnect());\n\n return elementSignal.asReadonly();\n}\n\nexport function observeChildren<T extends HTMLElement>(\n parentEl: ElementRef<HTMLElement> | Signal<ElementRef<HTMLElement> | null | undefined>,\n elementTags: string[] | Signal<string[]>\n) {\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n const elementsSignal = signal<T[]>([]);\n\n let effectOnSignal: EffectRef | null = null;\n let observer: MutationObserver | null = null;\n\n const setupObserver = (el: ElementRef<HTMLElement>, elementTags: string[]) => {\n if (observer) {\n observer.disconnect();\n }\n\n const foundElements = Array.from(el.nativeElement.querySelectorAll(elementTags.join(',')));\n\n elementsSignal.set(foundElements as T[]);\n\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((_) => {\n queueMicrotask(() => {\n const foundElements = Array.from(el.nativeElement.querySelectorAll(elementTags.join(',')));\n\n elementsSignal.set(foundElements as T[]);\n });\n });\n\n observer.observe(el.nativeElement, {\n childList: true,\n subtree: true,\n });\n }\n\n destroyRef.onDestroy(() => destroySelf());\n };\n\n effectOnSignal = effect(\n () => {\n const el =\n typeof parentEl === 'function' && isSignal(parentEl) ? parentEl() : (parentEl as ElementRef<HTMLElement>);\n const tags = typeof elementTags === 'function' ? elementTags() : elementTags;\n\n if (el && tags?.length > 0) {\n setupObserver(el, tags);\n } else {\n elementsSignal.set([]);\n\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n }\n },\n { injector }\n );\n\n function destroySelf() {\n if (effectOnSignal) {\n effectOnSignal.destroy();\n }\n\n if (observer) {\n observer.disconnect();\n }\n }\n\n return {\n signal: elementsSignal.asReadonly(),\n destroy: destroySelf,\n };\n}\n","import {\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injector,\n signal,\n type Signal,\n type WritableSignal,\n} from '@angular/core';\nimport { observeFirstChild } from './observe-elements';\n\nexport function createFormInputSignal<T extends HTMLInputElement | HTMLTextAreaElement>(\n formEl?: Signal<ElementRef<T> | undefined>,\n elementTags: string[] = ['input', 'textarea']\n): WritableSignal<string | undefined> {\n const elementRefSignal = formEl ? formEl : observeFirstChild<T>(inject(ElementRef), elementTags);\n const valueSignal: WritableSignal<string | undefined> = signal(undefined);\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n const firstInputEl = signal<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n effect(\n (onCleanup) => {\n const elRef = elementRefSignal();\n\n if (!elRef) return;\n\n const inputEl = elRef.nativeElement;\n\n if (!inputEl) return;\n\n createCustomInputEventListener(inputEl);\n\n firstInputEl.set(inputEl);\n valueSignal.set(inputEl.value ?? '');\n\n onCleanup(() => {\n firstInputEl.set(null);\n });\n },\n { injector }\n );\n\n let removeListener: (() => void) | null = null;\n\n effect(\n () => {\n const inputEl = firstInputEl();\n\n if (!inputEl) return;\n\n if (removeListener) {\n removeListener();\n removeListener = null;\n }\n\n const inputChangedListener = (event: Event) => {\n valueSignal.set((event as CustomEvent<{ value: string }>).detail.value);\n };\n\n const inputListener = (event: Event) => {\n valueSignal.set((event.target as HTMLInputElement | HTMLTextAreaElement).value);\n };\n\n inputEl.addEventListener('input', inputListener as EventListener);\n inputEl.addEventListener('inputValueChanged', inputChangedListener as EventListener);\n\n valueSignal.set(inputEl.value);\n\n removeListener = () => {\n inputEl.removeEventListener('input', inputListener as EventListener);\n inputEl.removeEventListener('inputValueChanged', inputChangedListener as EventListener);\n };\n\n destroyRef.onDestroy(() => {\n if (removeListener) removeListener();\n });\n },\n { injector }\n );\n\n effect(\n () => {\n const inputEl = firstInputEl();\n\n if (!inputEl) return;\n\n const inputValue = valueSignal();\n\n if (!inputValue) return;\n\n inputEl.value = inputValue;\n inputEl.dispatchEvent(new Event('input'));\n },\n { injector }\n );\n\n return valueSignal;\n}\n\nfunction 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 return input;\n}\n","import {\n DestroyRef,\n ElementRef,\n Injector,\n Signal,\n WritableSignal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\n\ninterface InputSignalOptions<T> {\n debounce?: number;\n initialValue?: T | null | undefined;\n transform?: (value: string) => T | null | undefined;\n compare?: (prev: T | null | undefined, curr: T | null | undefined) => boolean;\n forceType?: 'number' | 'boolean' | 'string';\n injector?: Injector;\n returnPreviousValue?: boolean;\n}\n\nexport function createInputSignal<T>(\n input: Signal<ElementRef<HTMLInputElement | HTMLTextAreaElement> | undefined>,\n options?: InputSignalOptions<T>\n): WritableSignal<T | null | undefined> {\n const injector = options?.injector || (assertInInjectionContext(createInputSignal), inject(Injector));\n const {\n debounce = 0,\n initialValue = undefined,\n transform = (value: string) => value as unknown as T,\n compare = (a: T | null | undefined, b: T | null | undefined) => a === b,\n forceType = undefined,\n returnPreviousValue = true,\n } = options || {};\n\n const valueSignal = signal<T | null | undefined>(initialValue);\n const destroyRef = injector.get(DestroyRef);\n const inputElementRef = computed(() => {\n const inputElement = input()?.nativeElement;\n\n if (!(inputElement instanceof HTMLInputElement || inputElement instanceof HTMLTextAreaElement)) {\n return;\n }\n\n return createCustomInputEventListener(inputElement);\n });\n\n let isUpdating = false;\n let previousValue: string | undefined;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n effect(\n () => {\n const inputElement = inputElementRef();\n\n if (!inputElement) {\n return valueSignal.set(returnPreviousValue && previousValue ? transform(previousValue) : undefined);\n }\n\n if (initialValue !== undefined && inputElement.value === '') {\n valueSignal.set(initialValue);\n } else if (inputElement.value !== '') {\n syncValueFromInput();\n }\n\n const inputHandler = (e: any) => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n syncValueFromInput();\n }, debounce);\n };\n\n inputElement.addEventListener('input', inputHandler);\n inputElement.addEventListener('inputValueChanged', inputHandler);\n\n destroyRef.onDestroy(() => {\n inputElement!.removeEventListener('input', inputHandler);\n inputElement!.removeEventListener('inputValueChanged', inputHandler);\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n });\n },\n { injector }\n );\n\n effect(\n () => {\n const inputElement = inputElementRef();\n\n if (!inputElement) return;\n\n const currentValue = valueSignal() ?? '';\n\n let domValue = currentValue === null || currentValue === undefined ? '' : String(currentValue);\n\n if (inputElement.value !== domValue) {\n previousValue = domValue;\n inputElement.value = domValue;\n inputElement.dispatchEvent(new Event('input'));\n }\n },\n { injector }\n );\n\n return valueSignal;\n\n function syncValueFromInput() {\n if (isUpdating) return;\n\n isUpdating = true;\n try {\n const inputElement = inputElementRef();\n if (!inputElement) return;\n\n const inputValue = inputElement.value;\n const transformedValue = forceType ? forceTransform(inputValue, forceType) : transform(inputValue);\n previousValue = inputValue;\n\n if (!compare(valueSignal(), transformedValue)) {\n valueSignal.set(transformedValue);\n }\n } finally {\n isUpdating = false;\n }\n }\n\n function createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value'); // Use Object.getPrototypeOf\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value'); // Use Object.getPrototypeOf\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 return input;\n }\n\n function forceTransform(value: string, type: 'number' | 'boolean' | 'string'): T | null | undefined {\n switch (type) {\n case 'string':\n return value.toString() as unknown as T;\n case 'number':\n const num = Number(value);\n return isNaN(num) ? undefined : (num as unknown as T);\n case 'boolean':\n return (value.toLowerCase() === 'true'\n ? true\n : value.toLowerCase() === 'false'\n ? false\n : undefined) as unknown as T;\n default:\n return value as unknown as T;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ShipColor, ShipSize, ShipVariant } from './ship-types';\n\nexport const defaultThemeColors: Record<string, string> = {\n primary: 'hsl(217, 91%, 60%)',\n accent: 'hsl(258, 90%, 66%)',\n warn: 'hsl(37, 92%, 50%)',\n error: 'hsl(0, 84%, 60%)',\n success: 'hsl(159, 84%, 39%)',\n base: 'hsl(0, 0%, 46%)'\n};\n\nexport const SHIP_CONFIG = new InjectionToken<ShipConfig>('Ship UI Config');\n\nexport interface ShipComponentConfig {\n variant?: ShipVariant | string;\n size?: ShipSize | string;\n color?: ShipColor | string;\n}\n\nexport interface ShipChipConfig extends ShipComponentConfig {\n sharp?: boolean;\n dynamic?: boolean;\n}\n\nexport interface ShipRangeSliderConfig extends ShipComponentConfig {\n sharp?: boolean;\n alwaysShow?: boolean;\n}\n\nexport interface ShipIconConfig extends ShipComponentConfig {\n disableUnfocus?: boolean;\n}\n\nexport interface ShipConfigColors {\n primary?: string;\n accent?: string;\n warn?: string;\n error?: string;\n success?: string;\n base?: string;\n}\n\nexport interface ShipConfigDistributions {\n primary?: number;\n accent?: number;\n warn?: number;\n error?: number;\n success?: number;\n base?: number;\n}\n\nexport interface ShipConfig {\n fontSize?: number;\n colors?: ShipConfigColors;\n distribution?: ShipConfigDistributions;\n borderRadius?: number;\n borderWidth?: number;\n button?: ShipComponentConfig;\n chip?: ShipChipConfig;\n alert?: ShipComponentConfig;\n progressBar?: ShipComponentConfig;\n spinner?: ShipComponentConfig;\n card?: ShipComponentConfig;\n table?: ShipComponentConfig;\n buttonGroup?: ShipComponentConfig;\n checkbox?: ShipComponentConfig;\n radio?: ShipComponentConfig;\n toggle?: ShipComponentConfig;\n formField?: ShipComponentConfig;\n icon?: ShipIconConfig;\n stepper?: ShipComponentConfig;\n select?: ShipComponentConfig;\n accordion?: ShipComponentConfig;\n tabs?: ShipComponentConfig;\n 'event-card'?: ShipComponentConfig;\n datepicker?: ShipComponentConfig;\n rangeSlider?: ShipRangeSliderConfig;\n\n // Existing properties for backward compatibility\n alertVariant?: '' | 'simple' | 'outlined' | 'flat' | 'raised';\n cardType?: '' | 'type-b' | 'type-c';\n dialogType?: 'type-b';\n tableType?: 'type-b';\n sidenavType?: 'overlay' | 'simple';\n}\n","import { computed, inject, Signal } from '@angular/core';\nimport { SHIP_CONFIG } from './ship-config';\n\nexport function shipComponentClasses(\n componentName: string,\n inputs: {\n color?: Signal<any>;\n variant?: Signal<any>;\n size?: Signal<any>;\n sharp?: Signal<any>;\n dynamic?: Signal<any>;\n readonly?: Signal<any>;\n alwaysShow?: Signal<any>;\n }\n) {\n const config = inject(SHIP_CONFIG, { optional: true });\n\n return computed(() => {\n const componentConfig = (config as any)?.[componentName];\n\n // Resolve variant (Input > Component Config > Global Legacy Mappings > empty)\n let variant = inputs.variant?.();\n if (!variant) {\n variant = componentConfig?.variant;\n }\n\n // Legacy mapping for alert\n if (!variant && componentName === 'alert' && config?.alertVariant) {\n variant = config.alertVariant;\n }\n\n // Legacy mapping for card\n if (!variant && componentName === 'card' && config?.cardType) {\n variant = config.cardType;\n }\n\n // Legacy mapping for table\n if (!variant && componentName === 'table' && config?.tableType) {\n variant = config.tableType;\n }\n\n // Resolve color (Input > Component Config > empty)\n const color = inputs.color?.() || componentConfig?.color;\n\n if (!variant) {\n variant = 'base';\n }\n\n // Resolve size (Input > Component Config > empty)\n const size = inputs.size?.() || componentConfig?.size;\n\n // Resolve sharp (Input > Component Config > false)\n const sharp = (inputs.sharp?.() ?? componentConfig?.sharp) || false;\n\n // Resolve dynamic (Input > Component Config > false)\n const dynamic = (inputs.dynamic?.() ?? componentConfig?.dynamic) || false;\n\n // Resolve readonly (Input > Component Config > false)\n const readonly = (inputs.readonly?.() ?? componentConfig?.readonly) || false;\n\n // Resolve alwaysShow (Input > Component Config > false)\n const alwaysShow = (inputs.alwaysShow?.() ?? componentConfig?.alwaysShow) || false;\n\n const classList: string[] = [];\n\n if (color) classList.push(color);\n if (variant) {\n // Handle type-a, type-b etc. If it doesn't already have the prefix but it's meant to be one of those\n if (['a', 'b', 'c', 'd'].includes(variant)) {\n classList.push(`type-${variant}`);\n } else {\n classList.push(variant);\n }\n }\n if (size) classList.push(size);\n if (sharp) classList.push('sharp');\n if (dynamic) classList.push('dynamic');\n if (readonly) classList.push('readonly');\n if (alwaysShow) classList.push('always-show');\n\n return classList.join(' ');\n });\n}\n","import { Directive, ElementRef, HostListener, effect, inject, model, input, booleanAttribute } from '@angular/core';\nimport { contentProjectionSignal } from './content-projection-signal';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\n@Directive()\nexport abstract class ShipSelectionGroup<T = any> {\n protected readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n readonly #keybindings = inject(ShipA11yKeybindingsService);\n\n protected items: import('@angular/core').Signal<HTMLElement[]>;\n\n readonly value = model<T | null>(null);\n readonly closable = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n readonly manualActivation = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n\n constructor(\n protected readonly itemSelector: string,\n protected readonly activeClass: string,\n protected readonly options?: {\n hostRole?: string;\n itemRole?: string;\n activeAttribute?: 'aria-selected' | 'aria-pressed' | 'aria-checked';\n }\n ) {\n if (this.options?.hostRole) {\n this.hostElement.setAttribute('role', this.options.hostRole);\n }\n\n this.items = contentProjectionSignal<HTMLElement>(this.itemSelector, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n effect(() => {\n const selectedValue = this.value();\n const activeClass = this.activeClass;\n const items = this.items();\n const activeAttr = this.options?.activeAttribute || \n (this.options?.itemRole === 'tab' || this.options?.itemRole === 'option' ? 'aria-selected' : \n this.options?.itemRole === 'radio' ? 'aria-checked' : \n 'aria-pressed');\n \n let hasSelection = false;\n items.forEach((item) => {\n const itemValue = item.getAttribute('value');\n if (itemValue === null && !item.hasAttribute('value')) return;\n if (itemValue === String(selectedValue) || (itemValue === '' && (selectedValue === null || selectedValue === ''))) {\n hasSelection = true;\n }\n });\n\n items.forEach((item) => {\n if (this.options?.itemRole && !item.hasAttribute('role')) {\n item.setAttribute('role', this.options.itemRole);\n }\n\n const itemValue = item.getAttribute('value');\n const hasValueAttr = itemValue !== null || item.hasAttribute('value');\n \n let isSelected = false;\n if (hasValueAttr) {\n isSelected = itemValue === String(selectedValue) || (itemValue === '' && (selectedValue === null || selectedValue === ''));\n } else {\n isSelected = item.classList.contains(activeClass);\n }\n \n if (isSelected) {\n if (hasValueAttr) {\n item.classList.add(activeClass);\n }\n item.setAttribute(activeAttr, 'true');\n item.setAttribute('tabindex', '0');\n } else {\n if (hasValueAttr) {\n item.classList.remove(activeClass);\n }\n item.setAttribute(activeAttr, 'false');\n if (hasSelection || !hasValueAttr) {\n item.setAttribute('tabindex', '-1');\n } else {\n item.removeAttribute('tabindex');\n }\n }\n });\n });\n }\n\n @HostListener('click', ['$event.target'])\n protected onClick(target: EventTarget | null) {\n const targetEl = target as HTMLElement;\n if (!targetEl || !targetEl.closest) return;\n const item = targetEl.closest(this.itemSelector) as HTMLElement;\n if (item && this.hostElement.contains(item)) {\n if (item.hasAttribute('value')) {\n const value = item.getAttribute('value') as unknown as T;\n if (this.closable() && String(this.value()) === String(value)) {\n this.value.set(null);\n } else {\n this.value.set(value);\n }\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent) {\n const targetEl = event.target as HTMLElement;\n\n if (this.#keybindings.matches(event, 'selection-group.select')) {\n const item = targetEl?.closest?.(this.itemSelector) as HTMLElement;\n if (item && this.hostElement.contains(item) && item.hasAttribute('value')) {\n // Only prevent default for space to avoid scrolling, let enter naturally click if it's a link/button\n const isSpace = event.key === ' ' || event.key === 'Spacebar';\n if (isSpace) event.preventDefault();\n \n const value = item.getAttribute('value') as unknown as T;\n if (this.closable() && String(this.value()) === String(value)) {\n this.value.set(null);\n } else {\n this.value.set(value);\n }\n }\n return;\n }\n\n const items = this.items().filter(item => item.hasAttribute('value'));\n if (!items.length) return;\n\n let activeIndex = items.findIndex((item) => item === document.activeElement || item.contains(document.activeElement as Node));\n if (activeIndex === -1) {\n activeIndex = items.findIndex((item) => item.classList.contains(this.activeClass));\n }\n if (activeIndex === -1) activeIndex = 0;\n\n let nextIndex = activeIndex;\n\n if (this.#keybindings.matches(event, 'selection-group.next')) {\n nextIndex = activeIndex >= items.length - 1 ? 0 : activeIndex + 1;\n } else if (this.#keybindings.matches(event, 'selection-group.prev')) {\n nextIndex = activeIndex <= 0 ? items.length - 1 : activeIndex - 1;\n } else {\n return; // Let other keys propagate natively\n }\n\n event.preventDefault();\n const nextItem = items[nextIndex];\n if (nextItem) {\n if (!this.manualActivation()) {\n const value = nextItem.getAttribute('value') as unknown as T;\n this.value.set(value);\n }\n nextItem.focus();\n }\n }\n}\n","export const __SHIP_COLORS = ['primary', 'accent', 'warn', 'error', 'success', ''] as const;\nexport type ShipColor = (typeof __SHIP_COLORS)[number];\n\nexport const __SHIP_SIZES = ['small', 'xsmall', ''] as const;\nexport type ShipSize = (typeof __SHIP_SIZES)[number];\n\nexport const __SHIP_BUTTON_SIZES = ['small', 'xsmall', ''] as const;\nexport type ShipButtonSize = (typeof __SHIP_BUTTON_SIZES)[number];\n\nexport const __SHIP_ICON_SIZES = ['small', 'large', ''] as const;\nexport type ShipIconSize = (typeof __SHIP_ICON_SIZES)[number];\n\nexport const __SHIP_SHEET_VARIANTS = ['simple', 'outlined', 'flat', 'raised', ''] as const;\nexport type ShipSheetVariant = (typeof __SHIP_SHEET_VARIANTS)[number];\n\nexport const __SHIP_TYPE_VARIANTS = ['type-a', 'type-b', 'type-c', 'type-d', ''] as const;\nexport type ShipTypeVariant = (typeof __SHIP_TYPE_VARIANTS)[number];\n\nexport const __SHIP_TABLE_VARIANTS = ['type-a', 'type-b', ''] as const;\nexport type ShipTableVariant = (typeof __SHIP_TABLE_VARIANTS)[number];\n\nexport const __SHIP_CARD_VARIANTS = ['type-a', 'type-b', 'type-c', ''] as const;\nexport type ShipCardVariant = (typeof __SHIP_CARD_VARIANTS)[number];\n\nexport const __SHIP_BUTTON_GROUP_VARIANTS = [''] as const;\nexport type ShipButtonGroupVariant = (typeof __SHIP_BUTTON_GROUP_VARIANTS)[number];\n\nexport const __SHIP_FORM_FIELD_VARIANTS = ['base', 'horizontal', 'auto-width', 'autosize', ''] as const;\nexport type ShipFormFieldVariant = (typeof __SHIP_FORM_FIELD_VARIANTS)[number];\n\nexport const __SHIP_RANGE_SLIDER_VARIANTS = ['simple', 'base', 'thick', 'outlined', 'flat', 'raised', ''] as const;\nexport type ShipRangeSliderVariant = (typeof __SHIP_RANGE_SLIDER_VARIANTS)[number];\n\nexport type ShipVariant = ShipSheetVariant | ShipTypeVariant;\n","/*\n * Public API Surface of ship-ui (Core utilities, directives, and configs)\n */\n\n// Global directives\nexport * from './lib/directives/ship-file-drag-drop.directive';\nexport * from './lib/directives/ship-input-mask';\nexport * from './lib/directives/ship-prevent-wheel.directive';\nexport * from './lib/directives/ship-tooltip.directive';\n\n// Global utilities & config\nexport * from './lib/utilities/class-mutation-signal';\nexport * from './lib/utilities/color-conversions';\nexport * from './lib/utilities/content-projection-signal';\nexport * from './lib/utilities/create-form-input-signal';\nexport * from './lib/utilities/create-input-signal';\nexport * from './lib/utilities/observe-elements';\nexport * from './lib/utilities/random-id';\nexport * from './lib/utilities/ship-component';\nexport * from './lib/utilities/ship-config';\nexport * from './lib/utilities/ship-selection-group';\nexport * from './lib/utilities/ship-types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ship-ui/core",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "0.22.
|
|
4
|
+
"version": "0.22.15",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": ">=20",
|
|
7
7
|
"@angular/core": ">=20",
|
|
@@ -56,7 +56,30 @@
|
|
|
56
56
|
"warning-octagon",
|
|
57
57
|
"warning",
|
|
58
58
|
"question",
|
|
59
|
-
"plus"
|
|
59
|
+
"plus",
|
|
60
|
+
"text-b",
|
|
61
|
+
"text-italic",
|
|
62
|
+
"text-underline",
|
|
63
|
+
"text-strikethrough",
|
|
64
|
+
"eraser",
|
|
65
|
+
"text-h-one",
|
|
66
|
+
"text-h-two",
|
|
67
|
+
"text-h-three",
|
|
68
|
+
"paragraph",
|
|
69
|
+
"quotes",
|
|
70
|
+
"code",
|
|
71
|
+
"list-bullets",
|
|
72
|
+
"list-numbers",
|
|
73
|
+
"text-align-left",
|
|
74
|
+
"text-align-center",
|
|
75
|
+
"text-align-right",
|
|
76
|
+
"link",
|
|
77
|
+
"image",
|
|
78
|
+
"minus",
|
|
79
|
+
"arrow-u-up-left",
|
|
80
|
+
"arrow-u-up-right",
|
|
81
|
+
"terminal",
|
|
82
|
+
"article"
|
|
60
83
|
],
|
|
61
84
|
"exports": {
|
|
62
85
|
".": {
|
|
@@ -79,6 +102,10 @@
|
|
|
79
102
|
"types": "./types/ship-ui-core-sh-form-field-experimental.d.ts",
|
|
80
103
|
"default": "./fesm2022/ship-ui-core-sh-form-field-experimental.mjs"
|
|
81
104
|
},
|
|
105
|
+
"./ship-a11y-keybindings": {
|
|
106
|
+
"types": "./types/ship-ui-core-ship-a11y-keybindings.d.ts",
|
|
107
|
+
"default": "./fesm2022/ship-ui-core-ship-a11y-keybindings.mjs"
|
|
108
|
+
},
|
|
82
109
|
"./ship-accordion": {
|
|
83
110
|
"types": "./types/ship-ui-core-ship-accordion.d.ts",
|
|
84
111
|
"default": "./fesm2022/ship-ui-core-ship-accordion.mjs"
|
|
@@ -127,6 +154,10 @@
|
|
|
127
154
|
"types": "./types/ship-ui-core-ship-divider.d.ts",
|
|
128
155
|
"default": "./fesm2022/ship-ui-core-ship-divider.mjs"
|
|
129
156
|
},
|
|
157
|
+
"./ship-editor": {
|
|
158
|
+
"types": "./types/ship-ui-core-ship-editor.d.ts",
|
|
159
|
+
"default": "./fesm2022/ship-ui-core-ship-editor.mjs"
|
|
160
|
+
},
|
|
130
161
|
"./ship-event-card": {
|
|
131
162
|
"types": "./types/ship-ui-core-ship-event-card.d.ts",
|
|
132
163
|
"default": "./fesm2022/ship-ui-core-ship-event-card.mjs"
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
|
|
3
3
|
declare class ShipFormFieldExperimental {
|
|
4
|
+
#private;
|
|
4
5
|
firstInput: _angular_core.WritableSignal<string | undefined>;
|
|
5
6
|
hello: _angular_core.EffectRef;
|
|
7
|
+
constructor();
|
|
6
8
|
myClick(): void;
|
|
7
9
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShipFormFieldExperimental, never>;
|
|
8
10
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShipFormFieldExperimental, "sh-form-field-experimental", never, {}, {}, never, ["*"], true, never>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
declare const DEFAULT_KEYBINDINGS: Record<string, string>;
|
|
5
|
+
declare class ShipA11yKeybindingsService {
|
|
6
|
+
#private;
|
|
7
|
+
/**
|
|
8
|
+
* Returns true if the platform is running on macOS.
|
|
9
|
+
*/
|
|
10
|
+
get isMac(): boolean;
|
|
11
|
+
constructor();
|
|
12
|
+
/**
|
|
13
|
+
* Registers default shortcuts for actions.
|
|
14
|
+
* If an override already exists for a given action, the override takes precedence.
|
|
15
|
+
*/
|
|
16
|
+
registerDefaults(defaults: Record<string, string>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Registers overrides for actions. Overwrites any existing or default bindings.
|
|
19
|
+
*/
|
|
20
|
+
registerOverrides(overrides: Record<string, string>): void;
|
|
21
|
+
/**
|
|
22
|
+
* Retrieves the active shortcut string for a registered action.
|
|
23
|
+
*/
|
|
24
|
+
getShortcut(action: string): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Retrieves the default shortcut string for a registered action.
|
|
27
|
+
*/
|
|
28
|
+
getDefaultShortcut(action: string): string | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Gets a formatted, user-friendly shortcut string for display.
|
|
31
|
+
* E.g. 'ctrlOrCmd+Shift+KeyK' -> '⌘⇧K' on macOS, 'Ctrl+Shift+K' on Windows/Linux.
|
|
32
|
+
* Supports comma-separated multiple shortcuts (e.g. 'ArrowRight, d' -> 'ArrowRight, D').
|
|
33
|
+
*/
|
|
34
|
+
getDisplayShortcut(action: string): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Checks if a KeyboardEvent matches the configured keybinding for a given action.
|
|
37
|
+
* Supports comma-separated multiple shortcuts (e.g. 'ArrowRight, d').
|
|
38
|
+
*/
|
|
39
|
+
matches(event: KeyboardEvent, action: string): boolean;
|
|
40
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShipA11yKeybindingsService, never>;
|
|
41
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ShipA11yKeybindingsService>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
declare class ShipA11yKeybindingsDirective {
|
|
45
|
+
#private;
|
|
46
|
+
/**
|
|
47
|
+
* The registered action name (e.g. 'table.next-page', 'dialog.close').
|
|
48
|
+
*/
|
|
49
|
+
shA11yKeybinding: _angular_core.InputSignal<string>;
|
|
50
|
+
/**
|
|
51
|
+
* Defines whether the keybinding listener is 'local' (host element keydown) or 'global' (window keydown).
|
|
52
|
+
* Default is 'local'.
|
|
53
|
+
*/
|
|
54
|
+
mode: _angular_core.InputSignal<"global" | "local">;
|
|
55
|
+
/**
|
|
56
|
+
* Whether to prevent the default action when the keybinding matches.
|
|
57
|
+
*/
|
|
58
|
+
preventDefault: _angular_core.InputSignal<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Whether to stop event propagation when the keybinding matches.
|
|
61
|
+
*/
|
|
62
|
+
stopPropagation: _angular_core.InputSignal<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Event emitted when the keybinding is triggered.
|
|
65
|
+
*/
|
|
66
|
+
triggered: _angular_core.OutputEmitterRef<KeyboardEvent>;
|
|
67
|
+
constructor();
|
|
68
|
+
/**
|
|
69
|
+
* Local keydown listener when mode is 'local'
|
|
70
|
+
*/
|
|
71
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
72
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShipA11yKeybindingsDirective, never>;
|
|
73
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ShipA11yKeybindingsDirective, "[shA11yKeybinding]", never, { "shA11yKeybinding": { "alias": "shA11yKeybinding"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "preventDefault": { "alias": "preventDefault"; "required": false; "isSignal": true; }; "stopPropagation": { "alias": "stopPropagation"; "required": false; "isSignal": true; }; }, { "triggered": "triggered"; }, never, never, true, never>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare const SHIP_A11Y_KEYBINDINGS_OVERRIDE: InjectionToken<Record<string, string>>;
|
|
77
|
+
|
|
78
|
+
interface ParsedKeybinding {
|
|
79
|
+
ctrlKey: boolean;
|
|
80
|
+
metaKey: boolean;
|
|
81
|
+
altKey: boolean;
|
|
82
|
+
shiftKey: boolean;
|
|
83
|
+
key?: string;
|
|
84
|
+
code?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parses a keybinding shortcut string shorthand into a structured ParsedKeybinding object.
|
|
88
|
+
* Supporting modifiers: ctrlOrCmd (OS adaptive), ctrl, cmd/meta, alt/option, shift.
|
|
89
|
+
*/
|
|
90
|
+
declare function parseKeybinding(shorthand: string, isMacPlatform: boolean): ParsedKeybinding;
|
|
91
|
+
/**
|
|
92
|
+
* Checks if a KeyboardEvent matches a ParsedKeybinding structure.
|
|
93
|
+
*/
|
|
94
|
+
declare function matchKeybinding(event: KeyboardEvent, parsed: ParsedKeybinding): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Formats a shorthand shortcut string into an OS-specific user-friendly string for display.
|
|
97
|
+
* E.g. 'ctrlOrCmd+Shift+KeyK' -> '⌘⇧K' on macOS, and 'Ctrl+Shift+K' on Windows/Linux.
|
|
98
|
+
*/
|
|
99
|
+
declare function formatShortcut(shorthand: string, isMacPlatform: boolean): string;
|
|
100
|
+
|
|
101
|
+
export { DEFAULT_KEYBINDINGS, SHIP_A11Y_KEYBINDINGS_OVERRIDE, ShipA11yKeybindingsDirective, ShipA11yKeybindingsService, formatShortcut, matchKeybinding, parseKeybinding };
|
|
102
|
+
export type { ParsedKeybinding };
|