@ship-ui/core 0.16.2 → 0.16.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ship-ui-core.mjs","sources":["../../../projects/ship-ui/src/lib/ship-icon/ship-icon.ts","../../../projects/ship-ui/src/lib/utilities/class-mutation-signal.ts","../../../projects/ship-ui/src/lib/utilities/ship-config.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert-container.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert-container.html","../../../projects/ship-ui/src/lib/ship-alert/ship-alert.module.ts","../../../projects/ship-ui/src/lib/utilities/random-id.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert.service.ts","../../../projects/ship-ui/src/lib/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/src/lib/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/src/lib/ship-blueprint/autolayout.ts","../../../projects/ship-ui/src/lib/ship-blueprint/validatePorts.ts","../../../projects/ship-ui/src/lib/ship-blueprint/ship-blueprint.ts","../../../projects/ship-ui/src/lib/ship-button-group/ship-button-group.ts","../../../projects/ship-ui/src/lib/ship-button/ship-button.ts","../../../projects/ship-ui/src/lib/ship-card/ship-card.ts","../../../projects/ship-ui/src/lib/ship-checkbox/ship-checkbox.ts","../../../projects/ship-ui/src/lib/ship-chip/ship-chip.ts","../../../projects/ship-ui/src/lib/ship-color-picker/ship-color-picker.ts","../../../projects/ship-ui/src/lib/ship-datepicker/ship-datepicker.ts","../../../projects/ship-ui/src/lib/ship-popover/ship-popover.ts","../../../projects/ship-ui/src/lib/ship-form-field/ship-form-field-popover.ts","../../../projects/ship-ui/src/lib/utilities/content-projection-signal.ts","../../../projects/ship-ui/src/lib/ship-datepicker/ship-datepicker-input.ts","../../../projects/ship-ui/src/lib/ship-datepicker/ship-daterange-input.ts","../../../projects/ship-ui/src/lib/ship-divider/ship-divider.ts","../../../projects/ship-ui/src/lib/ship-event-card/ship-event-card.ts","../../../projects/ship-ui/src/lib/ship-form-field/ship-form-field.ts","../../../projects/ship-ui/src/lib/ship-file-upload/ship-file-upload.ts","../../../projects/ship-ui/src/lib/ship-list/ship-list.ts","../../../projects/ship-ui/src/lib/utilities/create-input-signal.ts","../../../projects/ship-ui/src/lib/utilities/observe-elements.ts","../../../projects/ship-ui/src/lib/ship-menu/ship-menu.ts","../../../projects/ship-ui/src/lib/ship-progress-bar/ship-progress-bar.ts","../../../projects/ship-ui/src/lib/ship-radio/ship-radio.ts","../../../projects/ship-ui/src/lib/ship-range-slider/ship-range-slider.ts","../../../projects/ship-ui/src/lib/ship-spinner/ship-spinner.component.ts","../../../projects/ship-ui/src/lib/ship-select/ship-select.ts","../../../projects/ship-ui/src/lib/ship-sidenav/ship-sidenav.ts","../../../projects/ship-ui/src/lib/ship-sortable/grid-sortable.ts","../../../projects/ship-ui/src/lib/ship-sortable/ship-sortable.ts","../../../projects/ship-ui/src/lib/ship-stepper/ship-stepper.ts","../../../projects/ship-ui/src/lib/ship-table/ship-table.ts","../../../projects/ship-ui/src/lib/ship-tabs/ship-tabs.ts","../../../projects/ship-ui/src/lib/ship-toggle-card/ship-toggle-card.ts","../../../projects/ship-ui/src/lib/ship-toggle/ship-toggle.ts","../../../projects/ship-ui/src/lib/ship-virtual-scroll/ship-virtual-scroll.component.ts","../../../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/directives/ship-tooltip.directive.ts","../../../projects/ship-ui/src/public-api.ts","../../../projects/ship-ui/src/ship-ui-core.ts"],"sourcesContent":["import { AfterContentInit, ChangeDetectionStrategy, Component, ElementRef, inject, Renderer2 } from '@angular/core';\n\nconst iconTypes = ['bold', 'thin', 'light', 'fill', 'duotone'];\n\n@Component({\n selector: 'sh-icon',\n standalone: true,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipIcon implements AfterContentInit {\n #selfRef: ElementRef<HTMLElement> = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n ngAfterContentInit(): void {\n const textContent = this.#selfRef.nativeElement.textContent?.trim();\n\n if (!textContent) return;\n\n const potentialType = textContent.split('-').at(-1);\n\n if (potentialType && iconTypes.includes(potentialType)) {\n this.#renderer.addClass(this.#selfRef.nativeElement, potentialType);\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","import { InjectionToken } from '@angular/core';\n\nexport const SHIP_CONFIG = new InjectionToken<ShipConfig>('Ship UI Config');\n\nexport interface ShipConfig {\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 { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, signal } from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\nimport { ShipAlertService } from './ship-alert.service';\n\nexport type ShipAlertType = 'error' | 'success' | 'warn' | 'primary' | 'accent' | 'question';\n\nconst POSSIBLE_VARIANTS = ['simple', 'outlined', 'flat', 'raised'];\n\n@Component({\n selector: 'sh-alert',\n imports: [ShipIcon],\n template: `\n <div class=\"alert\">\n <div #ref class=\"icon\" [style.display]=\"!ref.children.length ? 'none' : 'block'\">\n <ng-content select=\"[icon]\" />\n <ng-content select=\"sh-icon\" />\n </div>\n\n <div class=\"icon\">\n @let _alertClasses = currentClasses();\n\n @if (_alertClasses.includes('primary')) {\n <sh-icon class=\"state-icon\">info</sh-icon>\n } @else if (_alertClasses.includes('accent')) {\n <sh-icon class=\"state-icon\">info</sh-icon>\n } @else if (_alertClasses.includes('warn')) {\n <sh-icon class=\"state-icon\">warning</sh-icon>\n } @else if (_alertClasses.includes('error')) {\n <sh-icon class=\"state-icon\">warning-octagon</sh-icon>\n } @else if (_alertClasses.includes('success')) {\n <sh-icon class=\"state-icon\">check-circle</sh-icon>\n } @else {\n <sh-icon class=\"state-icon\">question</sh-icon>\n }\n </div>\n\n <div class=\"title\">\n <ng-content select=\"[title]\" />\n <ng-content />\n </div>\n\n @if (id()) {\n <sh-icon class=\"close-icon\" (click)=\"removeAlert()\">plus</sh-icon>\n }\n\n <div class=\"content\">\n <ng-content select=\"[content]\" />\n <ng-content select=\"p\" />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'activeClass()',\n },\n})\nexport class ShipAlert {\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n variant = signal<string>(this.#shConfig?.alertVariant ?? '');\n _el = inject(ElementRef); // Used by alert container\n alertService = input<ShipAlertService | null>(null);\n id = input<string | null>(null);\n\n currentClasses = classMutationSignal();\n activeClass = computed(() => {\n const variant = this.variant();\n const _current = `${this.currentClasses()} sh-sheet`;\n\n if (!variant) return _current;\n\n const hasVariant = POSSIBLE_VARIANTS.find((x) => this.currentClasses().includes(x));\n return hasVariant ? _current : `${_current} ${variant}`;\n });\n\n removeAlert() {\n if (this.id() && this.alertService()) {\n this.alertService()?.removeAlert(this.id() as string);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n QueryList,\n computed,\n effect,\n input,\n viewChild,\n} from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipAlert } from './ship-alert';\nimport { ShipAlertService } from './ship-alert.service';\n\n@Component({\n selector: 'ship-alert-container',\n imports: [ShipAlert, ShipIcon],\n templateUrl: './ship-alert-container.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipAlertContainer {\n inline = input<string | null>(null);\n alerts = viewChild.required<QueryList<ShipAlert>>('alerts');\n scroller = viewChild.required<ElementRef<HTMLDivElement>>('scroller');\n alertService = input.required<ShipAlertService>();\n\n // alertHistory = this.alertService()?.alertHistory;\n // alertHistoryIsOpen = this.alertService()?.alertHistoryIsOpen;\n // alertHistoryIsHidden = this.alertService()?.alertHistoryIsHidden;\n\n numberOfOpenAlerts = computed(() => {\n return this.alertService()\n .alertHistory()\n .filter((x) => x.isOpen).length;\n });\n\n readonly #e = effect(() => {\n this.alertService().alertHistory();\n this.alertService().alertHistoryIsOpen();\n this.#scrollToBottom();\n });\n\n #scrollToBottom() {\n if (this.scroller() && this.scroller().nativeElement) {\n this.scroller().nativeElement.scrollTo(0, this.scroller().nativeElement.scrollHeight);\n }\n }\n\n @HostListener('mouseover')\n onMouseOver() {\n if (typeof this.inline === 'string') return;\n\n this.alertService().setHidden(false);\n }\n\n @HostListener('mouseout')\n onMouseOut() {\n if (typeof this.inline === 'string') return;\n\n this.alertService().setHidden(true);\n }\n\n getElementHeight(i: number) {\n if (!this.alerts) return 0;\n\n const elementHeights = this.alerts()\n .toArray()\n .map((element) => element._el.nativeElement.querySelector('.ship-alert-item').offsetHeight);\n\n if (!elementHeights) return 0;\n\n let totalHeight = 0;\n const elementTransformPos = elementHeights.map((height, i) => {\n totalHeight += height;\n return totalHeight - elementHeights[0];\n });\n\n return elementTransformPos[i];\n }\n\n transformY(i: number) {\n return `translateY(calc(-${this.getElementHeight(i - 1)}px + (-10px * ${i})))`;\n }\n\n transitionDelay(i: number, allOpen = false) {\n return allOpen\n ? this.alertService().alertHistory().length - 1 * 40 + 'ms'\n : (this.numberOfOpenAlerts() - i) * 40 + 'ms';\n }\n}\n","<div class=\"scroller\" #scroller>\n <div class=\"container\">\n @for (alert of this.alertService().alertHistory(); track $index) {\n <sh-alert\n #alerts\n [class]=\"alert.type\"\n [id]=\"alert.id\"\n [alertService]=\"alertService()\"\n [style.transition-delay]=\"transitionDelay($index, true)\"\n [class.animate-in]=\"alert.animateIn\"\n [class.animate-out]=\"alert.animateOut\"\n [class.is-hidden]=\"this.alertService().alertHistoryIsHidden() && !alert.isOpen\">\n <div title>{{ alert.title }}</div>\n\n @if (alert.content) {\n <div content>\n {{ alert.content }}\n </div>\n }\n </sh-alert>\n }\n </div>\n</div>\n<div\n class=\"tray\"\n [class.tray-is-hidden]=\"!this.alertService().alertHistoryIsHidden()\"\n (mouseover)=\"this.onMouseOver()\"\n (mouseout)=\"this.onMouseOut()\">\n <sh-icon class=\"small\">info</sh-icon>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ShipAlert } from './ship-alert';\nimport { ShipAlertContainer } from './ship-alert-container';\n\n@NgModule({\n imports: [ShipAlert, ShipAlertContainer],\n exports: [ShipAlert, ShipAlertContainer],\n providers: [],\n})\nexport class ShipAlertModule {}\n","export function generateUniqueId() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n","import { Injectable, signal } from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\nimport { ShipAlertType } from './ship-alert';\n\nexport type ShipAlertItem = {\n type: ShipAlertType;\n title: string;\n content?: string;\n};\n\nexport type ShipAlertItemInternal = ShipAlertItem & {\n id: string;\n isOpen: boolean;\n animateOut: boolean;\n animateIn: boolean;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipAlertService {\n alertHistory = signal<ShipAlertItemInternal[]>([]);\n alertHistoryIsOpen = signal<boolean>(false);\n alertHistoryIsHidden = signal<boolean>(true);\n\n error(message: string | null | undefined) {\n this.addAlert({\n type: 'error',\n title: message ?? 'An error occured',\n });\n }\n\n success(message: string) {\n this.addAlert({\n type: 'success',\n title: message,\n });\n }\n\n question(message: string) {\n this.addAlert({\n type: 'question',\n title: message,\n });\n }\n\n warning(message: string) {\n this.addAlert({\n type: 'warn',\n title: message,\n });\n }\n\n info(message: string) {\n this.addAlert({\n type: 'primary',\n title: message,\n });\n }\n\n addAlert(alert: ShipAlertItem) {\n const id = generateUniqueId();\n\n this.alertHistory.update((history) => [\n { ...alert, isOpen: true, animateIn: true, animateOut: false, id },\n ...history,\n ]);\n\n setTimeout(() => {\n this.alertHistory.update((history) =>\n history.map((item) => ({\n ...item,\n animateIn: item.id === id ? false : item.animateIn,\n }))\n );\n }, 40);\n\n setTimeout(() => {\n this.hideAlert(id);\n }, 2500);\n }\n\n removeAlert(id: string) {\n this.alertHistory.update((history) =>\n history.map((item) => ({\n ...item,\n animateOut: item.id === id ? false : item.animateOut,\n }))\n );\n\n setTimeout(() => {\n this.alertHistory.update((history) => history.filter((item) => item.id !== id));\n }, 300);\n }\n\n hideAlert(id: string) {\n this.alertHistory.update((history) =>\n history.map((item) => ({\n ...item,\n isOpen: item.id === id ? false : item.isOpen,\n }))\n );\n }\n\n setHidden(isHidden: boolean) {\n this.alertHistoryIsHidden.set(isHidden);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\n\nexport type ShipDialogOptions = {\n class?: 'default' | 'type-b' | string;\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n closeOnOutsideClick?: boolean;\n};\n\nconst DEFAULT_OPTIONS: ShipDialogOptions = {\n class: 'default',\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n maxHeight: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n closeOnOutsideClick: true,\n};\n\n@Component({\n selector: 'sh-dialog',\n imports: [],\n template: `\n @let options = this.defaultOptionMerge();\n\n @if (isOpen()) {\n <dialog\n shDialog\n #dialogRef\n [class]=\"options.class\"\n [style.width]=\"options.width ?? ''\"\n [style.max-width]=\"options.maxWidth ?? ''\"\n [style.max-height]=\"options.maxHeight ?? ''\"\n [style.height]=\"options.height ?? ''\">\n <div class=\"content\">\n <ng-content />\n </div>\n\n @if (this.defaultOptionMerge().closeOnOutsideClick) {\n <div class=\"closeable-overlay\" (click)=\"isOpen.set(false)\"></div>\n }\n </dialog>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDialog {\n #document = inject(DOCUMENT);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n dialogRef = viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n isOpen = model<boolean>(false);\n options = input<Partial<ShipDialogOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...{ class: this.#shConfig?.dialogType ?? 'default' },\n ...this.options(),\n }));\n\n abortController: AbortController | null = null;\n isOpenEffect = effect(() => {\n const dialogEl = this.dialogRef()?.nativeElement;\n\n if (!dialogEl) return;\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n if (this.isOpen()) {\n dialogEl.showModal();\n dialogEl.addEventListener(\n 'close',\n () => {\n this.isOpen.set(false);\n this.closed.emit();\n },\n {\n signal: this.abortController?.signal,\n }\n );\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n }\n\n if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {\n this.isOpen.set(false);\n }\n },\n {\n signal: this.abortController?.signal,\n }\n );\n } else {\n dialogEl.close();\n\n queueMicrotask(() => this.closed.emit());\n }\n });\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DOCUMENT,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n Type,\n} from '@angular/core';\nimport { ShipDialog, ShipDialogOptions } from './ship-dialog';\n\nexport type Exact<T, U> = U extends T ? (keyof U extends keyof T ? U : never) : never;\nexport type ComponentDataType<T> = T extends { data: InputSignal<infer K> } ? K : void;\nexport type ComponentClosedType<T> = T extends { closed: OutputEmitterRef<infer U> } ? U : undefined;\n\nexport interface ShipDialogServiceOptions<TData = any, TResult = undefined> extends ShipDialogOptions {\n data?: TData extends void ? void : TData & Exact<TData, TData>;\n closed?: (res: TResult) => void;\n}\n\nexport type ShipDialogInstance<T> = {\n component: T;\n close: (res?: ComponentClosedType<T> | undefined) => void;\n closed: OutputEmitterRef<ComponentClosedType<T> | undefined>;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipDialogService {\n #document = inject(DOCUMENT);\n #bodyEl = this.#document.querySelector('body');\n #appRef = inject(ApplicationRef);\n\n compRef: ComponentRef<ShipDialog> | null = null;\n insertedCompRef: ComponentRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n T extends { data?: InputSignal<any>; closed?: OutputEmitterRef<any> },\n K = ComponentDataType<T>,\n U = ComponentClosedType<T>,\n _Options extends ShipDialogServiceOptions<K, U | undefined> = ShipDialogServiceOptions<K, U | undefined>,\n >(component: Type<T>, options?: _Options): ShipDialogInstance<T> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\n\n this.insertedCompRef = createComponent<T>(component, {\n environmentInjector,\n });\n\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes: [[this.insertedCompRef.location.nativeElement]],\n });\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = insertedInstance.data;\n const closedField = insertedInstance.closed;\n\n if (data) {\n if (isSignal(dataField)) {\n this.insertedCompRef.setInput('data', data);\n } else if (!isSignal(dataField)) {\n throw new Error('data is not an input signal on the passed component');\n }\n }\n\n if (closedField instanceof OutputEmitterRef) {\n this.closedFieldSub = closedField.subscribe((arg: U | undefined) => {\n this.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n closed?.(arg as U);\n\n (this.compRef?.instance.closed as OutputEmitterRef<U | undefined>).emit(arg);\n });\n }\n\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.#appRef.attachView(this.compRef.hostView);\n\n this.insertedCompRef.changeDetectorRef.detectChanges();\n this.compRef.changeDetectorRef.detectChanges();\n this.compRef.instance.isOpen.set(true);\n this.compRef.setInput('options', rest);\n\n this.compClosedSub = this.compRef.instance.closed.subscribe(() => closeAction());\n\n const _self = this;\n\n function closeAction(arg: U | undefined = undefined) {\n _self.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n closedField.emit(arg as any);\n }\n\n closed?.(arg as U);\n }\n\n return {\n ...(this.insertedCompRef.instance as T),\n component: this.insertedCompRef.instance as T,\n close: closeAction,\n closed: this.compRef.instance.closed as OutputEmitterRef<U | undefined>,\n } as ShipDialogInstance<T>;\n }\n\n #createEl(): Element {\n const wrapperEl = this.#document.createElement('sh-dialog-ref');\n wrapperEl.id = 'sh-dialog-ref';\n\n if (!this.#document.getElementById('sh-dialog-ref')) {\n this.#bodyEl?.append(wrapperEl);\n }\n\n return this.#document.getElementById('sh-dialog-ref')!;\n }\n\n #cleanupRefs(instant = false) {\n const _self = this;\n\n instant ? cleanup : queueMicrotask(() => cleanup());\n\n function cleanup() {\n if (_self.insertedCompRef) {\n _self.#appRef.detachView(_self.insertedCompRef.hostView);\n _self.closedFieldSub?.unsubscribe();\n _self.insertedCompRef.destroy();\n }\n\n if (!_self.compRef) return;\n\n _self.#appRef.detachView(_self.compRef.hostView);\n _self.compClosedSub?.unsubscribe();\n _self.compRef.destroy();\n }\n }\n\n ngOnDestroy() {\n this.#cleanupRefs(true);\n }\n}\n","import { BlueprintNode } from './ship-blueprint';\n\nexport function layoutNodes(nodes: BlueprintNode[]): BlueprintNode[] {\n if (!nodes || nodes.length === 0) return nodes;\n\n const layoutedNodes = structuredClone(nodes);\n const visited = new Set<string>();\n const unconnectedNodes: BlueprintNode[] = [];\n const connectedGraphs: BlueprintNode[][] = [];\n\n const allToNodes = new Set(layoutedNodes.flatMap((node) => node.connections).map((conn) => conn.toNode));\n const rootNodes = layoutedNodes.filter((node) => !allToNodes.has(node.id));\n\n for (const node of layoutedNodes) {\n if (!node.connections.length) {\n unconnectedNodes.push(node);\n }\n }\n\n for (const root of rootNodes) {\n if (!visited.has(root.id)) {\n const graph: BlueprintNode[] = [];\n traverseGraph(root, graph, visited, layoutedNodes);\n if (graph.length > 0) {\n connectedGraphs.push(graph);\n }\n }\n }\n\n positionUnconnectedNodes(unconnectedNodes);\n\n let currentX = 20;\n let currentY = 20;\n connectedGraphs.forEach((graph) => {\n const layoutedGraph = traverseAndLayout(graph);\n positionGraph(layoutedGraph, currentX, currentY);\n currentY += getGraphHeight(layoutedGraph) + 200;\n });\n\n return layoutedNodes;\n}\n\nfunction traverseGraph(\n startNode: BlueprintNode,\n graph: BlueprintNode[],\n visited: Set<string>,\n allNodes: BlueprintNode[]\n) {\n const queue = [startNode];\n visited.add(startNode.id);\n let head = 0;\n while (head < queue.length) {\n const node = queue[head++];\n graph.push(node);\n node.connections.forEach((conn) => {\n const toNode = allNodes.find((n) => n.id === conn.toNode);\n if (toNode && !visited.has(toNode.id)) {\n visited.add(toNode.id);\n queue.push(toNode);\n }\n });\n }\n}\n\nfunction positionUnconnectedNodes(nodes: BlueprintNode[]) {\n nodes.forEach((node, index) => {\n node.coordinates[0] = 20 + index * 200;\n node.coordinates[1] = 20;\n });\n}\n\nfunction traverseAndLayout(graph: BlueprintNode[]): BlueprintNode[] {\n const graphNodeMap = new Map<string, BlueprintNode>(graph.map((n) => [n.id, n]));\n const incomingConnectionCount = new Map<string, number>();\n\n graph.forEach((node) => {\n incomingConnectionCount.set(node.id, 0);\n });\n graph\n .flatMap((n) => n.connections)\n .forEach((conn) => {\n if (graphNodeMap.has(conn.toNode)) {\n incomingConnectionCount.set(conn.toNode, (incomingConnectionCount.get(conn.toNode) || 0) + 1);\n }\n });\n\n const roots = graph.filter((node) => (incomingConnectionCount.get(node.id) || 0) === 0);\n const layoutedNodes = new Set<string>();\n\n const queue = [...roots];\n let head = 0;\n\n while (head < queue.length) {\n const currentNode = queue[head++];\n layoutedNodes.add(currentNode.id);\n\n let outputConnectionIndex = 0;\n const connectedNodes: BlueprintNode[] = [];\n\n currentNode.connections.forEach((conn) => {\n const toNode = graphNodeMap.get(conn.toNode);\n if (toNode && !layoutedNodes.has(toNode.id)) {\n connectedNodes.push(toNode);\n }\n });\n\n connectedNodes.forEach((toNode) => {\n toNode.coordinates[0] = currentNode.coordinates[0] + 200;\n if (connectedNodes.length > 1) {\n const verticalOffset = (outputConnectionIndex - (connectedNodes.length - 1) / 2) * 200;\n toNode.coordinates[1] = currentNode.coordinates[1] + verticalOffset;\n } else {\n toNode.coordinates[1] = currentNode.coordinates[1];\n }\n\n queue.push(toNode);\n outputConnectionIndex++;\n });\n }\n return graph;\n}\n\nfunction positionGraph(graph: BlueprintNode[], startX: number, startY: number) {\n const minX = Math.min(...graph.map((n) => n.coordinates[0]));\n const minY = Math.min(...graph.map((n) => n.coordinates[1]));\n graph.forEach((node) => {\n node.coordinates[0] += startX - minX;\n node.coordinates[1] += startY - minY;\n });\n}\n\nfunction getGraphHeight(graph: BlueprintNode[]): number {\n if (!graph.length) return 0;\n const maxY = Math.max(...graph.map((n) => n.coordinates[1]));\n const minY = Math.min(...graph.map((n) => n.coordinates[1]));\n return maxY - minY;\n}\n","import { BlueprintNode } from './ship-blueprint';\n\nexport type PortValidationError = {\n nodeId: string;\n duplicatePortIds: string[];\n};\n\nexport function findDuplicatePortIDs(nodes: BlueprintNode[]): PortValidationError[] {\n const errors: PortValidationError[] = [];\n\n for (const node of nodes) {\n const portIdCounts = new Map<string, number>();\n const allPorts = [...node.inputs, ...node.outputs];\n\n for (const port of allPorts) {\n const count = portIdCounts.get(port.id) || 0;\n portIdCounts.set(port.id, count + 1);\n }\n\n const duplicatePortIds: string[] = [];\n for (const [id, count] of portIdCounts.entries()) {\n if (count > 1) {\n duplicatePortIds.push(id);\n }\n }\n\n if (duplicatePortIds.length > 0) {\n errors.push({\n nodeId: node.id,\n duplicatePortIds: duplicatePortIds,\n });\n }\n }\n\n return errors;\n}\n\nexport function findDuplicateNodeIDs(nodes: BlueprintNode[]): string[] {\n const nodeIdCounts = new Map<string, number>();\n\n for (const node of nodes) {\n const count = nodeIdCounts.get(node.id) || 0;\n nodeIdCounts.set(node.id, count + 1);\n }\n\n const duplicateNodeIds: string[] = [];\n for (const [id, count] of nodeIdCounts.entries()) {\n if (count > 1) {\n duplicateNodeIds.push(id);\n }\n }\n\n return duplicateNodeIds;\n}\n","import { isPlatformBrowser, JsonPipe } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n OnDestroy,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ShipButton, ShipCard, ShipIcon } from '../../public-api';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { layoutNodes } from './autolayout';\nimport { findDuplicateNodeIDs, findDuplicatePortIDs } from './validatePorts';\n\n// TODO - disallow infinite loops\n// TODO - Autolayout should take port order into account\n// TODO - drag and drop new nodes into the canvas (takes an input creatableNodes without coordinates) this are shown in a right side panel and can be dragged into the canvas\n\ntype Port = { id: string; name: string };\n\nexport type BlueprintNode = {\n id: string;\n name?: string;\n coordinates: Coordinates;\n inputs: Port[];\n outputs: Port[];\n connections: Connection[];\n};\n\ntype Connection = { fromNode: string; fromPort: string; toNode: string; toPort: string };\ntype DragState = { fromNode: string; fromPort: string; x2: number; y2: number };\n\nexport type Coordinates = [x: number, y: number];\n\nexport const TEST_NODES: BlueprintNode[] = [\n {\n id: 'a1',\n name: 'hello a1',\n coordinates: [0, 0],\n inputs: [],\n outputs: [{ id: 'out-1', name: 'Start Output' }],\n connections: [{ fromNode: 'a1', fromPort: 'out-1', toNode: 'b1', toPort: 'in-1' }],\n },\n {\n id: 'b1',\n coordinates: [0, 0],\n inputs: [\n { id: 'in-1', name: 'Input A' },\n { id: 'in-1', name: 'Another Input A' },\n ],\n outputs: [{ id: 'out-1', name: 'Output B' }],\n connections: [\n { fromNode: 'b1', fromPort: 'out-1', toNode: 'c6', toPort: 'in-1' },\n { fromNode: 'a1', fromPort: 'out-1', toNode: 'b1', toPort: 'in-1' },\n ],\n },\n {\n id: 'c6',\n name: 'hello c6',\n coordinates: [0, 0],\n inputs: [{ id: 'in-1', name: 'Input C' }],\n outputs: [{ id: 'out-1', name: 'Output D' }],\n connections: [{ fromNode: 'b1', fromPort: 'out-1', toNode: 'c6', toPort: 'in-1' }],\n },\n];\n\ntype ValidationErrors = {\n duplicateNodeIds: string[];\n duplicatePortIds: {\n nodeId: string;\n duplicatePortIds: string[];\n }[];\n};\n\n@Component({\n selector: 'sh-blueprint',\n imports: [ShipCard, ShipIcon, JsonPipe, ShipButton],\n template: `\n <div\n class=\"canvas-container\"\n [class.locked]=\"isLocked()\"\n [class.hovering-connection]=\"highlightedConnection()\"\n (mousedown)=\"startPan($event)\"\n (mousemove)=\"pan($event)\"\n (wheel)=\"zoom($event)\"\n (touchstart)=\"handleTouchStart($event)\"\n (touchmove)=\"handleTouchMove($event)\"\n (touchend)=\"handleTouchEnd()\">\n <div class=\"action-panel\">\n <button shButton (click)=\"applyAutolayout()\" class=\"small\">\n Autolayout\n <sh-icon>tree-structure</sh-icon>\n </button>\n\n <ng-content />\n </div>\n\n <canvas #blueprintCanvas></canvas>\n\n @if (validationErrors()) {\n <sh-card class=\"validation-errors type-c\">\n Something went wrong you have\n <br />\n duplicate node IDs or port IDs\n <pre>{{ validationErrors() | json }}</pre>\n </sh-card>\n } @else {\n <div\n class=\"nodes-wrapper\"\n [style.transform]=\"'translate(' + panX() + 'px, ' + panY() + 'px) scale(' + zoomLevel() + ')'\"\n [style.transform-origin]=\"'0 0'\">\n @for (node of visibleNodes(); track node.id) {\n <sh-card\n class=\"node type-c\"\n [style.transform]=\"getDisplayCoordinates(node)\"\n (mouseenter)=\"isHoveringNode.set(true)\"\n (mouseleave)=\"isHoveringNode.set(false)\">\n <header (mousedown)=\"startNodeDrag($event, node.id)\" (touchstart)=\"startNodeDrag($event, node.id)\">\n <span class=\"node-title\">{{ node.name ? node.name : node.id }}</span>\n <sh-icon>list</sh-icon>\n </header>\n <div class=\"ports\">\n <div class=\"inputs\">\n @for (inputPort of node.inputs; track inputPort.id) {\n <div\n class=\"port-wrap\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-port-id]=\"inputPort.id\"\n (click)=\"endPortDrag($event, node.id, inputPort.id)\">\n <div class=\"port input-port\"></div>\n <span class=\"port-name\">{{ inputPort.name }}</span>\n </div>\n }\n </div>\n <div class=\"outputs\">\n @for (outputPort of node.outputs; track outputPort.id) {\n <div\n class=\"port-wrap\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-port-id]=\"outputPort.id\"\n (click)=\"startPortDrag($event, node.id, outputPort.id)\">\n <span class=\"port-name\">{{ outputPort.name }}</span>\n <div class=\"port output-port\"></div>\n </div>\n }\n </div>\n </div>\n </sh-card>\n }\n\n @if (showMidpointDiv()) {\n <div\n class=\"midpoint-div\"\n (click)=\"removeConnection()\"\n [style.left.px]=\"midpointDivPosition()?.x\"\n [style.top.px]=\"midpointDivPosition()?.y\">\n Remove connection\n <sh-icon>trash</sh-icon>\n </div>\n }\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipBlueprint implements AfterViewInit, OnDestroy {\n readonly #ZOOM_SPEED = 0.01;\n readonly #MAX_ZOOM = 1.5;\n readonly #MIN_ZOOM = 0.5;\n readonly #NODE_WIDTH = 180;\n readonly #NODE_HEADER_HEIGHT = 40;\n readonly #PORT_ROW_HEIGHT = 28;\n\n #document = inject(DOCUMENT);\n #platformId = inject(PLATFORM_ID);\n #selfRef = inject(ElementRef<HTMLElement>);\n #currentClass = classMutationSignal();\n #htmlClass = classMutationSignal(this.#document.documentElement);\n\n asDots = computed(() => this.#currentClass().includes('dots'));\n lightMode = computed(() => this.#htmlClass().includes('light'));\n\n forceUnique = input<boolean>(true);\n autoLayout = input<boolean>(false);\n gridSize = input(20);\n snapToGrid = input<boolean>(true);\n gridColor = input<[string, string]>(['#d8d8d8', '#2c2c2c']);\n\n nodes = model<BlueprintNode[]>([]);\n\n #currentGridColor = computed(() => this.gridColor()[this.lightMode() ? 0 : 1]);\n\n panX = signal(0);\n panY = signal(0);\n zoomLevel = signal(1);\n gridSnapSize = signal(20);\n\n isHoveringNode = signal(false);\n midpointDivPosition = signal<{ x: number; y: number } | null>(null);\n showMidpointDiv = signal(false);\n isLocked = signal(false);\n draggingConnection = signal<DragState | null>(null);\n validationErrors = signal<ValidationErrors | null>(null);\n highlightedConnection = signal<Connection | null>(null);\n\n #draggingNodeCoordinates = signal<Coordinates | null>(null);\n #isDragging = signal(false);\n #lastMouseX = signal(0);\n #lastMouseY = signal(0);\n #initialPinchDistance = signal(0);\n #isNodeDragging = signal(false);\n #draggedNodeId = signal<string | null>(null);\n #dragOffset = signal<Coordinates | null>(null);\n #connections = signal<Connection[]>([]);\n #canvasWidth = signal(0);\n #canvasHeight = signal(0);\n\n @ViewChild('blueprintCanvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\n #ctx!: CanvasRenderingContext2D;\n #resizeObserver!: ResizeObserver;\n\n visibleNodes = computed(() => {\n const nodes = this.nodes();\n const panX = this.panX();\n const panY = this.panY();\n const zoom = this.zoomLevel();\n const width = this.#canvasWidth();\n const height = this.#canvasHeight();\n\n if (width === 0 || height === 0) {\n return nodes;\n }\n\n const bufferX = width / zoom;\n const bufferY = height / zoom;\n\n const viewbox = {\n x1: -panX / zoom - bufferX,\n y1: -panY / zoom - bufferY,\n x2: (-panX + width) / zoom + bufferX,\n y2: (-panY + height) / zoom + bufferY,\n };\n\n return nodes.filter((node) => {\n const [x, y] = node.coordinates;\n return x > viewbox.x1 && x < viewbox.x2 && y > viewbox.y1 && y < viewbox.y2;\n });\n });\n\n constructor() {\n if (isPlatformBrowser(this.#platformId)) {\n effect(() => {\n this.asDots();\n this.panX();\n this.panY();\n this.zoomLevel();\n this.nodes();\n this.#connections();\n this.draggingConnection();\n this.#currentGridColor();\n this.highlightedConnection();\n this.#draggingNodeCoordinates();\n\n requestAnimationFrame(() => this.drawCanvas());\n });\n\n effect(() => {\n const nodes = this.nodes();\n const connectionsFromNodes = nodes.flatMap((node) => node.connections);\n const uniqueConnections = connectionsFromNodes.filter(\n (conn, index, self) =>\n index ===\n self.findIndex(\n (c) =>\n c.fromNode === conn.fromNode &&\n c.fromPort === conn.fromPort &&\n c.toNode === conn.toNode &&\n c.toPort === conn.toPort\n )\n );\n\n this.#connections.set(uniqueConnections);\n });\n }\n }\n\n ngAfterViewInit() {\n if (isPlatformBrowser(this.#platformId)) {\n const canvas = this.canvasRef.nativeElement;\n this.#ctx = canvas.getContext('2d')!;\n this.#resizeObserver = new ResizeObserver(() => this.updateCanvasSize());\n this.#resizeObserver.observe(this.#selfRef.nativeElement);\n this.updateCanvasSize();\n\n if (this.autoLayout()) {\n this.applyAutolayout();\n }\n\n if (this.forceUnique()) {\n this.#removeDuplicatesAndReinitiate();\n } else {\n this.#validateNodes();\n }\n }\n }\n\n ngOnDestroy() {\n if (this.#resizeObserver) {\n this.#resizeObserver.disconnect();\n }\n }\n\n @HostListener('document:mouseup', ['$event']) onMouseUp(event: MouseEvent) {\n if (this.isLocked()) return;\n\n this.endPan();\n this.endNodeDrag();\n }\n\n @HostListener('document:click', ['$event']) onClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (this.draggingConnection()) {\n if (!target.closest('.port')) {\n this.cancelPortDrag();\n }\n } else if (this.isLocked() && !target.closest('.midpoint-div')) {\n this.closeMidpointDiv();\n } else {\n this.#handleConnectionClick(event);\n }\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscape(event: KeyboardEvent) {\n if (this.draggingConnection()) {\n this.cancelPortDrag();\n } else if (this.isLocked()) {\n this.closeMidpointDiv();\n }\n }\n\n @HostListener('document:mousemove', ['$event']) onMouseMove(event: MouseEvent) {\n if (this.isLocked()) return;\n if (this.#isNodeDragging()) {\n this.nodeDrag(event);\n } else if (this.draggingConnection()) {\n this.updatePathOnMove(event);\n } else {\n this.pan(event);\n if (this.isHoveringNode()) {\n this.highlightedConnection.set(null);\n } else {\n this.#checkConnectionHover(event);\n }\n }\n }\n\n @HostListener('document:touchmove', ['$event']) onTouchMove(event: TouchEvent) {\n event.preventDefault();\n if (this.isLocked()) return;\n if (this.#isNodeDragging()) {\n this.nodeDrag(event.touches[0]);\n } else if (this.draggingConnection()) {\n this.updatePathOnMove(event.touches[0]);\n } else {\n this.handleTouchMove(event);\n }\n }\n\n @HostListener('document:touchend', ['$event']) onDocumentTouchEnd(event: TouchEvent) {\n if (this.isLocked()) return;\n\n this.handleTouchEnd();\n }\n\n applyAutolayout() {\n const newNodes = layoutNodes(this.nodes());\n this.nodes.set(newNodes);\n }\n\n updateCanvasSize() {\n const canvas = this.canvasRef.nativeElement;\n const rect = this.#selfRef.nativeElement.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n this.#ctx.scale(dpr, dpr);\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n this.#canvasWidth.set(rect.width);\n this.#canvasHeight.set(rect.height);\n\n this.drawCanvas();\n }\n\n drawCanvas() {\n if (!this.#ctx) return;\n\n const ctx = this.#ctx;\n const { width, height } = this.canvasRef.nativeElement;\n const dpr = window.devicePixelRatio || 1;\n ctx.clearRect(0, 0, width / dpr, height / dpr);\n ctx.save();\n ctx.translate(this.panX(), this.panY());\n ctx.scale(this.zoomLevel(), this.zoomLevel());\n this.drawGrid(ctx);\n this.drawConnections(ctx);\n\n if (this.draggingConnection()) {\n this.drawDraggingPath(ctx);\n }\n\n ctx.restore();\n }\n\n drawGrid(ctx: CanvasRenderingContext2D) {\n const { width, height } = this.canvasRef.nativeElement;\n const dpr = window.devicePixelRatio || 1;\n const zoom = this.zoomLevel();\n const panX = this.panX();\n const panY = this.panY();\n const gridSize = this.gridSize();\n const gridColor = this.#currentGridColor();\n const scaledGridSize = gridSize * zoom;\n const dynamicGridSize = scaledGridSize < 20 ? gridSize * 4 : gridSize;\n const startX = Math.floor(-panX / zoom / dynamicGridSize) * dynamicGridSize;\n const startY = Math.floor(-panY / zoom / dynamicGridSize) * dynamicGridSize;\n const endX = startX + width / dpr / zoom + dynamicGridSize;\n const endY = startY + height / dpr / zoom + dynamicGridSize;\n\n if (this.asDots()) {\n const dotRadius = 1 / zoom;\n ctx.fillStyle = gridColor;\n for (let x = startX; x < endX; x += dynamicGridSize) {\n for (let y = startY; y < endY; y += dynamicGridSize) {\n ctx.beginPath();\n ctx.arc(x, y, dotRadius, 0, 2 * Math.PI);\n ctx.fill();\n }\n }\n } else {\n ctx.beginPath();\n ctx.strokeStyle = gridColor;\n ctx.lineWidth = 1 / zoom;\n for (let x = startX; x < endX; x += dynamicGridSize) {\n ctx.moveTo(x, startY);\n ctx.lineTo(x, endY);\n }\n for (let y = startY; y < endY; y += dynamicGridSize) {\n ctx.moveTo(startX, y);\n ctx.lineTo(endX, y);\n }\n ctx.stroke();\n }\n }\n\n drawConnections(ctx: CanvasRenderingContext2D) {\n const highlighted = this.highlightedConnection();\n ctx.lineWidth = 2 / this.zoomLevel();\n\n for (const conn of this.#connections()) {\n const isHighlighted =\n highlighted?.fromNode === conn.fromNode &&\n highlighted?.fromPort === conn.fromPort &&\n highlighted?.toNode === conn.toNode &&\n highlighted?.toPort === conn.toPort;\n\n ctx.strokeStyle = isHighlighted ? '#ffc107' : '#888';\n ctx.beginPath();\n\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = this.getNodePortPosition(conn.toNode, conn.toPort);\n\n this.drawCurvedPath(ctx, startPos, endPos);\n ctx.stroke();\n }\n }\n\n drawDraggingPath(ctx: CanvasRenderingContext2D) {\n const conn = this.draggingConnection()!;\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = [conn.x2, conn.y2] as Coordinates;\n ctx.strokeStyle = '#5a9cf8';\n ctx.lineWidth = 2 / this.zoomLevel();\n ctx.beginPath();\n this.drawCurvedPath(ctx, startPos, endPos);\n ctx.stroke();\n }\n\n drawCurvedPath(ctx: CanvasRenderingContext2D, start: Coordinates, end: Coordinates) {\n const [x1, y1] = start;\n const [x2, y2] = end;\n const dx = Math.abs(x1 - x2) * 0.7;\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(x1 + dx, y1, x2 - dx, y2, x2, y2);\n }\n\n startNodeDrag(event: MouseEvent | TouchEvent, nodeId: string) {\n event.stopPropagation();\n event.preventDefault();\n\n this.#isNodeDragging.set(true);\n this.#draggedNodeId.set(nodeId);\n\n const clientX = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n const clientY = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const worldX = (clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const worldY = (clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n const draggedNode = this.nodes().find((n) => n.id === nodeId);\n\n if (draggedNode) {\n this.#dragOffset.set([worldX - draggedNode.coordinates[0], worldY - draggedNode.coordinates[1]]);\n }\n\n this.#lastMouseX.set(clientX);\n this.#lastMouseY.set(clientY);\n }\n\n endNodeDrag() {\n const draggedId = this.#draggedNodeId();\n const finalCoords = this.#draggingNodeCoordinates();\n\n if (draggedId && finalCoords) {\n this.nodes.update((nodes) => {\n const node = nodes.find((n) => n.id === draggedId);\n if (node) {\n node.coordinates = finalCoords;\n }\n return [...nodes];\n });\n }\n\n this.#isNodeDragging.set(false);\n this.#draggedNodeId.set(null);\n this.#dragOffset.set(null);\n this.#draggingNodeCoordinates.set(null);\n }\n\n nodeDrag(event: MouseEvent | Touch) {\n const draggedId = this.#draggedNodeId();\n if (!this.#isNodeDragging() || !draggedId) return;\n\n const { clientX, clientY } = event;\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const worldX = (clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const worldY = (clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n\n let newX = worldX - this.#dragOffset()![0];\n let newY = worldY - this.#dragOffset()![1];\n\n if (this.snapToGrid() || (event instanceof MouseEvent && event.shiftKey)) {\n const grid = this.gridSnapSize();\n newX = Math.round(newX / grid) * grid;\n newY = Math.round(newY / grid) * grid;\n }\n\n this.#draggingNodeCoordinates.set([newX, newY]);\n this.#lastMouseX.set(clientX);\n this.#lastMouseY.set(clientY);\n }\n\n startPortDrag(event: MouseEvent, nodeId: string, portId: string) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.draggingConnection()) this.cancelPortDrag();\n\n const node = this.nodes().find((n) => n.id === nodeId);\n\n if (node) {\n this.draggingConnection.set({\n fromNode: nodeId,\n fromPort: portId,\n x2: node.coordinates[0],\n y2: node.coordinates[1],\n });\n }\n\n this.updatePathOnMove(event);\n }\n\n endPortDrag(_: MouseEvent, toNodeId: string, toPortId: string) {\n if (!this.draggingConnection()) return;\n\n const from = this.draggingConnection()!;\n\n if (from.fromNode === toNodeId) {\n this.cancelPortDrag();\n return;\n }\n\n const newConnection: Connection = {\n fromNode: from.fromNode,\n fromPort: from.fromPort,\n toNode: toNodeId,\n toPort: toPortId,\n };\n\n this.nodes.update((nodes) => {\n const fromNode = nodes.find((n) => n.id === newConnection.fromNode);\n const toNode = nodes.find((n) => n.id === newConnection.toNode);\n\n if (fromNode && toNode) {\n const isDuplicateFrom = fromNode.connections.some(\n (c) =>\n c.fromNode === newConnection.fromNode &&\n c.fromPort === newConnection.fromPort &&\n c.toNode === newConnection.toNode &&\n c.toPort === newConnection.toPort\n );\n\n if (!isDuplicateFrom) {\n fromNode.connections = [...fromNode.connections, newConnection];\n }\n\n const isDuplicateTo = toNode.connections.some(\n (c) =>\n c.fromNode === newConnection.fromNode &&\n c.fromPort === newConnection.fromPort &&\n c.toNode === newConnection.toNode &&\n c.toPort === newConnection.toPort\n );\n\n if (!isDuplicateTo) {\n toNode.connections = [...toNode.connections, newConnection];\n }\n }\n return [...nodes];\n });\n\n this.cancelPortDrag();\n }\n\n cancelPortDrag() {\n this.draggingConnection.set(null);\n }\n\n updatePathOnMove(event: MouseEvent | Touch) {\n if (!this.draggingConnection()) return;\n\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const x2 = (event.clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const y2 = (event.clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n\n this.draggingConnection.update((conn) => (conn ? { ...conn, x2, y2 } : conn));\n }\n\n getNodePortPosition(nodeId: string, portId: string): Coordinates {\n const node = this.nodes().find((n) => n.id === nodeId);\n\n if (!node) return [0, 0];\n\n const portEl = this.#selfRef.nativeElement.querySelector(`[data-node-id=\"${nodeId}\"][data-port-id=\"${portId}\"]`);\n\n if (portEl) {\n const nodeWrapper = this.#selfRef.nativeElement.querySelector('.nodes-wrapper')!;\n const wrapperRect = nodeWrapper.getBoundingClientRect();\n const portRect = portEl.getBoundingClientRect();\n const portCenterX = portRect.left + portRect.width / 2;\n const portCenterY = portRect.top + portRect.height / 2;\n const worldX = (portCenterX - wrapperRect.left) / this.zoomLevel();\n const worldY = (portCenterY - wrapperRect.top) / this.zoomLevel();\n\n return [worldX, worldY];\n }\n\n const isInput = node.inputs.some((p) => p.id === portId);\n const portIndex = isInput\n ? node.inputs.findIndex((p) => p.id === portId)\n : node.outputs.findIndex((p) => p.id === portId);\n\n if (portIndex === -1) return node.coordinates;\n\n const portYOffset = this.#NODE_HEADER_HEIGHT + portIndex * this.#PORT_ROW_HEIGHT + this.#PORT_ROW_HEIGHT / 2;\n const portXOffset = isInput ? 0 : this.#NODE_WIDTH;\n\n return [node.coordinates[0] + portXOffset, node.coordinates[1] + portYOffset];\n }\n\n startPan(event: MouseEvent) {\n if (this.isLocked()) return;\n if (event.target instanceof HTMLElement && event.target.closest('.node')) return;\n\n event.preventDefault();\n\n this.#isDragging.set(true);\n this.#lastMouseX.set(event.clientX);\n this.#lastMouseY.set(event.clientY);\n }\n\n endPan() {\n this.#isDragging.set(false);\n }\n\n pan(event: MouseEvent) {\n if (!this.#isDragging() || this.isLocked()) return;\n\n const dx = event.clientX - this.#lastMouseX();\n const dy = event.clientY - this.#lastMouseY();\n\n this.panX.update((x) => x + dx);\n this.panY.update((y) => y + dy);\n\n this.#lastMouseX.set(event.clientX);\n this.#lastMouseY.set(event.clientY);\n }\n\n zoom(event: WheelEvent) {\n event.preventDefault();\n const oldZoom = this.zoomLevel();\n const newZoom = this.#clamp(oldZoom * (1 - event.deltaY * this.#ZOOM_SPEED), this.#MIN_ZOOM, this.#MAX_ZOOM);\n\n const panRatio = newZoom / oldZoom;\n const newPanX = event.clientX - (event.clientX - this.panX()) * panRatio;\n const newPanY = event.clientY - (event.clientY - this.panY()) * panRatio;\n\n this.zoomLevel.set(newZoom);\n this.panX.set(newPanX);\n this.panY.set(newPanY);\n }\n\n handleTouchStart(event: TouchEvent) {\n if (event.target instanceof HTMLElement && event.target.closest('.node')) return;\n\n event.preventDefault();\n\n if (event.touches.length === 1) {\n this.#isDragging.set(true);\n this.#lastMouseX.set(event.touches[0].clientX);\n this.#lastMouseY.set(event.touches[0].clientY);\n } else if (event.touches.length === 2) {\n this.#isDragging.set(false);\n this.#initialPinchDistance.set(this.#getDistance(event.touches[0], event.touches[1]));\n }\n }\n\n handleTouchMove(event: TouchEvent) {\n event.preventDefault();\n\n if (event.touches.length === 1 && this.#isDragging()) {\n const dx = event.touches[0].clientX - this.#lastMouseX();\n const dy = event.touches[0].clientY - this.#lastMouseY();\n\n this.panX.update((x) => x + dx);\n this.panY.update((y) => y + dy);\n\n this.#lastMouseX.set(event.touches[0].clientX);\n this.#lastMouseY.set(event.touches[0].clientY);\n } else if (event.touches.length === 2) {\n const newPinchDistance = this.#getDistance(event.touches[0], event.touches[1]);\n const pinchRatio = newPinchDistance / this.#initialPinchDistance();\n const oldZoom = this.zoomLevel();\n const newZoom = this.#clamp(oldZoom * pinchRatio, this.#MIN_ZOOM, this.#MAX_ZOOM);\n\n const pinchCenterX = (event.touches[0].clientX + event.touches[1].clientX) / 2;\n const pinchCenterY = (event.touches[0].clientY + event.touches[1].clientY) / 2;\n\n const panRatio = newZoom / oldZoom;\n const newPanX = pinchCenterX - (pinchCenterX - this.panX()) * panRatio;\n const newPanY = pinchCenterY - (pinchCenterY - this.panY()) * panRatio;\n\n this.zoomLevel.set(newZoom);\n this.panX.set(newPanX);\n this.panY.set(newPanY);\n\n this.#initialPinchDistance.set(newPinchDistance);\n }\n }\n\n handleTouchEnd() {\n this.#isDragging.set(false);\n this.endNodeDrag();\n\n if (this.draggingConnection()) {\n this.cancelPortDrag();\n }\n }\n\n closeMidpointDiv() {\n this.showMidpointDiv.set(false);\n this.midpointDivPosition.set(null);\n this.isLocked.set(false);\n }\n\n getDisplayCoordinates(node: BlueprintNode) {\n const draggedId = this.#draggedNodeId();\n const draggingCoords = this.#draggingNodeCoordinates();\n\n if (draggedId === node.id && draggingCoords) {\n return `translate(${draggingCoords[0]}px, ${draggingCoords[1]}px)`;\n }\n\n return `translate(${node.coordinates[0]}px, ${node.coordinates[1]}px)`;\n }\n\n removeConnection() {\n const conn = this.highlightedConnection();\n\n if (!conn) return;\n\n this.#connections.update((conns) =>\n conns.filter(\n (c) =>\n !(\n c.fromNode === conn.fromNode &&\n c.fromPort === conn.fromPort &&\n c.toNode === conn.toNode &&\n c.toPort === conn.toPort\n )\n )\n );\n\n this.nodes.update((nodes) =>\n nodes.map((n) => ({\n ...n,\n connections: n.connections.filter(\n (c) =>\n !(\n c.fromNode === conn.fromNode &&\n c.fromPort === conn.fromPort &&\n c.toNode === conn.toNode &&\n c.toPort === conn.toPort\n )\n ),\n }))\n );\n this.highlightedConnection.set(null);\n this.closeMidpointDiv();\n }\n\n #removeDuplicatesAndReinitiate() {\n const nodes = this.nodes();\n const uniqueNodesMap = new Map<string, BlueprintNode>();\n const uniqueNodes: BlueprintNode[] = [];\n\n for (const node of nodes) {\n if (!uniqueNodesMap.has(node.id)) {\n uniqueNodesMap.set(node.id, node);\n uniqueNodes.push(node);\n }\n }\n\n const nodesWithUniquePorts = uniqueNodes.map((node) => {\n const uniqueInputs = new Map<string, Port>();\n const uniqueOutputs = new Map<string, Port>();\n\n const uniqueNodeInputs = node.inputs.filter((port) => {\n if (!uniqueInputs.has(port.id)) {\n uniqueInputs.set(port.id, port);\n return true;\n }\n return false;\n });\n\n const uniqueNodeOutputs = node.outputs.filter((port) => {\n if (!uniqueOutputs.has(port.id)) {\n uniqueOutputs.set(port.id, port);\n return true;\n }\n return false;\n });\n\n return {\n ...node,\n inputs: uniqueNodeInputs,\n outputs: uniqueNodeOutputs,\n };\n });\n\n const finalNodes = nodesWithUniquePorts.map((node) => {\n const validConnections = node.connections.filter((conn) => {\n const fromNodeExists = nodesWithUniquePorts.some((n) => n.id === conn.fromNode);\n const toNodeExists = nodesWithUniquePorts.some((n) => n.id === conn.toNode);\n const fromPortExists = nodesWithUniquePorts\n .find((n) => n.id === conn.fromNode)\n ?.outputs.some((p) => p.id === conn.fromPort);\n const toPortExists = nodesWithUniquePorts\n .find((n) => n.id === conn.toNode)\n ?.inputs.some((p) => p.id === conn.toPort);\n\n return fromNodeExists && toNodeExists && fromPortExists && toPortExists;\n });\n return { ...node, connections: validConnections };\n });\n\n this.nodes.set(finalNodes);\n }\n\n #handleConnectionClick(event: MouseEvent) {\n if (this.highlightedConnection()) {\n const conn = this.highlightedConnection()!;\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = this.getNodePortPosition(conn.toNode, conn.toPort);\n const midpoint = this.#getBezierMidpoint(startPos, endPos);\n\n this.midpointDivPosition.set({ x: midpoint[0], y: midpoint[1] });\n this.showMidpointDiv.set(true);\n this.isLocked.set(true);\n }\n }\n\n #getBezierMidpoint(start: Coordinates, end: Coordinates): Coordinates {\n const t = 0.5;\n const [x1, y1] = start;\n const [x2, y2] = end;\n const dx = Math.abs(x1 - x2) * 0.7;\n const cp1x = x1 + dx;\n const cp1y = y1;\n const cp2x = x2 - dx;\n const cp2y = y2;\n\n const mx =\n Math.pow(1 - t, 3) * x1 +\n 3 * Math.pow(1 - t, 2) * t * cp1x +\n 3 * (1 - t) * Math.pow(t, 2) * cp2x +\n Math.pow(t, 3) * x2;\n\n const my =\n Math.pow(1 - t, 3) * y1 +\n 3 * Math.pow(1 - t, 2) * t * cp1y +\n 3 * (1 - t) * Math.pow(t, 2) * cp2y +\n Math.pow(t, 3) * y2;\n\n return [mx, my];\n }\n\n #checkConnectionHover(event: MouseEvent) {\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const worldX = (event.clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const worldY = (event.clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n const cursorPoint: Coordinates = [worldX, worldY];\n\n let hoveredConn: Connection | null = null;\n const tolerance = 10 / this.zoomLevel();\n\n for (const conn of this.#connections()) {\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = this.getNodePortPosition(conn.toNode, conn.toPort);\n\n if (this.#isPointNearBezierCurve(cursorPoint, startPos, endPos, tolerance)) {\n hoveredConn = conn;\n break;\n }\n }\n\n this.highlightedConnection.set(hoveredConn);\n }\n\n #isPointNearBezierCurve(point: Coordinates, start: Coordinates, end: Coordinates, tolerance: number = 10): boolean {\n const [x1, y1] = start;\n const [x2, y2] = end;\n const dx = Math.abs(x1 - x2) * 0.7;\n const cp1x = x1 + dx;\n const cp1y = y1;\n const cp2x = x2 - dx;\n const cp2y = y2;\n\n const steps = 20;\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n\n const x =\n Math.pow(1 - t, 3) * x1 +\n 3 * Math.pow(1 - t, 2) * t * cp1x +\n 3 * (1 - t) * Math.pow(t, 2) * cp2x +\n Math.pow(t, 3) * x2;\n const y =\n Math.pow(1 - t, 3) * y1 +\n 3 * Math.pow(1 - t, 2) * t * cp1y +\n 3 * (1 - t) * Math.pow(t, 2) * cp2y +\n Math.pow(t, 3) * y2;\n\n const distance = Math.sqrt(Math.pow(point[0] - x, 2) + Math.pow(point[1] - y, 2));\n if (distance < tolerance) {\n return true;\n }\n }\n\n return false;\n }\n\n public getNewNodeCoordinates(panToCoordinates = false): Coordinates {\n let lowestY = 0;\n if (this.nodes().length > 0) {\n lowestY = this.nodes().reduce((max, node) => Math.max(max, node.coordinates[1]), 0);\n }\n\n const newCoordinates: Coordinates = [20, lowestY + 200];\n\n if (panToCoordinates) {\n this.#panToCoordinates(newCoordinates);\n }\n\n return newCoordinates;\n }\n\n #validateNodes() {\n const duplicatePortIds = findDuplicatePortIDs(this.nodes());\n const duplicateNodeIds = findDuplicateNodeIDs(this.nodes());\n\n this.validationErrors.set({\n duplicateNodeIds,\n duplicatePortIds,\n });\n }\n\n #panToCoordinates(coords: Coordinates): void {\n const [x, y] = coords;\n const rect = this.#selfRef.nativeElement.getBoundingClientRect();\n\n this.panX.set(rect.width / 2 - x * this.zoomLevel());\n this.panY.set(rect.height / 2 - y * this.zoomLevel());\n }\n\n #getDistance(touch1: Touch, touch2: Touch) {\n const dx = touch1.clientX - touch2.clientX;\n const dy = touch1.clientY - touch2.clientY;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n #clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-button-group',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--btng-id]': 'id',\n },\n})\nexport class ShipButtonGroup {\n id = '--' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 12);\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: '[shButton]',\n imports: [],\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet-h',\n },\n})\nexport class ShipButton {\n // #selfRef = inject(ElementRef);\n // '[class.not-first-node-text]': 'notFirstNodeText()',\n // '[class.not-last-node-text]': 'notLastNodeText()',\n // notFirstNodeText = signal<boolean>(false);\n // notLastNodeText = signal<boolean>(false);\n // ngOnInit() {\n // const childNodes = this.#selfRef.nativeElement.childNodes;\n // this.notFirstNodeText.set(childNodes[0].nodeType !== Node.TEXT_NODE);\n // this.notLastNodeText.set(childNodes[childNodes.length - 1].nodeType !== Node.TEXT_NODE);\n // }\n}\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\n\n@Component({\n selector: 'sh-card',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class()',\n },\n})\nexport class ShipCard {\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n class = signal<string>(this.#shConfig?.cardType ?? 'type-a');\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\n\n@Component({\n selector: 'sh-checkbox',\n imports: [ShipIcon],\n template: `\n <div class=\"box sh-sheet\" [class]=\"currentClassList()\">\n <sh-icon class=\"inherit default-indicator\">check-bold</sh-icon>\n <sh-icon class=\"inherit indeterminate-indicator\">minus-bold</sh-icon>\n </div>\n\n <div class=\"label\">\n <ng-content />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipCheckbox {\n currentClassList = classMutationSignal();\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-chip',\n imports: [],\n standalone: true,\n template: '<div><ng-content /></div>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet',\n },\n})\nexport class ShipChip {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\ntype R = number;\ntype G = number;\ntype B = number;\ntype A = number;\n\n// TODOS\n// - Add a color picker input\n// - Add alpha support\n\n@Component({\n selector: 'sh-color-picker',\n imports: [],\n template: `\n <canvas #colorCanvas></canvas>\n <div\n class=\"marker\"\n [style.left]=\"markerPosition().x\"\n [style.top]=\"markerPosition().y\"\n [style.background]=\"selectedColorRgb()\"></div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'renderingType()',\n '[class.vertical]': '(renderingType() === \"hue\" || renderingType() === \"saturation\") && direction() === \"vertical\"',\n },\n})\nexport class ShipColorPicker {\n #document = inject(DOCUMENT);\n\n readonly canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('colorCanvas');\n private canvasData = signal<{\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n centerX: number;\n centerY: number;\n radius: number;\n } | null>(null);\n\n showDarkColors = input(false);\n renderingType = input<'hsl' | 'grid' | 'hue' | 'rgb' | 'saturation'>('hsl');\n gridSize = input(20);\n hue = input(0);\n direction = input<'horizontal' | 'vertical'>('horizontal');\n selectedColor = model<[R, G, B]>([255, 255, 255]);\n currentColor = output<{ rgb: string; hex: string; hsl: string; hue: number; saturation: number }>();\n\n centerLightness = computed(() => (this.showDarkColors() ? 200 : 100));\n isDragging = signal(false);\n markerPosition = signal({ x: '50%', y: '50%' });\n _pos = { x: '0', y: '0' };\n _markerPosition = effect(() => (this._pos = this.markerPosition()));\n\n selectedColorRgb = computed(() => `rgb(${this.selectedColor().join(',')})`);\n selectedColorHex = computed(() => this.rgbToHex(...this.selectedColor()));\n selectedColorHsl = computed(() => this.rgbToHsl(...this.selectedColor()));\n\n selectedColorEffect = effect(() => {\n const selectedColor = this.selectedColor();\n const hsl = this.rgbToHsl(...selectedColor);\n const hex = this.rgbToHex(...selectedColor);\n\n this.updateMarkerFromColor(selectedColor);\n\n this.currentColor.emit({\n rgb: `rgb(${selectedColor.join(',')})`,\n hex: hex,\n hsl: hsl,\n hue: hsl.match(/\\d+/g)!.map(Number)[0],\n saturation: hsl.match(/\\d+/g)!.map(Number)[1],\n });\n });\n\n @HostListener('window:resize', ['$event'])\n onResize() {\n this.setCanvasSize();\n }\n\n private renderingTypeEffect = effect(() => {\n const currentRenderingType = this.renderingType();\n\n if (this.canvasData()) {\n this.drawColorPicker();\n\n if (currentRenderingType === 'hsl') {\n this.adjustMarkerPosition();\n\n queueMicrotask(() => this.updateMarkerFromColor(this.selectedColor()));\n } else {\n this.updateMarkerFromColor(this.selectedColor());\n }\n }\n });\n\n initColor: [R, G, B] | null = null;\n ngAfterViewInit() {\n this.initColor = this.selectedColor();\n\n this.setCanvasSize();\n this.initCanvasEvents();\n }\n\n private updateMarkerFromColor(rgb: [R, G, B]) {\n const [r, g, b] = rgb;\n const coords = this.findPositionByColor(r, g, b);\n\n if (coords === null) return;\n\n const { x, y } = coords;\n\n const mockEvent = {\n offsetX: x,\n offsetY: y,\n clientX: x,\n clientY: y,\n touches: [{ clientX: x, clientY: y }],\n };\n\n this.updateColorAndMarker(mockEvent as any, false, true);\n }\n\n private findPositionByColor(r: number, g: number, b: number): { x: number; y: number } | null {\n const canvasData = this.canvasData();\n if (!canvasData || !canvasData.canvas) return null;\n\n const { canvas, ctx } = canvasData;\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n\n let bestMatch = { x: 0, y: 0, distance: Infinity };\n\n for (let y = 0; y < canvas.height; y++) {\n for (let x = 0; x < canvas.width; x++) {\n const index = (y * canvas.width + x) * 4;\n const pixelR = imageData[index];\n const pixelG = imageData[index + 1];\n const pixelB = imageData[index + 2];\n\n const distance = Math.sqrt(Math.pow(r - pixelR, 2) + Math.pow(g - pixelG, 2) + Math.pow(b - pixelB, 2));\n\n if (distance < bestMatch.distance) {\n bestMatch = { x, y, distance };\n }\n }\n }\n\n return { x: bestMatch.x, y: bestMatch.y };\n }\n\n private adjustMarkerPosition() {\n const { canvas, centerX, centerY, radius } = this.canvasData()!;\n let { x, y } = this._pos;\n\n let markerX = (parseFloat(x.replace('%', '')) / 100) * canvas.width;\n let markerY = (parseFloat(y.replace('%', '')) / 100) * canvas.height;\n\n const distance = Math.sqrt(Math.pow(markerX - centerX, 2) + Math.pow(markerY - centerY, 2));\n\n if (distance > radius) {\n const angle = Math.atan2(markerY - centerY, markerX - centerX);\n markerX = centerX + radius * Math.cos(angle);\n markerY = centerY + radius * Math.sin(angle);\n\n x = ((markerX / canvas.width) * 100).toFixed(2) + '%';\n y = ((markerY / canvas.height) * 100).toFixed(2) + '%';\n this.markerPosition.set({ x, y });\n }\n }\n\n private initCanvasEvents() {\n const { canvas } = this.canvasData()!;\n\n canvas.addEventListener('mousedown', (event) => {\n this.isDragging.set(true);\n this.updateColorAndMarker(event);\n });\n\n this.#document.addEventListener('mousemove', (event) => {\n if (this.isDragging()) {\n event.preventDefault();\n this.updateColorAndMarker(event, true);\n }\n });\n\n this.#document.addEventListener('mouseup', () => this.isDragging.set(false));\n\n canvas.addEventListener('touchstart', (_) => this.isDragging.set(true));\n this.#document.addEventListener('touchmove', (event) => {\n if (this.isDragging()) {\n event.preventDefault();\n this.updateColorAndMarker(event.touches[0], true);\n }\n });\n\n this.#document.addEventListener('touchend', () => this.isDragging.set(false));\n this.#document.addEventListener('touchcancel', () => this.isDragging.set(false));\n }\n\n private setCanvasSize() {\n const canvas = this.canvasRef()?.nativeElement;\n\n if (canvas) {\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n imageSmoothingEnabled: true,\n imageSmoothingQuality: 'high',\n }) as CanvasRenderingContext2D;\n const parentWidth = canvas.parentElement?.offsetWidth || canvas.offsetWidth;\n canvas.width = parentWidth;\n canvas.height = parentWidth;\n\n this.canvasData.set({\n canvas,\n ctx,\n centerX: canvas.width / 2,\n centerY: canvas.height / 2,\n radius: Math.min(canvas.width, canvas.height) / 2,\n });\n\n this.drawColorPicker();\n }\n }\n\n private updateColorAndMarker(event: MouseEvent | Touch, outsideCanvas = false, onlyMarker = false) {\n const { canvas, ctx } = this.canvasData()!;\n\n let mouseX = event instanceof MouseEvent ? event.offsetX : event.clientX;\n let mouseY = event instanceof MouseEvent ? event.offsetY : event.clientY;\n\n if (outsideCanvas) {\n const rect = canvas.getBoundingClientRect();\n mouseX = Math.round(event.clientX - rect.left);\n mouseY = Math.round(event.clientY - rect.top);\n }\n\n if (this.renderingType() === 'hsl') {\n const centerX = canvas.width / 2;\n const centerY = canvas.height / 2;\n const radius = Math.min(canvas.width, canvas.height) / 2;\n\n const distance = Math.sqrt(Math.pow(mouseX - centerX, 2) + Math.pow(mouseY - centerY, 2));\n\n if (distance > radius) {\n const angle = Math.atan2(mouseY - centerY, mouseX - centerX);\n mouseX = centerX + radius * Math.cos(angle);\n mouseY = centerY + radius * Math.sin(angle);\n }\n }\n\n mouseX = Math.max(0, Math.min(canvas.width - 1, Math.round(mouseX)));\n mouseY = Math.max(0, Math.min(canvas.height - 1, Math.round(mouseY)));\n\n const pixelData = ctx.getImageData(mouseX, mouseY, 1, 1).data;\n const [r, g, b] = pixelData;\n\n if (!onlyMarker) {\n this.selectedColor.set([r, g, b]);\n }\n\n const xPercent = ((mouseX / canvas.width) * 100).toFixed(2) + '%';\n const yPercent = ((mouseY / canvas.height) * 100).toFixed(2) + '%';\n\n this.markerPosition.set({ x: xPercent, y: yPercent });\n }\n\n private drawColorPicker() {\n switch (this.renderingType()) {\n case 'hsl':\n this.drawColorWheel();\n break;\n case 'grid':\n this.drawGrid();\n break;\n case 'hue':\n this.drawHue();\n break;\n case 'rgb':\n this.drawRgb();\n break;\n case 'saturation':\n this.drawSaturation();\n break;\n }\n }\n\n private drawRgb() {\n const { canvas, ctx } = this.canvasData()!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\n gradient.addColorStop(0, 'white');\n gradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n const gradient2 = ctx.createLinearGradient(0, 0, 0, canvas.height);\n gradient2.addColorStop(0, 'rgba(0, 0, 0, 0)');\n gradient2.addColorStop(1, 'black');\n\n ctx.fillStyle = gradient2;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n private drawSaturation() {\n const { canvas, ctx } = this.canvasData()!;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (this.direction() === 'horizontal') {\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\n gradient.addColorStop(0, `hsl(${this.hue()}, 0%, 50%)`);\n gradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else {\n const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);\n gradient.addColorStop(0, `hsl(${this.hue()}, 0%, 50%)`);\n gradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n }\n\n private drawHue() {\n const { canvas, ctx } = this.canvasData()!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const gradient = ctx.createLinearGradient(\n 0,\n 0,\n this.direction() === 'horizontal' ? canvas.width : 0,\n this.direction() === 'horizontal' ? 0 : canvas.height\n );\n\n for (let i = 0; i <= 360; i += 10) {\n gradient.addColorStop(i / 360, `hsl(${i}, 100%, 50%)`);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n private drawColorWheel() {\n const { canvas, ctx, centerX, centerY, radius } = this.canvasData()!;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let y = 0; y < canvas.height; y++) {\n for (let x = 0; x < canvas.width; x++) {\n const distance = Math.sqrt(Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2));\n\n if (distance <= radius + 2) {\n const angle = Math.atan2(y - centerY, x - centerX);\n const hue = ((angle + Math.PI) / (2 * Math.PI)) * 360;\n ctx.fillStyle = `hsl(${hue}, 100%, ${100 - (this.centerLightness() / 100) * (distance / radius) * 50}%)`;\n ctx.fillRect(x, y, 1, 1);\n }\n }\n }\n }\n\n private drawGrid() {\n const { canvas, ctx } = this.canvasData()!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const gridSize = this.gridSize();\n const cellSize = canvas.width / gridSize;\n const inputHue = this.hue();\n const reversedHue = (inputHue + 180) % 360;\n const maxDistance = Math.sqrt(2) * (gridSize - 1);\n\n for (let y = 0; y < canvas.height; y += cellSize) {\n for (let x = 0; x < canvas.width; x += cellSize) {\n const cellX = Math.floor(x / cellSize);\n const cellY = Math.floor(y / cellSize);\n const distanceTopLeft = Math.sqrt(cellX * cellX + cellY * cellY);\n const l = Math.floor((distanceTopLeft / maxDistance) * 100);\n const h = cellX >= cellY ? inputHue : reversedHue;\n const distanceFromCenter = Math.abs(cellX - cellY) / (gridSize - 1);\n const s = Math.floor(distanceFromCenter * 100);\n\n ctx.fillStyle = `hsl(${h}, ${s}%, ${l}%)`;\n ctx.fillRect(x, y, cellSize, cellSize);\n }\n }\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n }\n\n private rgbToHsl(r: number, g: number, b: number): 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 return `hsl(${Math.floor(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\n\n@Component({\n selector: 'sh-datepicker',\n imports: [ShipIcon],\n template: `\n <header>\n <button (click)=\"previousMonth()\"><sh-icon>caret-left</sh-icon></button>\n <div class=\"title\">\n {{ getMonthName(currentDate()!) }}\n @if (monthsToShow() > 1) {\n - {{ getMonthName(getLastVisibleMonth()) }}\n }\n {{ getFullYear(currentDate()!) }}\n </div>\n <button (click)=\"nextMonth()\"><sh-icon>caret-right</sh-icon></button>\n </header>\n\n <section class=\"months-container\">\n @for (monthOffset of monthOffsets(); track monthOffset) {\n <div class=\"month\">\n <nav class=\"weekdays\">\n @for (day of weekdays(); track $index) {\n <div>{{ day }}</div>\n }\n </nav>\n\n <div class=\"days\" #daysRef>\n @for (calDate of getMonthDates(monthOffset); track $index) {\n <div\n #elementRef\n [class.out-of-scope]=\"!isCurrentMonth(calDate, monthOffset)\"\n [class]=\"isDateSelected(calDate)\"\n (click)=\"setDate(calDate, elementRef)\">\n {{ calDate.getDate() }}\n </div>\n }\n\n @if (!asRange()) {\n <article class=\"days\">\n <div class=\"sel-el\" [style]=\"selectedDateStylePosition()\"></div>\n </article>\n }\n </div>\n </div>\n }\n </section>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.as-range]': 'asRange()',\n '[class]': '\"columns-\" + monthsToShow()',\n '[class.disabled]': 'disabled()',\n },\n})\nexport class ShipDatepicker {\n #INIT_DATE = this.#getUTCDate(new Date());\n\n date = model<Date | null>(null);\n endDate = model<Date | null>(null);\n asRange = input<boolean>(false);\n monthsToShow = input<number>(1);\n disabled = input<boolean>(false);\n\n startOfWeek = input<number>(1);\n weekdayLabels = input<string[]>(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n daysRef = viewChild<ElementRef<HTMLDivElement>>('daysRef');\n currentDate = signal<Date>(this.date() ?? this.#INIT_DATE);\n\n monthOffsets = computed(() => {\n return Array.from({ length: this.monthsToShow() }, (_, i) => i);\n });\n\n selectedDateStylePosition = signal<{ transform: string; opacity: string } | null>(null);\n\n weekdays = computed(() => {\n const startOfWeek = this.startOfWeek();\n const weekdayLabels = this.weekdayLabels();\n\n return weekdayLabels.slice(startOfWeek).concat(weekdayLabels.slice(0, startOfWeek));\n });\n\n currentClasses = classMutationSignal();\n someEffect = effect(() => {\n const _ = this.currentClasses();\n\n this.#findSelectedAndCalc();\n });\n\n getLastVisibleMonth(): Date {\n const lastMonthOffset = this.monthsToShow() - 1;\n return this.getOffsetDate(lastMonthOffset);\n }\n\n getOffsetDate(monthOffset: number): Date {\n const date = new Date(this.currentDate());\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n\n getMonthDates(monthOffset: number): Date[] {\n const offsetDate = this.getOffsetDate(monthOffset);\n return this.#generateMonthDates(offsetDate, this.startOfWeek());\n }\n\n #newDateEffect = effect(() => {\n if (this.monthsToShow() > 1) return;\n\n this.#setDateAsCurrent();\n });\n\n ngOnInit() {\n if (this.monthsToShow() === 1) return;\n\n this.#setDateAsCurrent();\n }\n\n #setDateAsCurrent() {\n const newDate = this.date();\n if (newDate) this.currentDate.set(newDate);\n this.#findSelectedAndCalc();\n }\n\n #findSelectedAndCalc() {\n setTimeout(() => {\n const selectedElement = this.daysRef()?.nativeElement.querySelector('.sel');\n\n if (!selectedElement) {\n return this.selectedDateStylePosition.update((x) => (x ? { ...x, opacity: '0' } : null));\n }\n\n this.setSelectedDateStylePosition(selectedElement as HTMLDivElement);\n });\n }\n\n #generateMonthDates(date: Date, startOfWeek: number): Date[] {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const firstDay = new Date(Date.UTC(year, month)).getUTCDay();\n const daysInMonth = 32 - new Date(Date.UTC(year, month, 32)).getUTCDate();\n const dates: Date[] = [];\n\n let offset = firstDay - startOfWeek;\n if (offset < 0) {\n offset += 7;\n }\n\n const lastDayOfPrevMonth = new Date(Date.UTC(year, month, 0)).getUTCDate();\n\n for (let i = offset - 1; i >= 0; i--) {\n const prevMonthDate = new Date(Date.UTC(year, month - 1, lastDayOfPrevMonth - i));\n dates.push(prevMonthDate);\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n dates.push(new Date(Date.UTC(year, month, i)));\n }\n\n let nextMonthDay = 1;\n while (dates.length % 7 !== 0) {\n dates.push(new Date(Date.UTC(year, month + 1, nextMonthDay++)));\n }\n\n return dates;\n }\n\n nextMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() + 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n previousMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() - 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n setDate(newDate: Date, selectedElement: HTMLDivElement) {\n const createDateWithExistingTime = (newDate: Date, existingDate: Date | null) => {\n const hours = existingDate?.getUTCHours() ?? 0;\n const minutes = existingDate?.getUTCMinutes() ?? 0;\n const seconds = existingDate?.getUTCSeconds() ?? 0;\n const milliseconds = existingDate?.getUTCMilliseconds() ?? 0;\n\n return this.#getUTCDate(\n new Date(\n Date.UTC(\n newDate.getUTCFullYear(),\n newDate.getUTCMonth(),\n newDate.getUTCDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n )\n )\n );\n };\n\n if (!this.asRange()) {\n this.date.set(createDateWithExistingTime(newDate, this.date()));\n this.endDate.set(null);\n } else {\n const startDate = this.date();\n const endDate = this.endDate();\n const utcDate = createDateWithExistingTime(newDate, null);\n\n if (!startDate) {\n this.date.set(utcDate);\n } else if (!endDate) {\n if (utcDate < startDate) {\n this.date.set(utcDate);\n this.endDate.set(null);\n } else {\n this.endDate.set(utcDate);\n }\n } else {\n this.date.set(utcDate);\n this.endDate.set(null);\n }\n }\n\n if (this.asRange()) return;\n\n this.setSelectedDateStylePosition(selectedElement);\n }\n\n isDateSelected(date: Date): string | null {\n const startDate = this.date();\n const endDate = this.endDate();\n\n if (startDate === null) return null;\n\n const startOfDay = (date: Date) => {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0));\n };\n\n const endOfDay = (date: Date) => {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));\n };\n\n const currentDate = startOfDay(date);\n const rangeStart = startOfDay(startDate);\n const rangeEnd = endDate ? endOfDay(endDate) : null;\n\n let classes = [];\n\n if (this.asRange()) {\n if (rangeEnd === null) {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel first last');\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('first');\n }\n\n if (currentDate.getTime() === startOfDay(rangeEnd).getTime()) {\n classes.push('last');\n }\n\n if (currentDate >= rangeStart && currentDate <= rangeEnd) {\n classes.push('sel');\n\n const dayOfWeek = currentDate.getUTCDay();\n const startOfWeek = this.startOfWeek();\n\n if (dayOfWeek === startOfWeek) {\n classes.push('week-start');\n }\n\n const endOfWeek = (startOfWeek + 6) % 7;\n if (dayOfWeek === endOfWeek) {\n classes.push('week-end');\n }\n }\n\n const nextDate = new Date(currentDate);\n nextDate.setUTCDate(currentDate.getUTCDate() + 1);\n const prevDate = new Date(currentDate);\n prevDate.setUTCDate(currentDate.getUTCDate() - 1);\n\n const isFirstOfMonth = currentDate.getUTCDate() === 1;\n const isLastOfMonth = nextDate.getUTCMonth() !== currentDate.getUTCMonth();\n\n if (isFirstOfMonth) {\n classes.push('month-start');\n }\n\n if (isLastOfMonth) {\n classes.push('month-end');\n }\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel');\n }\n }\n\n return classes.join(' ') || null;\n }\n\n setSelectedDateStylePosition(selectedElement: HTMLDivElement) {\n this.selectedDateStylePosition.set({\n transform: `translate(${selectedElement.offsetLeft}px, ${selectedElement.offsetTop}px)`,\n opacity: '1',\n });\n }\n\n getMonthName(date: Date): string {\n return date.toLocaleString('default', { month: 'long' });\n }\n\n getFullYear(date: Date): number {\n return date.getFullYear();\n }\n\n // Rest of the component methods remain the same, but update isCurrentMonth:\n isCurrentMonth(date: Date, monthOffset: number): boolean {\n const offsetDate = this.getOffsetDate(monthOffset);\n return date.getMonth() === offsetDate.getMonth();\n }\n\n #getUTCDate(date: Date): Date {\n const offsetMinutes = date.getTimezoneOffset();\n const timeDiffMillis = offsetMinutes * 60 * 1000;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ) + timeDiffMillis\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\n\n// TODOS\n// - Dynamic location where if outside of the window automatically position it to the top or left\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n openEffect = effect(() => {\n const open = this.isOpen();\n\n queueMicrotask(() => {\n const popoverEl = this.popoverRef()?.nativeElement;\n\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n }\n\n if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {\n this.isOpen.set(false);\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n popoverEl.showPopover();\n\n if (!this.SUPPORTS_ANCHOR) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n this.openAbort?.abort();\n this.openAbort = null;\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n #alignLeftUnder(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.left;\n const newTop = triggerRect.bottom + BASE_SPACE;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #alignTopRight(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.right + BASE_SPACE;\n const newTop = triggerRect.top;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #alignBottomRight(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.right + BASE_SPACE;\n const newTop = triggerRect.bottom;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #alignLeftOver(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.left;\n const newTop = triggerRect.bottom - triggerRect.height - menuRect.height - BASE_SPACE;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n const tryOrderMultiLayer = [this.#alignTopRight, this.#alignBottomRight];\n const tryOrderDefault = [this.#alignLeftUnder, this.#alignLeftOver];\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n for (let i = 0; i < tryOrder.length; i++) {\n const position = tryOrder[i](triggerRect, menuRect!);\n\n const outOfBoundsRight = position.left + (menuRect?.width || 0) > window.innerWidth;\n const outOfBoundsBottom = position.top + (menuRect?.height || 0) > window.innerHeight;\n\n if (!outOfBoundsRight && !outOfBoundsBottom) {\n this.menuStyle.set({\n left: position.left + 'px',\n top: position.top + 'px',\n });\n return;\n }\n }\n\n const fallbackPosition = tryOrder[0](triggerRect, menuRect!);\n this.menuStyle.set({\n left: fallbackPosition.left + 'px',\n top: fallbackPosition.top + 'px',\n });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, model, output } from '@angular/core';\nimport { ShipPopover } from '../ship-popover/ship-popover';\n\n@Component({\n selector: 'sh-form-field-popover',\n imports: [ShipPopover],\n template: `\n <ng-content select=\"label\"></ng-content>\n\n <div class=\"input-wrap\">\n <div class=\"prefix\">\n <ng-content select=\"[prefix]\"></ng-content>\n <ng-content select=\"[textPrefix]\"></ng-content>\n </div>\n\n <div class=\"prefix-space\"></div>\n\n <sh-popover\n [(isOpen)]=\"isOpen\"\n (closed)=\"close()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <ng-content trigger select=\"input\"></ng-content>\n\n <ng-content select=\"[popoverContent]\"></ng-content>\n </sh-popover>\n\n <ng-content select=\"textarea\"></ng-content>\n\n <ng-content select=\"[textSuffix]\"></ng-content>\n <div class=\"suffix-space\"></div>\n <ng-content select=\"[suffix]\"></ng-content>\n </div>\n\n <div class=\"helpers\">\n <div class=\"error-wrap\">\n <ng-content select=\"[error]\"></ng-content>\n </div>\n\n <div class=\"hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFormFieldPopover {\n #selfRef = inject(ElementRef);\n\n isOpen = model<boolean>(false);\n closed = output<void>();\n\n @HostListener('click')\n onClick() {\n if (this.#selfRef.nativeElement.querySelector('input')) {\n this.#selfRef.nativeElement.querySelector('input').focus();\n }\n\n if (this.#selfRef.nativeElement.querySelector('textarea')) {\n this.#selfRef.nativeElement.querySelector('textarea').focus();\n }\n }\n\n close() {\n this.closed.emit();\n }\n\n ngOnInit() {\n const supportFieldSizing = typeof CSS !== 'undefined' && CSS.supports('field-sizing', 'content');\n const text = this.#selfRef.nativeElement.querySelector('textarea');\n\n if (!supportFieldSizing && text !== null) {\n const text = this.#selfRef.nativeElement.querySelector('textarea');\n\n function resize() {\n text.style.height = 'auto';\n text.style.height = text.scrollHeight + 'px';\n }\n\n /* 0-timeout to get the already changed text */\n function delayedResize() {\n setTimeout(resize, 0);\n }\n\n if (text) {\n text.addEventListener('change', resize);\n text.addEventListener('cut', delayedResize);\n text.addEventListener('paste', delayedResize);\n text.addEventListener('drop', delayedResize);\n text.addEventListener('keydown', delayedResize);\n\n text.focus();\n text.select();\n resize();\n }\n }\n }\n}\n","import { DestroyRef, ElementRef, inject, signal, Signal, WritableSignal } from '@angular/core';\n\nexport function contentProjectionSignal<T = HTMLElement>(querySelector: string): 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, { childList: true });\n destroyRef.onDestroy(() => observer.disconnect());\n\n return projectedElementsSignal.asReadonly();\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { ShipFormFieldPopover } from '../ship-form-field/ship-form-field-popover';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { contentProjectionSignal } from '../utilities/content-projection-signal';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-datepicker-input',\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div id=\"input-wrap\" class=\"input\" ngProjectAs=\"input\">\n @if (this.masking()) {\n <div class=\"masked-value\">\n {{ _maskedDate() }}\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker [date]=\"internalDate()\" (dateChange)=\"onDateChange($event)\" [class]=\"currentClass()\" />\n }\n </div>\n </sh-form-field-popover>\n\n <ng-template #defaultIndicator></ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDatepickerInput {\n // #INIT_DATE = this.#getUTCDate(new Date());\n\n ngModels = contentChild<NgModel>(NgModel);\n #datePipe = inject(DatePipe);\n #inputRef = signal<HTMLInputElement | null>(null);\n\n masking = input('mediumDate');\n closed = output<Date | null>();\n\n _maskedDate = computed(() => {\n const date = this.internalDate();\n const mask = this.masking();\n\n if (!mask) return date;\n if (!date) return null;\n\n return this.#datePipe.transform(date, mask);\n });\n\n internalDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n currentClass = classMutationSignal();\n #inputObserver = contentProjectionSignal<HTMLInputElement>('#input-wrap input');\n\n onDateChange(date: Date | null) {\n this.internalDate.set(date);\n\n const input = this.#inputRef();\n\n if (input) {\n input.value = date ? date.toString() : '';\n input.dispatchEvent(new Event('input'));\n }\n }\n\n close() {\n this.closed.emit(this.internalDate());\n }\n\n #inputRefEffect = effect(() => {\n const inputs = this.#inputObserver();\n\n if (!inputs.length) return;\n\n const input = inputs[0];\n\n if (!input) return;\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('inputValueChanged', (event: any) => {\n this.internalDate.set(event.detail.value ? this.#getUTCDate(new Date(event.detail.value)) : null);\n });\n\n input.addEventListener('focus', () => {\n this.isOpen.set(true);\n input.blur();\n });\n\n this.#inputRef.set(input);\n input.autocomplete = 'off';\n\n if (typeof input.value === 'string') {\n this.internalDate.set(input.value ? this.#getUTCDate(new Date(input.value)) : null);\n }\n });\n\n #createCustomInputEventListener(input: HTMLInputElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, '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\n #getUTCDate(date: Date): Date {\n const offsetMinutes = date.getTimezoneOffset();\n const timeDiffMillis = offsetMinutes * 60 * 1000;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ) + timeDiffMillis\n );\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ShipFormFieldPopover } from '../ship-form-field/ship-form-field-popover';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-daterange-input',\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover [class]=\"'columns-' + monthsToShow()\" (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap>\n @if (this.masking()) {\n <div class=\"masked-value\">{{ _maskedStartDate() ?? 'N/A' }} - {{ _maskedEndDate() ?? 'N/A' }}</div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker\n [date]=\"startDate()\"\n [endDate]=\"endDate()\"\n [class]=\"classes\"\n (dateChange)=\"onStartDateChange($event)\"\n (endDateChange)=\"onEndDateChange($event)\"\n [monthsToShow]=\"monthsToShow()\"\n [asRange]=\"true\" />\n }\n </div>\n </sh-form-field-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDaterangeInput {\n #selfRef = inject(ElementRef);\n\n startDateInputs = contentChildren<ElementRef<HTMLInputElement>>('startDate');\n endDateInputs = contentChildren<ElementRef<HTMLInputElement>>('endDate');\n\n #datePipe = inject(DatePipe);\n monthsToShow = input<number>(1);\n masking = input('mediumDate');\n closed = output<{ start: Date | null; end: Date | null }>();\n\n startDate = signal<Date | null>(null);\n endDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n\n get classes() {\n return `${this.#selfRef.nativeElement.classList.value}`;\n }\n\n _maskedStartDate = computed(() => {\n const date = this.startDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n _maskedEndDate = computed(() => {\n const date = this.endDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n constructor() {\n effect(() => {\n // Setup start date inputs\n this.startDateInputs().forEach((input) => {\n this.setupInput(input, true);\n });\n\n // Setup end date inputs\n this.endDateInputs().forEach((input) => {\n this.setupInput(input, false);\n });\n });\n }\n\n private setupInput(input: ElementRef<HTMLInputElement>, isStart: boolean) {\n const element = input.nativeElement;\n element.autocomplete = 'off';\n\n element.addEventListener('focus', () => {\n this.isOpen.set(true);\n element.blur();\n });\n\n // Handle initial value\n if (element.value) {\n try {\n const date = new Date(element.value);\n if (!isNaN(date.getTime())) {\n if (isStart) {\n this.startDate.set(date);\n } else {\n this.endDate.set(date);\n }\n }\n } catch (e) {\n console.warn('Invalid date value:', element.value);\n }\n }\n }\n\n onStartDateChange(date: Date | null) {\n this.startDate.set(date);\n this.updateInputValue(this.startDateInputs() as ElementRef<HTMLInputElement>[], date);\n }\n\n onEndDateChange(date: Date | null) {\n this.endDate.set(date);\n this.updateInputValue(this.endDateInputs() as ElementRef<HTMLInputElement>[], date);\n\n if (this.startDate() && date) {\n this.isOpen.set(false);\n }\n }\n\n private updateInputValue(inputs: ElementRef<HTMLInputElement>[], date: Date | null) {\n inputs.forEach((input) => {\n if (this.masking()) {\n input.nativeElement.value = this.#datePipe.transform(date, this.masking()) ?? '';\n } else {\n input.nativeElement.value = date ? date.toUTCString() : '';\n }\n this.dispatchInputEvent(input.nativeElement);\n });\n }\n\n private dispatchInputEvent(input: HTMLInputElement) {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n close() {\n this.closed.emit({\n start: this.startDate(),\n end: this.endDate(),\n });\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-divider',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDivider {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-event-card',\n imports: [],\n template: `\n <div class=\"content\">\n <ng-content />\n </div>\n\n <div class=\"actions\">\n <ng-content select=\"[actions]\" />\n <ng-content select=\"button\" />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet',\n },\n})\nexport class ShipEventCard {}\n","import { afterNextRender, ChangeDetectionStrategy, Component, ElementRef, HostListener, inject } from '@angular/core';\n\n@Component({\n selector: 'sh-form-field',\n imports: [],\n template: `\n <ng-content select=\"label\"></ng-content>\n\n <div class=\"input-wrap\">\n <div class=\"prefix\">\n <ng-content select=\"[boxPrefix]\"></ng-content>\n <ng-content select=\"[prefix]\"></ng-content>\n <ng-content select=\"[textPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"input\"></ng-content>\n <ng-content select=\"textarea\"></ng-content>\n\n <div class=\"suffix\">\n <ng-content select=\"[textSuffix]\"></ng-content>\n <ng-content select=\"[suffix]\"></ng-content>\n <ng-content select=\"[boxSuffix]\"></ng-content>\n </div>\n </div>\n\n <div class=\"helpers\">\n <div class=\"error-wrap\">\n <ng-content select=\"[error]\"></ng-content>\n </div>\n\n <div class=\"hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFormField {\n #selfRef = inject(ElementRef);\n\n @HostListener('click')\n onClick() {\n if (this.#selfRef.nativeElement.querySelector('input')) {\n this.#selfRef.nativeElement.querySelector('input').focus();\n }\n\n if (this.#selfRef.nativeElement.querySelector('textarea')) {\n this.#selfRef.nativeElement.querySelector('textarea').focus();\n }\n }\n\n constructor() {\n afterNextRender(() => {\n const supportFieldSizing = typeof CSS !== 'undefined' && CSS.supports('field-sizing', 'content');\n const text = this.#selfRef.nativeElement.querySelector('textarea');\n\n if (!supportFieldSizing && text !== null) {\n function resize() {\n text.style.height = 'auto';\n text.style.height = text.scrollHeight + 'px';\n }\n\n /* 0-timeout to get the already changed text */\n function delayedResize() {\n setTimeout(resize, 0);\n }\n\n text.addEventListener('change', resize);\n text.addEventListener('cut', delayedResize);\n text.addEventListener('paste', delayedResize);\n text.addEventListener('drop', delayedResize);\n text.addEventListener('keydown', delayedResize);\n\n text.focus();\n text.select();\n resize();\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipFormField } from '../ship-form-field/ship-form-field';\nimport { ShipIcon } from '../ship-icon/ship-icon';\n\n@Component({\n selector: 'sh-file-upload',\n imports: [ShipFormField, ShipIcon],\n template: `\n <sh-form-field [class]=\"fileUploadClasses()\">\n <ng-content select=\"label\" ngProjectAs=\"label\"></ng-content>\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap>\n @if (files().length === 1) {\n <div class=\"files-text\">{{ files()[0].name }}</div>\n } @else if (files().length > 1) {\n <div class=\"files-text\">{{ files().length }} files selected</div>\n } @else {\n <div class=\"placeholder\">{{ filesOver() ? overlayText() : placeholder() }}</div>\n }\n <input type=\"file\" [attr.multiple]=\"multiple()\" [attr.accept]=\"accept()\" #input />\n <div class=\"bg-overlay\" [class.files-over]=\"filesOver()\"></div>\n </div>\n\n <sh-icon suffix>upload-simple</sh-icon>\n </sh-form-field>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFileUpload {\n _el = inject(ElementRef);\n inputRef = viewChild.required<ElementRef<HTMLInputElement>>('input');\n filesOver = signal(false);\n multiple = input<boolean | null>();\n accept = input<string | null>(null);\n placeholder = model<string>('Click or drag files here');\n overlayText = input<string>('Drop files here');\n files = model<File[]>([]);\n\n fileUploadClasses = computed(() => this._el.nativeElement.classList.toString());\n\n handleFileUpload(newFiles: File[]) {\n if (this.multiple()) {\n this.files.update((currentFiles) => [...currentFiles, ...newFiles]);\n } else {\n this.files.set(newFiles);\n }\n }\n\n inputEffect = effect(() => {\n const input = this.inputRef().nativeElement;\n\n if (!input) return;\n\n if (input.placeholder) {\n this.placeholder.set(input.placeholder);\n }\n\n input.addEventListener('dragover', (e) => {\n e.preventDefault();\n this.filesOver.set(true);\n });\n\n input.addEventListener('dragleave', (e) => {\n e.preventDefault();\n this.filesOver.set(false);\n });\n\n input.addEventListener('drop', (e) => {\n e.preventDefault();\n this.filesOver.set(false);\n\n const files = e.dataTransfer?.files;\n\n if (files && files.length > 0) {\n this.handleFileUpload(Array.from(files));\n\n (input as HTMLInputElement).files = files;\n }\n });\n\n input.addEventListener('change', (e: any) => {\n e.preventDefault();\n this.handleFileUpload(Array.from(e.target.files));\n });\n });\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-list',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipList {}\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 { DestroyRef, effect, EffectRef, ElementRef, inject, Injector, Signal, signal } from '@angular/core';\nimport { SIGNAL } from '@angular/core/primitives/signals';\n\nexport function observeFirstChild(\n parentEl: ElementRef<HTMLElement>,\n elementTags: string[]\n): Signal<ElementRef<HTMLElement> | null> {\n const elementSignal = signal<ElementRef<HTMLElement> | null>(null);\n const _upperCaseElementTags = elementTags.map((tag) => tag.toUpperCase());\n const injector = inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n\n if (typeof MutationObserver === 'undefined') return elementSignal.asReadonly();\n\n const initialElement = _upperCaseElementTags.find((tag) => parentEl.nativeElement.querySelector(tag));\n\n if (initialElement) {\n console.log('initialElement', initialElement);\n elementSignal.set(new ElementRef(parentEl.nativeElement.querySelector(elementTags[0]) as HTMLInputElement));\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 HTMLElement));\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' && !!parentEl[SIGNAL] ? 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 ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n Renderer2,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipFormField } from '../ship-form-field/ship-form-field';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipPopover } from '../ship-popover/ship-popover';\nimport { createInputSignal } from '../utilities/create-input-signal';\nimport { observeChildren } from '../utilities/observe-elements';\n\n@Component({\n selector: 'sh-menu',\n imports: [ShipPopover, ShipFormField, ShipIcon],\n template: `\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close('fromPopover')\"\n [asMultiLayer]=\"asMultiLayer()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <div trigger [class.is-open]=\"isOpen()\" (click)=\"toggleIsOpen($event)\">\n <ng-content />\n\n @if (openIndicator()) {\n <sh-icon class=\"open-indicator\">caret-down</sh-icon>\n }\n </div>\n\n <div class=\"form-field-wrap\">\n <sh-form-field class=\"small stretch\" [class.hidden]=\"searchable() === false\">\n <input type=\"text\" #inputRef placeholder=\"Search\" />\n </sh-form-field>\n </div>\n\n <div\n class=\"options\"\n #optionsRef\n (click)=\"close('active')\"\n [class.searching]=\"searchable() && inputValue() !== ''\">\n <ng-content select=\"[menu]\" />\n </div>\n </sh-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'disabled()',\n '[class.has-search]': 'searchable()',\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipMenu {\n #document = inject(DOCUMENT);\n #renderer = inject(Renderer2);\n asMultiLayer = input<boolean>(false);\n openIndicator = input(false);\n disabled = input<boolean>(false);\n customOptionElementSelectors = input<string[]>(['button']);\n keepClickedOptionActive = input<boolean>(false);\n closeOnClick = input<boolean>(true);\n isOpen = model<boolean>(false);\n closed = output<boolean>();\n\n searchable = input<boolean>(false);\n activeOptionIndex = signal<number>(-1);\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n optionsRef = viewChild<ElementRef<HTMLDivElement>>('optionsRef');\n\n options = observeChildren<HTMLButtonElement>(this.optionsRef, this.customOptionElementSelectors);\n optionsEl = computed(() => this.options.signal().filter((x) => !x.disabled));\n\n inputValue = createInputSignal<string>(this.inputRef);\n\n abortController: AbortController | null = null;\n optionsEffect = effect(() => {\n if (this.abortController !== null) {\n this.abortController.abort();\n this.abortController = null;\n }\n\n if (!this.isOpen()) return;\n\n this.abortController = new AbortController();\n\n const searchable = this.searchable();\n if (!searchable) {\n this.#document.documentElement.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n }\n\n const inputEl = this.inputRef()?.nativeElement;\n\n if (!inputEl) return;\n\n queueMicrotask(() => inputEl.focus());\n\n inputEl.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n\n if (!this.closeOnClick()) {\n const optionRef = this.optionsRef()?.nativeElement;\n\n optionRef?.addEventListener('click', (e: MouseEvent) => {\n const optionEl = e.target as HTMLButtonElement;\n\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n const clickedOptionIndex = optionElements.findIndex((x) => x === optionEl);\n\n if (clickedOptionIndex > -1) {\n this.activeOptionIndex.set(clickedOptionIndex);\n inputEl.focus();\n }\n });\n }\n });\n\n keyDownEventListener = (e: KeyboardEvent) => {\n const activeOptionIndex = this.activeOptionIndex();\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (activeOptionIndex > -1) {\n this.activeElements()[activeOptionIndex as number].click();\n\n queueMicrotask(() => this.close('active'));\n }\n } else if (e.key === 'Tab') {\n e.preventDefault();\n this.close('closed');\n }\n };\n\n _lastElementList: HTMLButtonElement[] = [];\n activeElements = signal<HTMLButtonElement[]>([]);\n lastInputValue = '';\n inputValueEffect = effect(() => {\n const searchable = this.searchable();\n\n if (!searchable) return;\n\n const inputValue = (this.inputValue() ?? '').toLowerCase();\n\n this.#resetActiveOption();\n\n if (!inputValue || inputValue === '') {\n const allOptions = this.optionsEl();\n\n this.activeElements.set(allOptions);\n this._lastElementList = allOptions;\n\n for (let i = 0; i < allOptions.length; i++) {\n this.#renderer.removeStyle(allOptions[i], 'order');\n }\n\n return;\n }\n\n if (!inputValue || inputValue === '') return;\n\n let optionElements =\n this._lastElementList.length && inputValue.length > this.lastInputValue.length\n ? this._lastElementList\n : this.optionsEl();\n\n this.lastInputValue = inputValue;\n\n for (let i = 0; i < optionElements.length; i++) {\n const el = optionElements[i];\n const textContent = el.textContent?.toLowerCase() || '';\n const score = this.#calculateMatchScore(textContent, inputValue);\n\n (el.value as any) = score;\n }\n\n optionElements = optionElements\n .filter((x) => (x.value as any) > 0)\n .sort((a, b) => (b.value as any) - (a.value as any));\n\n for (let i = 0; i < optionElements.length; i++) {\n this.#renderer.setStyle(optionElements[i], 'order', i);\n }\n\n this.activeElements.set(optionElements);\n this._lastElementList = optionElements;\n });\n\n toggleIsOpen(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) return;\n\n this.isOpen.set(!this.isOpen());\n\n if (this.searchable() && this.isOpen()) {\n setTimeout(() => this.inputRef()?.nativeElement.focus());\n }\n }\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n activeOptionIndexEffect = effect(() => {\n const optionElements = this.activeElements();\n const activeOptionIndex = this.activeOptionIndex();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n }\n\n if (activeOptionIndex > -1) {\n optionElements[activeOptionIndex].scrollIntoView({ block: 'center' });\n optionElements[activeOptionIndex].classList.add('active');\n }\n });\n\n nextActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === -1) {\n return 0;\n }\n\n if (activeIndex === optionElements.length - 1) {\n return 0;\n }\n\n const nextIndex = activeIndex + 1;\n\n if (optionElements[nextIndex].disabled) {\n return this.nextActiveIndex(nextIndex);\n }\n\n return nextIndex;\n }\n\n prevActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === 0) {\n return optionElements.length - 1;\n }\n\n if (activeIndex === -1) {\n return optionElements.length - 1;\n }\n\n const prevIndex = activeIndex - 1;\n\n if (optionElements[prevIndex].disabled) {\n return this.prevActiveIndex(prevIndex);\n }\n\n return prevIndex;\n }\n\n close(action: 'fromPopover' | 'closed' | 'active' = 'closed', event?: MouseEvent) {\n this.inputValue.set('');\n\n if (this.closeOnClick()) {\n (!this.keepClickedOptionActive() || action === 'closed') && this.#resetActiveOption();\n\n this.isOpen.set(false);\n this.closed.emit(action === 'active');\n }\n }\n\n #resetActiveOption() {\n this.activeOptionIndex.set(-1);\n\n const optionElements = this.optionsEl();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n }\n }\n\n ngOnDestroy() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type ShipProgressBarMode = 'determinate' | 'indeterminate';\n\n@Component({\n selector: 'sh-progress-bar',\n imports: [],\n template: `\n <div class=\"progress-bar\" [style.width.%]=\"value()\"></div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipProgressBar {\n value = input<number | undefined>(undefined);\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\n\n@Component({\n selector: 'sh-radio',\n imports: [],\n template: `\n <div class=\"radio sh-sheet\" [class]=\"currentClassList()\"></div>\n\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipRadio {\n currentClassList = classMutationSignal();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'sh-range-slider',\n imports: [],\n template: `\n <div class=\"label\">\n <ng-content select=\"label\"></ng-content>\n </div>\n\n <div class=\"input-wrap\">\n <div class=\"min-indicator\">{{ inputState().min }}{{ unit() }}</div>\n\n <div class=\"track-wrap\" (click)=\"trackEvent($event)\">\n <ng-content select=\"input[type=range]\"></ng-content>\n\n <div class=\"track\">\n <div class=\"track-filled\" [style.width.%]=\"trackFilledPercentage()\"></div>\n </div>\n\n <div class=\"thumb-wrap\" [style.left.%]=\"thumbPositionPercentage()\">\n <div class=\"thumb\">\n <div class=\"value-indicator\">{{ value() }}{{ unit() }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"max-indicator\">{{ inputState().max }}{{ unit() }}</div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipRangeSlider {\n #selfRef = inject(ElementRef<HTMLElement>);\n #observer: MutationObserver | null = null;\n #inputElement: HTMLInputElement | null = null;\n #initialDefaultValue = 0;\n\n unit = input<string>('');\n value = model<number>(this.#initialDefaultValue);\n\n inputState = signal({\n min: 0,\n max: 100,\n step: 1,\n });\n\n valuePercentage = computed(() => {\n const { min, max } = this.inputState();\n const currentValue = this.value() ?? min;\n if (isNaN(currentValue)) return 0;\n\n const range = max - min;\n if (range === 0) return 0;\n\n const percentage = ((currentValue - min) / range) * 100;\n return Math.max(0, Math.min(100, percentage));\n });\n\n trackFilledPercentage = computed(() => this.valuePercentage());\n thumbPositionPercentage = computed(() => this.valuePercentage());\n\n syncModelToInputEffect = effect(() => {\n const modelValue = this.value();\n if (this.#inputElement) {\n const currentInputValue = parseFloat(this.#inputElement.value);\n if (isNaN(currentInputValue) || String(currentInputValue) !== String(modelValue)) {\n this.#inputElement.value = String(modelValue);\n }\n }\n });\n\n @HostBinding('class.has-input')\n get hasInputElement(): boolean {\n return !!this.#inputElement;\n }\n\n ngAfterViewInit() {\n this.#inputElement = this.#selfRef.nativeElement.querySelector('input[type=\"range\"]');\n\n if (this.#inputElement) {\n this.#createCustomInputEventListener(this.#inputElement);\n\n this.#inputElement.oninput = () => {\n this.setNewInputValue(this.#inputElement!.value);\n };\n\n this.#inputElement.addEventListener('inputValueChanged', (event: any) => {\n this.setNewInputValue(event.detail.value);\n });\n\n queueMicrotask(() => this.#updateStateFromInput(true));\n\n this.#setupMutationObserver();\n } else {\n console.error('ShipRangeSlider: No <input type=\"range\"> element found projected inside.');\n }\n }\n\n setNewInputValue(value: string) {\n const inputValue = parseFloat(value ?? '0');\n\n if (!isNaN(inputValue)) {\n const { min, max } = this.inputState();\n this.value.set(Math.max(min, Math.min(max, inputValue)));\n }\n }\n\n trackEvent(e: MouseEvent) {\n if (!this.#inputElement || this.#inputElement.readOnly || this.#inputElement.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n if (\n e.target === this.#inputElement ||\n (e.target as HTMLElement)?.closest('.thumb, .min-indicator, .max-indicator')\n ) {\n return;\n }\n\n const trackWrap = e.currentTarget as HTMLElement;\n const rect = trackWrap.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const width = rect.width;\n const { min, max, step } = this.inputState();\n const range = max - min;\n\n if (width > 0 && range !== 0 && step > 0) {\n let proportionalValue = (clickX / width) * range + min;\n const numSteps = (proportionalValue - min) / step;\n let nearestStepValue = min + Math.round(numSteps) * step;\n\n const decimals = this.#countDecimals(step);\n nearestStepValue = parseFloat(nearestStepValue.toFixed(decimals));\n\n const clampedValue = Math.max(min, Math.min(max, nearestStepValue));\n\n this.value.set(clampedValue);\n }\n }\n\n #updateStateFromInput(isInitialCall = false) {\n if (!this.#inputElement) return;\n\n const min = parseFloat(this.#inputElement.min ?? '0') ?? 0;\n const max = parseFloat(this.#inputElement.max ?? '100') ?? 100;\n const stepAttr = this.#inputElement.step;\n let step = 1;\n if (stepAttr && stepAttr.toLowerCase() !== 'any') {\n const parsedStep = parseFloat(stepAttr);\n if (!isNaN(parsedStep) && parsedStep > 0) {\n step = parsedStep;\n }\n }\n\n this.inputState.set({ min, max, step });\n\n const inputElementValue = parseFloat(this.#inputElement.value ?? String(min)) ?? min;\n\n if (isInitialCall && this.value() !== this.#initialDefaultValue) {\n const modelValue = this.value();\n const clampedModelValue = Math.max(min, Math.min(max, modelValue));\n\n if (inputElementValue !== clampedModelValue) {\n this.#inputElement.value = String(clampedModelValue);\n }\n if (modelValue !== clampedModelValue) {\n this.value.set(clampedModelValue);\n }\n } else {\n const clampedInputElementValue = Math.max(min, Math.min(max, inputElementValue));\n if (this.value() !== clampedInputElementValue) {\n this.value.set(clampedInputElementValue);\n }\n }\n }\n\n #setupMutationObserver() {\n if (!this.#inputElement || typeof MutationObserver === 'undefined') {\n return;\n }\n\n const MUTATION_ATTRIBUTES = ['min', 'max', 'step', 'value', 'readonly', 'disabled'];\n\n this.#observer = new MutationObserver((mutationList) => {\n let needsStateUpdate = false;\n for (const mutation of mutationList) {\n if (mutation.type === 'attributes' && MUTATION_ATTRIBUTES.includes(mutation.attributeName ?? '')) {\n needsStateUpdate = true;\n break;\n }\n }\n if (needsStateUpdate) {\n this.#updateStateFromInput(false);\n }\n });\n\n this.#observer.observe(this.#inputElement, { attributes: true, attributeFilter: MUTATION_ATTRIBUTES });\n }\n\n #countDecimals(value: number): number {\n if (isNaN(value) || Math.floor(value) === value) return 0;\n const str = value.toString();\n const decimalPart = str.split('.')[1];\n return decimalPart ? decimalPart.length : 0;\n }\n\n #createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n }\n\n ngOnDestroy() {\n if (this.#observer) {\n this.#observer.disconnect();\n }\n if (this.#inputElement) {\n this.#inputElement.oninput = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-spinner',\n imports: [],\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipSpinner {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { ShipCheckbox } from '../ship-checkbox/ship-checkbox';\nimport { ShipChip } from '../ship-chip/ship-chip';\nimport { ShipDivider } from '../ship-divider/ship-divider';\nimport { ShipFormField } from '../ship-form-field/ship-form-field';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipPopover } from '../ship-popover/ship-popover';\nimport { ShipSpinner } from '../ship-spinner/ship-spinner.component';\nimport { generateUniqueId } from '../utilities/random-id';\n\n// TODO build in live validation response for free text validation\n\ntype ValidateFreeText = (value: string) => boolean;\n\n@Component({\n selector: 'sh-select',\n imports: [NgTemplateOutlet, ShipPopover, ShipFormField, ShipIcon, ShipCheckbox, ShipSpinner, ShipChip, ShipDivider],\n template: `\n @let _placeholderTemplate = placeholderTemplate();\n @let _optionTemplate = optionTemplate();\n @let _freeTextOptionTemplate = freeTextOptionTemplate();\n @let _selectedOptionTemplate = selectedOptionTemplate();\n @let _inlineTemplate = inlineTemplate();\n @let _selectedOptions = selectedOptions();\n @let _inputState = inputState();\n\n @let _selOptionTemplate = _selectedOptionTemplate || _optionTemplate || _inlineTemplate;\n @let _listOptionTemplate = _optionTemplate || _inlineTemplate;\n @let _asChips = !asText() && selectMultiple();\n @let _showSearchText = isOpen() && hasSearch() && (_asChips || inputValue().length > -1);\n\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: false,\n }\">\n <sh-form-field\n trigger\n (click)=\"open()\"\n [class.stretch]=\"stretch()\"\n [class.small]=\"small()\"\n [class.readonly]=\"readonly() || disabled()\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[boxPrefix]\" ngProjectAs=\"[boxPrefix]\" />\n\n <div class=\"input\" [class.show-search-text]=\"_showSearchText\" ngProjectAs=\"input\">\n <div class=\"selected-value\" [class.is-selected]=\"_inputState === 'selected'\">\n @if (asFreeText() && inputValue().length > 0 && !isOpen()) {\n {{ inputValue() }}\n } @else if (_selectedOptions.length > 0) {\n @for (selectedOption of _selectedOptions; track $index) {\n @if (selectedOption) {\n @if (_asChips) {\n <sh-chip\n [class]=\"selectClasses()\"\n class=\"small\"\n (click)=\"removeSelectedOptionByIndex($event, $index)\">\n @if (_selOptionTemplate) {\n <ng-container\n *ngTemplateOutlet=\"_selOptionTemplate; context: { $implicit: selectedOption, last: $last }\" />\n } @else {\n {{ getLabel(selectedOption) }}\n }\n\n <sh-icon>x-bold</sh-icon>\n </sh-chip>\n } @else {\n @if (!_showSearchText) {\n @if (_selOptionTemplate) {\n <ng-container\n *ngTemplateOutlet=\"_selOptionTemplate; context: { $implicit: selectedOption, last: $last }\" />\n } @else {\n {{ $last ? getLabel(selectedOption) : getLabel(selectedOption) + ',' }}\n }\n }\n }\n }\n }\n } @else if (!_showSearchText) {\n @if (_placeholderTemplate) {\n <ng-container *ngTemplateOutlet=\"_placeholderTemplate\" />\n } @else {\n {{ placeholderText() ?? '' }}\n }\n }\n\n <ng-content select=\"input\" />\n <ng-content select=\"textarea\" />\n </div>\n </div>\n\n @if (_inputState === 'closed') {\n <sh-icon suffix>caret-down</sh-icon>\n } @else if (_inputState === 'loading') {\n <sh-spinner class=\"primary\" suffix></sh-spinner>\n } @else if (_inputState === 'open-searching') {\n <sh-icon suffix>list-magnifying-glass</sh-icon>\n } @else if (_inputState === 'searching') {\n <sh-icon suffix>magnifying-glass</sh-icon>\n } @else if (_inputState === 'selected' && _isClearable()) {\n <sh-icon suffix (click)=\"clear($event)\">x-bold</sh-icon>\n } @else if (_inputState === 'selected' && !_isClearable()) {\n <sh-icon suffix>caret-down</sh-icon>\n } @else {\n <sh-icon suffix>caret-up</sh-icon>\n }\n </sh-form-field>\n\n <div class=\"ship-options\" #optionsWrap id=\"optionsWrapId\" role=\"listbox\">\n @if (asFreeText()) {\n @let freeTextOption = computedFreeTextOption();\n @let freeTextOptionValue = getValue(freeTextOption);\n\n @if ($any(freeTextOptionValue).length > 0) {\n @if (freeTextTitle()) {\n <p title>{{ freeTextTitle() }}</p>\n }\n\n <li\n (click)=\"toggleOptionByIndex(-1)\"\n class=\"option\"\n [id]=\"this.getLabelAsSlug(freeTextOption)\"\n [attr.aria-selected]=\"isSelected(-1)\"\n [class.selected]=\"isSelected(-1)\"\n [class.focused]=\"-1 === focusedOptionIndex()\">\n @if (_freeTextOptionTemplate) {\n <ng-container *ngTemplateOutlet=\"_freeTextOptionTemplate; context: { $implicit: freeTextOption }\" />\n } @else if (_listOptionTemplate) {\n <ng-container *ngTemplateOutlet=\"_listOptionTemplate; context: { $implicit: freeTextOption }\" />\n } @else {\n {{ freeTextOptionValue }}\n }\n </li>\n\n @if (freeTextTitle() && filteredOptions().length > 0) {\n <sh-divider />\n }\n }\n }\n\n @if (optionTitle() && filteredOptions().length > 0) {\n <p title>{{ optionTitle() }}</p>\n }\n\n @for (option of filteredOptions(); track $index) {\n <li\n (click)=\"toggleOptionByIndex($index)\"\n class=\"option\"\n [id]=\"this.getLabelAsSlug(option)\"\n [attr.aria-selected]=\"isSelected($index)\"\n [class.selected]=\"isSelected($index)\"\n [class.focused]=\"$index === focusedOptionIndex()\">\n @if (selectMultiple()) {\n <sh-checkbox [class]=\"selectClasses()\" [class.active]=\"isSelected($index)\" />\n }\n\n @if (_listOptionTemplate) {\n <ng-container *ngTemplateOutlet=\"_listOptionTemplate; context: { $implicit: option }\" />\n } @else {\n {{ getLabel(option) }}\n }\n </li>\n }\n </div>\n </sh-popover>\n `,\n host: {\n '[class.multiple]': 'selectMultiple()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipSelect {\n #selfRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\n value = input<string>();\n label = input<string>();\n asFreeText = input(false);\n optionTitle = input<string | null>(null);\n freeTextTitle = input<string | null>(null);\n freeTextPlaceholder = input<string | null>('Type to create a new option');\n validateFreeText = input<ValidateFreeText>();\n placeholder = input<string>();\n readonly = model(false);\n disabled = model(false);\n lazySearch = input(false);\n inlineSearch = input(false);\n asText = input(false);\n isClearable = input(true);\n selectMultiple = input(false);\n optionTemplate = input<TemplateRef<unknown> | null>(null);\n selectedOptionTemplate = input<TemplateRef<unknown> | null>(null);\n placeholderTemplate = input<TemplateRef<unknown> | null>(null);\n freeTextOptionTemplate = input<TemplateRef<unknown> | null>(null);\n isOpen = model(false);\n isLoading = model(false);\n options = model<unknown[]>([]);\n selectedOptions = model<unknown[]>([]);\n cleared = output<void>();\n onAddNewFreeTextOption = output<string>();\n\n computedFreeTextOption = computed(() => {\n const inputValue = this.inputValue();\n const valueKey = this.value();\n const newOption: Record<string, any> | string = valueKey ? {} : inputValue;\n\n if (valueKey && typeof newOption === 'object') {\n newOption[valueKey] = inputValue;\n }\n\n return newOption;\n });\n\n #previousSelectedOptions = signal<unknown[] | null>(null);\n inlineTemplate = contentChild<TemplateRef<unknown>>(TemplateRef);\n optionsWrapRef = viewChild.required<ElementRef<HTMLDivElement>>('optionsWrap');\n inputRefInput = signal<ElementRef<HTMLInputElement> | null>(null);\n #inputObserver =\n typeof MutationObserver !== 'undefined' &&\n new MutationObserver((mutations) => {\n for (var mutation of mutations) {\n if (mutation && (mutation.target.nodeName === 'INPUT' || mutation.target.nodeName === 'TEXTAREA')) {\n this.inputRefInput.set(new ElementRef(mutation.target as HTMLInputElement));\n\n (this.#inputObserver as MutationObserver).disconnect();\n }\n }\n });\n\n inputValue = signal<string>('');\n\n prevInputValue = signal<string | null>(null);\n focusedOptionIndex = signal<number>(-1);\n\n _isClearable = computed(() => this.selectMultiple() || this.isClearable());\n selectClasses = computed(() => this.#selfRef.nativeElement.classList.toString());\n stretch = computed(() => this.selectClasses().includes('stretch'));\n small = computed(() => this.selectClasses().includes('small'));\n placeholderText = computed(() => {\n const placeholder = this.placeholder();\n const inputRefEl = this.inputRefEl();\n\n return placeholder || inputRefEl?.placeholder || null;\n });\n\n selectedOptionValues = computed(() => {\n const selectedOptions = this.selectedOptions();\n const valueKey = this.value();\n\n return valueKey\n ? selectedOptions.map((selectedOption) => this.#getProperty(selectedOption, valueKey))\n : selectedOptions;\n });\n\n filteredOptions = computed<unknown[]>(() => {\n const opts = this.options() || [];\n const label = this.label();\n const valueKey = this.value();\n const inlineSearch = this.inlineSearch();\n const inputValue = this.inputValue().toLowerCase();\n const inputValueRegex = this.#createWildcardRegex(inputValue);\n\n if (opts.length <= 0) return [];\n if (!inlineSearch || inputValue === '') {\n return opts;\n }\n\n const filtered = opts.filter((item) => {\n const optionLabel = label\n ? (this.#getProperty(item, label) ?? '').toString().toLowerCase()\n : (item ?? '').toString().toLowerCase();\n\n const optionValue = ((valueKey ? this.#getProperty(item, valueKey) : item) ?? '').toString().toLowerCase();\n\n const testLabel = inputValueRegex.test(optionLabel);\n const testValue = inputValueRegex.test(optionValue);\n\n return testLabel || testValue;\n });\n\n const scoredOptions = filtered.map((item) => {\n const optionLabel = label\n ? (this.#getProperty(item, label) ?? '').toString().toLowerCase()\n : (item ?? '').toString().toLowerCase();\n\n const optionValue = ((valueKey ? this.#getProperty(item, valueKey) : item) ?? '').toString().toLowerCase();\n\n const labelScore = this.#calculateMatchScore(optionLabel, inputValue);\n const valueScore = this.#calculateMatchScore(optionValue, inputValue);\n\n return {\n item,\n score: Math.max(labelScore, valueScore),\n };\n });\n\n scoredOptions.sort((a, b) => b.score - a.score);\n\n return scoredOptions.map((scoredOption) => scoredOption.item);\n });\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n #componentId = generateUniqueId();\n inputRefEl = computed(() => {\n const inputRefInput = this.inputRefInput();\n\n if (inputRefInput === null) return;\n\n const input = inputRefInput ? inputRefInput.nativeElement : null;\n\n if (!input) {\n console.warn(\n '<sh-select> input element not found are you missing to pass an <input> or <textarea> element to select component?'\n );\n return null;\n }\n\n input.autocomplete = 'off';\n input.setAttribute('role', 'combobox');\n input.setAttribute('id', `combobox-${this.#componentId}`);\n input.setAttribute('aria-haspopup', 'listbox');\n input.setAttribute('aria-owns', 'optionsWrapId');\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('focus', () => {\n if (this.readonly()) return;\n\n this.open();\n });\n\n input.addEventListener('input', (e: any) => {\n const newInputValue = e.target.value;\n const inputValue = this.inputValue();\n\n if (newInputValue === inputValue) return;\n\n this.focusedOptionIndex.set(this.asFreeText() ? -1 : 0);\n this.inputValue.set(newInputValue);\n this.updateInputElValue();\n });\n\n input.addEventListener('inputValueChanged', (event: any) => {\n const newInputValue = event.detail.value;\n const inputValue = this.inputValue();\n\n if (newInputValue === inputValue) return;\n if (newInputValue === '') {\n this.clear();\n return;\n }\n\n this.setSelectedOptionsFromValue(newInputValue);\n this.setInputValueFromOptions(this.selectedOptions());\n this.#setFirstSelectedOptionAsFocused();\n });\n\n return input;\n });\n\n focusEffect = effect(() => {\n const input = this.inputRefEl();\n\n if (!input) return;\n\n const focusedId = this.getLabelAsSlug(this.filteredOptions()[this.focusedOptionIndex()]);\n\n if (focusedId) {\n input.setAttribute('aria-activedescendant', focusedId);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n });\n\n openAbortController: AbortController | null = null;\n\n isOpenEffect = effect(() => {\n const isOpen = this.isOpen();\n\n if (isOpen) {\n if (!this.openAbortController) {\n this.openAbortController = new AbortController();\n }\n\n const input = this.inputRefEl();\n const asFreeText = this.asFreeText();\n const baseIndex = asFreeText ? -1 : 0;\n\n if (!input) return;\n\n input.setAttribute('aria-expanded', this.isOpen().toString());\n\n (input as HTMLInputElement).addEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' || e.key === 'Tab') {\n e.preventDefault();\n\n this.close();\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n\n this.toggleOptionByIndex(this.focusedOptionIndex(), undefined, true);\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n\n const newIndex = (this.focusedOptionIndex() as number) + 1;\n\n this.focusedOptionIndex.set(newIndex > this.filteredOptions().length - 1 ? baseIndex : newIndex);\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n\n const newIndex = (this.focusedOptionIndex() as number) - 1;\n\n this.focusedOptionIndex.set(newIndex < baseIndex ? this.filteredOptions().length - 1 : newIndex);\n }\n },\n {\n signal: this.openAbortController?.signal,\n }\n );\n } else {\n const input = this.inputRefEl();\n\n if (!input) return;\n\n input.setAttribute('aria-expanded', this.isOpen().toString());\n\n if (this.openAbortController) {\n this.openAbortController.abort();\n this.openAbortController = null;\n }\n }\n });\n\n _inputValue = '';\n inputValueEffect = effect(() => {\n const inputValue = this.inputValue();\n this._inputValue = inputValue;\n });\n\n inputRefElEffect = effect(() => {\n const input = this.inputRefEl();\n\n if (!input) return;\n if (input.value === this._inputValue) return;\n\n this.disabled.set(input.disabled);\n\n this.setSelectedOptionsFromValue(input.value);\n this.setInputValueFromOptions(this.selectedOptions());\n });\n\n selectedLabels = computed(() => {\n const selected = this.selectedOptions();\n const label = this.label();\n\n if (!label) {\n return selected.join(', ');\n }\n\n return selected.map((selected) => this.getLabel(selected)).join(', ');\n });\n\n inputState = computed(() => {\n if ((this.selectedOptions().length > 0 || (this.asFreeText() && this.inputValue().length > 0)) && !this.isOpen()) {\n return 'selected';\n }\n\n if (this.isLoading()) {\n return 'loading';\n }\n\n if (this.isOpen() && (this.lazySearch() || this.inlineSearch())) {\n return 'open-searching';\n }\n\n if (this.isOpen()) {\n return 'open';\n }\n\n if (this.inlineSearch() || this.lazySearch()) {\n return 'searching';\n }\n\n return 'closed';\n });\n\n hasSearch = computed(() => this.inlineSearch() || this.lazySearch());\n\n #selectedOptionsEffect = effect(() => {\n if (this.selectMultiple() && this.hasSearch()) {\n return;\n }\n\n const selectedOptions = this.selectedOptions();\n const valueKey = this.value();\n\n const inputValue = selectedOptions\n .map((option) => {\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n return optionValue;\n })\n .join(',');\n\n this.inputValue.set(inputValue);\n });\n\n ngOnInit() {\n this.setInitInput();\n }\n\n setInitInput() {\n const input = this.#selfRef.nativeElement.querySelector('input');\n\n if (input) {\n this.inputRefInput.set(new ElementRef(input));\n return;\n }\n\n const textarea = this.#selfRef.nativeElement.querySelector('textarea');\n\n if (textarea) {\n this.inputRefInput.set(new ElementRef(textarea as any as HTMLInputElement));\n return;\n }\n\n if (typeof MutationObserver !== 'undefined') {\n (this.#inputObserver as MutationObserver).observe(this.#selfRef.nativeElement, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n }\n\n setSelectedOptionsFromValue(value: string) {\n const options = this.options() || [];\n const valueKey = this.value();\n const selectMultiple = this.selectMultiple();\n\n const inputValueAsString = value.toString().split(',');\n\n if (inputValueAsString.length === 0) {\n this.selectedOptions.set([]);\n return;\n }\n const inputAsArray = selectMultiple ? inputValueAsString : [inputValueAsString[0]];\n\n const selectedOptions = options.filter((option) => {\n const optionValue = valueKey ? this.#getProperty(option, valueKey)?.toString() : option?.toString();\n\n return optionValue && inputAsArray.includes(optionValue);\n });\n\n this.selectedOptions.set(selectMultiple ? selectedOptions : [selectedOptions[0]]);\n }\n\n setInputValueFromOptions(options: unknown[]) {\n const valueKey = this.value();\n\n if (options.length === 0) {\n this.inputValue.set('');\n this.updateInputElValue();\n\n return;\n }\n\n const newInputValue = options\n .map((option) => {\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n return optionValue;\n })\n .join(',');\n\n if (newInputValue === this.inputValue()) return;\n\n this.inputValue.set(newInputValue);\n this.updateInputElValue();\n }\n\n getValue(option: unknown) {\n const valueKey = this.value();\n\n if (!valueKey) return option;\n\n return this.#getProperty(option, valueKey);\n }\n\n getLabel(option: unknown) {\n const label = this.label();\n\n if (!label) return option;\n\n return this.#getProperty(option, label);\n }\n\n getLabelAsSlug(option: unknown) {\n const label = this.getLabel(option);\n\n if (!label || typeof label !== 'string') return '';\n\n return label.replaceAll(' ', '-');\n }\n\n toggleOptionByIndex(optionIndex: number, event?: MouseEvent, enterKey = false) {\n let option = this.filteredOptions()[optionIndex];\n\n if (this.asFreeText() && optionIndex === -1) {\n const newOption = this.computedFreeTextOption();\n const newOptionValue = this.getValue(newOption);\n const validateFreeTextFunc = this.validateFreeText() ?? ((val: string) => true);\n\n const isValid = validateFreeTextFunc(newOptionValue as string);\n\n if (!isValid) return;\n\n this.options.update((options) => {\n const index = options.findIndex((option) => this.getValue(option) === newOptionValue);\n\n if (index > -1) return options;\n\n this.onAddNewFreeTextOption.emit(newOptionValue as string);\n\n return [newOption, ...options];\n });\n\n optionIndex = 0;\n option = newOption;\n } else if (!option) {\n this.close();\n return;\n }\n\n if (event) {\n event.stopPropagation();\n }\n\n const selectMultiple = this.selectMultiple();\n const isClearable = this._isClearable();\n const valueKey = this.value();\n const selectedOptionValues = this.selectedOptionValues();\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n\n this.prevInputValue.set(null);\n this.#previousSelectedOptions.set(null);\n this.selectedOptions.update((selectedOptions) => {\n const index = selectedOptionValues.indexOf(optionValue);\n\n if (index > -1) {\n // Remove it\n const nextSelectedOptions = [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)];\n\n return isClearable\n ? nextSelectedOptions\n : nextSelectedOptions.length > 0\n ? nextSelectedOptions\n : selectedOptions;\n } else {\n // Add it\n this.focusedOptionIndex.set(optionIndex);\n return selectMultiple ? [...selectedOptions, option] : [option];\n }\n });\n\n if (selectMultiple) {\n this.inputRefEl()?.focus();\n } else {\n this.isOpen.set(false);\n }\n\n this.setInputValueFromOptions(this.selectedOptions());\n\n if (selectMultiple && this.hasSearch()) {\n this.inputValue.set('');\n this.updateInputElValue();\n }\n }\n\n removeSelectedOptionByIndex($event: MouseEvent, optionRemoveIndex: number) {\n $event.stopPropagation();\n\n this.selectedOptions.update((selectedOptions) => {\n return [...selectedOptions.slice(0, optionRemoveIndex), ...selectedOptions.slice(optionRemoveIndex + 1)];\n });\n\n this.setInputValueFromOptions(this.selectedOptions());\n }\n\n isSelected(optionIndex: number): boolean {\n const valueKey = this.value();\n const option = this.filteredOptions()[optionIndex];\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n\n return this.selectedOptionValues().indexOf(optionValue) > -1;\n }\n\n open() {\n if (this.isOpen()) return;\n\n this.isOpen.set(true);\n\n if (this.hasSearch()) {\n this.prevInputValue.set(this.inputValue() ?? '');\n this.inputValue.set('');\n this.updateInputElValue();\n } else {\n this.#previousSelectedOptions.set(this.selectedOptions());\n }\n\n if (!this.selectMultiple()) {\n this.#setFirstSelectedOptionAsFocused();\n }\n }\n\n #setFirstSelectedOptionAsFocused() {\n const firstSelectedValue = this.selectedOptionValues()[0];\n const valueKey = this.value();\n\n if (firstSelectedValue) {\n const findOptionIndex = this.filteredOptions().findIndex((x) =>\n valueKey ? this.#getProperty(x, valueKey) === firstSelectedValue : x === firstSelectedValue\n );\n\n this.focusedOptionIndex.set(findOptionIndex);\n } else {\n this.focusedOptionIndex.set(-1);\n }\n }\n\n close() {\n this.isOpen.set(false);\n\n const prevInputValue = this.prevInputValue();\n const prevSelectedOptions = this.#previousSelectedOptions();\n\n if (this.asFreeText()) {\n this.updateInputElValue();\n return;\n }\n\n if (this.hasSearch() && prevInputValue) {\n this.inputValue.set(prevInputValue);\n this.setInputValueFromOptions(this.selectedOptions());\n }\n\n if (!this.hasSearch() && prevSelectedOptions !== null) {\n this.setInputValueFromOptions(prevSelectedOptions);\n }\n\n if (this.selectMultiple()) {\n this.setInputValueFromOptions(this.selectedOptions());\n }\n }\n\n clear($event?: MouseEvent) {\n $event?.stopPropagation();\n\n this.inputValue.set('');\n this.selectedOptions.set([]);\n this.isOpen.set(false);\n this.prevInputValue.set(null);\n this.cleared.emit();\n\n this.updateInputElValue();\n }\n\n updateInputElValue() {\n const inputEl = this.inputRefEl();\n const inputValue = this.inputValue();\n\n if (!inputEl) return;\n\n inputEl.value = inputValue;\n inputEl.dispatchEvent(new Event('input'));\n }\n\n #getProperty(obj: unknown, path: string): unknown {\n return path.split('.').reduce((o: unknown, i: string) => (o as any)?.[i], obj);\n }\n\n #createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n }\n\n #createWildcardRegex(inputValue: string | null | undefined): RegExp {\n const lowerCaseInput = (inputValue ?? '').toLowerCase();\n let regexPattern = '^';\n\n for (const char of lowerCaseInput) {\n regexPattern += '.*' + this.#escapeRegexChar(char);\n }\n\n regexPattern += '.*$';\n\n return new RegExp(regexPattern, 'i');\n }\n\n #escapeRegexChar(char: string): string {\n return char.replace(/[-\\/\\\\^$+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n ngOnDestroy() {\n if (this.openAbortController) {\n this.openAbortController.abort();\n this.openAbortController = null;\n }\n\n if (typeof MutationObserver !== 'undefined') {\n (this.#inputObserver as MutationObserver).disconnect();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n runInInjectionContext,\n signal,\n viewChild,\n WritableSignal,\n} from '@angular/core';\n\nexport type ShipSidenavType = 'overlay' | 'simple' | '';\nexport function watchHostClass(className: string): WritableSignal<boolean> {\n const elementRef = inject(ElementRef);\n const destroyRef = inject(DestroyRef);\n\n const hasClass = signal(false);\n const observer =\n typeof MutationObserver !== 'undefined' &&\n new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n hasClass.set(elementRef.nativeElement.classList.contains(className));\n }\n });\n });\n\n runInInjectionContext(elementRef.nativeElement, () => {\n if (observer) {\n observer.observe(elementRef.nativeElement, { attributes: true });\n }\n\n hasClass.set(elementRef.nativeElement.classList.contains(className));\n });\n\n destroyRef.onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n return hasClass;\n}\n\n@Component({\n selector: 'sh-sidenav',\n template: `\n @if (isOverlay() && !disableDrag()) {\n <div #dragImageElement class=\"drag-image\"></div>\n }\n\n @if (isOverlay() && isDragging()) {\n <div class=\"dropping-surface\" (drop)=\"drop($event)\" (dragenter)=\"dragEnter()\" (dragleave)=\"dragLeave()\"></div>\n }\n\n <div class=\"sidenav\">\n <ng-content select=\"[sidenav]\"></ng-content>\n </div>\n\n <div class=\"main-wrap\" [style.transform]=\"!disableDrag() && draggingStyle()\">\n @if (isOverlay() && !disableDrag()) {\n <div\n class=\"dragable\"\n draggable=\"true\"\n (dragstart)=\"dragStart($event)\"\n (dragend)=\"dragEnd($event)\"\n (drag)=\"drag($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchCancel($event)\"></div>\n }\n\n <div class=\"closed-topbar\">\n <ng-content select=\"[sidenav-closed-topbar]\"></ng-content>\n </div>\n\n <main>\n <ng-content />\n </main>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.open]': 'isOpen()',\n '[class.closed]': '!isOpen()',\n '[class.is-dragging]': 'isDragging()',\n },\n})\nexport class ShipSidenav {\n #document = inject(DOCUMENT);\n #selfRef = inject(ElementRef);\n openWidth = 280;\n openWidthTreshold = this.openWidth * 0.5;\n\n disableDrag = input<boolean>(false);\n isOpen = model<boolean>(false);\n isOverlay = watchHostClass('overlay');\n\n #closestParent = this.#selfRef.nativeElement.parentElement;\n #closestParentRect = this.#closestParent.getBoundingClientRect && this.#closestParent.getBoundingClientRect();\n\n dragImageElement = viewChild.required<ElementRef<HTMLDivElement>>('dragImageElement');\n dragIsEnding = signal<boolean>(false);\n dragIsOnScreen = signal<boolean>(true);\n isDragging = signal<boolean>(false);\n dragPositionX = signal<number>(0);\n\n dragActualPositionX = computed(() => {\n const dragPosition = this.dragPositionX();\n const openWidth = 280;\n const noEffectWidth = 100;\n const tensionFactor = 0.008;\n\n const center = openWidth / 2;\n const deadZoneStart = center - noEffectWidth / 2;\n const deadZoneEnd = center + noEffectWidth / 2;\n\n if (dragPosition > deadZoneEnd) {\n const distancePastDeadZone = dragPosition - deadZoneEnd;\n const maxTensionDistance = openWidth - deadZoneEnd;\n\n const dampenedDistance = maxTensionDistance * (1 - Math.exp(-tensionFactor * distancePastDeadZone));\n\n return deadZoneEnd + dampenedDistance;\n } else if (dragPosition < deadZoneStart) {\n const distancePastDeadZone = deadZoneStart - dragPosition;\n const maxTensionDistance = deadZoneStart;\n\n const dampenedDistance = maxTensionDistance * (1 - Math.exp(-tensionFactor * distancePastDeadZone));\n\n return deadZoneStart - dampenedDistance;\n }\n\n return dragPosition;\n });\n\n draggingStyle = computed(() => {\n if (!this.isOverlay() || this.disableDrag()) return null;\n\n if (this.isDragging()) {\n return `translateX(${this.dragActualPositionX()}px)`;\n }\n\n return this.isOpen() ? `translateX(${this.openWidth}px)` : `translateX(0px)`;\n });\n\n draggingEffect = effect(() => {\n if (this.disableDrag()) return;\n\n if (this.isDragging()) {\n this.#document.body.classList.add('dragging');\n } else {\n this.#document.body.classList.remove('dragging');\n }\n });\n\n drop(e: DragEvent) {\n e.stopPropagation();\n this.#drop(e.clientX - this.#closestParentRect.left);\n }\n\n #drop(clientX: number) {\n this.isDragging.set(false);\n\n if (clientX >= this.openWidthTreshold) {\n this.isOpen.set(true);\n } else {\n this.isOpen.set(false);\n }\n }\n\n dragEnd(e: DragEvent) {\n if (e.clientX - this.#closestParentRect.left < 0) {\n this.#drop(0);\n }\n\n if (e.clientX - this.#closestParentRect.left > this.openWidthTreshold) {\n this.#drop(this.openWidthTreshold);\n }\n }\n\n dragEnter() {\n this.dragIsOnScreen.set(true);\n }\n\n dragLeave() {\n this.dragIsOnScreen.set(false);\n }\n\n dragStart(e: DragEvent) {\n e.stopPropagation();\n\n this.#closestParentRect = this.#closestParent.getBoundingClientRect();\n this.isDragging.set(true);\n }\n\n drag(e: DragEvent) {\n e.stopPropagation();\n\n if (!this.isDragging()) return;\n\n if (e.clientX !== 0 || e.clientY !== 0) {\n this.dragPositionX.set(e.clientX - this.#closestParentRect.left);\n }\n }\n\n touchStart(e: TouchEvent) {\n e.stopPropagation();\n\n this.isDragging.set(true);\n this.#closestParentRect = this.#closestParent.getBoundingClientRect();\n this.dragPositionX.set(0);\n }\n\n touchMove(e: TouchEvent) {\n e.stopPropagation();\n\n if (!this.isDragging()) return;\n\n this.dragPositionX.set(e.touches[0].clientX - this.#closestParentRect.left);\n }\n\n touchEnd(e: TouchEvent) {\n e.stopPropagation();\n\n this.#drop(e.changedTouches[0].clientX - this.#closestParentRect.left);\n }\n\n touchCancel(e: TouchEvent) {\n e.stopPropagation();\n\n this.isDragging.set(false);\n }\n}\n","import { Directive, ElementRef, HostListener, inject, Renderer2 } from '@angular/core';\n\n@Directive({\n standalone: true,\n selector: '[shGridSortable]',\n})\nexport class GridSortable {\n #selfRef = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #draggedItem: HTMLElement | null = null;\n\n @HostListener('dragstart', ['$event'])\n onDragStart(event: DragEvent) {\n this.#draggedItem = event.target as HTMLElement;\n this.updateOrder(); // Initialize order for all children\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.preventDefault();\n }\n\n @HostListener('dragenter', ['$event'])\n onDragEnter(event: DragEvent) {\n const target = event.target as HTMLElement;\n if (this.#draggedItem && target !== this.#draggedItem && target.parentNode === this.#draggedItem.parentNode) {\n const parent = this.#draggedItem.parentNode as HTMLElement;\n const draggedIndex = Array.from(parent.children).indexOf(this.#draggedItem);\n const targetIndex = Array.from(parent.children).indexOf(target);\n\n // Update only the flipped indexes\n this.#renderer.setStyle(this.#draggedItem, 'order', targetIndex);\n this.#renderer.setStyle(target, 'order', draggedIndex);\n }\n }\n\n private updateOrder(excludedItem: HTMLElement | null = null) {\n const items = this.#selfRef.nativeElement.children;\n Array.from(items).forEach((item, index) => {\n if (item !== excludedItem) {\n this.#renderer.setStyle(item, 'order', index);\n }\n });\n }\n}\n","import {\n Directive,\n DOCUMENT,\n effect,\n ElementRef,\n HostListener,\n inject,\n output,\n Renderer2,\n signal,\n} from '@angular/core';\n\nexport type AfterDropResponse = {\n fromIndex: number;\n toIndex: number;\n};\n\n@Directive({\n selector: '[shSortable]',\n standalone: true,\n})\nexport class ShipSortable {\n #document = inject(DOCUMENT);\n #selfEl = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #placeholderEl = signal<HTMLElement | null>(null);\n #ghostEl = signal<HTMLElement | null>(null);\n #parentGap = signal<number>(0);\n\n dragStartIndex = signal<number>(-1);\n dragToIndex = signal<number>(-1);\n dragables = signal<HTMLElement[]>([]);\n afterDrop = output<AfterDropResponse>();\n\n abortController: AbortController | null = null;\n isDropping = false;\n\n draggingEffect = effect(() => {\n const currentDragPosIndex = this.dragToIndex();\n const startIndex = this.dragStartIndex();\n const dragables = this.dragables();\n\n if (currentDragPosIndex > -1 && startIndex > -1 && dragables.length > 0) {\n const placeholderEl = this.#placeholderEl();\n const gapValue = this.#parentGap();\n const draggedElement = dragables[startIndex];\n\n if (!draggedElement) return;\n\n const totalShift = draggedElement.offsetHeight + gapValue;\n let placeholderElShift = 0;\n\n if (currentDragPosIndex > startIndex) {\n for (let i = startIndex + 1; i <= currentDragPosIndex; i++) {\n placeholderElShift += dragables[i].offsetHeight + gapValue;\n }\n } else if (currentDragPosIndex < startIndex) {\n for (let i = startIndex - 1; i >= currentDragPosIndex; i--) {\n placeholderElShift -= dragables[i].offsetHeight + gapValue;\n }\n }\n\n if (placeholderEl) {\n const newTransform = `translateY(${placeholderElShift}px)`;\n if (placeholderEl.style.transform !== newTransform) {\n this.#renderer.setStyle(placeholderEl, 'transform', newTransform);\n }\n }\n\n for (let i = 0; i < dragables.length; i++) {\n if (i === startIndex) continue;\n\n let newTransform = 'translateY(0)';\n\n if (currentDragPosIndex > startIndex && currentDragPosIndex >= i && startIndex < i) {\n newTransform = `translateY(${-totalShift}px)`;\n } else if (currentDragPosIndex < startIndex && currentDragPosIndex <= i && startIndex > i) {\n newTransform = `translateY(${totalShift}px)`;\n }\n\n if (dragables[i].style.transform !== newTransform) {\n this.#renderer.setStyle(dragables[i], 'transform', newTransform);\n }\n }\n }\n });\n\n draggablesEffect = effect(() => {\n const els = this.dragables();\n if (this.abortController) {\n this.abortController.abort();\n }\n this.abortController = new AbortController();\n\n for (const el of els) {\n el.addEventListener('dragstart', (e) => this.dragStart(e), { signal: this.abortController.signal });\n el.addEventListener('dragend', () => this.dragEnd(), { signal: this.abortController.signal });\n }\n });\n\n getIndexOfElement(element: HTMLElement) {\n return this.dragables().findIndex((el) => el === element);\n }\n\n dragStart(e: DragEvent) {\n if (e.target && e.dataTransfer) {\n const targetElement = e.target as HTMLElement;\n const currentTarget = this.#document.elementFromPoint(e.clientX, e.clientY);\n const isSortingHandle =\n currentTarget?.hasAttribute('sort-handle') || currentTarget?.closest('[sort-handle]') !== null;\n let draggedElement: HTMLElement;\n\n if (isSortingHandle) {\n draggedElement = targetElement.closest('[draggable]') as HTMLElement;\n } else {\n draggedElement = targetElement;\n if (draggedElement.parentElement?.querySelector('[sort-handle]') !== null || !draggedElement.draggable) {\n e.preventDefault();\n return;\n }\n }\n\n e.dataTransfer.effectAllowed = 'move';\n\n const ghostElement = draggedElement.cloneNode(true) as HTMLElement;\n this.#ghostEl.set(ghostElement);\n this.#renderer.addClass(ghostElement, 'sortable-ghost');\n this.#renderer.setStyle(ghostElement, 'position', 'absolute');\n this.#renderer.setStyle(ghostElement, 'top', '0');\n this.#renderer.setStyle(ghostElement, 'left', '-9999px');\n this.#renderer.appendChild(this.#selfEl.nativeElement, ghostElement);\n e.dataTransfer.setDragImage(ghostElement, e.offsetX, e.offsetY);\n\n const parentStyle = window.getComputedStyle(draggedElement.parentElement!);\n this.#parentGap.set(parseFloat(parentStyle.gap) || 0);\n const draggedElementIndex = this.getIndexOfElement(draggedElement);\n this.dragStartIndex.set(draggedElementIndex);\n this.dragToIndex.set(draggedElementIndex);\n\n this.#renderer.addClass(draggedElement, 'sortable-dragged-el');\n this.#renderer.addClass(this.#selfEl.nativeElement, 'dragging');\n\n queueMicrotask(() => {\n const placeholderElement = draggedElement.cloneNode(true) as HTMLElement;\n this.#renderer.addClass(placeholderElement, 'sortable-placeholder');\n this.#renderer.removeClass(placeholderElement, 'sortable-dragged-el');\n this.#renderer.setStyle(placeholderElement, 'left', `${draggedElement.offsetLeft}px`);\n this.#renderer.setStyle(placeholderElement, 'width', `${draggedElement.offsetWidth}px`);\n this.#renderer.setStyle(placeholderElement, 'top', `${draggedElement.offsetTop}px`);\n this.#renderer.setStyle(placeholderElement, 'zIndex', '1');\n this.#placeholderEl.set(placeholderElement);\n this.#selfEl.nativeElement.appendChild(placeholderElement);\n });\n }\n }\n\n ngOnInit() {\n if (typeof MutationObserver !== 'undefined') {\n (this.#dragableObserver as MutationObserver).observe(this.#selfEl.nativeElement, { childList: true });\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragOver(e: DragEvent) {\n e.preventDefault();\n\n e.dataTransfer!.dropEffect = 'move';\n\n const startIndex = this.dragStartIndex();\n if (startIndex === -1) {\n return;\n }\n\n const draggables = this.dragables();\n const draggedElement = draggables[startIndex];\n\n const targetElement = draggables.find((child) => {\n if (child === draggedElement) {\n return false;\n }\n const rect = child.getBoundingClientRect();\n return e.clientY < rect.top + rect.height / 2;\n });\n\n if (!targetElement) {\n const lastIndex = draggables.length - 1;\n if (this.dragToIndex() !== lastIndex) {\n this.dragToIndex.set(lastIndex);\n }\n return;\n }\n\n let potentialToIndex = this.getIndexOfElement(targetElement);\n\n if (startIndex < potentialToIndex) {\n potentialToIndex--;\n }\n\n if (this.dragToIndex() !== potentialToIndex) {\n this.dragToIndex.set(potentialToIndex);\n }\n }\n\n @HostListener('drop')\n drop() {\n if (this.dragStartIndex() !== -1 && this.dragToIndex() !== -1 && this.dragStartIndex() !== this.dragToIndex()) {\n this.isDropping = true;\n this.afterDrop.emit({ fromIndex: this.dragStartIndex(), toIndex: this.dragToIndex() });\n }\n }\n\n dragEnd() {\n this.#cleanupDragState();\n }\n\n #cleanupDragState() {\n const placeholder = this.#placeholderEl();\n const ghost = this.#ghostEl();\n\n if (placeholder) {\n this.#renderer.removeChild(this.#selfEl.nativeElement, placeholder);\n this.#placeholderEl.set(null);\n }\n\n if (ghost) {\n this.#renderer.removeChild(this.#selfEl.nativeElement, ghost);\n this.#ghostEl.set(null);\n }\n\n // We no longer reset styles here to prevent flicker.\n // The MutationObserver will handle it after the DOM is updated.\n if (!this.isDropping) {\n this.#resetStyles();\n }\n\n this.dragStartIndex.set(-1);\n this.dragToIndex.set(-1);\n this.#renderer.removeClass(this.#selfEl.nativeElement, 'dragging');\n }\n\n #resetStyles() {\n const dragables = this.dragables();\n for (const el of dragables) {\n this.#renderer.setStyle(el, 'transform', '');\n this.#renderer.removeClass(el, 'sortable-dragged-el');\n }\n }\n\n #dragableObserver =\n typeof MutationObserver !== 'undefined' &&\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const draggableElements = Array.from(\n this.#selfEl.nativeElement.querySelectorAll('[draggable]:not(.sortable-placeholder):not(.sortable-ghost)')\n ) as HTMLElement[];\n this.dragables.set(draggableElements);\n\n if (this.isDropping) {\n // The drop is complete and Angular has updated the DOM.\n // Now we can safely reset the styles and the flag.\n this.#resetStyles();\n this.isDropping = false;\n }\n }\n }\n });\n\n ngOnDestroy() {\n (this.#dragableObserver as MutationObserver)?.disconnect();\n this.abortController?.abort();\n }\n}\n\nexport function moveIndex<T = any>(array: T[], event: AfterDropResponse): T[] {\n const { fromIndex, toIndex } = event;\n\n if (fromIndex < 0 || fromIndex >= array.length || toIndex < 0 || toIndex >= array.length) {\n return array;\n }\n\n const newArray = [...array];\n const [removedItem] = newArray.splice(fromIndex, 1);\n\n newArray.splice(toIndex, 0, removedItem);\n\n return newArray;\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-stepper',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipStepper {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n output,\n Renderer2,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipProgressBar } from '../ship-progress-bar/ship-progress-bar';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { observeChildren } from '../utilities/observe-elements';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\n\n@Directive({\n selector: '[shResize]',\n standalone: true,\n})\nexport class ShipResize {\n #el = inject(ElementRef) as ElementRef<HTMLTableCellElement>;\n #renderer = inject(Renderer2);\n #table = inject(ShipTable);\n\n resizable = input<boolean>(true);\n minWidth = input<number>(50);\n maxWidth = input<number | null>(null);\n\n #startX!: number;\n #startWidth!: number;\n #resizing = false;\n #animationFrameRequest: number | null = null; // Store request ID\n\n ngOnInit() {\n if (!this.#table) {\n console.error('shTableResize directive must be used within a sh-table component.');\n return;\n }\n\n if (this.resizable()) {\n const resizer = this.#renderer.createElement('div');\n this.#renderer.addClass(resizer, 'sh-resizer');\n this.#renderer.appendChild(this.#el.nativeElement, resizer);\n this.#renderer.listen(resizer, 'mousedown', this.#onMouseDown.bind(this));\n }\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.#resizing) return;\n\n this.#scheduleResize(event);\n }\n\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(event: MouseEvent) {\n if (this.#resizing) {\n this.#resizing = false;\n this.#table.resizing.set(false);\n\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n this.#animationFrameRequest = null;\n }\n }\n }\n\n @HostListener('document:click', ['$event']) onClick(event: MouseEvent) {\n if (this.#resizing) {\n event.stopPropagation();\n }\n }\n\n #onMouseDown(event: MouseEvent) {\n event.stopPropagation();\n\n if (!this.resizable()) return;\n\n this.#table.resizing.set(true);\n this.#resizing = true;\n this.#startX = event.pageX;\n this.#startWidth = this.#el.nativeElement.offsetWidth;\n }\n\n #scheduleResize(event: MouseEvent) {\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n }\n\n this.#animationFrameRequest = requestAnimationFrame(() => {\n this.#resizeColumn(event);\n this.#animationFrameRequest = null;\n });\n }\n\n #resizeColumn(event: MouseEvent) {\n const width = this.#startWidth + (event.pageX - this.#startX);\n const constrainedWidth = Math.max(\n this.minWidth(),\n this.maxWidth() ? Math.min(width, this.maxWidth() ?? width) : width\n );\n\n this.#renderer.setAttribute(this.#el.nativeElement, 'size', `${constrainedWidth}px`);\n this.#table.updateColumnSizes();\n }\n\n ngOnDestroy() {\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n }\n }\n}\n\n@Directive({\n selector: '[shSort]',\n standalone: true,\n host: {\n class: 'sortable',\n '(mousedown)': 'toggleSort()',\n '[class.sort-asc]': 'sortAsc()',\n '[class.sort-desc]': 'sortDesc()',\n },\n})\nexport class ShipSort {\n #table = inject(ShipTable);\n shSort = input<string>();\n\n sortAsc = computed(() => {\n const currentSort = this.#table.sortByColumn();\n const thisColumn = this.shSort();\n\n if (!currentSort || !thisColumn) return false;\n\n return currentSort === thisColumn;\n });\n\n sortDesc = computed(() => {\n const currentSort = this.#table.sortByColumn();\n const thisColumn = this.shSort();\n\n if (!currentSort || !thisColumn) return false;\n\n return currentSort === `-${thisColumn}`;\n });\n\n toggleSort() {\n const sortCol = this.shSort();\n\n if (!sortCol) return;\n\n this.#table.toggleSort(sortCol);\n }\n}\n\n@Directive({\n selector: '[shStickyColumns]',\n\n host: {\n '[class.sticky]': 'shStickyColumns() === \"start\"',\n '[class.sticky-end]': 'shStickyColumns() === \"end\"',\n },\n})\nexport class ShipStickyColumns {\n #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n #renderer = inject(Renderer2);\n\n shStickyColumns = input<string>('start');\n\n ngAfterContentInit() {\n this.#applyGridColumnStyle();\n }\n\n #applyGridColumnStyle() {\n const nativeElement = this.#elementRef.nativeElement;\n const cellChildren = nativeElement.querySelectorAll<HTMLTableCellElement>(':scope > th, :scope > td');\n const columnSpanCount = cellChildren.length;\n\n if (columnSpanCount > 0) {\n const position = this.shStickyColumns();\n\n this.#renderer.setStyle(\n nativeElement,\n 'grid-column',\n position === 'end' ? `-${columnSpanCount + 1} / -1` : `1 / ${columnSpanCount + 1}`\n );\n }\n }\n}\n\nconst SCROLL_TOLERANCE = 1.5;\ntype ScrollState = -1 | 0 | 1;\n\n@Component({\n selector: 'sh-table',\n imports: [ShipProgressBar],\n template: `\n @if (loading()) {\n <sh-progress-bar class=\"indeterminate primary\" />\n }\n\n <thead #thead>\n <ng-content select=\"th\" />\n <ng-content select=\"[thead]\" />\n </thead>\n\n <tbody #tbody>\n <ng-content />\n </tbody>\n\n @if (!loading()) {\n <div class=\"no-rows\">\n <ng-content select=\"[table-no-rows]\" />\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class()',\n '[style.grid-template-columns]': 'columnSizes()',\n '[class.resizing]': 'resizing()',\n '(scroll)': 'onScroll()',\n '[class.can-scroll-x]': 'canScrollX()',\n '[class.can-scroll-y]': 'canScrollY()',\n '[class.scrolled-x]': 'scrollXState() >= 0',\n '[class.scrolled-x-end]': 'scrollXState() === 1',\n '[class.scrolled-y]': 'scrollYState() >= 0',\n '[class.scrolled-y-end]': 'scrollYState() === 1',\n },\n})\nexport class ShipTable {\n #el = inject(ElementRef);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n\n loading = input<boolean>(false);\n data = input<any>([]);\n dataChange = output<any>();\n sortByColumn = model<string | null>(null);\n\n currentClass = classMutationSignal();\n thead = viewChild<ElementRef<HTMLTableSectionElement>>('thead');\n tbody = viewChild<ElementRef<HTMLTableSectionElement>>('tbody');\n columns = observeChildren<HTMLTableColElement>(this.thead, ['tr:first-child th']);\n\n stickyHeaderHeight = computed(() => {\n const _ = this.currentClass();\n const height = this.thead()?.nativeElement?.clientHeight;\n\n return height ?? 0;\n });\n\n bodyEffect = effect(() => {\n const body = this.tbody()?.nativeElement;\n const head = this.thead()?.nativeElement;\n\n if (!body || !head) return;\n\n const stickyHeaderHeight = this.stickyHeaderHeight();\n\n queueMicrotask(() => {\n const hasStickyRowHeaderStartElement = head.querySelectorAll('tr.sticky').length > 0;\n const stickyBodyRows = body.querySelectorAll('tr.sticky');\n const hasStickyRowStartElement = stickyBodyRows.length > 0;\n\n if (hasStickyRowStartElement && hasStickyRowHeaderStartElement) {\n for (let index = 0; index < stickyBodyRows.length; index++) {\n (stickyBodyRows[index] as HTMLElement).style.top = `${stickyHeaderHeight}px`;\n }\n }\n });\n });\n\n class = signal<string>(this.#shConfig?.tableType ?? 'default');\n resizing = signal(false);\n sizeTrigger = signal(true);\n #initialData: any | null = null;\n #initialDataSet = signal(false);\n scrollXState = signal<ScrollState>(-1);\n scrollYState = signal<ScrollState>(-1);\n canScrollX = signal(false);\n canScrollY = signal(false);\n\n columnSizes = computed(() => {\n this.sizeTrigger();\n const colSignal = this.columns.signal();\n\n return colSignal.reduce((acc, col, index) => {\n const colEl = col;\n const colSize = colEl.getAttribute('size');\n const last = index === colSignal.length - 1;\n\n if (colSize) {\n return `${acc} ${colSize}`;\n }\n\n if (colEl.classList.contains('sticky') || colEl.classList.contains('sticky-end')) {\n return `${acc} min-content`;\n }\n\n if (last) {\n return `${acc} 1fr`;\n }\n\n return `${acc} 1fr`;\n }, '');\n });\n\n updateColumnSizes() {\n this.sizeTrigger.set(!this.sizeTrigger());\n }\n\n onScroll(): void {\n this.#checkScroll();\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: Event) {\n this.#checkScroll();\n }\n\n ngAfterViewInit() {\n queueMicrotask(() => this.#checkScroll());\n }\n\n e = effect(() => {\n const sortByColumn = this.sortByColumn();\n\n if (sortByColumn === null) {\n if (!this.#initialDataSet()) {\n this.#initialData = this.data();\n this.#initialDataSet.set(true);\n }\n\n return this.dataChange.emit(structuredClone(this.#initialData));\n }\n\n const column = sortByColumn.startsWith('-') ? sortByColumn.slice(1) : sortByColumn;\n const isDescending = sortByColumn.startsWith('-');\n\n const sortedData = this.data().sort((a: any, b: any) => {\n const valueA = a[column] as any;\n const valueB = b[column] as any;\n\n let comparison = 0;\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n comparison = valueA - valueB;\n }\n\n if (valueA instanceof Date && valueB instanceof Date) {\n comparison = valueA.getTime() - valueB.getTime();\n }\n\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n }\n\n return isDescending ? -comparison : comparison;\n });\n\n this.dataChange.emit(sortedData);\n });\n\n toggleSort(column: string) {\n const currentSort = this.sortByColumn();\n const sortDir = currentSort === column ? `-${column}` : currentSort === `-${column}` ? null : column;\n\n this.sortByColumn.set(sortDir);\n }\n\n #checkScroll(): void {\n const element = this.#el.nativeElement as HTMLElement;\n let nextXState: ScrollState = -1;\n let nextYState: ScrollState = -1;\n\n const canScrollX = element.scrollWidth > element.clientWidth + SCROLL_TOLERANCE;\n\n if (canScrollX) {\n const isAtStartX = element.scrollLeft <= SCROLL_TOLERANCE;\n const isAtEndX = element.scrollWidth - (element.scrollLeft + element.clientWidth) < SCROLL_TOLERANCE;\n\n if (isAtEndX) {\n nextXState = 1;\n } else if (!isAtStartX) {\n nextXState = 0;\n }\n }\n\n this.scrollXState.set(nextXState);\n this.canScrollX.set(canScrollX);\n\n const canScrollY = element.scrollHeight > element.clientHeight + SCROLL_TOLERANCE;\n\n if (canScrollY) {\n const isAtStartY = element.scrollTop <= SCROLL_TOLERANCE;\n const isAtEndY = element.scrollHeight - (element.scrollTop + element.clientHeight) < SCROLL_TOLERANCE;\n\n if (isAtEndY) {\n nextYState = 1;\n } else if (!isAtStartY) {\n nextYState = 0;\n }\n }\n\n this.scrollYState.set(nextYState);\n this.canScrollY.set(canScrollY);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-tabs',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--tabs-id]': 'id',\n },\n})\nexport class ShipTabs {\n id = '--' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 12);\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\n\n@Component({\n selector: 'sh-toggle-card',\n imports: [ShipIcon],\n template: `\n <h3 (click)=\"disallowToggle() || toggle()\">\n <ng-content select=\"[title]\">Title</ng-content>\n\n @if (!disallowToggle()) {\n <sh-icon class=\"toggle-icon\">caret-down</sh-icon>\n }\n </h3>\n\n <div class=\"collapsable\">\n <div class=\"content\">\n <ng-content />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.active]': 'isActive()',\n },\n})\nexport class ShipToggleCard {\n isActive = model(false);\n disallowToggle = input(false);\n\n ngOnInit() {\n if (this.disallowToggle()) {\n this.isActive.set(true);\n }\n }\n\n toggle() {\n this.isActive.set(!this.isActive());\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-toggle',\n imports: [],\n template: `\n <div class=\"box\">\n <div class=\"knob\"></div>\n </div>\n\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipToggle {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Renderer2,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\n\n@Component({\n selector: 'sh-virtual-scroll',\n imports: [],\n template: `\n <div class=\"viewport\" #viewport (scroll)=\"onScroll()\">\n <div class=\"total-height\" [style.height]=\"totalHeight() + 'px'\"></div>\n <div class=\"items-container\" [style.transform]=\"'translateY(' + translateY() + 'px)'\">\n <ng-content />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipVirtualScroll {\n #changeRef = inject(ChangeDetectorRef);\n #renderer = inject(Renderer2);\n #hostElement = inject(ElementRef);\n\n viewportRef = viewChild.required<ElementRef<HTMLDivElement>>('viewport');\n itemElements = viewChildren<ElementRef>('item');\n\n bufferSize = signal(10);\n\n itemHeights = signal<number[]>([]);\n startIndex = signal(0);\n endIndex = signal(0);\n translateY = signal(0);\n totalHeight = computed(() => this.itemHeights().reduce((sum, height) => sum + height, 0));\n numberOfRenderedItems = signal(0);\n\n #resizeObserver: ResizeObserver | null = null;\n #hostResizeObserver: ResizeObserver | null = null;\n\n #itemHeightsEffect = effect(() => {\n const startIndex = this.startIndex();\n const endIndex = this.endIndex();\n const itemHeights = this.itemHeights();\n\n if (startIndex > 0 && endIndex > 0 && itemHeights.length > 0) {\n let newTranslateY = 0;\n for (let i = 0; i < startIndex; i++) {\n newTranslateY += itemHeights[i];\n }\n this.translateY.set(newTranslateY);\n }\n });\n\n #totalHeightEffect = effect(() => {\n const _ = this.totalHeight();\n this.#changeRef.detectChanges();\n });\n\n #itemElementsEffect = effect(() => {\n const itemElements = this.itemElements();\n\n if (this.#resizeObserver && itemElements) {\n this.#resizeObserver.disconnect();\n const heights = new Array(itemElements.length).fill(0);\n this.numberOfRenderedItems.set(itemElements.length);\n this.itemHeights.set(heights);\n\n for (let i = 0; i < itemElements.length; i++) {\n this.#resizeObserver.observe(itemElements[i].nativeElement);\n heights[i] = itemElements[i].nativeElement.offsetHeight;\n }\n\n this.itemHeights.set(heights);\n this.#calculateVisibleItems();\n }\n });\n\n ngAfterViewInit() {\n this.#setupHostResizeObserver();\n this.#setupResizeObserver();\n this.#changeRef.detectChanges();\n }\n\n onScroll() {\n this.#calculateVisibleItems();\n }\n\n #setupHostResizeObserver() {\n this.#hostResizeObserver = new ResizeObserver((entries) => {\n const hostElement = entries[0];\n if (hostElement) {\n const newHeight = hostElement.contentRect.height;\n this.#renderer.setStyle(this.viewportRef().nativeElement, 'height', `${newHeight}px`);\n }\n });\n\n this.#hostResizeObserver.observe(this.#hostElement.nativeElement);\n }\n\n #setupResizeObserver() {\n this.#resizeObserver = new ResizeObserver((entries) => {\n const newHeights = [...this.itemHeights()];\n\n let didUpdate = false;\n\n for (const entry of entries) {\n const index = this.itemElements().findIndex((el) => el.nativeElement === entry.target);\n\n if (index !== undefined && index !== -1) {\n const newHeight = entry.contentRect.height;\n if (newHeights[index] !== newHeight) {\n newHeights[index] = newHeight;\n didUpdate = true;\n }\n }\n }\n\n if (didUpdate) {\n this.itemHeights.set(newHeights);\n this.#calculateVisibleItems();\n }\n });\n }\n\n #cleanupResizeObserver() {\n if (this.#resizeObserver) {\n this.#resizeObserver.disconnect();\n this.#resizeObserver = null;\n }\n }\n\n #cleanupHostResizeObserver() {\n if (this.#hostResizeObserver) {\n this.#hostResizeObserver.disconnect();\n this.#hostResizeObserver = null;\n }\n }\n\n #calculateVisibleItems() {\n const nativeElement = this.viewportRef();\n if (!nativeElement) return;\n\n const scrollTop = nativeElement.nativeElement.scrollTop;\n const viewportHeight = nativeElement.nativeElement.clientHeight;\n\n let accumulatedHeight = 0;\n let startIndex = -1;\n let endIndex = -1;\n\n for (let i = 0; i < this.itemHeights().length; i++) {\n const itemHeight = this.itemHeights()[i];\n\n if (startIndex === -1 && accumulatedHeight + itemHeight >= scrollTop - this.bufferSize()) {\n startIndex = i;\n }\n\n if (endIndex === -1 && accumulatedHeight >= scrollTop + viewportHeight + this.bufferSize()) {\n endIndex = i;\n break;\n }\n\n accumulatedHeight += itemHeight;\n }\n\n if (endIndex === -1) {\n endIndex = this.itemHeights().length - 1;\n }\n\n if (this.startIndex() !== startIndex) {\n this.startIndex.set(startIndex);\n }\n if (this.endIndex() !== endIndex) {\n this.endIndex.set(endIndex);\n }\n }\n\n ngOnDestroy() {\n this.#cleanupResizeObserver();\n this.#cleanupHostResizeObserver();\n }\n}\n","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: InputEvent) {\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","import {\n Component,\n ComponentRef,\n Directive,\n effect,\n ElementRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n HostListener,\n inject,\n input,\n OnDestroy,\n Renderer2,\n signal,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\n\n@Component({\n selector: 'ship-tooltip-wrapper',\n standalone: true,\n template: `\n <div class=\"tooltip-content\">\n <ng-content />\n </div>\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\n #selfRef = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #positionAbort: AbortController | null = null;\n\n // readonly BASE_SPACE = 8;\n readonly SUPPORTS_ANCHOR = typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc');\n\n isBelow = signal<boolean>(false);\n\n openEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.#selfRef.nativeElement.showPopover();\n this.calculateTooltipPosition();\n });\n } else {\n this.#selfRef.nativeElement.hidePopover();\n }\n });\n\n ngAfterViewInit() {\n this.#positionAbort = new AbortController();\n\n const options = { signal: this.#positionAbort.signal, capture: true };\n window?.addEventListener('scroll', this.calculateTooltipPosition, options);\n window?.addEventListener('resize', this.calculateTooltipPosition, { signal: this.#positionAbort.signal });\n\n setTimeout(() => this.calculateTooltipPosition());\n }\n\n ngOnDestroy(): void {\n this.#positionAbort?.abort();\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 outOfBoundsTop = hostRect.top - tooltipRect.height < 0;\n\n this.isBelow.set(outOfBoundsTop);\n\n if (!this.SUPPORTS_ANCHOR) {\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let newTop = hostRect.top - tooltipRect.height;\n let newLeft = hostRect.left + hostRect.width / 2 - tooltipRect.width / 2;\n\n if (outOfBoundsTop) {\n newTop = hostRect.top + hostRect.height;\n }\n\n if (newLeft + tooltipRect.width > window?.innerWidth) {\n newLeft = hostRect.right - tooltipRect.width / 2;\n }\n if (newLeft < 0) {\n newLeft = -(tooltipRect.width / 2);\n }\n\n this.#renderer.setStyle(tooltipEl, 'left', `${newLeft}px`);\n this.#renderer.setStyle(tooltipEl, 'top', `${newTop}px`);\n this.#renderer.setStyle(tooltipEl, 'position', 'fixed');\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 #elementRef = inject(ElementRef<HTMLElement>);\n #viewContainerRef = inject(ViewContainerRef);\n #environmentInjector = inject(EnvironmentInjector);\n #renderer = inject(Renderer2);\n\n #projectedViewRef: EmbeddedViewRef<any> | null = null;\n private debounceTimer: any; // Using any for the timer ID\n private readonly DEBOUNCE_DELAY = 500;\n\n readonly anchorName = `--${generateUniqueId()}`;\n isOpen = signal<boolean>(false);\n\n @HostListener('mouseenter')\n onMouseEnter() {\n if (openRef?.component.anchorName !== this.anchorName) {\n this.cleanupTooltip();\n }\n\n this.cancelCleanupTimer();\n\n queueMicrotask(() => this.showTooltip());\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\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\n private showTooltip() {\n if (openRef?.wrapperComponentRef || !this.shTooltip()) return;\n\n let nodesToProject: Node[][];\n const content = this.shTooltip();\n if (typeof content === 'string') {\n nodesToProject = [[this.#renderer.createText(content)]];\n } else if (content instanceof TemplateRef) {\n this.#projectedViewRef = content.createEmbeddedView({});\n this.#projectedViewRef.detectChanges();\n nodesToProject = [this.#projectedViewRef.rootNodes];\n } else {\n return;\n }\n\n openRef = {\n wrapperComponentRef: this.#viewContainerRef.createComponent(ShipTooltipWrapper, {\n environmentInjector: this.#environmentInjector,\n projectableNodes: nodesToProject,\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.changeDetectorRef.detectChanges();\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseenter', () => {\n this.cancelCleanupTimer();\n });\n\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseleave', () => {\n this.startCleanupTimer();\n });\n\n setTimeout(() => {\n this.isOpen.set(true);\n });\n }\n\n private cleanupTooltip(): void {\n if (openRef?.wrapperComponentRef) {\n openRef.component.cancelCleanupTimer();\n openRef.wrapperComponentRef.destroy();\n openRef.component.isOpen.set(false);\n openRef = null;\n }\n\n if (this.#projectedViewRef) {\n this.#projectedViewRef.destroy();\n this.#projectedViewRef = null;\n }\n }\n}\n","/*\n * Public API Surface of ship-ui\n */\nexport * from './lib/ship-alert/ship-alert';\nexport * from './lib/ship-alert/ship-alert-container';\nexport * from './lib/ship-alert/ship-alert.module';\nexport * from './lib/ship-alert/ship-alert.service';\n\nexport * from './lib/ship-dialog/ship-dialog';\nexport * from './lib/ship-dialog/ship-dialog.service';\n\nexport * from './lib/ship-blueprint/ship-blueprint';\nexport * from './lib/ship-button-group/ship-button-group';\nexport * from './lib/ship-button/ship-button';\nexport * from './lib/ship-card/ship-card';\nexport * from './lib/ship-checkbox/ship-checkbox';\nexport * from './lib/ship-chip/ship-chip';\nexport * from './lib/ship-color-picker/ship-color-picker';\nexport * from './lib/ship-datepicker/ship-datepicker';\nexport * from './lib/ship-datepicker/ship-datepicker-input';\nexport * from './lib/ship-datepicker/ship-daterange-input';\nexport * from './lib/ship-divider/ship-divider';\nexport * from './lib/ship-event-card/ship-event-card';\nexport * from './lib/ship-file-upload/ship-file-upload';\nexport * from './lib/ship-form-field/ship-form-field';\nexport * from './lib/ship-icon/ship-icon';\nexport * from './lib/ship-list/ship-list';\nexport * from './lib/ship-menu/ship-menu';\nexport * from './lib/ship-popover/ship-popover';\nexport * from './lib/ship-progress-bar/ship-progress-bar';\nexport * from './lib/ship-radio/ship-radio';\nexport * from './lib/ship-range-slider/ship-range-slider';\nexport * from './lib/ship-select/ship-select';\nexport * from './lib/ship-sidenav/ship-sidenav';\nexport * from './lib/ship-sortable/grid-sortable';\nexport * from './lib/ship-sortable/ship-sortable';\nexport * from './lib/ship-spinner/ship-spinner.component';\nexport * from './lib/ship-stepper/ship-stepper';\nexport * from './lib/ship-table/ship-table';\nexport * from './lib/ship-tabs/ship-tabs';\nexport * from './lib/ship-toggle-card/ship-toggle-card';\nexport * from './lib/ship-toggle/ship-toggle';\nexport * from './lib/ship-virtual-scroll/ship-virtual-scroll.component';\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 config\nexport * from './lib/utilities/ship-config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_OPTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"ship-ui-core.mjs","sources":["../../../projects/ship-ui/src/lib/ship-icon/ship-icon.ts","../../../projects/ship-ui/src/lib/utilities/class-mutation-signal.ts","../../../projects/ship-ui/src/lib/utilities/ship-config.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert-container.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert-container.html","../../../projects/ship-ui/src/lib/ship-alert/ship-alert.module.ts","../../../projects/ship-ui/src/lib/utilities/random-id.ts","../../../projects/ship-ui/src/lib/ship-alert/ship-alert.service.ts","../../../projects/ship-ui/src/lib/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/src/lib/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/src/lib/ship-blueprint/autolayout.ts","../../../projects/ship-ui/src/lib/ship-blueprint/validatePorts.ts","../../../projects/ship-ui/src/lib/ship-blueprint/ship-blueprint.ts","../../../projects/ship-ui/src/lib/ship-button-group/ship-button-group.ts","../../../projects/ship-ui/src/lib/ship-button/ship-button.ts","../../../projects/ship-ui/src/lib/ship-card/ship-card.ts","../../../projects/ship-ui/src/lib/ship-checkbox/ship-checkbox.ts","../../../projects/ship-ui/src/lib/ship-chip/ship-chip.ts","../../../projects/ship-ui/src/lib/ship-color-picker/ship-color-picker.ts","../../../projects/ship-ui/src/lib/ship-datepicker/ship-datepicker.ts","../../../projects/ship-ui/src/lib/ship-popover/ship-popover.ts","../../../projects/ship-ui/src/lib/ship-form-field/ship-form-field-popover.ts","../../../projects/ship-ui/src/lib/utilities/content-projection-signal.ts","../../../projects/ship-ui/src/lib/ship-datepicker/ship-datepicker-input.ts","../../../projects/ship-ui/src/lib/ship-datepicker/ship-daterange-input.ts","../../../projects/ship-ui/src/lib/ship-divider/ship-divider.ts","../../../projects/ship-ui/src/lib/ship-event-card/ship-event-card.ts","../../../projects/ship-ui/src/lib/ship-form-field/ship-form-field.ts","../../../projects/ship-ui/src/lib/ship-file-upload/ship-file-upload.ts","../../../projects/ship-ui/src/lib/ship-list/ship-list.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/ship-menu/ship-menu.ts","../../../projects/ship-ui/src/lib/ship-progress-bar/ship-progress-bar.ts","../../../projects/ship-ui/src/lib/ship-radio/ship-radio.ts","../../../projects/ship-ui/src/lib/ship-range-slider/ship-range-slider.ts","../../../projects/ship-ui/src/lib/ship-spinner/ship-spinner.component.ts","../../../projects/ship-ui/src/lib/ship-select/ship-select.ts","../../../projects/ship-ui/src/lib/ship-sidenav/ship-sidenav.ts","../../../projects/ship-ui/src/lib/ship-sortable/grid-sortable.ts","../../../projects/ship-ui/src/lib/ship-sortable/ship-sortable.ts","../../../projects/ship-ui/src/lib/ship-stepper/ship-stepper.ts","../../../projects/ship-ui/src/lib/ship-table/ship-table.ts","../../../projects/ship-ui/src/lib/ship-tabs/ship-tabs.ts","../../../projects/ship-ui/src/lib/ship-toggle-card/ship-toggle-card.ts","../../../projects/ship-ui/src/lib/ship-toggle/ship-toggle.ts","../../../projects/ship-ui/src/lib/ship-virtual-scroll/ship-virtual-scroll.component.ts","../../../projects/ship-ui/src/lib/sh-form-field-experimental/sh-form-field-experimental.ts","../../../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/directives/ship-tooltip.directive.ts","../../../projects/ship-ui/src/public-api.ts","../../../projects/ship-ui/src/ship-ui-core.ts"],"sourcesContent":["import { AfterContentInit, ChangeDetectionStrategy, Component, ElementRef, inject, Renderer2 } from '@angular/core';\n\nconst iconTypes = ['bold', 'thin', 'light', 'fill', 'duotone'];\n\n@Component({\n selector: 'sh-icon',\n standalone: true,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipIcon implements AfterContentInit {\n #selfRef: ElementRef<HTMLElement> = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n ngAfterContentInit(): void {\n const textContent = this.#selfRef.nativeElement.textContent?.trim();\n\n if (!textContent) return;\n\n const potentialType = textContent.split('-').at(-1);\n\n if (potentialType && iconTypes.includes(potentialType)) {\n this.#renderer.addClass(this.#selfRef.nativeElement, potentialType);\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","import { InjectionToken } from '@angular/core';\n\nexport const SHIP_CONFIG = new InjectionToken<ShipConfig>('Ship UI Config');\n\nexport interface ShipConfig {\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 { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, signal } from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\nimport { ShipAlertService } from './ship-alert.service';\n\nexport type ShipAlertType = 'error' | 'success' | 'warn' | 'primary' | 'accent' | 'question';\n\nconst POSSIBLE_VARIANTS = ['simple', 'outlined', 'flat', 'raised'];\n\n@Component({\n selector: 'sh-alert',\n imports: [ShipIcon],\n template: `\n <div class=\"alert\">\n <div #ref class=\"icon\" [style.display]=\"!ref.children.length ? 'none' : 'block'\">\n <ng-content select=\"[icon]\" />\n <ng-content select=\"sh-icon\" />\n </div>\n\n <div class=\"icon\">\n @let _alertClasses = currentClasses();\n\n @if (_alertClasses.includes('primary')) {\n <sh-icon class=\"state-icon\">info</sh-icon>\n } @else if (_alertClasses.includes('accent')) {\n <sh-icon class=\"state-icon\">info</sh-icon>\n } @else if (_alertClasses.includes('warn')) {\n <sh-icon class=\"state-icon\">warning</sh-icon>\n } @else if (_alertClasses.includes('error')) {\n <sh-icon class=\"state-icon\">warning-octagon</sh-icon>\n } @else if (_alertClasses.includes('success')) {\n <sh-icon class=\"state-icon\">check-circle</sh-icon>\n } @else {\n <sh-icon class=\"state-icon\">question</sh-icon>\n }\n </div>\n\n <div class=\"title\">\n <ng-content select=\"[title]\" />\n <ng-content />\n </div>\n\n @if (id()) {\n <sh-icon class=\"close-icon\" (click)=\"removeAlert()\">plus</sh-icon>\n }\n\n <div class=\"content\">\n <ng-content select=\"[content]\" />\n <ng-content select=\"p\" />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'activeClass()',\n },\n})\nexport class ShipAlert {\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n variant = signal<string>(this.#shConfig?.alertVariant ?? '');\n _el = inject(ElementRef); // Used by alert container\n alertService = input<ShipAlertService | null>(null);\n id = input<string | null>(null);\n\n currentClasses = classMutationSignal();\n activeClass = computed(() => {\n const variant = this.variant();\n const _current = `${this.currentClasses()} sh-sheet`;\n\n if (!variant) return _current;\n\n const hasVariant = POSSIBLE_VARIANTS.find((x) => this.currentClasses().includes(x));\n return hasVariant ? _current : `${_current} ${variant}`;\n });\n\n removeAlert() {\n if (this.id() && this.alertService()) {\n this.alertService()?.removeAlert(this.id() as string);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n QueryList,\n computed,\n effect,\n input,\n viewChild,\n} from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipAlert } from './ship-alert';\nimport { ShipAlertService } from './ship-alert.service';\n\n@Component({\n selector: 'ship-alert-container',\n imports: [ShipAlert, ShipIcon],\n templateUrl: './ship-alert-container.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipAlertContainer {\n inline = input<string | null>(null);\n alerts = viewChild.required<QueryList<ShipAlert>>('alerts');\n scroller = viewChild.required<ElementRef<HTMLDivElement>>('scroller');\n alertService = input.required<ShipAlertService>();\n\n // alertHistory = this.alertService()?.alertHistory;\n // alertHistoryIsOpen = this.alertService()?.alertHistoryIsOpen;\n // alertHistoryIsHidden = this.alertService()?.alertHistoryIsHidden;\n\n numberOfOpenAlerts = computed(() => {\n return this.alertService()\n .alertHistory()\n .filter((x) => x.isOpen).length;\n });\n\n readonly #e = effect(() => {\n this.alertService().alertHistory();\n this.alertService().alertHistoryIsOpen();\n this.#scrollToBottom();\n });\n\n #scrollToBottom() {\n if (this.scroller() && this.scroller().nativeElement) {\n this.scroller().nativeElement.scrollTo(0, this.scroller().nativeElement.scrollHeight);\n }\n }\n\n @HostListener('mouseover')\n onMouseOver() {\n if (typeof this.inline === 'string') return;\n\n this.alertService().setHidden(false);\n }\n\n @HostListener('mouseout')\n onMouseOut() {\n if (typeof this.inline === 'string') return;\n\n this.alertService().setHidden(true);\n }\n\n getElementHeight(i: number) {\n if (!this.alerts) return 0;\n\n const elementHeights = this.alerts()\n .toArray()\n .map((element) => element._el.nativeElement.querySelector('.ship-alert-item').offsetHeight);\n\n if (!elementHeights) return 0;\n\n let totalHeight = 0;\n const elementTransformPos = elementHeights.map((height, i) => {\n totalHeight += height;\n return totalHeight - elementHeights[0];\n });\n\n return elementTransformPos[i];\n }\n\n transformY(i: number) {\n return `translateY(calc(-${this.getElementHeight(i - 1)}px + (-10px * ${i})))`;\n }\n\n transitionDelay(i: number, allOpen = false) {\n return allOpen\n ? this.alertService().alertHistory().length - 1 * 40 + 'ms'\n : (this.numberOfOpenAlerts() - i) * 40 + 'ms';\n }\n}\n","<div class=\"scroller\" #scroller>\n <div class=\"container\">\n @for (alert of this.alertService().alertHistory(); track $index) {\n <sh-alert\n #alerts\n [class]=\"alert.type\"\n [id]=\"alert.id\"\n [alertService]=\"alertService()\"\n [style.transition-delay]=\"transitionDelay($index, true)\"\n [class.animate-in]=\"alert.animateIn\"\n [class.animate-out]=\"alert.animateOut\"\n [class.is-hidden]=\"this.alertService().alertHistoryIsHidden() && !alert.isOpen\">\n <div title>{{ alert.title }}</div>\n\n @if (alert.content) {\n <div content>\n {{ alert.content }}\n </div>\n }\n </sh-alert>\n }\n </div>\n</div>\n<div\n class=\"tray\"\n [class.tray-is-hidden]=\"!this.alertService().alertHistoryIsHidden()\"\n (mouseover)=\"this.onMouseOver()\"\n (mouseout)=\"this.onMouseOut()\">\n <sh-icon class=\"small\">info</sh-icon>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ShipAlert } from './ship-alert';\nimport { ShipAlertContainer } from './ship-alert-container';\n\n@NgModule({\n imports: [ShipAlert, ShipAlertContainer],\n exports: [ShipAlert, ShipAlertContainer],\n providers: [],\n})\nexport class ShipAlertModule {}\n","export function generateUniqueId() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n","import { Injectable, signal } from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\nimport { ShipAlertType } from './ship-alert';\n\nexport type ShipAlertItem = {\n type: ShipAlertType;\n title: string;\n content?: string;\n};\n\nexport type ShipAlertItemInternal = ShipAlertItem & {\n id: string;\n isOpen: boolean;\n animateOut: boolean;\n animateIn: boolean;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipAlertService {\n alertHistory = signal<ShipAlertItemInternal[]>([]);\n alertHistoryIsOpen = signal<boolean>(false);\n alertHistoryIsHidden = signal<boolean>(true);\n\n error(message: string | null | undefined) {\n this.addAlert({\n type: 'error',\n title: message ?? 'An error occured',\n });\n }\n\n success(message: string) {\n this.addAlert({\n type: 'success',\n title: message,\n });\n }\n\n question(message: string) {\n this.addAlert({\n type: 'question',\n title: message,\n });\n }\n\n warning(message: string) {\n this.addAlert({\n type: 'warn',\n title: message,\n });\n }\n\n info(message: string) {\n this.addAlert({\n type: 'primary',\n title: message,\n });\n }\n\n addAlert(alert: ShipAlertItem) {\n const id = generateUniqueId();\n\n this.alertHistory.update((history) => [\n { ...alert, isOpen: true, animateIn: true, animateOut: false, id },\n ...history,\n ]);\n\n setTimeout(() => {\n this.alertHistory.update((history) =>\n history.map((item) => ({\n ...item,\n animateIn: item.id === id ? false : item.animateIn,\n }))\n );\n }, 40);\n\n setTimeout(() => {\n this.hideAlert(id);\n }, 2500);\n }\n\n removeAlert(id: string) {\n this.alertHistory.update((history) =>\n history.map((item) => ({\n ...item,\n animateOut: item.id === id ? false : item.animateOut,\n }))\n );\n\n setTimeout(() => {\n this.alertHistory.update((history) => history.filter((item) => item.id !== id));\n }, 300);\n }\n\n hideAlert(id: string) {\n this.alertHistory.update((history) =>\n history.map((item) => ({\n ...item,\n isOpen: item.id === id ? false : item.isOpen,\n }))\n );\n }\n\n setHidden(isHidden: boolean) {\n this.alertHistoryIsHidden.set(isHidden);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\n\nexport type ShipDialogOptions = {\n class?: 'default' | 'type-b' | string;\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n closeOnOutsideClick?: boolean;\n};\n\nconst DEFAULT_OPTIONS: ShipDialogOptions = {\n class: 'default',\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n maxHeight: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n closeOnOutsideClick: true,\n};\n\n@Component({\n selector: 'sh-dialog',\n imports: [],\n template: `\n @let options = this.defaultOptionMerge();\n\n @if (isOpen()) {\n <dialog\n shDialog\n #dialogRef\n [class]=\"options.class\"\n [style.width]=\"options.width ?? ''\"\n [style.max-width]=\"options.maxWidth ?? ''\"\n [style.max-height]=\"options.maxHeight ?? ''\"\n [style.height]=\"options.height ?? ''\">\n <div class=\"content\">\n <ng-content />\n </div>\n\n @if (this.defaultOptionMerge().closeOnOutsideClick) {\n <div class=\"closeable-overlay\" (click)=\"isOpen.set(false)\"></div>\n }\n </dialog>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDialog {\n #document = inject(DOCUMENT);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n dialogRef = viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n isOpen = model<boolean>(false);\n options = input<Partial<ShipDialogOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...{ class: this.#shConfig?.dialogType ?? 'default' },\n ...this.options(),\n }));\n\n abortController: AbortController | null = null;\n isOpenEffect = effect(() => {\n const dialogEl = this.dialogRef()?.nativeElement;\n\n if (!dialogEl) return;\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n if (this.isOpen()) {\n dialogEl.showModal();\n dialogEl.addEventListener(\n 'close',\n () => {\n this.isOpen.set(false);\n this.closed.emit();\n },\n {\n signal: this.abortController?.signal,\n }\n );\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n }\n\n if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {\n this.isOpen.set(false);\n }\n },\n {\n signal: this.abortController?.signal,\n }\n );\n } else {\n dialogEl.close();\n\n queueMicrotask(() => this.closed.emit());\n }\n });\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DOCUMENT,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n Type,\n} from '@angular/core';\nimport { ShipDialog, ShipDialogOptions } from './ship-dialog';\n\nexport type Exact<T, U> = U extends T ? (keyof U extends keyof T ? U : never) : never;\nexport type ComponentDataType<T> = T extends { data: InputSignal<infer K> } ? K : void;\nexport type ComponentClosedType<T> = T extends { closed: OutputEmitterRef<infer U> } ? U : undefined;\n\nexport interface ShipDialogServiceOptions<TData = any, TResult = undefined> extends ShipDialogOptions {\n data?: TData extends void ? void : TData & Exact<TData, TData>;\n closed?: (res: TResult) => void;\n}\n\nexport type ShipDialogInstance<T> = {\n component: T;\n close: (res?: ComponentClosedType<T> | undefined) => void;\n closed: OutputEmitterRef<ComponentClosedType<T> | undefined>;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipDialogService {\n #document = inject(DOCUMENT);\n #bodyEl = this.#document.querySelector('body');\n #appRef = inject(ApplicationRef);\n\n compRef: ComponentRef<ShipDialog> | null = null;\n insertedCompRef: ComponentRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n T extends { data?: InputSignal<any>; closed?: OutputEmitterRef<any> },\n K = ComponentDataType<T>,\n U = ComponentClosedType<T>,\n _Options extends ShipDialogServiceOptions<K, U | undefined> = ShipDialogServiceOptions<K, U | undefined>,\n >(component: Type<T>, options?: _Options): ShipDialogInstance<T> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\n\n this.insertedCompRef = createComponent<T>(component, {\n environmentInjector,\n });\n\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes: [[this.insertedCompRef.location.nativeElement]],\n });\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = insertedInstance.data;\n const closedField = insertedInstance.closed;\n\n if (data) {\n if (isSignal(dataField)) {\n this.insertedCompRef.setInput('data', data);\n } else if (!isSignal(dataField)) {\n throw new Error('data is not an input signal on the passed component');\n }\n }\n\n if (closedField instanceof OutputEmitterRef) {\n this.closedFieldSub = closedField.subscribe((arg: U | undefined) => {\n this.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n closed?.(arg as U);\n\n (this.compRef?.instance.closed as OutputEmitterRef<U | undefined>).emit(arg);\n });\n }\n\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.#appRef.attachView(this.compRef.hostView);\n\n this.insertedCompRef.changeDetectorRef.detectChanges();\n this.compRef.changeDetectorRef.detectChanges();\n this.compRef.instance.isOpen.set(true);\n this.compRef.setInput('options', rest);\n\n this.compClosedSub = this.compRef.instance.closed.subscribe(() => closeAction());\n\n const _self = this;\n\n function closeAction(arg: U | undefined = undefined) {\n _self.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n closedField.emit(arg as any);\n }\n\n closed?.(arg as U);\n }\n\n return {\n ...(this.insertedCompRef.instance as T),\n component: this.insertedCompRef.instance as T,\n close: closeAction,\n closed: this.compRef.instance.closed as OutputEmitterRef<U | undefined>,\n } as ShipDialogInstance<T>;\n }\n\n #createEl(): Element {\n const wrapperEl = this.#document.createElement('sh-dialog-ref');\n wrapperEl.id = 'sh-dialog-ref';\n\n if (!this.#document.getElementById('sh-dialog-ref')) {\n this.#bodyEl?.append(wrapperEl);\n }\n\n return this.#document.getElementById('sh-dialog-ref')!;\n }\n\n #cleanupRefs(instant = false) {\n const _self = this;\n\n instant ? cleanup : queueMicrotask(() => cleanup());\n\n function cleanup() {\n if (_self.insertedCompRef) {\n _self.#appRef.detachView(_self.insertedCompRef.hostView);\n _self.closedFieldSub?.unsubscribe();\n _self.insertedCompRef.destroy();\n }\n\n if (!_self.compRef) return;\n\n _self.#appRef.detachView(_self.compRef.hostView);\n _self.compClosedSub?.unsubscribe();\n _self.compRef.destroy();\n }\n }\n\n ngOnDestroy() {\n this.#cleanupRefs(true);\n }\n}\n","import { BlueprintNode } from './ship-blueprint';\n\nexport function layoutNodes(nodes: BlueprintNode[]): BlueprintNode[] {\n if (!nodes || nodes.length === 0) return nodes;\n\n const layoutedNodes = structuredClone(nodes);\n const visited = new Set<string>();\n const unconnectedNodes: BlueprintNode[] = [];\n const connectedGraphs: BlueprintNode[][] = [];\n\n const allToNodes = new Set(layoutedNodes.flatMap((node) => node.connections).map((conn) => conn.toNode));\n const rootNodes = layoutedNodes.filter((node) => !allToNodes.has(node.id));\n\n for (const node of layoutedNodes) {\n if (!node.connections.length) {\n unconnectedNodes.push(node);\n }\n }\n\n for (const root of rootNodes) {\n if (!visited.has(root.id)) {\n const graph: BlueprintNode[] = [];\n traverseGraph(root, graph, visited, layoutedNodes);\n if (graph.length > 0) {\n connectedGraphs.push(graph);\n }\n }\n }\n\n positionUnconnectedNodes(unconnectedNodes);\n\n let currentX = 20;\n let currentY = 20;\n connectedGraphs.forEach((graph) => {\n const layoutedGraph = traverseAndLayout(graph);\n positionGraph(layoutedGraph, currentX, currentY);\n currentY += getGraphHeight(layoutedGraph) + 200;\n });\n\n return layoutedNodes;\n}\n\nfunction traverseGraph(\n startNode: BlueprintNode,\n graph: BlueprintNode[],\n visited: Set<string>,\n allNodes: BlueprintNode[]\n) {\n const queue = [startNode];\n visited.add(startNode.id);\n let head = 0;\n while (head < queue.length) {\n const node = queue[head++];\n graph.push(node);\n node.connections.forEach((conn) => {\n const toNode = allNodes.find((n) => n.id === conn.toNode);\n if (toNode && !visited.has(toNode.id)) {\n visited.add(toNode.id);\n queue.push(toNode);\n }\n });\n }\n}\n\nfunction positionUnconnectedNodes(nodes: BlueprintNode[]) {\n nodes.forEach((node, index) => {\n node.coordinates[0] = 20 + index * 200;\n node.coordinates[1] = 20;\n });\n}\n\nfunction traverseAndLayout(graph: BlueprintNode[]): BlueprintNode[] {\n const graphNodeMap = new Map<string, BlueprintNode>(graph.map((n) => [n.id, n]));\n const incomingConnectionCount = new Map<string, number>();\n\n graph.forEach((node) => {\n incomingConnectionCount.set(node.id, 0);\n });\n graph\n .flatMap((n) => n.connections)\n .forEach((conn) => {\n if (graphNodeMap.has(conn.toNode)) {\n incomingConnectionCount.set(conn.toNode, (incomingConnectionCount.get(conn.toNode) || 0) + 1);\n }\n });\n\n const roots = graph.filter((node) => (incomingConnectionCount.get(node.id) || 0) === 0);\n const layoutedNodes = new Set<string>();\n\n const queue = [...roots];\n let head = 0;\n\n while (head < queue.length) {\n const currentNode = queue[head++];\n layoutedNodes.add(currentNode.id);\n\n let outputConnectionIndex = 0;\n const connectedNodes: BlueprintNode[] = [];\n\n currentNode.connections.forEach((conn) => {\n const toNode = graphNodeMap.get(conn.toNode);\n if (toNode && !layoutedNodes.has(toNode.id)) {\n connectedNodes.push(toNode);\n }\n });\n\n connectedNodes.forEach((toNode) => {\n toNode.coordinates[0] = currentNode.coordinates[0] + 200;\n if (connectedNodes.length > 1) {\n const verticalOffset = (outputConnectionIndex - (connectedNodes.length - 1) / 2) * 200;\n toNode.coordinates[1] = currentNode.coordinates[1] + verticalOffset;\n } else {\n toNode.coordinates[1] = currentNode.coordinates[1];\n }\n\n queue.push(toNode);\n outputConnectionIndex++;\n });\n }\n return graph;\n}\n\nfunction positionGraph(graph: BlueprintNode[], startX: number, startY: number) {\n const minX = Math.min(...graph.map((n) => n.coordinates[0]));\n const minY = Math.min(...graph.map((n) => n.coordinates[1]));\n graph.forEach((node) => {\n node.coordinates[0] += startX - minX;\n node.coordinates[1] += startY - minY;\n });\n}\n\nfunction getGraphHeight(graph: BlueprintNode[]): number {\n if (!graph.length) return 0;\n const maxY = Math.max(...graph.map((n) => n.coordinates[1]));\n const minY = Math.min(...graph.map((n) => n.coordinates[1]));\n return maxY - minY;\n}\n","import { BlueprintNode } from './ship-blueprint';\n\nexport type PortValidationError = {\n nodeId: string;\n duplicatePortIds: string[];\n};\n\nexport function findDuplicatePortIDs(nodes: BlueprintNode[]): PortValidationError[] {\n const errors: PortValidationError[] = [];\n\n for (const node of nodes) {\n const portIdCounts = new Map<string, number>();\n const allPorts = [...node.inputs, ...node.outputs];\n\n for (const port of allPorts) {\n const count = portIdCounts.get(port.id) || 0;\n portIdCounts.set(port.id, count + 1);\n }\n\n const duplicatePortIds: string[] = [];\n for (const [id, count] of portIdCounts.entries()) {\n if (count > 1) {\n duplicatePortIds.push(id);\n }\n }\n\n if (duplicatePortIds.length > 0) {\n errors.push({\n nodeId: node.id,\n duplicatePortIds: duplicatePortIds,\n });\n }\n }\n\n return errors;\n}\n\nexport function findDuplicateNodeIDs(nodes: BlueprintNode[]): string[] {\n const nodeIdCounts = new Map<string, number>();\n\n for (const node of nodes) {\n const count = nodeIdCounts.get(node.id) || 0;\n nodeIdCounts.set(node.id, count + 1);\n }\n\n const duplicateNodeIds: string[] = [];\n for (const [id, count] of nodeIdCounts.entries()) {\n if (count > 1) {\n duplicateNodeIds.push(id);\n }\n }\n\n return duplicateNodeIds;\n}\n","import { isPlatformBrowser, JsonPipe } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n OnDestroy,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ShipButton, ShipCard, ShipIcon } from '../../public-api';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { layoutNodes } from './autolayout';\nimport { findDuplicateNodeIDs, findDuplicatePortIDs } from './validatePorts';\n\n// TODO - disallow infinite loops\n// TODO - Autolayout should take port order into account\n// TODO - drag and drop new nodes into the canvas (takes an input creatableNodes without coordinates) this are shown in a right side panel and can be dragged into the canvas\n\ntype Port = { id: string; name: string };\n\nexport type BlueprintNode = {\n id: string;\n name?: string;\n coordinates: Coordinates;\n inputs: Port[];\n outputs: Port[];\n connections: Connection[];\n};\n\ntype Connection = { fromNode: string; fromPort: string; toNode: string; toPort: string };\ntype DragState = { fromNode: string; fromPort: string; x2: number; y2: number };\n\nexport type Coordinates = [x: number, y: number];\n\nexport const TEST_NODES: BlueprintNode[] = [\n {\n id: 'a1',\n name: 'hello a1',\n coordinates: [0, 0],\n inputs: [],\n outputs: [{ id: 'out-1', name: 'Start Output' }],\n connections: [{ fromNode: 'a1', fromPort: 'out-1', toNode: 'b1', toPort: 'in-1' }],\n },\n {\n id: 'b1',\n coordinates: [0, 0],\n inputs: [\n { id: 'in-1', name: 'Input A' },\n { id: 'in-1', name: 'Another Input A' },\n ],\n outputs: [{ id: 'out-1', name: 'Output B' }],\n connections: [\n { fromNode: 'b1', fromPort: 'out-1', toNode: 'c6', toPort: 'in-1' },\n { fromNode: 'a1', fromPort: 'out-1', toNode: 'b1', toPort: 'in-1' },\n ],\n },\n {\n id: 'c6',\n name: 'hello c6',\n coordinates: [0, 0],\n inputs: [{ id: 'in-1', name: 'Input C' }],\n outputs: [{ id: 'out-1', name: 'Output D' }],\n connections: [{ fromNode: 'b1', fromPort: 'out-1', toNode: 'c6', toPort: 'in-1' }],\n },\n];\n\ntype ValidationErrors = {\n duplicateNodeIds: string[];\n duplicatePortIds: {\n nodeId: string;\n duplicatePortIds: string[];\n }[];\n};\n\n@Component({\n selector: 'sh-blueprint',\n imports: [ShipCard, ShipIcon, JsonPipe, ShipButton],\n template: `\n <div\n class=\"canvas-container\"\n [class.locked]=\"isLocked()\"\n [class.hovering-connection]=\"highlightedConnection()\"\n (mousedown)=\"startPan($event)\"\n (mousemove)=\"pan($event)\"\n (wheel)=\"zoom($event)\"\n (touchstart)=\"handleTouchStart($event)\"\n (touchmove)=\"handleTouchMove($event)\"\n (touchend)=\"handleTouchEnd()\">\n <div class=\"action-panel\">\n <button shButton (click)=\"applyAutolayout()\" class=\"small\">\n Autolayout\n <sh-icon>tree-structure</sh-icon>\n </button>\n\n <ng-content />\n </div>\n\n <canvas #blueprintCanvas></canvas>\n\n @if (validationErrors()) {\n <sh-card class=\"validation-errors type-c\">\n Something went wrong you have\n <br />\n duplicate node IDs or port IDs\n <pre>{{ validationErrors() | json }}</pre>\n </sh-card>\n } @else {\n <div\n class=\"nodes-wrapper\"\n [style.transform]=\"'translate(' + panX() + 'px, ' + panY() + 'px) scale(' + zoomLevel() + ')'\"\n [style.transform-origin]=\"'0 0'\">\n @for (node of visibleNodes(); track node.id) {\n <sh-card\n class=\"node type-c\"\n [style.transform]=\"getDisplayCoordinates(node)\"\n (mouseenter)=\"isHoveringNode.set(true)\"\n (mouseleave)=\"isHoveringNode.set(false)\">\n <header (mousedown)=\"startNodeDrag($event, node.id)\" (touchstart)=\"startNodeDrag($event, node.id)\">\n <span class=\"node-title\">{{ node.name ? node.name : node.id }}</span>\n <sh-icon>list</sh-icon>\n </header>\n <div class=\"ports\">\n <div class=\"inputs\">\n @for (inputPort of node.inputs; track inputPort.id) {\n <div\n class=\"port-wrap\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-port-id]=\"inputPort.id\"\n (click)=\"endPortDrag($event, node.id, inputPort.id)\">\n <div class=\"port input-port\"></div>\n <span class=\"port-name\">{{ inputPort.name }}</span>\n </div>\n }\n </div>\n <div class=\"outputs\">\n @for (outputPort of node.outputs; track outputPort.id) {\n <div\n class=\"port-wrap\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-port-id]=\"outputPort.id\"\n (click)=\"startPortDrag($event, node.id, outputPort.id)\">\n <span class=\"port-name\">{{ outputPort.name }}</span>\n <div class=\"port output-port\"></div>\n </div>\n }\n </div>\n </div>\n </sh-card>\n }\n\n @if (showMidpointDiv()) {\n <div\n class=\"midpoint-div\"\n (click)=\"removeConnection()\"\n [style.left.px]=\"midpointDivPosition()?.x\"\n [style.top.px]=\"midpointDivPosition()?.y\">\n Remove connection\n <sh-icon>trash</sh-icon>\n </div>\n }\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipBlueprint implements AfterViewInit, OnDestroy {\n readonly #ZOOM_SPEED = 0.01;\n readonly #MAX_ZOOM = 1.5;\n readonly #MIN_ZOOM = 0.5;\n readonly #NODE_WIDTH = 180;\n readonly #NODE_HEADER_HEIGHT = 40;\n readonly #PORT_ROW_HEIGHT = 28;\n\n #document = inject(DOCUMENT);\n #platformId = inject(PLATFORM_ID);\n #selfRef = inject(ElementRef<HTMLElement>);\n #currentClass = classMutationSignal();\n #htmlClass = classMutationSignal(this.#document.documentElement);\n\n asDots = computed(() => this.#currentClass().includes('dots'));\n lightMode = computed(() => this.#htmlClass().includes('light'));\n\n forceUnique = input<boolean>(true);\n autoLayout = input<boolean>(false);\n gridSize = input(20);\n snapToGrid = input<boolean>(true);\n gridColor = input<[string, string]>(['#d8d8d8', '#2c2c2c']);\n\n nodes = model<BlueprintNode[]>([]);\n\n #currentGridColor = computed(() => this.gridColor()[this.lightMode() ? 0 : 1]);\n\n panX = signal(0);\n panY = signal(0);\n zoomLevel = signal(1);\n gridSnapSize = signal(20);\n\n isHoveringNode = signal(false);\n midpointDivPosition = signal<{ x: number; y: number } | null>(null);\n showMidpointDiv = signal(false);\n isLocked = signal(false);\n draggingConnection = signal<DragState | null>(null);\n validationErrors = signal<ValidationErrors | null>(null);\n highlightedConnection = signal<Connection | null>(null);\n\n #draggingNodeCoordinates = signal<Coordinates | null>(null);\n #isDragging = signal(false);\n #lastMouseX = signal(0);\n #lastMouseY = signal(0);\n #initialPinchDistance = signal(0);\n #isNodeDragging = signal(false);\n #draggedNodeId = signal<string | null>(null);\n #dragOffset = signal<Coordinates | null>(null);\n #connections = signal<Connection[]>([]);\n #canvasWidth = signal(0);\n #canvasHeight = signal(0);\n\n @ViewChild('blueprintCanvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\n #ctx!: CanvasRenderingContext2D;\n #resizeObserver!: ResizeObserver;\n\n visibleNodes = computed(() => {\n const nodes = this.nodes();\n const panX = this.panX();\n const panY = this.panY();\n const zoom = this.zoomLevel();\n const width = this.#canvasWidth();\n const height = this.#canvasHeight();\n\n if (width === 0 || height === 0) {\n return nodes;\n }\n\n const bufferX = width / zoom;\n const bufferY = height / zoom;\n\n const viewbox = {\n x1: -panX / zoom - bufferX,\n y1: -panY / zoom - bufferY,\n x2: (-panX + width) / zoom + bufferX,\n y2: (-panY + height) / zoom + bufferY,\n };\n\n return nodes.filter((node) => {\n const [x, y] = node.coordinates;\n return x > viewbox.x1 && x < viewbox.x2 && y > viewbox.y1 && y < viewbox.y2;\n });\n });\n\n constructor() {\n if (isPlatformBrowser(this.#platformId)) {\n effect(() => {\n this.asDots();\n this.panX();\n this.panY();\n this.zoomLevel();\n this.nodes();\n this.#connections();\n this.draggingConnection();\n this.#currentGridColor();\n this.highlightedConnection();\n this.#draggingNodeCoordinates();\n\n requestAnimationFrame(() => this.drawCanvas());\n });\n\n effect(() => {\n const nodes = this.nodes();\n const connectionsFromNodes = nodes.flatMap((node) => node.connections);\n const uniqueConnections = connectionsFromNodes.filter(\n (conn, index, self) =>\n index ===\n self.findIndex(\n (c) =>\n c.fromNode === conn.fromNode &&\n c.fromPort === conn.fromPort &&\n c.toNode === conn.toNode &&\n c.toPort === conn.toPort\n )\n );\n\n this.#connections.set(uniqueConnections);\n });\n }\n }\n\n ngAfterViewInit() {\n if (isPlatformBrowser(this.#platformId)) {\n const canvas = this.canvasRef.nativeElement;\n this.#ctx = canvas.getContext('2d')!;\n this.#resizeObserver = new ResizeObserver(() => this.updateCanvasSize());\n this.#resizeObserver.observe(this.#selfRef.nativeElement);\n this.updateCanvasSize();\n\n if (this.autoLayout()) {\n this.applyAutolayout();\n }\n\n if (this.forceUnique()) {\n this.#removeDuplicatesAndReinitiate();\n } else {\n this.#validateNodes();\n }\n }\n }\n\n ngOnDestroy() {\n if (this.#resizeObserver) {\n this.#resizeObserver.disconnect();\n }\n }\n\n @HostListener('document:mouseup', ['$event']) onMouseUp(event: MouseEvent) {\n if (this.isLocked()) return;\n\n this.endPan();\n this.endNodeDrag();\n }\n\n @HostListener('document:click', ['$event']) onClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (this.draggingConnection()) {\n if (!target.closest('.port')) {\n this.cancelPortDrag();\n }\n } else if (this.isLocked() && !target.closest('.midpoint-div')) {\n this.closeMidpointDiv();\n } else {\n this.#handleConnectionClick(event);\n }\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscape(event: KeyboardEvent) {\n if (this.draggingConnection()) {\n this.cancelPortDrag();\n } else if (this.isLocked()) {\n this.closeMidpointDiv();\n }\n }\n\n @HostListener('document:mousemove', ['$event']) onMouseMove(event: MouseEvent) {\n if (this.isLocked()) return;\n if (this.#isNodeDragging()) {\n this.nodeDrag(event);\n } else if (this.draggingConnection()) {\n this.updatePathOnMove(event);\n } else {\n this.pan(event);\n if (this.isHoveringNode()) {\n this.highlightedConnection.set(null);\n } else {\n this.#checkConnectionHover(event);\n }\n }\n }\n\n @HostListener('document:touchmove', ['$event']) onTouchMove(event: TouchEvent) {\n event.preventDefault();\n if (this.isLocked()) return;\n if (this.#isNodeDragging()) {\n this.nodeDrag(event.touches[0]);\n } else if (this.draggingConnection()) {\n this.updatePathOnMove(event.touches[0]);\n } else {\n this.handleTouchMove(event);\n }\n }\n\n @HostListener('document:touchend', ['$event']) onDocumentTouchEnd(event: TouchEvent) {\n if (this.isLocked()) return;\n\n this.handleTouchEnd();\n }\n\n applyAutolayout() {\n const newNodes = layoutNodes(this.nodes());\n this.nodes.set(newNodes);\n }\n\n updateCanvasSize() {\n const canvas = this.canvasRef.nativeElement;\n const rect = this.#selfRef.nativeElement.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n this.#ctx.scale(dpr, dpr);\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n this.#canvasWidth.set(rect.width);\n this.#canvasHeight.set(rect.height);\n\n this.drawCanvas();\n }\n\n drawCanvas() {\n if (!this.#ctx) return;\n\n const ctx = this.#ctx;\n const { width, height } = this.canvasRef.nativeElement;\n const dpr = window.devicePixelRatio || 1;\n ctx.clearRect(0, 0, width / dpr, height / dpr);\n ctx.save();\n ctx.translate(this.panX(), this.panY());\n ctx.scale(this.zoomLevel(), this.zoomLevel());\n this.drawGrid(ctx);\n this.drawConnections(ctx);\n\n if (this.draggingConnection()) {\n this.drawDraggingPath(ctx);\n }\n\n ctx.restore();\n }\n\n drawGrid(ctx: CanvasRenderingContext2D) {\n const { width, height } = this.canvasRef.nativeElement;\n const dpr = window.devicePixelRatio || 1;\n const zoom = this.zoomLevel();\n const panX = this.panX();\n const panY = this.panY();\n const gridSize = this.gridSize();\n const gridColor = this.#currentGridColor();\n const scaledGridSize = gridSize * zoom;\n const dynamicGridSize = scaledGridSize < 20 ? gridSize * 4 : gridSize;\n const startX = Math.floor(-panX / zoom / dynamicGridSize) * dynamicGridSize;\n const startY = Math.floor(-panY / zoom / dynamicGridSize) * dynamicGridSize;\n const endX = startX + width / dpr / zoom + dynamicGridSize;\n const endY = startY + height / dpr / zoom + dynamicGridSize;\n\n if (this.asDots()) {\n const dotRadius = 1 / zoom;\n ctx.fillStyle = gridColor;\n for (let x = startX; x < endX; x += dynamicGridSize) {\n for (let y = startY; y < endY; y += dynamicGridSize) {\n ctx.beginPath();\n ctx.arc(x, y, dotRadius, 0, 2 * Math.PI);\n ctx.fill();\n }\n }\n } else {\n ctx.beginPath();\n ctx.strokeStyle = gridColor;\n ctx.lineWidth = 1 / zoom;\n for (let x = startX; x < endX; x += dynamicGridSize) {\n ctx.moveTo(x, startY);\n ctx.lineTo(x, endY);\n }\n for (let y = startY; y < endY; y += dynamicGridSize) {\n ctx.moveTo(startX, y);\n ctx.lineTo(endX, y);\n }\n ctx.stroke();\n }\n }\n\n drawConnections(ctx: CanvasRenderingContext2D) {\n const highlighted = this.highlightedConnection();\n ctx.lineWidth = 2 / this.zoomLevel();\n\n for (const conn of this.#connections()) {\n const isHighlighted =\n highlighted?.fromNode === conn.fromNode &&\n highlighted?.fromPort === conn.fromPort &&\n highlighted?.toNode === conn.toNode &&\n highlighted?.toPort === conn.toPort;\n\n ctx.strokeStyle = isHighlighted ? '#ffc107' : '#888';\n ctx.beginPath();\n\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = this.getNodePortPosition(conn.toNode, conn.toPort);\n\n this.drawCurvedPath(ctx, startPos, endPos);\n ctx.stroke();\n }\n }\n\n drawDraggingPath(ctx: CanvasRenderingContext2D) {\n const conn = this.draggingConnection()!;\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = [conn.x2, conn.y2] as Coordinates;\n ctx.strokeStyle = '#5a9cf8';\n ctx.lineWidth = 2 / this.zoomLevel();\n ctx.beginPath();\n this.drawCurvedPath(ctx, startPos, endPos);\n ctx.stroke();\n }\n\n drawCurvedPath(ctx: CanvasRenderingContext2D, start: Coordinates, end: Coordinates) {\n const [x1, y1] = start;\n const [x2, y2] = end;\n const dx = Math.abs(x1 - x2) * 0.7;\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(x1 + dx, y1, x2 - dx, y2, x2, y2);\n }\n\n startNodeDrag(event: MouseEvent | TouchEvent, nodeId: string) {\n event.stopPropagation();\n event.preventDefault();\n\n this.#isNodeDragging.set(true);\n this.#draggedNodeId.set(nodeId);\n\n const clientX = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n const clientY = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const worldX = (clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const worldY = (clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n const draggedNode = this.nodes().find((n) => n.id === nodeId);\n\n if (draggedNode) {\n this.#dragOffset.set([worldX - draggedNode.coordinates[0], worldY - draggedNode.coordinates[1]]);\n }\n\n this.#lastMouseX.set(clientX);\n this.#lastMouseY.set(clientY);\n }\n\n endNodeDrag() {\n const draggedId = this.#draggedNodeId();\n const finalCoords = this.#draggingNodeCoordinates();\n\n if (draggedId && finalCoords) {\n this.nodes.update((nodes) => {\n const node = nodes.find((n) => n.id === draggedId);\n if (node) {\n node.coordinates = finalCoords;\n }\n return [...nodes];\n });\n }\n\n this.#isNodeDragging.set(false);\n this.#draggedNodeId.set(null);\n this.#dragOffset.set(null);\n this.#draggingNodeCoordinates.set(null);\n }\n\n nodeDrag(event: MouseEvent | Touch) {\n const draggedId = this.#draggedNodeId();\n if (!this.#isNodeDragging() || !draggedId) return;\n\n const { clientX, clientY } = event;\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const worldX = (clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const worldY = (clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n\n let newX = worldX - this.#dragOffset()![0];\n let newY = worldY - this.#dragOffset()![1];\n\n if (this.snapToGrid() || (event instanceof MouseEvent && event.shiftKey)) {\n const grid = this.gridSnapSize();\n newX = Math.round(newX / grid) * grid;\n newY = Math.round(newY / grid) * grid;\n }\n\n this.#draggingNodeCoordinates.set([newX, newY]);\n this.#lastMouseX.set(clientX);\n this.#lastMouseY.set(clientY);\n }\n\n startPortDrag(event: MouseEvent, nodeId: string, portId: string) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.draggingConnection()) this.cancelPortDrag();\n\n const node = this.nodes().find((n) => n.id === nodeId);\n\n if (node) {\n this.draggingConnection.set({\n fromNode: nodeId,\n fromPort: portId,\n x2: node.coordinates[0],\n y2: node.coordinates[1],\n });\n }\n\n this.updatePathOnMove(event);\n }\n\n endPortDrag(_: MouseEvent, toNodeId: string, toPortId: string) {\n if (!this.draggingConnection()) return;\n\n const from = this.draggingConnection()!;\n\n if (from.fromNode === toNodeId) {\n this.cancelPortDrag();\n return;\n }\n\n const newConnection: Connection = {\n fromNode: from.fromNode,\n fromPort: from.fromPort,\n toNode: toNodeId,\n toPort: toPortId,\n };\n\n this.nodes.update((nodes) => {\n const fromNode = nodes.find((n) => n.id === newConnection.fromNode);\n const toNode = nodes.find((n) => n.id === newConnection.toNode);\n\n if (fromNode && toNode) {\n const isDuplicateFrom = fromNode.connections.some(\n (c) =>\n c.fromNode === newConnection.fromNode &&\n c.fromPort === newConnection.fromPort &&\n c.toNode === newConnection.toNode &&\n c.toPort === newConnection.toPort\n );\n\n if (!isDuplicateFrom) {\n fromNode.connections = [...fromNode.connections, newConnection];\n }\n\n const isDuplicateTo = toNode.connections.some(\n (c) =>\n c.fromNode === newConnection.fromNode &&\n c.fromPort === newConnection.fromPort &&\n c.toNode === newConnection.toNode &&\n c.toPort === newConnection.toPort\n );\n\n if (!isDuplicateTo) {\n toNode.connections = [...toNode.connections, newConnection];\n }\n }\n return [...nodes];\n });\n\n this.cancelPortDrag();\n }\n\n cancelPortDrag() {\n this.draggingConnection.set(null);\n }\n\n updatePathOnMove(event: MouseEvent | Touch) {\n if (!this.draggingConnection()) return;\n\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const x2 = (event.clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const y2 = (event.clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n\n this.draggingConnection.update((conn) => (conn ? { ...conn, x2, y2 } : conn));\n }\n\n getNodePortPosition(nodeId: string, portId: string): Coordinates {\n const node = this.nodes().find((n) => n.id === nodeId);\n\n if (!node) return [0, 0];\n\n const portEl = this.#selfRef.nativeElement.querySelector(`[data-node-id=\"${nodeId}\"][data-port-id=\"${portId}\"]`);\n\n if (portEl) {\n const nodeWrapper = this.#selfRef.nativeElement.querySelector('.nodes-wrapper')!;\n const wrapperRect = nodeWrapper.getBoundingClientRect();\n const portRect = portEl.getBoundingClientRect();\n const portCenterX = portRect.left + portRect.width / 2;\n const portCenterY = portRect.top + portRect.height / 2;\n const worldX = (portCenterX - wrapperRect.left) / this.zoomLevel();\n const worldY = (portCenterY - wrapperRect.top) / this.zoomLevel();\n\n return [worldX, worldY];\n }\n\n const isInput = node.inputs.some((p) => p.id === portId);\n const portIndex = isInput\n ? node.inputs.findIndex((p) => p.id === portId)\n : node.outputs.findIndex((p) => p.id === portId);\n\n if (portIndex === -1) return node.coordinates;\n\n const portYOffset = this.#NODE_HEADER_HEIGHT + portIndex * this.#PORT_ROW_HEIGHT + this.#PORT_ROW_HEIGHT / 2;\n const portXOffset = isInput ? 0 : this.#NODE_WIDTH;\n\n return [node.coordinates[0] + portXOffset, node.coordinates[1] + portYOffset];\n }\n\n startPan(event: MouseEvent) {\n if (this.isLocked()) return;\n if (event.target instanceof HTMLElement && event.target.closest('.node')) return;\n\n event.preventDefault();\n\n this.#isDragging.set(true);\n this.#lastMouseX.set(event.clientX);\n this.#lastMouseY.set(event.clientY);\n }\n\n endPan() {\n this.#isDragging.set(false);\n }\n\n pan(event: MouseEvent) {\n if (!this.#isDragging() || this.isLocked()) return;\n\n const dx = event.clientX - this.#lastMouseX();\n const dy = event.clientY - this.#lastMouseY();\n\n this.panX.update((x) => x + dx);\n this.panY.update((y) => y + dy);\n\n this.#lastMouseX.set(event.clientX);\n this.#lastMouseY.set(event.clientY);\n }\n\n zoom(event: WheelEvent) {\n event.preventDefault();\n const oldZoom = this.zoomLevel();\n const newZoom = this.#clamp(oldZoom * (1 - event.deltaY * this.#ZOOM_SPEED), this.#MIN_ZOOM, this.#MAX_ZOOM);\n\n const panRatio = newZoom / oldZoom;\n const newPanX = event.clientX - (event.clientX - this.panX()) * panRatio;\n const newPanY = event.clientY - (event.clientY - this.panY()) * panRatio;\n\n this.zoomLevel.set(newZoom);\n this.panX.set(newPanX);\n this.panY.set(newPanY);\n }\n\n handleTouchStart(event: TouchEvent) {\n if (event.target instanceof HTMLElement && event.target.closest('.node')) return;\n\n event.preventDefault();\n\n if (event.touches.length === 1) {\n this.#isDragging.set(true);\n this.#lastMouseX.set(event.touches[0].clientX);\n this.#lastMouseY.set(event.touches[0].clientY);\n } else if (event.touches.length === 2) {\n this.#isDragging.set(false);\n this.#initialPinchDistance.set(this.#getDistance(event.touches[0], event.touches[1]));\n }\n }\n\n handleTouchMove(event: TouchEvent) {\n event.preventDefault();\n\n if (event.touches.length === 1 && this.#isDragging()) {\n const dx = event.touches[0].clientX - this.#lastMouseX();\n const dy = event.touches[0].clientY - this.#lastMouseY();\n\n this.panX.update((x) => x + dx);\n this.panY.update((y) => y + dy);\n\n this.#lastMouseX.set(event.touches[0].clientX);\n this.#lastMouseY.set(event.touches[0].clientY);\n } else if (event.touches.length === 2) {\n const newPinchDistance = this.#getDistance(event.touches[0], event.touches[1]);\n const pinchRatio = newPinchDistance / this.#initialPinchDistance();\n const oldZoom = this.zoomLevel();\n const newZoom = this.#clamp(oldZoom * pinchRatio, this.#MIN_ZOOM, this.#MAX_ZOOM);\n\n const pinchCenterX = (event.touches[0].clientX + event.touches[1].clientX) / 2;\n const pinchCenterY = (event.touches[0].clientY + event.touches[1].clientY) / 2;\n\n const panRatio = newZoom / oldZoom;\n const newPanX = pinchCenterX - (pinchCenterX - this.panX()) * panRatio;\n const newPanY = pinchCenterY - (pinchCenterY - this.panY()) * panRatio;\n\n this.zoomLevel.set(newZoom);\n this.panX.set(newPanX);\n this.panY.set(newPanY);\n\n this.#initialPinchDistance.set(newPinchDistance);\n }\n }\n\n handleTouchEnd() {\n this.#isDragging.set(false);\n this.endNodeDrag();\n\n if (this.draggingConnection()) {\n this.cancelPortDrag();\n }\n }\n\n closeMidpointDiv() {\n this.showMidpointDiv.set(false);\n this.midpointDivPosition.set(null);\n this.isLocked.set(false);\n }\n\n getDisplayCoordinates(node: BlueprintNode) {\n const draggedId = this.#draggedNodeId();\n const draggingCoords = this.#draggingNodeCoordinates();\n\n if (draggedId === node.id && draggingCoords) {\n return `translate(${draggingCoords[0]}px, ${draggingCoords[1]}px)`;\n }\n\n return `translate(${node.coordinates[0]}px, ${node.coordinates[1]}px)`;\n }\n\n removeConnection() {\n const conn = this.highlightedConnection();\n\n if (!conn) return;\n\n this.#connections.update((conns) =>\n conns.filter(\n (c) =>\n !(\n c.fromNode === conn.fromNode &&\n c.fromPort === conn.fromPort &&\n c.toNode === conn.toNode &&\n c.toPort === conn.toPort\n )\n )\n );\n\n this.nodes.update((nodes) =>\n nodes.map((n) => ({\n ...n,\n connections: n.connections.filter(\n (c) =>\n !(\n c.fromNode === conn.fromNode &&\n c.fromPort === conn.fromPort &&\n c.toNode === conn.toNode &&\n c.toPort === conn.toPort\n )\n ),\n }))\n );\n this.highlightedConnection.set(null);\n this.closeMidpointDiv();\n }\n\n #removeDuplicatesAndReinitiate() {\n const nodes = this.nodes();\n const uniqueNodesMap = new Map<string, BlueprintNode>();\n const uniqueNodes: BlueprintNode[] = [];\n\n for (const node of nodes) {\n if (!uniqueNodesMap.has(node.id)) {\n uniqueNodesMap.set(node.id, node);\n uniqueNodes.push(node);\n }\n }\n\n const nodesWithUniquePorts = uniqueNodes.map((node) => {\n const uniqueInputs = new Map<string, Port>();\n const uniqueOutputs = new Map<string, Port>();\n\n const uniqueNodeInputs = node.inputs.filter((port) => {\n if (!uniqueInputs.has(port.id)) {\n uniqueInputs.set(port.id, port);\n return true;\n }\n return false;\n });\n\n const uniqueNodeOutputs = node.outputs.filter((port) => {\n if (!uniqueOutputs.has(port.id)) {\n uniqueOutputs.set(port.id, port);\n return true;\n }\n return false;\n });\n\n return {\n ...node,\n inputs: uniqueNodeInputs,\n outputs: uniqueNodeOutputs,\n };\n });\n\n const finalNodes = nodesWithUniquePorts.map((node) => {\n const validConnections = node.connections.filter((conn) => {\n const fromNodeExists = nodesWithUniquePorts.some((n) => n.id === conn.fromNode);\n const toNodeExists = nodesWithUniquePorts.some((n) => n.id === conn.toNode);\n const fromPortExists = nodesWithUniquePorts\n .find((n) => n.id === conn.fromNode)\n ?.outputs.some((p) => p.id === conn.fromPort);\n const toPortExists = nodesWithUniquePorts\n .find((n) => n.id === conn.toNode)\n ?.inputs.some((p) => p.id === conn.toPort);\n\n return fromNodeExists && toNodeExists && fromPortExists && toPortExists;\n });\n return { ...node, connections: validConnections };\n });\n\n this.nodes.set(finalNodes);\n }\n\n #handleConnectionClick(event: MouseEvent) {\n if (this.highlightedConnection()) {\n const conn = this.highlightedConnection()!;\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = this.getNodePortPosition(conn.toNode, conn.toPort);\n const midpoint = this.#getBezierMidpoint(startPos, endPos);\n\n this.midpointDivPosition.set({ x: midpoint[0], y: midpoint[1] });\n this.showMidpointDiv.set(true);\n this.isLocked.set(true);\n }\n }\n\n #getBezierMidpoint(start: Coordinates, end: Coordinates): Coordinates {\n const t = 0.5;\n const [x1, y1] = start;\n const [x2, y2] = end;\n const dx = Math.abs(x1 - x2) * 0.7;\n const cp1x = x1 + dx;\n const cp1y = y1;\n const cp2x = x2 - dx;\n const cp2y = y2;\n\n const mx =\n Math.pow(1 - t, 3) * x1 +\n 3 * Math.pow(1 - t, 2) * t * cp1x +\n 3 * (1 - t) * Math.pow(t, 2) * cp2x +\n Math.pow(t, 3) * x2;\n\n const my =\n Math.pow(1 - t, 3) * y1 +\n 3 * Math.pow(1 - t, 2) * t * cp1y +\n 3 * (1 - t) * Math.pow(t, 2) * cp2y +\n Math.pow(t, 3) * y2;\n\n return [mx, my];\n }\n\n #checkConnectionHover(event: MouseEvent) {\n const blueprintRect = this.#selfRef.nativeElement.getBoundingClientRect();\n const worldX = (event.clientX - blueprintRect.left - this.panX()) / this.zoomLevel();\n const worldY = (event.clientY - blueprintRect.top - this.panY()) / this.zoomLevel();\n const cursorPoint: Coordinates = [worldX, worldY];\n\n let hoveredConn: Connection | null = null;\n const tolerance = 10 / this.zoomLevel();\n\n for (const conn of this.#connections()) {\n const startPos = this.getNodePortPosition(conn.fromNode, conn.fromPort);\n const endPos = this.getNodePortPosition(conn.toNode, conn.toPort);\n\n if (this.#isPointNearBezierCurve(cursorPoint, startPos, endPos, tolerance)) {\n hoveredConn = conn;\n break;\n }\n }\n\n this.highlightedConnection.set(hoveredConn);\n }\n\n #isPointNearBezierCurve(point: Coordinates, start: Coordinates, end: Coordinates, tolerance: number = 10): boolean {\n const [x1, y1] = start;\n const [x2, y2] = end;\n const dx = Math.abs(x1 - x2) * 0.7;\n const cp1x = x1 + dx;\n const cp1y = y1;\n const cp2x = x2 - dx;\n const cp2y = y2;\n\n const steps = 20;\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n\n const x =\n Math.pow(1 - t, 3) * x1 +\n 3 * Math.pow(1 - t, 2) * t * cp1x +\n 3 * (1 - t) * Math.pow(t, 2) * cp2x +\n Math.pow(t, 3) * x2;\n const y =\n Math.pow(1 - t, 3) * y1 +\n 3 * Math.pow(1 - t, 2) * t * cp1y +\n 3 * (1 - t) * Math.pow(t, 2) * cp2y +\n Math.pow(t, 3) * y2;\n\n const distance = Math.sqrt(Math.pow(point[0] - x, 2) + Math.pow(point[1] - y, 2));\n if (distance < tolerance) {\n return true;\n }\n }\n\n return false;\n }\n\n public getNewNodeCoordinates(panToCoordinates = false): Coordinates {\n let lowestY = 0;\n if (this.nodes().length > 0) {\n lowestY = this.nodes().reduce((max, node) => Math.max(max, node.coordinates[1]), 0);\n }\n\n const newCoordinates: Coordinates = [20, lowestY + 200];\n\n if (panToCoordinates) {\n this.#panToCoordinates(newCoordinates);\n }\n\n return newCoordinates;\n }\n\n #validateNodes() {\n const duplicatePortIds = findDuplicatePortIDs(this.nodes());\n const duplicateNodeIds = findDuplicateNodeIDs(this.nodes());\n\n this.validationErrors.set({\n duplicateNodeIds,\n duplicatePortIds,\n });\n }\n\n #panToCoordinates(coords: Coordinates): void {\n const [x, y] = coords;\n const rect = this.#selfRef.nativeElement.getBoundingClientRect();\n\n this.panX.set(rect.width / 2 - x * this.zoomLevel());\n this.panY.set(rect.height / 2 - y * this.zoomLevel());\n }\n\n #getDistance(touch1: Touch, touch2: Touch) {\n const dx = touch1.clientX - touch2.clientX;\n const dy = touch1.clientY - touch2.clientY;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n #clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-button-group',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--btng-id]': 'id',\n },\n})\nexport class ShipButtonGroup {\n id = '--' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 12);\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: '[shButton]',\n imports: [],\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet-h',\n },\n})\nexport class ShipButton {\n // #selfRef = inject(ElementRef);\n // '[class.not-first-node-text]': 'notFirstNodeText()',\n // '[class.not-last-node-text]': 'notLastNodeText()',\n // notFirstNodeText = signal<boolean>(false);\n // notLastNodeText = signal<boolean>(false);\n // ngOnInit() {\n // const childNodes = this.#selfRef.nativeElement.childNodes;\n // this.notFirstNodeText.set(childNodes[0].nodeType !== Node.TEXT_NODE);\n // this.notLastNodeText.set(childNodes[childNodes.length - 1].nodeType !== Node.TEXT_NODE);\n // }\n}\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\n\n@Component({\n selector: 'sh-card',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class()',\n },\n})\nexport class ShipCard {\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n class = signal<string>(this.#shConfig?.cardType ?? 'type-a');\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\n\n@Component({\n selector: 'sh-checkbox',\n imports: [ShipIcon],\n template: `\n <div class=\"box sh-sheet\" [class]=\"currentClassList()\">\n <sh-icon class=\"inherit default-indicator\">check-bold</sh-icon>\n <sh-icon class=\"inherit indeterminate-indicator\">minus-bold</sh-icon>\n </div>\n\n <div class=\"label\">\n <ng-content />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipCheckbox {\n currentClassList = classMutationSignal();\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-chip',\n imports: [],\n standalone: true,\n template: '<div><ng-content /></div>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet',\n },\n})\nexport class ShipChip {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\ntype R = number;\ntype G = number;\ntype B = number;\ntype A = number;\n\n// TODOS\n// - Add a color picker input\n// - Add alpha support\n\n@Component({\n selector: 'sh-color-picker',\n imports: [],\n template: `\n <canvas #colorCanvas></canvas>\n <div\n class=\"marker\"\n [style.left]=\"markerPosition().x\"\n [style.top]=\"markerPosition().y\"\n [style.background]=\"selectedColorRgb()\"></div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'renderingType()',\n '[class.vertical]': '(renderingType() === \"hue\" || renderingType() === \"saturation\") && direction() === \"vertical\"',\n },\n})\nexport class ShipColorPicker {\n #document = inject(DOCUMENT);\n\n readonly canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('colorCanvas');\n private canvasData = signal<{\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n centerX: number;\n centerY: number;\n radius: number;\n } | null>(null);\n\n showDarkColors = input(false);\n renderingType = input<'hsl' | 'grid' | 'hue' | 'rgb' | 'saturation'>('hsl');\n gridSize = input(20);\n hue = input(0);\n direction = input<'horizontal' | 'vertical'>('horizontal');\n selectedColor = model<[R, G, B]>([255, 255, 255]);\n currentColor = output<{ rgb: string; hex: string; hsl: string; hue: number; saturation: number }>();\n\n centerLightness = computed(() => (this.showDarkColors() ? 200 : 100));\n isDragging = signal(false);\n markerPosition = signal({ x: '50%', y: '50%' });\n _pos = { x: '0', y: '0' };\n _markerPosition = effect(() => (this._pos = this.markerPosition()));\n\n selectedColorRgb = computed(() => `rgb(${this.selectedColor().join(',')})`);\n selectedColorHex = computed(() => this.rgbToHex(...this.selectedColor()));\n selectedColorHsl = computed(() => this.rgbToHsl(...this.selectedColor()));\n\n selectedColorEffect = effect(() => {\n const selectedColor = this.selectedColor();\n const hsl = this.rgbToHsl(...selectedColor);\n const hex = this.rgbToHex(...selectedColor);\n\n this.updateMarkerFromColor(selectedColor);\n\n this.currentColor.emit({\n rgb: `rgb(${selectedColor.join(',')})`,\n hex: hex,\n hsl: hsl,\n hue: hsl.match(/\\d+/g)!.map(Number)[0],\n saturation: hsl.match(/\\d+/g)!.map(Number)[1],\n });\n });\n\n @HostListener('window:resize', ['$event'])\n onResize() {\n this.setCanvasSize();\n }\n\n private renderingTypeEffect = effect(() => {\n const currentRenderingType = this.renderingType();\n\n if (this.canvasData()) {\n this.drawColorPicker();\n\n if (currentRenderingType === 'hsl') {\n this.adjustMarkerPosition();\n\n queueMicrotask(() => this.updateMarkerFromColor(this.selectedColor()));\n } else {\n this.updateMarkerFromColor(this.selectedColor());\n }\n }\n });\n\n initColor: [R, G, B] | null = null;\n ngAfterViewInit() {\n this.initColor = this.selectedColor();\n\n this.setCanvasSize();\n this.initCanvasEvents();\n }\n\n private updateMarkerFromColor(rgb: [R, G, B]) {\n const [r, g, b] = rgb;\n const coords = this.findPositionByColor(r, g, b);\n\n if (coords === null) return;\n\n const { x, y } = coords;\n\n const mockEvent = {\n offsetX: x,\n offsetY: y,\n clientX: x,\n clientY: y,\n touches: [{ clientX: x, clientY: y }],\n };\n\n this.updateColorAndMarker(mockEvent as any, false, true);\n }\n\n private findPositionByColor(r: number, g: number, b: number): { x: number; y: number } | null {\n const canvasData = this.canvasData();\n if (!canvasData || !canvasData.canvas) return null;\n\n const { canvas, ctx } = canvasData;\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n\n let bestMatch = { x: 0, y: 0, distance: Infinity };\n\n for (let y = 0; y < canvas.height; y++) {\n for (let x = 0; x < canvas.width; x++) {\n const index = (y * canvas.width + x) * 4;\n const pixelR = imageData[index];\n const pixelG = imageData[index + 1];\n const pixelB = imageData[index + 2];\n\n const distance = Math.sqrt(Math.pow(r - pixelR, 2) + Math.pow(g - pixelG, 2) + Math.pow(b - pixelB, 2));\n\n if (distance < bestMatch.distance) {\n bestMatch = { x, y, distance };\n }\n }\n }\n\n return { x: bestMatch.x, y: bestMatch.y };\n }\n\n private adjustMarkerPosition() {\n const { canvas, centerX, centerY, radius } = this.canvasData()!;\n let { x, y } = this._pos;\n\n let markerX = (parseFloat(x.replace('%', '')) / 100) * canvas.width;\n let markerY = (parseFloat(y.replace('%', '')) / 100) * canvas.height;\n\n const distance = Math.sqrt(Math.pow(markerX - centerX, 2) + Math.pow(markerY - centerY, 2));\n\n if (distance > radius) {\n const angle = Math.atan2(markerY - centerY, markerX - centerX);\n markerX = centerX + radius * Math.cos(angle);\n markerY = centerY + radius * Math.sin(angle);\n\n x = ((markerX / canvas.width) * 100).toFixed(2) + '%';\n y = ((markerY / canvas.height) * 100).toFixed(2) + '%';\n this.markerPosition.set({ x, y });\n }\n }\n\n private initCanvasEvents() {\n const { canvas } = this.canvasData()!;\n\n canvas.addEventListener('mousedown', (event) => {\n this.isDragging.set(true);\n this.updateColorAndMarker(event);\n });\n\n this.#document.addEventListener('mousemove', (event) => {\n if (this.isDragging()) {\n event.preventDefault();\n this.updateColorAndMarker(event, true);\n }\n });\n\n this.#document.addEventListener('mouseup', () => this.isDragging.set(false));\n\n canvas.addEventListener('touchstart', (_) => this.isDragging.set(true));\n this.#document.addEventListener('touchmove', (event) => {\n if (this.isDragging()) {\n event.preventDefault();\n this.updateColorAndMarker(event.touches[0], true);\n }\n });\n\n this.#document.addEventListener('touchend', () => this.isDragging.set(false));\n this.#document.addEventListener('touchcancel', () => this.isDragging.set(false));\n }\n\n private setCanvasSize() {\n const canvas = this.canvasRef()?.nativeElement;\n\n if (canvas) {\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n imageSmoothingEnabled: true,\n imageSmoothingQuality: 'high',\n }) as CanvasRenderingContext2D;\n const parentWidth = canvas.parentElement?.offsetWidth || canvas.offsetWidth;\n canvas.width = parentWidth;\n canvas.height = parentWidth;\n\n this.canvasData.set({\n canvas,\n ctx,\n centerX: canvas.width / 2,\n centerY: canvas.height / 2,\n radius: Math.min(canvas.width, canvas.height) / 2,\n });\n\n this.drawColorPicker();\n }\n }\n\n private updateColorAndMarker(event: MouseEvent | Touch, outsideCanvas = false, onlyMarker = false) {\n const { canvas, ctx } = this.canvasData()!;\n\n let mouseX = event instanceof MouseEvent ? event.offsetX : event.clientX;\n let mouseY = event instanceof MouseEvent ? event.offsetY : event.clientY;\n\n if (outsideCanvas) {\n const rect = canvas.getBoundingClientRect();\n mouseX = Math.round(event.clientX - rect.left);\n mouseY = Math.round(event.clientY - rect.top);\n }\n\n if (this.renderingType() === 'hsl') {\n const centerX = canvas.width / 2;\n const centerY = canvas.height / 2;\n const radius = Math.min(canvas.width, canvas.height) / 2;\n\n const distance = Math.sqrt(Math.pow(mouseX - centerX, 2) + Math.pow(mouseY - centerY, 2));\n\n if (distance > radius) {\n const angle = Math.atan2(mouseY - centerY, mouseX - centerX);\n mouseX = centerX + radius * Math.cos(angle);\n mouseY = centerY + radius * Math.sin(angle);\n }\n }\n\n mouseX = Math.max(0, Math.min(canvas.width - 1, Math.round(mouseX)));\n mouseY = Math.max(0, Math.min(canvas.height - 1, Math.round(mouseY)));\n\n const pixelData = ctx.getImageData(mouseX, mouseY, 1, 1).data;\n const [r, g, b] = pixelData;\n\n if (!onlyMarker) {\n this.selectedColor.set([r, g, b]);\n }\n\n const xPercent = ((mouseX / canvas.width) * 100).toFixed(2) + '%';\n const yPercent = ((mouseY / canvas.height) * 100).toFixed(2) + '%';\n\n this.markerPosition.set({ x: xPercent, y: yPercent });\n }\n\n private drawColorPicker() {\n switch (this.renderingType()) {\n case 'hsl':\n this.drawColorWheel();\n break;\n case 'grid':\n this.drawGrid();\n break;\n case 'hue':\n this.drawHue();\n break;\n case 'rgb':\n this.drawRgb();\n break;\n case 'saturation':\n this.drawSaturation();\n break;\n }\n }\n\n private drawRgb() {\n const { canvas, ctx } = this.canvasData()!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\n gradient.addColorStop(0, 'white');\n gradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n const gradient2 = ctx.createLinearGradient(0, 0, 0, canvas.height);\n gradient2.addColorStop(0, 'rgba(0, 0, 0, 0)');\n gradient2.addColorStop(1, 'black');\n\n ctx.fillStyle = gradient2;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n private drawSaturation() {\n const { canvas, ctx } = this.canvasData()!;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (this.direction() === 'horizontal') {\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\n gradient.addColorStop(0, `hsl(${this.hue()}, 0%, 50%)`);\n gradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n } else {\n const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);\n gradient.addColorStop(0, `hsl(${this.hue()}, 0%, 50%)`);\n gradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n }\n\n private drawHue() {\n const { canvas, ctx } = this.canvasData()!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const gradient = ctx.createLinearGradient(\n 0,\n 0,\n this.direction() === 'horizontal' ? canvas.width : 0,\n this.direction() === 'horizontal' ? 0 : canvas.height\n );\n\n for (let i = 0; i <= 360; i += 10) {\n gradient.addColorStop(i / 360, `hsl(${i}, 100%, 50%)`);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n private drawColorWheel() {\n const { canvas, ctx, centerX, centerY, radius } = this.canvasData()!;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n for (let y = 0; y < canvas.height; y++) {\n for (let x = 0; x < canvas.width; x++) {\n const distance = Math.sqrt(Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2));\n\n if (distance <= radius + 2) {\n const angle = Math.atan2(y - centerY, x - centerX);\n const hue = ((angle + Math.PI) / (2 * Math.PI)) * 360;\n ctx.fillStyle = `hsl(${hue}, 100%, ${100 - (this.centerLightness() / 100) * (distance / radius) * 50}%)`;\n ctx.fillRect(x, y, 1, 1);\n }\n }\n }\n }\n\n private drawGrid() {\n const { canvas, ctx } = this.canvasData()!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const gridSize = this.gridSize();\n const cellSize = canvas.width / gridSize;\n const inputHue = this.hue();\n const reversedHue = (inputHue + 180) % 360;\n const maxDistance = Math.sqrt(2) * (gridSize - 1);\n\n for (let y = 0; y < canvas.height; y += cellSize) {\n for (let x = 0; x < canvas.width; x += cellSize) {\n const cellX = Math.floor(x / cellSize);\n const cellY = Math.floor(y / cellSize);\n const distanceTopLeft = Math.sqrt(cellX * cellX + cellY * cellY);\n const l = Math.floor((distanceTopLeft / maxDistance) * 100);\n const h = cellX >= cellY ? inputHue : reversedHue;\n const distanceFromCenter = Math.abs(cellX - cellY) / (gridSize - 1);\n const s = Math.floor(distanceFromCenter * 100);\n\n ctx.fillStyle = `hsl(${h}, ${s}%, ${l}%)`;\n ctx.fillRect(x, y, cellSize, cellSize);\n }\n }\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n }\n\n private rgbToHsl(r: number, g: number, b: number): 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 return `hsl(${Math.floor(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\n\n@Component({\n selector: 'sh-datepicker',\n imports: [ShipIcon],\n template: `\n <header>\n <button (click)=\"previousMonth()\"><sh-icon>caret-left</sh-icon></button>\n <div class=\"title\">\n {{ getMonthName(currentDate()!) }}\n @if (monthsToShow() > 1) {\n - {{ getMonthName(getLastVisibleMonth()) }}\n }\n {{ getFullYear(currentDate()!) }}\n </div>\n <button (click)=\"nextMonth()\"><sh-icon>caret-right</sh-icon></button>\n </header>\n\n <section class=\"months-container\">\n @for (monthOffset of monthOffsets(); track monthOffset) {\n <div class=\"month\">\n <nav class=\"weekdays\">\n @for (day of weekdays(); track $index) {\n <div>{{ day }}</div>\n }\n </nav>\n\n <div class=\"days\" #daysRef>\n @for (calDate of getMonthDates(monthOffset); track $index) {\n <div\n #elementRef\n [class.out-of-scope]=\"!isCurrentMonth(calDate, monthOffset)\"\n [class]=\"isDateSelected(calDate)\"\n (click)=\"setDate(calDate, elementRef)\">\n {{ calDate.getDate() }}\n </div>\n }\n\n @if (!asRange()) {\n <article class=\"days\">\n <div class=\"sel-el\" [style]=\"selectedDateStylePosition()\"></div>\n </article>\n }\n </div>\n </div>\n }\n </section>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.as-range]': 'asRange()',\n '[class]': '\"columns-\" + monthsToShow()',\n '[class.disabled]': 'disabled()',\n },\n})\nexport class ShipDatepicker {\n #INIT_DATE = this.#getUTCDate(new Date());\n\n date = model<Date | null>(null);\n endDate = model<Date | null>(null);\n asRange = input<boolean>(false);\n monthsToShow = input<number>(1);\n disabled = input<boolean>(false);\n\n startOfWeek = input<number>(1);\n weekdayLabels = input<string[]>(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n daysRef = viewChild<ElementRef<HTMLDivElement>>('daysRef');\n currentDate = signal<Date>(this.date() ?? this.#INIT_DATE);\n\n monthOffsets = computed(() => {\n return Array.from({ length: this.monthsToShow() }, (_, i) => i);\n });\n\n selectedDateStylePosition = signal<{ transform: string; opacity: string } | null>(null);\n\n weekdays = computed(() => {\n const startOfWeek = this.startOfWeek();\n const weekdayLabels = this.weekdayLabels();\n\n return weekdayLabels.slice(startOfWeek).concat(weekdayLabels.slice(0, startOfWeek));\n });\n\n currentClasses = classMutationSignal();\n someEffect = effect(() => {\n const _ = this.currentClasses();\n\n this.#findSelectedAndCalc();\n });\n\n getLastVisibleMonth(): Date {\n const lastMonthOffset = this.monthsToShow() - 1;\n return this.getOffsetDate(lastMonthOffset);\n }\n\n getOffsetDate(monthOffset: number): Date {\n const date = new Date(this.currentDate());\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n\n getMonthDates(monthOffset: number): Date[] {\n const offsetDate = this.getOffsetDate(monthOffset);\n return this.#generateMonthDates(offsetDate, this.startOfWeek());\n }\n\n #newDateEffect = effect(() => {\n if (this.monthsToShow() > 1) return;\n\n this.#setDateAsCurrent();\n });\n\n ngOnInit() {\n if (this.monthsToShow() === 1) return;\n\n this.#setDateAsCurrent();\n }\n\n #setDateAsCurrent() {\n const newDate = this.date();\n if (newDate) this.currentDate.set(newDate);\n this.#findSelectedAndCalc();\n }\n\n #findSelectedAndCalc() {\n setTimeout(() => {\n const selectedElement = this.daysRef()?.nativeElement.querySelector('.sel');\n\n if (!selectedElement) {\n return this.selectedDateStylePosition.update((x) => (x ? { ...x, opacity: '0' } : null));\n }\n\n this.setSelectedDateStylePosition(selectedElement as HTMLDivElement);\n });\n }\n\n #generateMonthDates(date: Date, startOfWeek: number): Date[] {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const firstDay = new Date(Date.UTC(year, month)).getUTCDay();\n const daysInMonth = 32 - new Date(Date.UTC(year, month, 32)).getUTCDate();\n const dates: Date[] = [];\n\n let offset = firstDay - startOfWeek;\n if (offset < 0) {\n offset += 7;\n }\n\n const lastDayOfPrevMonth = new Date(Date.UTC(year, month, 0)).getUTCDate();\n\n for (let i = offset - 1; i >= 0; i--) {\n const prevMonthDate = new Date(Date.UTC(year, month - 1, lastDayOfPrevMonth - i));\n dates.push(prevMonthDate);\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n dates.push(new Date(Date.UTC(year, month, i)));\n }\n\n let nextMonthDay = 1;\n while (dates.length % 7 !== 0) {\n dates.push(new Date(Date.UTC(year, month + 1, nextMonthDay++)));\n }\n\n return dates;\n }\n\n nextMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() + 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n previousMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() - 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n setDate(newDate: Date, selectedElement: HTMLDivElement) {\n const createDateWithExistingTime = (newDate: Date, existingDate: Date | null) => {\n const hours = existingDate?.getUTCHours() ?? 0;\n const minutes = existingDate?.getUTCMinutes() ?? 0;\n const seconds = existingDate?.getUTCSeconds() ?? 0;\n const milliseconds = existingDate?.getUTCMilliseconds() ?? 0;\n\n return this.#getUTCDate(\n new Date(\n Date.UTC(\n newDate.getUTCFullYear(),\n newDate.getUTCMonth(),\n newDate.getUTCDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n )\n )\n );\n };\n\n if (!this.asRange()) {\n this.date.set(createDateWithExistingTime(newDate, this.date()));\n this.endDate.set(null);\n } else {\n const startDate = this.date();\n const endDate = this.endDate();\n const utcDate = createDateWithExistingTime(newDate, null);\n\n if (!startDate) {\n this.date.set(utcDate);\n } else if (!endDate) {\n if (utcDate < startDate) {\n this.date.set(utcDate);\n this.endDate.set(null);\n } else {\n this.endDate.set(utcDate);\n }\n } else {\n this.date.set(utcDate);\n this.endDate.set(null);\n }\n }\n\n if (this.asRange()) return;\n\n this.setSelectedDateStylePosition(selectedElement);\n }\n\n isDateSelected(date: Date): string | null {\n const startDate = this.date();\n const endDate = this.endDate();\n\n if (startDate === null) return null;\n\n const startOfDay = (date: Date) => {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0));\n };\n\n const endOfDay = (date: Date) => {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));\n };\n\n const currentDate = startOfDay(date);\n const rangeStart = startOfDay(startDate);\n const rangeEnd = endDate ? endOfDay(endDate) : null;\n\n let classes = [];\n\n if (this.asRange()) {\n if (rangeEnd === null) {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel first last');\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('first');\n }\n\n if (currentDate.getTime() === startOfDay(rangeEnd).getTime()) {\n classes.push('last');\n }\n\n if (currentDate >= rangeStart && currentDate <= rangeEnd) {\n classes.push('sel');\n\n const dayOfWeek = currentDate.getUTCDay();\n const startOfWeek = this.startOfWeek();\n\n if (dayOfWeek === startOfWeek) {\n classes.push('week-start');\n }\n\n const endOfWeek = (startOfWeek + 6) % 7;\n if (dayOfWeek === endOfWeek) {\n classes.push('week-end');\n }\n }\n\n const nextDate = new Date(currentDate);\n nextDate.setUTCDate(currentDate.getUTCDate() + 1);\n const prevDate = new Date(currentDate);\n prevDate.setUTCDate(currentDate.getUTCDate() - 1);\n\n const isFirstOfMonth = currentDate.getUTCDate() === 1;\n const isLastOfMonth = nextDate.getUTCMonth() !== currentDate.getUTCMonth();\n\n if (isFirstOfMonth) {\n classes.push('month-start');\n }\n\n if (isLastOfMonth) {\n classes.push('month-end');\n }\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel');\n }\n }\n\n return classes.join(' ') || null;\n }\n\n setSelectedDateStylePosition(selectedElement: HTMLDivElement) {\n this.selectedDateStylePosition.set({\n transform: `translate(${selectedElement.offsetLeft}px, ${selectedElement.offsetTop}px)`,\n opacity: '1',\n });\n }\n\n getMonthName(date: Date): string {\n return date.toLocaleString('default', { month: 'long' });\n }\n\n getFullYear(date: Date): number {\n return date.getFullYear();\n }\n\n // Rest of the component methods remain the same, but update isCurrentMonth:\n isCurrentMonth(date: Date, monthOffset: number): boolean {\n const offsetDate = this.getOffsetDate(monthOffset);\n return date.getMonth() === offsetDate.getMonth();\n }\n\n #getUTCDate(date: Date): Date {\n const offsetMinutes = date.getTimezoneOffset();\n const timeDiffMillis = offsetMinutes * 60 * 1000;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ) + timeDiffMillis\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\n\n// TODOS\n// - Dynamic location where if outside of the window automatically position it to the top or left\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n openEffect = effect(() => {\n const open = this.isOpen();\n\n queueMicrotask(() => {\n const popoverEl = this.popoverRef()?.nativeElement;\n\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n }\n\n if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {\n this.isOpen.set(false);\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n popoverEl.showPopover();\n\n if (!this.SUPPORTS_ANCHOR) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n this.openAbort?.abort();\n this.openAbort = null;\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n #alignLeftUnder(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.left;\n const newTop = triggerRect.bottom + BASE_SPACE;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #alignTopRight(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.right + BASE_SPACE;\n const newTop = triggerRect.top;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #alignBottomRight(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.right + BASE_SPACE;\n const newTop = triggerRect.bottom;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #alignLeftOver(triggerRect: DOMRect, menuRect: DOMRect) {\n const newLeft = triggerRect.left;\n const newTop = triggerRect.bottom - triggerRect.height - menuRect.height - BASE_SPACE;\n\n return {\n left: newLeft,\n top: newTop,\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n const tryOrderMultiLayer = [this.#alignTopRight, this.#alignBottomRight];\n const tryOrderDefault = [this.#alignLeftUnder, this.#alignLeftOver];\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n for (let i = 0; i < tryOrder.length; i++) {\n const position = tryOrder[i](triggerRect, menuRect!);\n\n const outOfBoundsRight = position.left + (menuRect?.width || 0) > window.innerWidth;\n const outOfBoundsBottom = position.top + (menuRect?.height || 0) > window.innerHeight;\n\n if (!outOfBoundsRight && !outOfBoundsBottom) {\n this.menuStyle.set({\n left: position.left + 'px',\n top: position.top + 'px',\n });\n return;\n }\n }\n\n const fallbackPosition = tryOrder[0](triggerRect, menuRect!);\n this.menuStyle.set({\n left: fallbackPosition.left + 'px',\n top: fallbackPosition.top + 'px',\n });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, model, output } from '@angular/core';\nimport { ShipPopover } from '../ship-popover/ship-popover';\n\n@Component({\n selector: 'sh-form-field-popover',\n imports: [ShipPopover],\n template: `\n <ng-content select=\"label\"></ng-content>\n\n <div class=\"input-wrap\">\n <div class=\"prefix\">\n <ng-content select=\"[prefix]\"></ng-content>\n <ng-content select=\"[textPrefix]\"></ng-content>\n </div>\n\n <div class=\"prefix-space\"></div>\n\n <sh-popover\n [(isOpen)]=\"isOpen\"\n (closed)=\"close()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <ng-content trigger select=\"input\"></ng-content>\n\n <ng-content select=\"[popoverContent]\"></ng-content>\n </sh-popover>\n\n <ng-content select=\"textarea\"></ng-content>\n\n <ng-content select=\"[textSuffix]\"></ng-content>\n <div class=\"suffix-space\"></div>\n <ng-content select=\"[suffix]\"></ng-content>\n </div>\n\n <div class=\"helpers\">\n <div class=\"error-wrap\">\n <ng-content select=\"[error]\"></ng-content>\n </div>\n\n <div class=\"hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFormFieldPopover {\n #selfRef = inject(ElementRef);\n\n isOpen = model<boolean>(false);\n closed = output<void>();\n\n @HostListener('click')\n onClick() {\n if (this.#selfRef.nativeElement.querySelector('input')) {\n this.#selfRef.nativeElement.querySelector('input').focus();\n }\n\n if (this.#selfRef.nativeElement.querySelector('textarea')) {\n this.#selfRef.nativeElement.querySelector('textarea').focus();\n }\n }\n\n close() {\n this.closed.emit();\n }\n\n ngOnInit() {\n const supportFieldSizing = typeof CSS !== 'undefined' && CSS.supports('field-sizing', 'content');\n const text = this.#selfRef.nativeElement.querySelector('textarea');\n\n if (!supportFieldSizing && text !== null) {\n const text = this.#selfRef.nativeElement.querySelector('textarea');\n\n function resize() {\n text.style.height = 'auto';\n text.style.height = text.scrollHeight + 'px';\n }\n\n /* 0-timeout to get the already changed text */\n function delayedResize() {\n setTimeout(resize, 0);\n }\n\n if (text) {\n text.addEventListener('change', resize);\n text.addEventListener('cut', delayedResize);\n text.addEventListener('paste', delayedResize);\n text.addEventListener('drop', delayedResize);\n text.addEventListener('keydown', delayedResize);\n\n text.focus();\n text.select();\n resize();\n }\n }\n }\n}\n","import { DestroyRef, ElementRef, inject, signal, Signal, WritableSignal } from '@angular/core';\n\nexport function contentProjectionSignal<T = HTMLElement>(querySelector: string): 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, { childList: true });\n destroyRef.onDestroy(() => observer.disconnect());\n\n return projectedElementsSignal.asReadonly();\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { ShipFormFieldPopover } from '../ship-form-field/ship-form-field-popover';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { contentProjectionSignal } from '../utilities/content-projection-signal';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-datepicker-input',\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div id=\"input-wrap\" class=\"input\" ngProjectAs=\"input\">\n @if (this.masking()) {\n <div class=\"masked-value\">\n {{ _maskedDate() }}\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker [date]=\"internalDate()\" (dateChange)=\"onDateChange($event)\" [class]=\"currentClass()\" />\n }\n </div>\n </sh-form-field-popover>\n\n <ng-template #defaultIndicator></ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDatepickerInput {\n // #INIT_DATE = this.#getUTCDate(new Date());\n\n ngModels = contentChild<NgModel>(NgModel);\n #datePipe = inject(DatePipe);\n #inputRef = signal<HTMLInputElement | null>(null);\n\n masking = input('mediumDate');\n closed = output<Date | null>();\n\n _maskedDate = computed(() => {\n const date = this.internalDate();\n const mask = this.masking();\n\n if (!mask) return date;\n if (!date) return null;\n\n return this.#datePipe.transform(date, mask);\n });\n\n internalDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n currentClass = classMutationSignal();\n #inputObserver = contentProjectionSignal<HTMLInputElement>('#input-wrap input');\n\n onDateChange(date: Date | null) {\n this.internalDate.set(date);\n\n const input = this.#inputRef();\n\n if (input) {\n input.value = date ? date.toString() : '';\n input.dispatchEvent(new Event('input'));\n }\n }\n\n close() {\n this.closed.emit(this.internalDate());\n }\n\n #inputRefEffect = effect(() => {\n const inputs = this.#inputObserver();\n\n if (!inputs.length) return;\n\n const input = inputs[0];\n\n if (!input) return;\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('inputValueChanged', (event: any) => {\n this.internalDate.set(event.detail.value ? this.#getUTCDate(new Date(event.detail.value)) : null);\n });\n\n input.addEventListener('focus', () => {\n this.isOpen.set(true);\n input.blur();\n });\n\n this.#inputRef.set(input);\n input.autocomplete = 'off';\n\n if (typeof input.value === 'string') {\n this.internalDate.set(input.value ? this.#getUTCDate(new Date(input.value)) : null);\n }\n });\n\n #createCustomInputEventListener(input: HTMLInputElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, '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\n #getUTCDate(date: Date): Date {\n const offsetMinutes = date.getTimezoneOffset();\n const timeDiffMillis = offsetMinutes * 60 * 1000;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ) + timeDiffMillis\n );\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ShipFormFieldPopover } from '../ship-form-field/ship-form-field-popover';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-daterange-input',\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover [class]=\"'columns-' + monthsToShow()\" (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap>\n @if (this.masking()) {\n <div class=\"masked-value\">{{ _maskedStartDate() ?? 'N/A' }} - {{ _maskedEndDate() ?? 'N/A' }}</div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker\n [date]=\"startDate()\"\n [endDate]=\"endDate()\"\n [class]=\"classes\"\n (dateChange)=\"onStartDateChange($event)\"\n (endDateChange)=\"onEndDateChange($event)\"\n [monthsToShow]=\"monthsToShow()\"\n [asRange]=\"true\" />\n }\n </div>\n </sh-form-field-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDaterangeInput {\n #selfRef = inject(ElementRef);\n\n startDateInputs = contentChildren<ElementRef<HTMLInputElement>>('startDate');\n endDateInputs = contentChildren<ElementRef<HTMLInputElement>>('endDate');\n\n #datePipe = inject(DatePipe);\n monthsToShow = input<number>(1);\n masking = input('mediumDate');\n closed = output<{ start: Date | null; end: Date | null }>();\n\n startDate = signal<Date | null>(null);\n endDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n\n get classes() {\n return `${this.#selfRef.nativeElement.classList.value}`;\n }\n\n _maskedStartDate = computed(() => {\n const date = this.startDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n _maskedEndDate = computed(() => {\n const date = this.endDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n constructor() {\n effect(() => {\n // Setup start date inputs\n this.startDateInputs().forEach((input) => {\n this.setupInput(input, true);\n });\n\n // Setup end date inputs\n this.endDateInputs().forEach((input) => {\n this.setupInput(input, false);\n });\n });\n }\n\n private setupInput(input: ElementRef<HTMLInputElement>, isStart: boolean) {\n const element = input.nativeElement;\n element.autocomplete = 'off';\n\n element.addEventListener('focus', () => {\n this.isOpen.set(true);\n element.blur();\n });\n\n // Handle initial value\n if (element.value) {\n try {\n const date = new Date(element.value);\n if (!isNaN(date.getTime())) {\n if (isStart) {\n this.startDate.set(date);\n } else {\n this.endDate.set(date);\n }\n }\n } catch (e) {\n console.warn('Invalid date value:', element.value);\n }\n }\n }\n\n onStartDateChange(date: Date | null) {\n this.startDate.set(date);\n this.updateInputValue(this.startDateInputs() as ElementRef<HTMLInputElement>[], date);\n }\n\n onEndDateChange(date: Date | null) {\n this.endDate.set(date);\n this.updateInputValue(this.endDateInputs() as ElementRef<HTMLInputElement>[], date);\n\n if (this.startDate() && date) {\n this.isOpen.set(false);\n }\n }\n\n private updateInputValue(inputs: ElementRef<HTMLInputElement>[], date: Date | null) {\n inputs.forEach((input) => {\n if (this.masking()) {\n input.nativeElement.value = this.#datePipe.transform(date, this.masking()) ?? '';\n } else {\n input.nativeElement.value = date ? date.toUTCString() : '';\n }\n this.dispatchInputEvent(input.nativeElement);\n });\n }\n\n private dispatchInputEvent(input: HTMLInputElement) {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n close() {\n this.closed.emit({\n start: this.startDate(),\n end: this.endDate(),\n });\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-divider',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDivider {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-event-card',\n imports: [],\n template: `\n <div class=\"content\">\n <ng-content />\n </div>\n\n <div class=\"actions\">\n <ng-content select=\"[actions]\" />\n <ng-content select=\"button\" />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet',\n },\n})\nexport class ShipEventCard {}\n","import { afterNextRender, ChangeDetectionStrategy, Component, ElementRef, HostListener, inject } from '@angular/core';\n\n@Component({\n selector: 'sh-form-field',\n imports: [],\n template: `\n <ng-content select=\"label\"></ng-content>\n\n <div class=\"input-wrap\">\n <div class=\"prefix\">\n <ng-content select=\"[boxPrefix]\"></ng-content>\n <ng-content select=\"[prefix]\"></ng-content>\n <ng-content select=\"[textPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"input\"></ng-content>\n <ng-content select=\"textarea\"></ng-content>\n\n <div class=\"suffix\">\n <ng-content select=\"[textSuffix]\"></ng-content>\n <ng-content select=\"[suffix]\"></ng-content>\n <ng-content select=\"[boxSuffix]\"></ng-content>\n </div>\n </div>\n\n <div class=\"helpers\">\n <div class=\"error-wrap\">\n <ng-content select=\"[error]\"></ng-content>\n </div>\n\n <div class=\"hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFormField {\n #selfRef = inject(ElementRef);\n\n @HostListener('click')\n onClick() {\n if (this.#selfRef.nativeElement.querySelector('input')) {\n this.#selfRef.nativeElement.querySelector('input').focus();\n }\n\n if (this.#selfRef.nativeElement.querySelector('textarea')) {\n this.#selfRef.nativeElement.querySelector('textarea').focus();\n }\n }\n\n constructor() {\n afterNextRender(() => {\n const supportFieldSizing = typeof CSS !== 'undefined' && CSS.supports('field-sizing', 'content');\n const text = this.#selfRef.nativeElement.querySelector('textarea');\n\n if (!supportFieldSizing && text !== null) {\n function resize() {\n text.style.height = 'auto';\n text.style.height = text.scrollHeight + 'px';\n }\n\n /* 0-timeout to get the already changed text */\n function delayedResize() {\n setTimeout(resize, 0);\n }\n\n text.addEventListener('change', resize);\n text.addEventListener('cut', delayedResize);\n text.addEventListener('paste', delayedResize);\n text.addEventListener('drop', delayedResize);\n text.addEventListener('keydown', delayedResize);\n\n text.focus();\n text.select();\n resize();\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipFormField } from '../ship-form-field/ship-form-field';\nimport { ShipIcon } from '../ship-icon/ship-icon';\n\n@Component({\n selector: 'sh-file-upload',\n imports: [ShipFormField, ShipIcon],\n template: `\n <sh-form-field [class]=\"fileUploadClasses()\">\n <ng-content select=\"label\" ngProjectAs=\"label\"></ng-content>\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap>\n @if (files().length === 1) {\n <div class=\"files-text\">{{ files()[0].name }}</div>\n } @else if (files().length > 1) {\n <div class=\"files-text\">{{ files().length }} files selected</div>\n } @else {\n <div class=\"placeholder\">{{ filesOver() ? overlayText() : placeholder() }}</div>\n }\n <input type=\"file\" [attr.multiple]=\"multiple()\" [attr.accept]=\"accept()\" #input />\n <div class=\"bg-overlay\" [class.files-over]=\"filesOver()\"></div>\n </div>\n\n <sh-icon suffix>upload-simple</sh-icon>\n </sh-form-field>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFileUpload {\n _el = inject(ElementRef);\n inputRef = viewChild.required<ElementRef<HTMLInputElement>>('input');\n filesOver = signal(false);\n multiple = input<boolean | null>();\n accept = input<string | null>(null);\n placeholder = model<string>('Click or drag files here');\n overlayText = input<string>('Drop files here');\n files = model<File[]>([]);\n\n fileUploadClasses = computed(() => this._el.nativeElement.classList.toString());\n\n handleFileUpload(newFiles: File[]) {\n if (this.multiple()) {\n this.files.update((currentFiles) => [...currentFiles, ...newFiles]);\n } else {\n this.files.set(newFiles);\n }\n }\n\n inputEffect = effect(() => {\n const input = this.inputRef().nativeElement;\n\n if (!input) return;\n\n if (input.placeholder) {\n this.placeholder.set(input.placeholder);\n }\n\n input.addEventListener('dragover', (e) => {\n e.preventDefault();\n this.filesOver.set(true);\n });\n\n input.addEventListener('dragleave', (e) => {\n e.preventDefault();\n this.filesOver.set(false);\n });\n\n input.addEventListener('drop', (e) => {\n e.preventDefault();\n this.filesOver.set(false);\n\n const files = e.dataTransfer?.files;\n\n if (files && files.length > 0) {\n this.handleFileUpload(Array.from(files));\n\n (input as HTMLInputElement).files = files;\n }\n });\n\n input.addEventListener('change', (e: any) => {\n e.preventDefault();\n this.handleFileUpload(Array.from(e.target.files));\n });\n });\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-list',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipList {}\n","import { isPlatformServer } from '@angular/common';\nimport {\n DestroyRef,\n effect,\n EffectRef,\n ElementRef,\n inject,\n Injector,\n PLATFORM_ID,\n Signal,\n signal,\n} from '@angular/core';\nimport { SIGNAL } from '@angular/core/primitives/signals';\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' && !!parentEl[SIGNAL] ? 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 ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n Renderer2,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipFormField } from '../ship-form-field/ship-form-field';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipPopover } from '../ship-popover/ship-popover';\nimport { createFormInputSignal } from '../utilities/create-form-input-signal';\nimport { observeChildren } from '../utilities/observe-elements';\n\n@Component({\n selector: 'sh-menu',\n imports: [ShipPopover, ShipFormField, ShipIcon],\n template: `\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close('fromPopover')\"\n [asMultiLayer]=\"asMultiLayer()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <div trigger [class.is-open]=\"isOpen()\" (click)=\"toggleIsOpen($event)\">\n <ng-content />\n\n @if (openIndicator()) {\n <sh-icon class=\"open-indicator\">caret-down</sh-icon>\n }\n </div>\n\n <div class=\"form-field-wrap\">\n <sh-form-field class=\"small stretch\" [class.hidden]=\"searchable() === false\">\n <input type=\"text\" #inputRef placeholder=\"Search\" />\n </sh-form-field>\n </div>\n\n <div\n class=\"options\"\n #optionsRef\n (click)=\"close('active')\"\n [class.searching]=\"searchable() && inputValue() !== ''\">\n <ng-content select=\"[menu]\" />\n </div>\n </sh-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'disabled()',\n '[class.has-search]': 'searchable()',\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipMenu {\n #document = inject(DOCUMENT);\n #renderer = inject(Renderer2);\n asMultiLayer = input<boolean>(false);\n openIndicator = input(false);\n disabled = input<boolean>(false);\n customOptionElementSelectors = input<string[]>(['button']);\n keepClickedOptionActive = input<boolean>(false);\n closeOnClick = input<boolean>(true);\n isOpen = model<boolean>(false);\n closed = output<boolean>();\n\n searchable = input<boolean>(false);\n activeOptionIndex = signal<number>(-1);\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n optionsRef = viewChild<ElementRef<HTMLDivElement>>('optionsRef');\n\n options = observeChildren<HTMLButtonElement>(this.optionsRef, this.customOptionElementSelectors);\n optionsEl = computed(() => this.options.signal().filter((x) => !x.disabled));\n inputValue = createFormInputSignal(this.inputRef);\n\n abortController: AbortController | null = null;\n optionsEffect = effect(() => {\n if (this.abortController !== null) {\n this.abortController.abort();\n this.abortController = null;\n }\n\n if (!this.isOpen()) return;\n\n this.abortController = new AbortController();\n\n const searchable = this.searchable();\n\n if (!searchable) {\n this.#document.documentElement.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n }\n\n const inputEl = this.inputRef()?.nativeElement;\n\n if (!inputEl) return;\n\n queueMicrotask(() => inputEl.focus());\n\n inputEl.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n\n if (!this.closeOnClick()) {\n const optionRef = this.optionsRef()?.nativeElement;\n\n optionRef?.addEventListener('click', (e: MouseEvent) => {\n const optionEl = e.target as HTMLButtonElement;\n\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n const clickedOptionIndex = optionElements.findIndex((x) => x === optionEl);\n\n if (clickedOptionIndex > -1) {\n this.activeOptionIndex.set(clickedOptionIndex);\n inputEl.focus();\n }\n });\n }\n });\n\n keyDownEventListener = (e: KeyboardEvent) => {\n const activeOptionIndex = this.activeOptionIndex();\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (activeOptionIndex > -1) {\n this.activeElements()[activeOptionIndex as number].click();\n\n queueMicrotask(() => this.close('active'));\n }\n } else if (e.key === 'Tab') {\n e.preventDefault();\n this.close('closed');\n }\n };\n\n _lastElementList: HTMLButtonElement[] = [];\n activeElements = signal<HTMLButtonElement[]>([]);\n lastInputValue = '';\n inputValueEffect = effect(() => {\n const searchable = this.searchable();\n\n if (!searchable) return;\n\n const inputValue = (this.inputValue() ?? '').toLowerCase();\n\n this.#resetActiveOption();\n\n if (!inputValue || inputValue === '') {\n const allOptions = this.optionsEl();\n\n this.activeElements.set(allOptions);\n this._lastElementList = allOptions;\n\n for (let i = 0; i < allOptions.length; i++) {\n this.#renderer.removeStyle(allOptions[i], 'order');\n }\n\n return;\n }\n\n if (!inputValue || inputValue === '') return;\n\n let optionElements =\n this._lastElementList.length && inputValue.length > this.lastInputValue.length\n ? this._lastElementList\n : this.optionsEl();\n\n this.lastInputValue = inputValue;\n\n for (let i = 0; i < optionElements.length; i++) {\n const el = optionElements[i];\n const textContent = el.textContent?.toLowerCase() || '';\n const score = this.#calculateMatchScore(textContent, inputValue);\n\n (el.value as any) = score;\n }\n\n optionElements = optionElements\n .filter((x) => (x.value as any) > 0)\n .sort((a, b) => (b.value as any) - (a.value as any));\n\n for (let i = 0; i < optionElements.length; i++) {\n this.#renderer.setStyle(optionElements[i], 'order', i);\n }\n\n this.activeElements.set(optionElements);\n this._lastElementList = optionElements;\n });\n\n toggleIsOpen(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) return;\n\n this.isOpen.set(!this.isOpen());\n\n if (this.searchable() && this.isOpen()) {\n setTimeout(() => this.inputRef()?.nativeElement.focus());\n }\n }\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n activeOptionIndexEffect = effect(() => {\n const optionElements = this.activeElements();\n const activeOptionIndex = this.activeOptionIndex();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n }\n\n if (activeOptionIndex > -1) {\n optionElements[activeOptionIndex].scrollIntoView({ block: 'center' });\n optionElements[activeOptionIndex].classList.add('active');\n }\n });\n\n nextActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === -1) {\n return 0;\n }\n\n if (activeIndex === optionElements.length - 1) {\n return 0;\n }\n\n const nextIndex = activeIndex + 1;\n\n if (optionElements[nextIndex].disabled) {\n return this.nextActiveIndex(nextIndex);\n }\n\n return nextIndex;\n }\n\n prevActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === 0) {\n return optionElements.length - 1;\n }\n\n if (activeIndex === -1) {\n return optionElements.length - 1;\n }\n\n const prevIndex = activeIndex - 1;\n\n if (optionElements[prevIndex].disabled) {\n return this.prevActiveIndex(prevIndex);\n }\n\n return prevIndex;\n }\n\n close(action: 'fromPopover' | 'closed' | 'active' = 'closed', event?: MouseEvent) {\n this.inputValue.set('');\n\n if (this.closeOnClick()) {\n (!this.keepClickedOptionActive() || action === 'closed') && this.#resetActiveOption();\n\n this.isOpen.set(false);\n this.closed.emit(action === 'active');\n }\n }\n\n #resetActiveOption() {\n this.activeOptionIndex.set(-1);\n\n const optionElements = this.optionsEl();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n }\n }\n\n ngOnDestroy() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type ShipProgressBarMode = 'determinate' | 'indeterminate';\n\n@Component({\n selector: 'sh-progress-bar',\n imports: [],\n template: `\n <div class=\"progress-bar\" [style.width.%]=\"value()\"></div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipProgressBar {\n value = input<number | undefined>(undefined);\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\n\n@Component({\n selector: 'sh-radio',\n imports: [],\n template: `\n <div class=\"radio sh-sheet\" [class]=\"currentClassList()\"></div>\n\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipRadio {\n currentClassList = classMutationSignal();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'sh-range-slider',\n imports: [],\n template: `\n <div class=\"label\">\n <ng-content select=\"label\"></ng-content>\n </div>\n\n <div class=\"input-wrap\">\n <div class=\"min-indicator\">{{ inputState().min }}{{ unit() }}</div>\n\n <div class=\"track-wrap\" (click)=\"trackEvent($event)\">\n <ng-content select=\"input[type=range]\"></ng-content>\n\n <div class=\"track\">\n <div class=\"track-filled\" [style.width.%]=\"trackFilledPercentage()\"></div>\n </div>\n\n <div class=\"thumb-wrap\" [style.left.%]=\"thumbPositionPercentage()\">\n <div class=\"thumb\">\n <div class=\"value-indicator\">{{ value() }}{{ unit() }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"max-indicator\">{{ inputState().max }}{{ unit() }}</div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipRangeSlider {\n #selfRef = inject(ElementRef<HTMLElement>);\n #observer: MutationObserver | null = null;\n #inputElement: HTMLInputElement | null = null;\n #initialDefaultValue = 0;\n\n unit = input<string>('');\n value = model<number>(this.#initialDefaultValue);\n\n inputState = signal({\n min: 0,\n max: 100,\n step: 1,\n });\n\n valuePercentage = computed(() => {\n const { min, max } = this.inputState();\n const currentValue = this.value() ?? min;\n if (isNaN(currentValue)) return 0;\n\n const range = max - min;\n if (range === 0) return 0;\n\n const percentage = ((currentValue - min) / range) * 100;\n return Math.max(0, Math.min(100, percentage));\n });\n\n trackFilledPercentage = computed(() => this.valuePercentage());\n thumbPositionPercentage = computed(() => this.valuePercentage());\n\n syncModelToInputEffect = effect(() => {\n const modelValue = this.value();\n if (this.#inputElement) {\n const currentInputValue = parseFloat(this.#inputElement.value);\n if (isNaN(currentInputValue) || String(currentInputValue) !== String(modelValue)) {\n this.#inputElement.value = String(modelValue);\n }\n }\n });\n\n @HostBinding('class.has-input')\n get hasInputElement(): boolean {\n return !!this.#inputElement;\n }\n\n ngAfterViewInit() {\n this.#inputElement = this.#selfRef.nativeElement.querySelector('input[type=\"range\"]');\n\n if (this.#inputElement) {\n this.#createCustomInputEventListener(this.#inputElement);\n\n this.#inputElement.oninput = () => {\n this.setNewInputValue(this.#inputElement!.value);\n };\n\n this.#inputElement.addEventListener('inputValueChanged', (event: any) => {\n this.setNewInputValue(event.detail.value);\n });\n\n queueMicrotask(() => this.#updateStateFromInput(true));\n\n this.#setupMutationObserver();\n } else {\n console.error('ShipRangeSlider: No <input type=\"range\"> element found projected inside.');\n }\n }\n\n setNewInputValue(value: string) {\n const inputValue = parseFloat(value ?? '0');\n\n if (!isNaN(inputValue)) {\n const { min, max } = this.inputState();\n this.value.set(Math.max(min, Math.min(max, inputValue)));\n }\n }\n\n trackEvent(e: MouseEvent) {\n if (!this.#inputElement || this.#inputElement.readOnly || this.#inputElement.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n if (\n e.target === this.#inputElement ||\n (e.target as HTMLElement)?.closest('.thumb, .min-indicator, .max-indicator')\n ) {\n return;\n }\n\n const trackWrap = e.currentTarget as HTMLElement;\n const rect = trackWrap.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const width = rect.width;\n const { min, max, step } = this.inputState();\n const range = max - min;\n\n if (width > 0 && range !== 0 && step > 0) {\n let proportionalValue = (clickX / width) * range + min;\n const numSteps = (proportionalValue - min) / step;\n let nearestStepValue = min + Math.round(numSteps) * step;\n\n const decimals = this.#countDecimals(step);\n nearestStepValue = parseFloat(nearestStepValue.toFixed(decimals));\n\n const clampedValue = Math.max(min, Math.min(max, nearestStepValue));\n\n this.value.set(clampedValue);\n }\n }\n\n #updateStateFromInput(isInitialCall = false) {\n if (!this.#inputElement) return;\n\n const min = parseFloat(this.#inputElement.min ?? '0') ?? 0;\n const max = parseFloat(this.#inputElement.max ?? '100') ?? 100;\n const stepAttr = this.#inputElement.step;\n let step = 1;\n if (stepAttr && stepAttr.toLowerCase() !== 'any') {\n const parsedStep = parseFloat(stepAttr);\n if (!isNaN(parsedStep) && parsedStep > 0) {\n step = parsedStep;\n }\n }\n\n this.inputState.set({ min, max, step });\n\n const inputElementValue = parseFloat(this.#inputElement.value ?? String(min)) ?? min;\n\n if (isInitialCall && this.value() !== this.#initialDefaultValue) {\n const modelValue = this.value();\n const clampedModelValue = Math.max(min, Math.min(max, modelValue));\n\n if (inputElementValue !== clampedModelValue) {\n this.#inputElement.value = String(clampedModelValue);\n }\n if (modelValue !== clampedModelValue) {\n this.value.set(clampedModelValue);\n }\n } else {\n const clampedInputElementValue = Math.max(min, Math.min(max, inputElementValue));\n if (this.value() !== clampedInputElementValue) {\n this.value.set(clampedInputElementValue);\n }\n }\n }\n\n #setupMutationObserver() {\n if (!this.#inputElement || typeof MutationObserver === 'undefined') {\n return;\n }\n\n const MUTATION_ATTRIBUTES = ['min', 'max', 'step', 'value', 'readonly', 'disabled'];\n\n this.#observer = new MutationObserver((mutationList) => {\n let needsStateUpdate = false;\n for (const mutation of mutationList) {\n if (mutation.type === 'attributes' && MUTATION_ATTRIBUTES.includes(mutation.attributeName ?? '')) {\n needsStateUpdate = true;\n break;\n }\n }\n if (needsStateUpdate) {\n this.#updateStateFromInput(false);\n }\n });\n\n this.#observer.observe(this.#inputElement, { attributes: true, attributeFilter: MUTATION_ATTRIBUTES });\n }\n\n #countDecimals(value: number): number {\n if (isNaN(value) || Math.floor(value) === value) return 0;\n const str = value.toString();\n const decimalPart = str.split('.')[1];\n return decimalPart ? decimalPart.length : 0;\n }\n\n #createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n }\n\n ngOnDestroy() {\n if (this.#observer) {\n this.#observer.disconnect();\n }\n if (this.#inputElement) {\n this.#inputElement.oninput = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-spinner',\n imports: [],\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipSpinner {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { ShipCheckbox } from '../ship-checkbox/ship-checkbox';\nimport { ShipChip } from '../ship-chip/ship-chip';\nimport { ShipDivider } from '../ship-divider/ship-divider';\nimport { ShipFormField } from '../ship-form-field/ship-form-field';\nimport { ShipIcon } from '../ship-icon/ship-icon';\nimport { ShipPopover } from '../ship-popover/ship-popover';\nimport { ShipSpinner } from '../ship-spinner/ship-spinner.component';\nimport { generateUniqueId } from '../utilities/random-id';\n\n// TODO build in live validation response for free text validation\n\ntype ValidateFreeText = (value: string) => boolean;\n\n@Component({\n selector: 'sh-select',\n imports: [NgTemplateOutlet, ShipPopover, ShipFormField, ShipIcon, ShipCheckbox, ShipSpinner, ShipChip, ShipDivider],\n template: `\n @let _placeholderTemplate = placeholderTemplate();\n @let _optionTemplate = optionTemplate();\n @let _freeTextOptionTemplate = freeTextOptionTemplate();\n @let _selectedOptionTemplate = selectedOptionTemplate();\n @let _inlineTemplate = inlineTemplate();\n @let _selectedOptions = selectedOptions();\n @let _inputState = inputState();\n\n @let _selOptionTemplate = _selectedOptionTemplate || _optionTemplate || _inlineTemplate;\n @let _listOptionTemplate = _optionTemplate || _inlineTemplate;\n @let _asChips = !asText() && selectMultiple();\n @let _showSearchText = isOpen() && hasSearch() && (_asChips || inputValue().length > -1);\n\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: false,\n }\">\n <sh-form-field\n trigger\n (click)=\"open()\"\n [class.stretch]=\"stretch()\"\n [class.small]=\"small()\"\n [class.readonly]=\"readonly() || disabled()\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[boxPrefix]\" ngProjectAs=\"[boxPrefix]\" />\n\n <div class=\"input\" [class.show-search-text]=\"_showSearchText\" ngProjectAs=\"input\">\n <div class=\"selected-value\" [class.is-selected]=\"_inputState === 'selected'\">\n @if (asFreeText() && inputValue().length > 0 && !isOpen()) {\n {{ inputValue() }}\n } @else if (_selectedOptions.length > 0) {\n @for (selectedOption of _selectedOptions; track $index) {\n @if (selectedOption) {\n @if (_asChips) {\n <sh-chip\n [class]=\"selectClasses()\"\n class=\"small\"\n (click)=\"removeSelectedOptionByIndex($event, $index)\">\n @if (_selOptionTemplate) {\n <ng-container\n *ngTemplateOutlet=\"_selOptionTemplate; context: { $implicit: selectedOption, last: $last }\" />\n } @else {\n {{ getLabel(selectedOption) }}\n }\n\n <sh-icon>x-bold</sh-icon>\n </sh-chip>\n } @else {\n @if (!_showSearchText) {\n @if (_selOptionTemplate) {\n <ng-container\n *ngTemplateOutlet=\"_selOptionTemplate; context: { $implicit: selectedOption, last: $last }\" />\n } @else {\n {{ $last ? getLabel(selectedOption) : getLabel(selectedOption) + ',' }}\n }\n }\n }\n }\n }\n } @else if (!_showSearchText) {\n @if (_placeholderTemplate) {\n <ng-container *ngTemplateOutlet=\"_placeholderTemplate\" />\n } @else {\n {{ placeholderText() ?? '' }}\n }\n }\n\n <ng-content select=\"input\" />\n <ng-content select=\"textarea\" />\n </div>\n </div>\n\n @if (_inputState === 'closed') {\n <sh-icon suffix>caret-down</sh-icon>\n } @else if (_inputState === 'loading') {\n <sh-spinner class=\"primary\" suffix></sh-spinner>\n } @else if (_inputState === 'open-searching') {\n <sh-icon suffix>list-magnifying-glass</sh-icon>\n } @else if (_inputState === 'searching') {\n <sh-icon suffix>magnifying-glass</sh-icon>\n } @else if (_inputState === 'selected' && _isClearable()) {\n <sh-icon suffix (click)=\"clear($event)\">x-bold</sh-icon>\n } @else if (_inputState === 'selected' && !_isClearable()) {\n <sh-icon suffix>caret-down</sh-icon>\n } @else {\n <sh-icon suffix>caret-up</sh-icon>\n }\n </sh-form-field>\n\n <div class=\"ship-options\" #optionsWrap id=\"optionsWrapId\" role=\"listbox\">\n @if (asFreeText()) {\n @let freeTextOption = computedFreeTextOption();\n @let freeTextOptionValue = getValue(freeTextOption);\n\n @if ($any(freeTextOptionValue).length > 0) {\n @if (freeTextTitle()) {\n <p title>{{ freeTextTitle() }}</p>\n }\n\n <li\n (click)=\"toggleOptionByIndex(-1)\"\n class=\"option\"\n [id]=\"this.getLabelAsSlug(freeTextOption)\"\n [attr.aria-selected]=\"isSelected(-1)\"\n [class.selected]=\"isSelected(-1)\"\n [class.focused]=\"-1 === focusedOptionIndex()\">\n @if (_freeTextOptionTemplate) {\n <ng-container *ngTemplateOutlet=\"_freeTextOptionTemplate; context: { $implicit: freeTextOption }\" />\n } @else if (_listOptionTemplate) {\n <ng-container *ngTemplateOutlet=\"_listOptionTemplate; context: { $implicit: freeTextOption }\" />\n } @else {\n {{ freeTextOptionValue }}\n }\n </li>\n\n @if (freeTextTitle() && filteredOptions().length > 0) {\n <sh-divider />\n }\n }\n }\n\n @if (optionTitle() && filteredOptions().length > 0) {\n <p title>{{ optionTitle() }}</p>\n }\n\n @for (option of filteredOptions(); track $index) {\n <li\n (click)=\"toggleOptionByIndex($index)\"\n class=\"option\"\n [id]=\"this.getLabelAsSlug(option)\"\n [attr.aria-selected]=\"isSelected($index)\"\n [class.selected]=\"isSelected($index)\"\n [class.focused]=\"$index === focusedOptionIndex()\">\n @if (selectMultiple()) {\n <sh-checkbox [class]=\"selectClasses()\" [class.active]=\"isSelected($index)\" />\n }\n\n @if (_listOptionTemplate) {\n <ng-container *ngTemplateOutlet=\"_listOptionTemplate; context: { $implicit: option }\" />\n } @else {\n {{ getLabel(option) }}\n }\n </li>\n }\n </div>\n </sh-popover>\n `,\n host: {\n '[class.multiple]': 'selectMultiple()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipSelect {\n #selfRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\n value = input<string>();\n label = input<string>();\n asFreeText = input(false);\n optionTitle = input<string | null>(null);\n freeTextTitle = input<string | null>(null);\n freeTextPlaceholder = input<string | null>('Type to create a new option');\n validateFreeText = input<ValidateFreeText>();\n placeholder = input<string>();\n readonly = model(false);\n disabled = model(false);\n lazySearch = input(false);\n inlineSearch = input(false);\n asText = input(false);\n isClearable = input(true);\n selectMultiple = input(false);\n optionTemplate = input<TemplateRef<unknown> | null>(null);\n selectedOptionTemplate = input<TemplateRef<unknown> | null>(null);\n placeholderTemplate = input<TemplateRef<unknown> | null>(null);\n freeTextOptionTemplate = input<TemplateRef<unknown> | null>(null);\n isOpen = model(false);\n isLoading = model(false);\n options = model<unknown[]>([]);\n selectedOptions = model<unknown[]>([]);\n cleared = output<void>();\n onAddNewFreeTextOption = output<string>();\n\n computedFreeTextOption = computed(() => {\n const inputValue = this.inputValue();\n const valueKey = this.value();\n const newOption: Record<string, any> | string = valueKey ? {} : inputValue;\n\n if (valueKey && typeof newOption === 'object') {\n newOption[valueKey] = inputValue;\n }\n\n return newOption;\n });\n\n #previousSelectedOptions = signal<unknown[] | null>(null);\n inlineTemplate = contentChild<TemplateRef<unknown>>(TemplateRef);\n optionsWrapRef = viewChild.required<ElementRef<HTMLDivElement>>('optionsWrap');\n inputRefInput = signal<ElementRef<HTMLInputElement> | null>(null);\n #inputObserver =\n typeof MutationObserver !== 'undefined' &&\n new MutationObserver((mutations) => {\n for (var mutation of mutations) {\n if (mutation && (mutation.target.nodeName === 'INPUT' || mutation.target.nodeName === 'TEXTAREA')) {\n this.inputRefInput.set(new ElementRef(mutation.target as HTMLInputElement));\n\n (this.#inputObserver as MutationObserver).disconnect();\n }\n }\n });\n\n inputValue = signal<string>('');\n\n prevInputValue = signal<string | null>(null);\n focusedOptionIndex = signal<number>(-1);\n\n _isClearable = computed(() => this.selectMultiple() || this.isClearable());\n selectClasses = computed(() => this.#selfRef.nativeElement.classList.toString());\n stretch = computed(() => this.selectClasses().includes('stretch'));\n small = computed(() => this.selectClasses().includes('small'));\n placeholderText = computed(() => {\n const placeholder = this.placeholder();\n const inputRefEl = this.inputRefEl();\n\n return placeholder || inputRefEl?.placeholder || null;\n });\n\n selectedOptionValues = computed(() => {\n const selectedOptions = this.selectedOptions();\n const valueKey = this.value();\n\n return valueKey\n ? selectedOptions.map((selectedOption) => this.#getProperty(selectedOption, valueKey))\n : selectedOptions;\n });\n\n filteredOptions = computed<unknown[]>(() => {\n const opts = this.options() || [];\n const label = this.label();\n const valueKey = this.value();\n const inlineSearch = this.inlineSearch();\n const inputValue = this.inputValue().toLowerCase();\n const inputValueRegex = this.#createWildcardRegex(inputValue);\n\n if (opts.length <= 0) return [];\n if (!inlineSearch || inputValue === '') {\n return opts;\n }\n\n const filtered = opts.filter((item) => {\n const optionLabel = label\n ? (this.#getProperty(item, label) ?? '').toString().toLowerCase()\n : (item ?? '').toString().toLowerCase();\n\n const optionValue = ((valueKey ? this.#getProperty(item, valueKey) : item) ?? '').toString().toLowerCase();\n\n const testLabel = inputValueRegex.test(optionLabel);\n const testValue = inputValueRegex.test(optionValue);\n\n return testLabel || testValue;\n });\n\n const scoredOptions = filtered.map((item) => {\n const optionLabel = label\n ? (this.#getProperty(item, label) ?? '').toString().toLowerCase()\n : (item ?? '').toString().toLowerCase();\n\n const optionValue = ((valueKey ? this.#getProperty(item, valueKey) : item) ?? '').toString().toLowerCase();\n\n const labelScore = this.#calculateMatchScore(optionLabel, inputValue);\n const valueScore = this.#calculateMatchScore(optionValue, inputValue);\n\n return {\n item,\n score: Math.max(labelScore, valueScore),\n };\n });\n\n scoredOptions.sort((a, b) => b.score - a.score);\n\n return scoredOptions.map((scoredOption) => scoredOption.item);\n });\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n #componentId = generateUniqueId();\n inputRefEl = computed(() => {\n const inputRefInput = this.inputRefInput();\n\n if (inputRefInput === null) return;\n\n const input = inputRefInput ? inputRefInput.nativeElement : null;\n\n if (!input) {\n console.warn(\n '<sh-select> input element not found are you missing to pass an <input> or <textarea> element to select component?'\n );\n return null;\n }\n\n input.autocomplete = 'off';\n input.setAttribute('role', 'combobox');\n input.setAttribute('id', `combobox-${this.#componentId}`);\n input.setAttribute('aria-haspopup', 'listbox');\n input.setAttribute('aria-owns', 'optionsWrapId');\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('focus', () => {\n if (this.readonly()) return;\n\n this.open();\n });\n\n input.addEventListener('input', (e: any) => {\n const newInputValue = e.target.value;\n const inputValue = this.inputValue();\n\n if (newInputValue === inputValue) return;\n\n this.focusedOptionIndex.set(this.asFreeText() ? -1 : 0);\n this.inputValue.set(newInputValue);\n this.updateInputElValue();\n });\n\n input.addEventListener('inputValueChanged', (event: any) => {\n const newInputValue = event.detail.value;\n const inputValue = this.inputValue();\n\n if (newInputValue === inputValue) return;\n if (newInputValue === '') {\n this.clear();\n return;\n }\n\n this.setSelectedOptionsFromValue(newInputValue);\n this.setInputValueFromOptions(this.selectedOptions());\n this.#setFirstSelectedOptionAsFocused();\n });\n\n return input;\n });\n\n focusEffect = effect(() => {\n const input = this.inputRefEl();\n\n if (!input) return;\n\n const focusedId = this.getLabelAsSlug(this.filteredOptions()[this.focusedOptionIndex()]);\n\n if (focusedId) {\n input.setAttribute('aria-activedescendant', focusedId);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n });\n\n openAbortController: AbortController | null = null;\n\n isOpenEffect = effect(() => {\n const isOpen = this.isOpen();\n\n if (isOpen) {\n if (!this.openAbortController) {\n this.openAbortController = new AbortController();\n }\n\n const input = this.inputRefEl();\n const asFreeText = this.asFreeText();\n const baseIndex = asFreeText ? -1 : 0;\n\n if (!input) return;\n\n input.setAttribute('aria-expanded', this.isOpen().toString());\n\n (input as HTMLInputElement).addEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' || e.key === 'Tab') {\n e.preventDefault();\n\n this.close();\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n\n this.toggleOptionByIndex(this.focusedOptionIndex(), undefined, true);\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n\n const newIndex = (this.focusedOptionIndex() as number) + 1;\n\n this.focusedOptionIndex.set(newIndex > this.filteredOptions().length - 1 ? baseIndex : newIndex);\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n\n const newIndex = (this.focusedOptionIndex() as number) - 1;\n\n this.focusedOptionIndex.set(newIndex < baseIndex ? this.filteredOptions().length - 1 : newIndex);\n }\n },\n {\n signal: this.openAbortController?.signal,\n }\n );\n } else {\n const input = this.inputRefEl();\n\n if (!input) return;\n\n input.setAttribute('aria-expanded', this.isOpen().toString());\n\n if (this.openAbortController) {\n this.openAbortController.abort();\n this.openAbortController = null;\n }\n }\n });\n\n _inputValue = '';\n inputValueEffect = effect(() => {\n const inputValue = this.inputValue();\n this._inputValue = inputValue;\n });\n\n inputRefElEffect = effect(() => {\n const input = this.inputRefEl();\n\n if (!input) return;\n if (input.value === this._inputValue) return;\n\n this.disabled.set(input.disabled);\n\n this.setSelectedOptionsFromValue(input.value);\n this.setInputValueFromOptions(this.selectedOptions());\n });\n\n selectedLabels = computed(() => {\n const selected = this.selectedOptions();\n const label = this.label();\n\n if (!label) {\n return selected.join(', ');\n }\n\n return selected.map((selected) => this.getLabel(selected)).join(', ');\n });\n\n inputState = computed(() => {\n if ((this.selectedOptions().length > 0 || (this.asFreeText() && this.inputValue().length > 0)) && !this.isOpen()) {\n return 'selected';\n }\n\n if (this.isLoading()) {\n return 'loading';\n }\n\n if (this.isOpen() && (this.lazySearch() || this.inlineSearch())) {\n return 'open-searching';\n }\n\n if (this.isOpen()) {\n return 'open';\n }\n\n if (this.inlineSearch() || this.lazySearch()) {\n return 'searching';\n }\n\n return 'closed';\n });\n\n hasSearch = computed(() => this.inlineSearch() || this.lazySearch());\n\n #selectedOptionsEffect = effect(() => {\n if (this.selectMultiple() && this.hasSearch()) {\n return;\n }\n\n const selectedOptions = this.selectedOptions();\n const valueKey = this.value();\n\n const inputValue = selectedOptions\n .map((option) => {\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n return optionValue;\n })\n .join(',');\n\n this.inputValue.set(inputValue);\n });\n\n ngOnInit() {\n this.setInitInput();\n }\n\n setInitInput() {\n const input = this.#selfRef.nativeElement.querySelector('input');\n\n if (input) {\n this.inputRefInput.set(new ElementRef(input));\n return;\n }\n\n const textarea = this.#selfRef.nativeElement.querySelector('textarea');\n\n if (textarea) {\n this.inputRefInput.set(new ElementRef(textarea as any as HTMLInputElement));\n return;\n }\n\n if (typeof MutationObserver !== 'undefined') {\n (this.#inputObserver as MutationObserver).observe(this.#selfRef.nativeElement, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n }\n\n setSelectedOptionsFromValue(value: string) {\n const options = this.options() || [];\n const valueKey = this.value();\n const selectMultiple = this.selectMultiple();\n\n const inputValueAsString = value.toString().split(',');\n\n if (inputValueAsString.length === 0) {\n this.selectedOptions.set([]);\n return;\n }\n const inputAsArray = selectMultiple ? inputValueAsString : [inputValueAsString[0]];\n\n const selectedOptions = options.filter((option) => {\n const optionValue = valueKey ? this.#getProperty(option, valueKey)?.toString() : option?.toString();\n\n return optionValue && inputAsArray.includes(optionValue);\n });\n\n this.selectedOptions.set(selectMultiple ? selectedOptions : [selectedOptions[0]]);\n }\n\n setInputValueFromOptions(options: unknown[]) {\n const valueKey = this.value();\n\n if (options.length === 0) {\n this.inputValue.set('');\n this.updateInputElValue();\n\n return;\n }\n\n const newInputValue = options\n .map((option) => {\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n return optionValue;\n })\n .join(',');\n\n if (newInputValue === this.inputValue()) return;\n\n this.inputValue.set(newInputValue);\n this.updateInputElValue();\n }\n\n getValue(option: unknown) {\n const valueKey = this.value();\n\n if (!valueKey) return option;\n\n return this.#getProperty(option, valueKey);\n }\n\n getLabel(option: unknown) {\n const label = this.label();\n\n if (!label) return option;\n\n return this.#getProperty(option, label);\n }\n\n getLabelAsSlug(option: unknown) {\n const label = this.getLabel(option);\n\n if (!label || typeof label !== 'string') return '';\n\n return label.replaceAll(' ', '-');\n }\n\n toggleOptionByIndex(optionIndex: number, event?: MouseEvent, enterKey = false) {\n let option = this.filteredOptions()[optionIndex];\n\n if (this.asFreeText() && optionIndex === -1) {\n const newOption = this.computedFreeTextOption();\n const newOptionValue = this.getValue(newOption);\n const validateFreeTextFunc = this.validateFreeText() ?? ((val: string) => true);\n\n const isValid = validateFreeTextFunc(newOptionValue as string);\n\n if (!isValid) return;\n\n this.options.update((options) => {\n const index = options.findIndex((option) => this.getValue(option) === newOptionValue);\n\n if (index > -1) return options;\n\n this.onAddNewFreeTextOption.emit(newOptionValue as string);\n\n return [newOption, ...options];\n });\n\n optionIndex = 0;\n option = newOption;\n } else if (!option) {\n this.close();\n return;\n }\n\n if (event) {\n event.stopPropagation();\n }\n\n const selectMultiple = this.selectMultiple();\n const isClearable = this._isClearable();\n const valueKey = this.value();\n const selectedOptionValues = this.selectedOptionValues();\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n\n this.prevInputValue.set(null);\n this.#previousSelectedOptions.set(null);\n this.selectedOptions.update((selectedOptions) => {\n const index = selectedOptionValues.indexOf(optionValue);\n\n if (index > -1) {\n // Remove it\n const nextSelectedOptions = [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)];\n\n return isClearable\n ? nextSelectedOptions\n : nextSelectedOptions.length > 0\n ? nextSelectedOptions\n : selectedOptions;\n } else {\n // Add it\n this.focusedOptionIndex.set(optionIndex);\n return selectMultiple ? [...selectedOptions, option] : [option];\n }\n });\n\n if (selectMultiple) {\n this.inputRefEl()?.focus();\n } else {\n this.isOpen.set(false);\n }\n\n this.setInputValueFromOptions(this.selectedOptions());\n\n if (selectMultiple && this.hasSearch()) {\n this.inputValue.set('');\n this.updateInputElValue();\n }\n }\n\n removeSelectedOptionByIndex($event: MouseEvent, optionRemoveIndex: number) {\n $event.stopPropagation();\n\n this.selectedOptions.update((selectedOptions) => {\n return [...selectedOptions.slice(0, optionRemoveIndex), ...selectedOptions.slice(optionRemoveIndex + 1)];\n });\n\n this.setInputValueFromOptions(this.selectedOptions());\n }\n\n isSelected(optionIndex: number): boolean {\n const valueKey = this.value();\n const option = this.filteredOptions()[optionIndex];\n const optionValue = valueKey ? this.#getProperty(option, valueKey) : option;\n\n return this.selectedOptionValues().indexOf(optionValue) > -1;\n }\n\n open() {\n if (this.isOpen()) return;\n\n this.isOpen.set(true);\n\n if (this.hasSearch()) {\n this.prevInputValue.set(this.inputValue() ?? '');\n this.inputValue.set('');\n this.updateInputElValue();\n } else {\n this.#previousSelectedOptions.set(this.selectedOptions());\n }\n\n if (!this.selectMultiple()) {\n this.#setFirstSelectedOptionAsFocused();\n }\n }\n\n #setFirstSelectedOptionAsFocused() {\n const firstSelectedValue = this.selectedOptionValues()[0];\n const valueKey = this.value();\n\n if (firstSelectedValue) {\n const findOptionIndex = this.filteredOptions().findIndex((x) =>\n valueKey ? this.#getProperty(x, valueKey) === firstSelectedValue : x === firstSelectedValue\n );\n\n this.focusedOptionIndex.set(findOptionIndex);\n } else {\n this.focusedOptionIndex.set(-1);\n }\n }\n\n close() {\n this.isOpen.set(false);\n\n const prevInputValue = this.prevInputValue();\n const prevSelectedOptions = this.#previousSelectedOptions();\n\n if (this.asFreeText()) {\n this.updateInputElValue();\n return;\n }\n\n if (this.hasSearch() && prevInputValue) {\n this.inputValue.set(prevInputValue);\n this.setInputValueFromOptions(this.selectedOptions());\n }\n\n if (!this.hasSearch() && prevSelectedOptions !== null) {\n this.setInputValueFromOptions(prevSelectedOptions);\n }\n\n if (this.selectMultiple()) {\n this.setInputValueFromOptions(this.selectedOptions());\n }\n }\n\n clear($event?: MouseEvent) {\n $event?.stopPropagation();\n\n this.inputValue.set('');\n this.selectedOptions.set([]);\n this.isOpen.set(false);\n this.prevInputValue.set(null);\n this.cleared.emit();\n\n this.updateInputElValue();\n }\n\n updateInputElValue() {\n const inputEl = this.inputRefEl();\n const inputValue = this.inputValue();\n\n if (!inputEl) return;\n\n inputEl.value = inputValue;\n inputEl.dispatchEvent(new Event('input'));\n }\n\n #getProperty(obj: unknown, path: string): unknown {\n return path.split('.').reduce((o: unknown, i: string) => (o as any)?.[i], obj);\n }\n\n #createCustomInputEventListener(input: HTMLInputElement | HTMLTextAreaElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n }\n\n #createWildcardRegex(inputValue: string | null | undefined): RegExp {\n const lowerCaseInput = (inputValue ?? '').toLowerCase();\n let regexPattern = '^';\n\n for (const char of lowerCaseInput) {\n regexPattern += '.*' + this.#escapeRegexChar(char);\n }\n\n regexPattern += '.*$';\n\n return new RegExp(regexPattern, 'i');\n }\n\n #escapeRegexChar(char: string): string {\n return char.replace(/[-\\/\\\\^$+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n ngOnDestroy() {\n if (this.openAbortController) {\n this.openAbortController.abort();\n this.openAbortController = null;\n }\n\n if (typeof MutationObserver !== 'undefined') {\n (this.#inputObserver as MutationObserver).disconnect();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n model,\n runInInjectionContext,\n signal,\n viewChild,\n WritableSignal,\n} from '@angular/core';\n\nexport type ShipSidenavType = 'overlay' | 'simple' | '';\nexport function watchHostClass(className: string): WritableSignal<boolean> {\n const elementRef = inject(ElementRef);\n const destroyRef = inject(DestroyRef);\n\n const hasClass = signal(false);\n const observer =\n typeof MutationObserver !== 'undefined' &&\n new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n hasClass.set(elementRef.nativeElement.classList.contains(className));\n }\n });\n });\n\n runInInjectionContext(elementRef.nativeElement, () => {\n if (observer) {\n observer.observe(elementRef.nativeElement, { attributes: true });\n }\n\n hasClass.set(elementRef.nativeElement.classList.contains(className));\n });\n\n destroyRef.onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n return hasClass;\n}\n\n@Component({\n selector: 'sh-sidenav',\n template: `\n @if (isOverlay() && !disableDrag()) {\n <div #dragImageElement class=\"drag-image\"></div>\n }\n\n @if (isOverlay() && isDragging()) {\n <div class=\"dropping-surface\" (drop)=\"drop($event)\" (dragenter)=\"dragEnter()\" (dragleave)=\"dragLeave()\"></div>\n }\n\n <div class=\"sidenav\">\n <ng-content select=\"[sidenav]\"></ng-content>\n </div>\n\n <div class=\"main-wrap\" [style.transform]=\"!disableDrag() && draggingStyle()\">\n @if (isOverlay() && !disableDrag()) {\n <div\n class=\"dragable\"\n draggable=\"true\"\n (dragstart)=\"dragStart($event)\"\n (dragend)=\"dragEnd($event)\"\n (drag)=\"drag($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchCancel($event)\"></div>\n }\n\n <div class=\"closed-topbar\">\n <ng-content select=\"[sidenav-closed-topbar]\"></ng-content>\n </div>\n\n <main>\n <ng-content />\n </main>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.open]': 'isOpen()',\n '[class.closed]': '!isOpen()',\n '[class.is-dragging]': 'isDragging()',\n },\n})\nexport class ShipSidenav {\n #document = inject(DOCUMENT);\n #selfRef = inject(ElementRef);\n openWidth = 280;\n openWidthTreshold = this.openWidth * 0.5;\n\n disableDrag = input<boolean>(false);\n isOpen = model<boolean>(false);\n isOverlay = watchHostClass('overlay');\n\n #closestParent = this.#selfRef.nativeElement.parentElement;\n #closestParentRect = this.#closestParent.getBoundingClientRect && this.#closestParent.getBoundingClientRect();\n\n dragImageElement = viewChild.required<ElementRef<HTMLDivElement>>('dragImageElement');\n dragIsEnding = signal<boolean>(false);\n dragIsOnScreen = signal<boolean>(true);\n isDragging = signal<boolean>(false);\n dragPositionX = signal<number>(0);\n\n dragActualPositionX = computed(() => {\n const dragPosition = this.dragPositionX();\n const openWidth = 280;\n const noEffectWidth = 100;\n const tensionFactor = 0.008;\n\n const center = openWidth / 2;\n const deadZoneStart = center - noEffectWidth / 2;\n const deadZoneEnd = center + noEffectWidth / 2;\n\n if (dragPosition > deadZoneEnd) {\n const distancePastDeadZone = dragPosition - deadZoneEnd;\n const maxTensionDistance = openWidth - deadZoneEnd;\n\n const dampenedDistance = maxTensionDistance * (1 - Math.exp(-tensionFactor * distancePastDeadZone));\n\n return deadZoneEnd + dampenedDistance;\n } else if (dragPosition < deadZoneStart) {\n const distancePastDeadZone = deadZoneStart - dragPosition;\n const maxTensionDistance = deadZoneStart;\n\n const dampenedDistance = maxTensionDistance * (1 - Math.exp(-tensionFactor * distancePastDeadZone));\n\n return deadZoneStart - dampenedDistance;\n }\n\n return dragPosition;\n });\n\n draggingStyle = computed(() => {\n if (!this.isOverlay() || this.disableDrag()) return null;\n\n if (this.isDragging()) {\n return `translateX(${this.dragActualPositionX()}px)`;\n }\n\n return this.isOpen() ? `translateX(${this.openWidth}px)` : `translateX(0px)`;\n });\n\n draggingEffect = effect(() => {\n if (this.disableDrag()) return;\n\n if (this.isDragging()) {\n this.#document.body.classList.add('dragging');\n } else {\n this.#document.body.classList.remove('dragging');\n }\n });\n\n drop(e: DragEvent) {\n e.stopPropagation();\n this.#drop(e.clientX - this.#closestParentRect.left);\n }\n\n #drop(clientX: number) {\n this.isDragging.set(false);\n\n if (clientX >= this.openWidthTreshold) {\n this.isOpen.set(true);\n } else {\n this.isOpen.set(false);\n }\n }\n\n dragEnd(e: DragEvent) {\n if (e.clientX - this.#closestParentRect.left < 0) {\n this.#drop(0);\n }\n\n if (e.clientX - this.#closestParentRect.left > this.openWidthTreshold) {\n this.#drop(this.openWidthTreshold);\n }\n }\n\n dragEnter() {\n this.dragIsOnScreen.set(true);\n }\n\n dragLeave() {\n this.dragIsOnScreen.set(false);\n }\n\n dragStart(e: DragEvent) {\n e.stopPropagation();\n\n this.#closestParentRect = this.#closestParent.getBoundingClientRect();\n this.isDragging.set(true);\n }\n\n drag(e: DragEvent) {\n e.stopPropagation();\n\n if (!this.isDragging()) return;\n\n if (e.clientX !== 0 || e.clientY !== 0) {\n this.dragPositionX.set(e.clientX - this.#closestParentRect.left);\n }\n }\n\n touchStart(e: TouchEvent) {\n e.stopPropagation();\n\n this.isDragging.set(true);\n this.#closestParentRect = this.#closestParent.getBoundingClientRect();\n this.dragPositionX.set(0);\n }\n\n touchMove(e: TouchEvent) {\n e.stopPropagation();\n\n if (!this.isDragging()) return;\n\n this.dragPositionX.set(e.touches[0].clientX - this.#closestParentRect.left);\n }\n\n touchEnd(e: TouchEvent) {\n e.stopPropagation();\n\n this.#drop(e.changedTouches[0].clientX - this.#closestParentRect.left);\n }\n\n touchCancel(e: TouchEvent) {\n e.stopPropagation();\n\n this.isDragging.set(false);\n }\n}\n","import { Directive, ElementRef, HostListener, inject, Renderer2 } from '@angular/core';\n\n@Directive({\n standalone: true,\n selector: '[shGridSortable]',\n})\nexport class GridSortable {\n #selfRef = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #draggedItem: HTMLElement | null = null;\n\n @HostListener('dragstart', ['$event'])\n onDragStart(event: DragEvent) {\n this.#draggedItem = event.target as HTMLElement;\n this.updateOrder(); // Initialize order for all children\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.preventDefault();\n }\n\n @HostListener('dragenter', ['$event'])\n onDragEnter(event: DragEvent) {\n const target = event.target as HTMLElement;\n if (this.#draggedItem && target !== this.#draggedItem && target.parentNode === this.#draggedItem.parentNode) {\n const parent = this.#draggedItem.parentNode as HTMLElement;\n const draggedIndex = Array.from(parent.children).indexOf(this.#draggedItem);\n const targetIndex = Array.from(parent.children).indexOf(target);\n\n // Update only the flipped indexes\n this.#renderer.setStyle(this.#draggedItem, 'order', targetIndex);\n this.#renderer.setStyle(target, 'order', draggedIndex);\n }\n }\n\n private updateOrder(excludedItem: HTMLElement | null = null) {\n const items = this.#selfRef.nativeElement.children;\n Array.from(items).forEach((item, index) => {\n if (item !== excludedItem) {\n this.#renderer.setStyle(item, 'order', index);\n }\n });\n }\n}\n","import {\n Directive,\n DOCUMENT,\n effect,\n ElementRef,\n HostListener,\n inject,\n output,\n Renderer2,\n signal,\n} from '@angular/core';\n\nexport type AfterDropResponse = {\n fromIndex: number;\n toIndex: number;\n};\n\n@Directive({\n selector: '[shSortable]',\n standalone: true,\n})\nexport class ShipSortable {\n #document = inject(DOCUMENT);\n #selfEl = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #placeholderEl = signal<HTMLElement | null>(null);\n #ghostEl = signal<HTMLElement | null>(null);\n #parentGap = signal<number>(0);\n\n dragStartIndex = signal<number>(-1);\n dragToIndex = signal<number>(-1);\n dragables = signal<HTMLElement[]>([]);\n afterDrop = output<AfterDropResponse>();\n\n abortController: AbortController | null = null;\n isDropping = false;\n\n draggingEffect = effect(() => {\n const currentDragPosIndex = this.dragToIndex();\n const startIndex = this.dragStartIndex();\n const dragables = this.dragables();\n\n if (currentDragPosIndex > -1 && startIndex > -1 && dragables.length > 0) {\n const placeholderEl = this.#placeholderEl();\n const gapValue = this.#parentGap();\n const draggedElement = dragables[startIndex];\n\n if (!draggedElement) return;\n\n const totalShift = draggedElement.offsetHeight + gapValue;\n let placeholderElShift = 0;\n\n if (currentDragPosIndex > startIndex) {\n for (let i = startIndex + 1; i <= currentDragPosIndex; i++) {\n placeholderElShift += dragables[i].offsetHeight + gapValue;\n }\n } else if (currentDragPosIndex < startIndex) {\n for (let i = startIndex - 1; i >= currentDragPosIndex; i--) {\n placeholderElShift -= dragables[i].offsetHeight + gapValue;\n }\n }\n\n if (placeholderEl) {\n const newTransform = `translateY(${placeholderElShift}px)`;\n if (placeholderEl.style.transform !== newTransform) {\n this.#renderer.setStyle(placeholderEl, 'transform', newTransform);\n }\n }\n\n for (let i = 0; i < dragables.length; i++) {\n if (i === startIndex) continue;\n\n let newTransform = 'translateY(0)';\n\n if (currentDragPosIndex > startIndex && currentDragPosIndex >= i && startIndex < i) {\n newTransform = `translateY(${-totalShift}px)`;\n } else if (currentDragPosIndex < startIndex && currentDragPosIndex <= i && startIndex > i) {\n newTransform = `translateY(${totalShift}px)`;\n }\n\n if (dragables[i].style.transform !== newTransform) {\n this.#renderer.setStyle(dragables[i], 'transform', newTransform);\n }\n }\n }\n });\n\n draggablesEffect = effect(() => {\n const els = this.dragables();\n if (this.abortController) {\n this.abortController.abort();\n }\n this.abortController = new AbortController();\n\n for (const el of els) {\n el.addEventListener('dragstart', (e) => this.dragStart(e), { signal: this.abortController.signal });\n el.addEventListener('dragend', () => this.dragEnd(), { signal: this.abortController.signal });\n }\n });\n\n getIndexOfElement(element: HTMLElement) {\n return this.dragables().findIndex((el) => el === element);\n }\n\n dragStart(e: DragEvent) {\n if (e.target && e.dataTransfer) {\n const targetElement = e.target as HTMLElement;\n const currentTarget = this.#document.elementFromPoint(e.clientX, e.clientY);\n const isSortingHandle =\n currentTarget?.hasAttribute('sort-handle') || currentTarget?.closest('[sort-handle]') !== null;\n let draggedElement: HTMLElement;\n\n if (isSortingHandle) {\n draggedElement = targetElement.closest('[draggable]') as HTMLElement;\n } else {\n draggedElement = targetElement;\n if (draggedElement.parentElement?.querySelector('[sort-handle]') !== null || !draggedElement.draggable) {\n e.preventDefault();\n return;\n }\n }\n\n e.dataTransfer.effectAllowed = 'move';\n\n const ghostElement = draggedElement.cloneNode(true) as HTMLElement;\n this.#ghostEl.set(ghostElement);\n this.#renderer.addClass(ghostElement, 'sortable-ghost');\n this.#renderer.setStyle(ghostElement, 'position', 'absolute');\n this.#renderer.setStyle(ghostElement, 'top', '0');\n this.#renderer.setStyle(ghostElement, 'left', '-9999px');\n this.#renderer.appendChild(this.#selfEl.nativeElement, ghostElement);\n e.dataTransfer.setDragImage(ghostElement, e.offsetX, e.offsetY);\n\n const parentStyle = window.getComputedStyle(draggedElement.parentElement!);\n this.#parentGap.set(parseFloat(parentStyle.gap) || 0);\n const draggedElementIndex = this.getIndexOfElement(draggedElement);\n this.dragStartIndex.set(draggedElementIndex);\n this.dragToIndex.set(draggedElementIndex);\n\n this.#renderer.addClass(draggedElement, 'sortable-dragged-el');\n this.#renderer.addClass(this.#selfEl.nativeElement, 'dragging');\n\n queueMicrotask(() => {\n const placeholderElement = draggedElement.cloneNode(true) as HTMLElement;\n this.#renderer.addClass(placeholderElement, 'sortable-placeholder');\n this.#renderer.removeClass(placeholderElement, 'sortable-dragged-el');\n this.#renderer.setStyle(placeholderElement, 'left', `${draggedElement.offsetLeft}px`);\n this.#renderer.setStyle(placeholderElement, 'width', `${draggedElement.offsetWidth}px`);\n this.#renderer.setStyle(placeholderElement, 'top', `${draggedElement.offsetTop}px`);\n this.#renderer.setStyle(placeholderElement, 'zIndex', '1');\n this.#placeholderEl.set(placeholderElement);\n this.#selfEl.nativeElement.appendChild(placeholderElement);\n });\n }\n }\n\n ngOnInit() {\n if (typeof MutationObserver !== 'undefined') {\n (this.#dragableObserver as MutationObserver).observe(this.#selfEl.nativeElement, { childList: true });\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragOver(e: DragEvent) {\n e.preventDefault();\n\n e.dataTransfer!.dropEffect = 'move';\n\n const startIndex = this.dragStartIndex();\n if (startIndex === -1) {\n return;\n }\n\n const draggables = this.dragables();\n const draggedElement = draggables[startIndex];\n\n const targetElement = draggables.find((child) => {\n if (child === draggedElement) {\n return false;\n }\n const rect = child.getBoundingClientRect();\n return e.clientY < rect.top + rect.height / 2;\n });\n\n if (!targetElement) {\n const lastIndex = draggables.length - 1;\n if (this.dragToIndex() !== lastIndex) {\n this.dragToIndex.set(lastIndex);\n }\n return;\n }\n\n let potentialToIndex = this.getIndexOfElement(targetElement);\n\n if (startIndex < potentialToIndex) {\n potentialToIndex--;\n }\n\n if (this.dragToIndex() !== potentialToIndex) {\n this.dragToIndex.set(potentialToIndex);\n }\n }\n\n @HostListener('drop')\n drop() {\n if (this.dragStartIndex() !== -1 && this.dragToIndex() !== -1 && this.dragStartIndex() !== this.dragToIndex()) {\n this.isDropping = true;\n this.afterDrop.emit({ fromIndex: this.dragStartIndex(), toIndex: this.dragToIndex() });\n }\n }\n\n dragEnd() {\n this.#cleanupDragState();\n }\n\n #cleanupDragState() {\n const placeholder = this.#placeholderEl();\n const ghost = this.#ghostEl();\n\n if (placeholder) {\n this.#renderer.removeChild(this.#selfEl.nativeElement, placeholder);\n this.#placeholderEl.set(null);\n }\n\n if (ghost) {\n this.#renderer.removeChild(this.#selfEl.nativeElement, ghost);\n this.#ghostEl.set(null);\n }\n\n // We no longer reset styles here to prevent flicker.\n // The MutationObserver will handle it after the DOM is updated.\n if (!this.isDropping) {\n this.#resetStyles();\n }\n\n this.dragStartIndex.set(-1);\n this.dragToIndex.set(-1);\n this.#renderer.removeClass(this.#selfEl.nativeElement, 'dragging');\n }\n\n #resetStyles() {\n const dragables = this.dragables();\n for (const el of dragables) {\n this.#renderer.setStyle(el, 'transform', '');\n this.#renderer.removeClass(el, 'sortable-dragged-el');\n }\n }\n\n #dragableObserver =\n typeof MutationObserver !== 'undefined' &&\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const draggableElements = Array.from(\n this.#selfEl.nativeElement.querySelectorAll('[draggable]:not(.sortable-placeholder):not(.sortable-ghost)')\n ) as HTMLElement[];\n this.dragables.set(draggableElements);\n\n if (this.isDropping) {\n // The drop is complete and Angular has updated the DOM.\n // Now we can safely reset the styles and the flag.\n this.#resetStyles();\n this.isDropping = false;\n }\n }\n }\n });\n\n ngOnDestroy() {\n (this.#dragableObserver as MutationObserver)?.disconnect();\n this.abortController?.abort();\n }\n}\n\nexport function moveIndex<T = any>(array: T[], event: AfterDropResponse): T[] {\n const { fromIndex, toIndex } = event;\n\n if (fromIndex < 0 || fromIndex >= array.length || toIndex < 0 || toIndex >= array.length) {\n return array;\n }\n\n const newArray = [...array];\n const [removedItem] = newArray.splice(fromIndex, 1);\n\n newArray.splice(toIndex, 0, removedItem);\n\n return newArray;\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-stepper',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipStepper {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n output,\n Renderer2,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ShipProgressBar } from '../ship-progress-bar/ship-progress-bar';\nimport { classMutationSignal } from '../utilities/class-mutation-signal';\nimport { observeChildren } from '../utilities/observe-elements';\nimport { SHIP_CONFIG } from '../utilities/ship-config';\n\n@Directive({\n selector: '[shResize]',\n standalone: true,\n})\nexport class ShipResize {\n #el = inject(ElementRef) as ElementRef<HTMLTableCellElement>;\n #renderer = inject(Renderer2);\n #table = inject(ShipTable);\n\n resizable = input<boolean>(true);\n minWidth = input<number>(50);\n maxWidth = input<number | null>(null);\n\n #startX!: number;\n #startWidth!: number;\n #resizing = false;\n #animationFrameRequest: number | null = null; // Store request ID\n\n ngOnInit() {\n if (!this.#table) {\n console.error('shTableResize directive must be used within a sh-table component.');\n return;\n }\n\n if (this.resizable()) {\n const resizer = this.#renderer.createElement('div');\n this.#renderer.addClass(resizer, 'sh-resizer');\n this.#renderer.appendChild(this.#el.nativeElement, resizer);\n this.#renderer.listen(resizer, 'mousedown', this.#onMouseDown.bind(this));\n }\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.#resizing) return;\n\n this.#scheduleResize(event);\n }\n\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(event: MouseEvent) {\n if (this.#resizing) {\n this.#resizing = false;\n this.#table.resizing.set(false);\n\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n this.#animationFrameRequest = null;\n }\n }\n }\n\n @HostListener('document:click', ['$event']) onClick(event: MouseEvent) {\n if (this.#resizing) {\n event.stopPropagation();\n }\n }\n\n #onMouseDown(event: MouseEvent) {\n event.stopPropagation();\n\n if (!this.resizable()) return;\n\n this.#table.resizing.set(true);\n this.#resizing = true;\n this.#startX = event.pageX;\n this.#startWidth = this.#el.nativeElement.offsetWidth;\n }\n\n #scheduleResize(event: MouseEvent) {\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n }\n\n this.#animationFrameRequest = requestAnimationFrame(() => {\n this.#resizeColumn(event);\n this.#animationFrameRequest = null;\n });\n }\n\n #resizeColumn(event: MouseEvent) {\n const width = this.#startWidth + (event.pageX - this.#startX);\n const constrainedWidth = Math.max(\n this.minWidth(),\n this.maxWidth() ? Math.min(width, this.maxWidth() ?? width) : width\n );\n\n this.#renderer.setAttribute(this.#el.nativeElement, 'size', `${constrainedWidth}px`);\n this.#table.updateColumnSizes();\n }\n\n ngOnDestroy() {\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n }\n }\n}\n\n@Directive({\n selector: '[shSort]',\n standalone: true,\n host: {\n class: 'sortable',\n '(mousedown)': 'toggleSort()',\n '[class.sort-asc]': 'sortAsc()',\n '[class.sort-desc]': 'sortDesc()',\n },\n})\nexport class ShipSort {\n #table = inject(ShipTable);\n shSort = input<string>();\n\n sortAsc = computed(() => {\n const currentSort = this.#table.sortByColumn();\n const thisColumn = this.shSort();\n\n if (!currentSort || !thisColumn) return false;\n\n return currentSort === thisColumn;\n });\n\n sortDesc = computed(() => {\n const currentSort = this.#table.sortByColumn();\n const thisColumn = this.shSort();\n\n if (!currentSort || !thisColumn) return false;\n\n return currentSort === `-${thisColumn}`;\n });\n\n toggleSort() {\n const sortCol = this.shSort();\n\n if (!sortCol) return;\n\n this.#table.toggleSort(sortCol);\n }\n}\n\n@Directive({\n selector: '[shStickyColumns]',\n\n host: {\n '[class.sticky]': 'shStickyColumns() === \"start\"',\n '[class.sticky-end]': 'shStickyColumns() === \"end\"',\n },\n})\nexport class ShipStickyColumns {\n #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n #renderer = inject(Renderer2);\n\n shStickyColumns = input<string>('start');\n\n ngAfterContentInit() {\n this.#applyGridColumnStyle();\n }\n\n #applyGridColumnStyle() {\n const nativeElement = this.#elementRef.nativeElement;\n const cellChildren = nativeElement.querySelectorAll<HTMLTableCellElement>(':scope > th, :scope > td');\n const columnSpanCount = cellChildren.length;\n\n if (columnSpanCount > 0) {\n const position = this.shStickyColumns();\n\n this.#renderer.setStyle(\n nativeElement,\n 'grid-column',\n position === 'end' ? `-${columnSpanCount + 1} / -1` : `1 / ${columnSpanCount + 1}`\n );\n }\n }\n}\n\nconst SCROLL_TOLERANCE = 1.5;\ntype ScrollState = -1 | 0 | 1;\n\n@Component({\n selector: 'sh-table',\n imports: [ShipProgressBar],\n template: `\n @if (loading()) {\n <sh-progress-bar class=\"indeterminate primary\" />\n }\n\n <thead #thead>\n <ng-content select=\"th\" />\n <ng-content select=\"[thead]\" />\n </thead>\n\n <tbody #tbody>\n <ng-content />\n </tbody>\n\n @if (!loading()) {\n <div class=\"no-rows\">\n <ng-content select=\"[table-no-rows]\" />\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class()',\n '[style.grid-template-columns]': 'columnSizes()',\n '[class.resizing]': 'resizing()',\n '(scroll)': 'onScroll()',\n '[class.can-scroll-x]': 'canScrollX()',\n '[class.can-scroll-y]': 'canScrollY()',\n '[class.scrolled-x]': 'scrollXState() >= 0',\n '[class.scrolled-x-end]': 'scrollXState() === 1',\n '[class.scrolled-y]': 'scrollYState() >= 0',\n '[class.scrolled-y-end]': 'scrollYState() === 1',\n },\n})\nexport class ShipTable {\n #el = inject(ElementRef);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n\n loading = input<boolean>(false);\n data = input<any>([]);\n dataChange = output<any>();\n sortByColumn = model<string | null>(null);\n\n currentClass = classMutationSignal();\n thead = viewChild<ElementRef<HTMLTableSectionElement>>('thead');\n tbody = viewChild<ElementRef<HTMLTableSectionElement>>('tbody');\n columns = observeChildren<HTMLTableColElement>(this.thead, ['tr:first-child th']);\n\n stickyHeaderHeight = computed(() => {\n const _ = this.currentClass();\n const height = this.thead()?.nativeElement?.clientHeight;\n\n return height ?? 0;\n });\n\n bodyEffect = effect(() => {\n const body = this.tbody()?.nativeElement;\n const head = this.thead()?.nativeElement;\n\n if (!body || !head) return;\n\n const stickyHeaderHeight = this.stickyHeaderHeight();\n\n queueMicrotask(() => {\n const hasStickyRowHeaderStartElement = head.querySelectorAll('tr.sticky').length > 0;\n const stickyBodyRows = body.querySelectorAll('tr.sticky');\n const hasStickyRowStartElement = stickyBodyRows.length > 0;\n\n if (hasStickyRowStartElement && hasStickyRowHeaderStartElement) {\n for (let index = 0; index < stickyBodyRows.length; index++) {\n (stickyBodyRows[index] as HTMLElement).style.top = `${stickyHeaderHeight}px`;\n }\n }\n });\n });\n\n class = signal<string>(this.#shConfig?.tableType ?? 'default');\n resizing = signal(false);\n sizeTrigger = signal(true);\n #initialData: any | null = null;\n #initialDataSet = signal(false);\n scrollXState = signal<ScrollState>(-1);\n scrollYState = signal<ScrollState>(-1);\n canScrollX = signal(false);\n canScrollY = signal(false);\n\n columnSizes = computed(() => {\n this.sizeTrigger();\n const colSignal = this.columns.signal();\n\n return colSignal.reduce((acc, col, index) => {\n const colEl = col;\n const colSize = colEl.getAttribute('size');\n const last = index === colSignal.length - 1;\n\n if (colSize) {\n return `${acc} ${colSize}`;\n }\n\n if (colEl.classList.contains('sticky') || colEl.classList.contains('sticky-end')) {\n return `${acc} min-content`;\n }\n\n if (last) {\n return `${acc} 1fr`;\n }\n\n return `${acc} 1fr`;\n }, '');\n });\n\n updateColumnSizes() {\n this.sizeTrigger.set(!this.sizeTrigger());\n }\n\n onScroll(): void {\n this.#checkScroll();\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: Event) {\n this.#checkScroll();\n }\n\n ngAfterViewInit() {\n queueMicrotask(() => this.#checkScroll());\n }\n\n e = effect(() => {\n const sortByColumn = this.sortByColumn();\n\n if (sortByColumn === null) {\n if (!this.#initialDataSet()) {\n this.#initialData = this.data();\n this.#initialDataSet.set(true);\n }\n\n return this.dataChange.emit(structuredClone(this.#initialData));\n }\n\n const column = sortByColumn.startsWith('-') ? sortByColumn.slice(1) : sortByColumn;\n const isDescending = sortByColumn.startsWith('-');\n\n const sortedData = this.data().sort((a: any, b: any) => {\n const valueA = a[column] as any;\n const valueB = b[column] as any;\n\n let comparison = 0;\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n comparison = valueA - valueB;\n }\n\n if (valueA instanceof Date && valueB instanceof Date) {\n comparison = valueA.getTime() - valueB.getTime();\n }\n\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n }\n\n return isDescending ? -comparison : comparison;\n });\n\n this.dataChange.emit(sortedData);\n });\n\n toggleSort(column: string) {\n const currentSort = this.sortByColumn();\n const sortDir = currentSort === column ? `-${column}` : currentSort === `-${column}` ? null : column;\n\n this.sortByColumn.set(sortDir);\n }\n\n #checkScroll(): void {\n const element = this.#el.nativeElement as HTMLElement;\n let nextXState: ScrollState = -1;\n let nextYState: ScrollState = -1;\n\n const canScrollX = element.scrollWidth > element.clientWidth + SCROLL_TOLERANCE;\n\n if (canScrollX) {\n const isAtStartX = element.scrollLeft <= SCROLL_TOLERANCE;\n const isAtEndX = element.scrollWidth - (element.scrollLeft + element.clientWidth) < SCROLL_TOLERANCE;\n\n if (isAtEndX) {\n nextXState = 1;\n } else if (!isAtStartX) {\n nextXState = 0;\n }\n }\n\n this.scrollXState.set(nextXState);\n this.canScrollX.set(canScrollX);\n\n const canScrollY = element.scrollHeight > element.clientHeight + SCROLL_TOLERANCE;\n\n if (canScrollY) {\n const isAtStartY = element.scrollTop <= SCROLL_TOLERANCE;\n const isAtEndY = element.scrollHeight - (element.scrollTop + element.clientHeight) < SCROLL_TOLERANCE;\n\n if (isAtEndY) {\n nextYState = 1;\n } else if (!isAtStartY) {\n nextYState = 0;\n }\n }\n\n this.scrollYState.set(nextYState);\n this.canScrollY.set(canScrollY);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-tabs',\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--tabs-id]': 'id',\n },\n})\nexport class ShipTabs {\n id = '--' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 12);\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { ShipIcon } from '../ship-icon/ship-icon';\n\n@Component({\n selector: 'sh-toggle-card',\n imports: [ShipIcon],\n template: `\n <h3 (click)=\"disallowToggle() || toggle()\">\n <ng-content select=\"[title]\">Title</ng-content>\n\n @if (!disallowToggle()) {\n <sh-icon class=\"toggle-icon\">caret-down</sh-icon>\n }\n </h3>\n\n <div class=\"collapsable\">\n <div class=\"content\">\n <ng-content />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.active]': 'isActive()',\n },\n})\nexport class ShipToggleCard {\n isActive = model(false);\n disallowToggle = input(false);\n\n ngOnInit() {\n if (this.disallowToggle()) {\n this.isActive.set(true);\n }\n }\n\n toggle() {\n this.isActive.set(!this.isActive());\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'sh-toggle',\n imports: [],\n template: `\n <div class=\"box\">\n <div class=\"knob\"></div>\n </div>\n\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipToggle {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Renderer2,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\n\n@Component({\n selector: 'sh-virtual-scroll',\n imports: [],\n template: `\n <div class=\"viewport\" #viewport (scroll)=\"onScroll()\">\n <div class=\"total-height\" [style.height]=\"totalHeight() + 'px'\"></div>\n <div class=\"items-container\" [style.transform]=\"'translateY(' + translateY() + 'px)'\">\n <ng-content />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipVirtualScroll {\n #changeRef = inject(ChangeDetectorRef);\n #renderer = inject(Renderer2);\n #hostElement = inject(ElementRef);\n\n viewportRef = viewChild.required<ElementRef<HTMLDivElement>>('viewport');\n itemElements = viewChildren<ElementRef>('item');\n\n bufferSize = signal(10);\n\n itemHeights = signal<number[]>([]);\n startIndex = signal(0);\n endIndex = signal(0);\n translateY = signal(0);\n totalHeight = computed(() => this.itemHeights().reduce((sum, height) => sum + height, 0));\n numberOfRenderedItems = signal(0);\n\n #resizeObserver: ResizeObserver | null = null;\n #hostResizeObserver: ResizeObserver | null = null;\n\n #itemHeightsEffect = effect(() => {\n const startIndex = this.startIndex();\n const endIndex = this.endIndex();\n const itemHeights = this.itemHeights();\n\n if (startIndex > 0 && endIndex > 0 && itemHeights.length > 0) {\n let newTranslateY = 0;\n for (let i = 0; i < startIndex; i++) {\n newTranslateY += itemHeights[i];\n }\n this.translateY.set(newTranslateY);\n }\n });\n\n #totalHeightEffect = effect(() => {\n const _ = this.totalHeight();\n this.#changeRef.detectChanges();\n });\n\n #itemElementsEffect = effect(() => {\n const itemElements = this.itemElements();\n\n if (this.#resizeObserver && itemElements) {\n this.#resizeObserver.disconnect();\n const heights = new Array(itemElements.length).fill(0);\n this.numberOfRenderedItems.set(itemElements.length);\n this.itemHeights.set(heights);\n\n for (let i = 0; i < itemElements.length; i++) {\n this.#resizeObserver.observe(itemElements[i].nativeElement);\n heights[i] = itemElements[i].nativeElement.offsetHeight;\n }\n\n this.itemHeights.set(heights);\n this.#calculateVisibleItems();\n }\n });\n\n ngAfterViewInit() {\n this.#setupHostResizeObserver();\n this.#setupResizeObserver();\n this.#changeRef.detectChanges();\n }\n\n onScroll() {\n this.#calculateVisibleItems();\n }\n\n #setupHostResizeObserver() {\n this.#hostResizeObserver = new ResizeObserver((entries) => {\n const hostElement = entries[0];\n if (hostElement) {\n const newHeight = hostElement.contentRect.height;\n this.#renderer.setStyle(this.viewportRef().nativeElement, 'height', `${newHeight}px`);\n }\n });\n\n this.#hostResizeObserver.observe(this.#hostElement.nativeElement);\n }\n\n #setupResizeObserver() {\n this.#resizeObserver = new ResizeObserver((entries) => {\n const newHeights = [...this.itemHeights()];\n\n let didUpdate = false;\n\n for (const entry of entries) {\n const index = this.itemElements().findIndex((el) => el.nativeElement === entry.target);\n\n if (index !== undefined && index !== -1) {\n const newHeight = entry.contentRect.height;\n if (newHeights[index] !== newHeight) {\n newHeights[index] = newHeight;\n didUpdate = true;\n }\n }\n }\n\n if (didUpdate) {\n this.itemHeights.set(newHeights);\n this.#calculateVisibleItems();\n }\n });\n }\n\n #cleanupResizeObserver() {\n if (this.#resizeObserver) {\n this.#resizeObserver.disconnect();\n this.#resizeObserver = null;\n }\n }\n\n #cleanupHostResizeObserver() {\n if (this.#hostResizeObserver) {\n this.#hostResizeObserver.disconnect();\n this.#hostResizeObserver = null;\n }\n }\n\n #calculateVisibleItems() {\n const nativeElement = this.viewportRef();\n if (!nativeElement) return;\n\n const scrollTop = nativeElement.nativeElement.scrollTop;\n const viewportHeight = nativeElement.nativeElement.clientHeight;\n\n let accumulatedHeight = 0;\n let startIndex = -1;\n let endIndex = -1;\n\n for (let i = 0; i < this.itemHeights().length; i++) {\n const itemHeight = this.itemHeights()[i];\n\n if (startIndex === -1 && accumulatedHeight + itemHeight >= scrollTop - this.bufferSize()) {\n startIndex = i;\n }\n\n if (endIndex === -1 && accumulatedHeight >= scrollTop + viewportHeight + this.bufferSize()) {\n endIndex = i;\n break;\n }\n\n accumulatedHeight += itemHeight;\n }\n\n if (endIndex === -1) {\n endIndex = this.itemHeights().length - 1;\n }\n\n if (this.startIndex() !== startIndex) {\n this.startIndex.set(startIndex);\n }\n if (this.endIndex() !== endIndex) {\n this.endIndex.set(endIndex);\n }\n }\n\n ngOnDestroy() {\n this.#cleanupResizeObserver();\n this.#cleanupHostResizeObserver();\n }\n}\n","import { ChangeDetectionStrategy, Component, effect } from '@angular/core';\nimport { createFormInputSignal } from '../utilities/create-form-input-signal';\n\n@Component({\n selector: 'sh-form-field-experimental',\n imports: [],\n template: `\n <ng-content></ng-content>\n\n <button (click)=\"myClick()\">hello</button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipFormFieldExperimental {\n firstInput = createFormInputSignal();\n\n hello = effect(() => {\n console.log('hello', this.firstInput());\n });\n\n myClick() {\n this.firstInput.update((x) => x + 'hello');\n }\n}\n","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: InputEvent) {\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","import {\n Component,\n ComponentRef,\n Directive,\n effect,\n ElementRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n HostListener,\n inject,\n input,\n OnDestroy,\n Renderer2,\n signal,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { generateUniqueId } from '../utilities/random-id';\n\n@Component({\n selector: 'ship-tooltip-wrapper',\n standalone: true,\n template: `\n <div class=\"tooltip-content\">\n <ng-content />\n </div>\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\n #selfRef = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #positionAbort: AbortController | null = null;\n\n // readonly BASE_SPACE = 8;\n readonly SUPPORTS_ANCHOR = typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc');\n\n isBelow = signal<boolean>(false);\n\n openEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.#selfRef.nativeElement.showPopover();\n this.calculateTooltipPosition();\n });\n } else {\n this.#selfRef.nativeElement.hidePopover();\n }\n });\n\n ngAfterViewInit() {\n this.#positionAbort = new AbortController();\n\n const options = { signal: this.#positionAbort.signal, capture: true };\n window?.addEventListener('scroll', this.calculateTooltipPosition, options);\n window?.addEventListener('resize', this.calculateTooltipPosition, { signal: this.#positionAbort.signal });\n\n setTimeout(() => this.calculateTooltipPosition());\n }\n\n ngOnDestroy(): void {\n this.#positionAbort?.abort();\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 outOfBoundsTop = hostRect.top - tooltipRect.height < 0;\n\n this.isBelow.set(outOfBoundsTop);\n\n if (!this.SUPPORTS_ANCHOR) {\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let newTop = hostRect.top - tooltipRect.height;\n let newLeft = hostRect.left + hostRect.width / 2 - tooltipRect.width / 2;\n\n if (outOfBoundsTop) {\n newTop = hostRect.top + hostRect.height;\n }\n\n if (newLeft + tooltipRect.width > window?.innerWidth) {\n newLeft = hostRect.right - tooltipRect.width / 2;\n }\n if (newLeft < 0) {\n newLeft = -(tooltipRect.width / 2);\n }\n\n this.#renderer.setStyle(tooltipEl, 'left', `${newLeft}px`);\n this.#renderer.setStyle(tooltipEl, 'top', `${newTop}px`);\n this.#renderer.setStyle(tooltipEl, 'position', 'fixed');\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 #elementRef = inject(ElementRef<HTMLElement>);\n #viewContainerRef = inject(ViewContainerRef);\n #environmentInjector = inject(EnvironmentInjector);\n #renderer = inject(Renderer2);\n\n #projectedViewRef: EmbeddedViewRef<any> | null = null;\n private debounceTimer: any; // Using any for the timer ID\n private readonly DEBOUNCE_DELAY = 500;\n\n readonly anchorName = `--${generateUniqueId()}`;\n isOpen = signal<boolean>(false);\n\n @HostListener('mouseenter')\n onMouseEnter() {\n if (openRef?.component.anchorName !== this.anchorName) {\n this.cleanupTooltip();\n }\n\n this.cancelCleanupTimer();\n\n queueMicrotask(() => this.showTooltip());\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\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\n private showTooltip() {\n if (openRef?.wrapperComponentRef || !this.shTooltip()) return;\n\n let nodesToProject: Node[][];\n const content = this.shTooltip();\n if (typeof content === 'string') {\n nodesToProject = [[this.#renderer.createText(content)]];\n } else if (content instanceof TemplateRef) {\n this.#projectedViewRef = content.createEmbeddedView({});\n this.#projectedViewRef.detectChanges();\n nodesToProject = [this.#projectedViewRef.rootNodes];\n } else {\n return;\n }\n\n openRef = {\n wrapperComponentRef: this.#viewContainerRef.createComponent(ShipTooltipWrapper, {\n environmentInjector: this.#environmentInjector,\n projectableNodes: nodesToProject,\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.changeDetectorRef.detectChanges();\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseenter', () => {\n this.cancelCleanupTimer();\n });\n\n openRef.wrapperComponentRef.location.nativeElement.addEventListener('mouseleave', () => {\n this.startCleanupTimer();\n });\n\n setTimeout(() => {\n this.isOpen.set(true);\n });\n }\n\n private cleanupTooltip(): void {\n if (openRef?.wrapperComponentRef) {\n openRef.component.cancelCleanupTimer();\n openRef.wrapperComponentRef.destroy();\n openRef.component.isOpen.set(false);\n openRef = null;\n }\n\n if (this.#projectedViewRef) {\n this.#projectedViewRef.destroy();\n this.#projectedViewRef = null;\n }\n }\n}\n","/*\n * Public API Surface of ship-ui\n */\nexport * from './lib/ship-alert/ship-alert';\nexport * from './lib/ship-alert/ship-alert-container';\nexport * from './lib/ship-alert/ship-alert.module';\nexport * from './lib/ship-alert/ship-alert.service';\n\nexport * from './lib/ship-dialog/ship-dialog';\nexport * from './lib/ship-dialog/ship-dialog.service';\n\nexport * from './lib/ship-blueprint/ship-blueprint';\nexport * from './lib/ship-button-group/ship-button-group';\nexport * from './lib/ship-button/ship-button';\nexport * from './lib/ship-card/ship-card';\nexport * from './lib/ship-checkbox/ship-checkbox';\nexport * from './lib/ship-chip/ship-chip';\nexport * from './lib/ship-color-picker/ship-color-picker';\nexport * from './lib/ship-datepicker/ship-datepicker';\nexport * from './lib/ship-datepicker/ship-datepicker-input';\nexport * from './lib/ship-datepicker/ship-daterange-input';\nexport * from './lib/ship-divider/ship-divider';\nexport * from './lib/ship-event-card/ship-event-card';\nexport * from './lib/ship-file-upload/ship-file-upload';\nexport * from './lib/ship-form-field/ship-form-field';\nexport * from './lib/ship-icon/ship-icon';\nexport * from './lib/ship-list/ship-list';\nexport * from './lib/ship-menu/ship-menu';\nexport * from './lib/ship-popover/ship-popover';\nexport * from './lib/ship-progress-bar/ship-progress-bar';\nexport * from './lib/ship-radio/ship-radio';\nexport * from './lib/ship-range-slider/ship-range-slider';\nexport * from './lib/ship-select/ship-select';\nexport * from './lib/ship-sidenav/ship-sidenav';\nexport * from './lib/ship-sortable/grid-sortable';\nexport * from './lib/ship-sortable/ship-sortable';\nexport * from './lib/ship-spinner/ship-spinner.component';\nexport * from './lib/ship-stepper/ship-stepper';\nexport * from './lib/ship-table/ship-table';\nexport * from './lib/ship-tabs/ship-tabs';\nexport * from './lib/ship-toggle-card/ship-toggle-card';\nexport * from './lib/ship-toggle/ship-toggle';\nexport * from './lib/ship-virtual-scroll/ship-virtual-scroll.component';\n\n// Experimental\nexport * from './lib/sh-form-field-experimental/sh-form-field-experimental';\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 config\nexport * from './lib/utilities/ship-config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_OPTIONS"],"mappings":"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"}