@ship-ui/core 0.22.9 → 0.22.10

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.
Binary file
@@ -91,7 +91,7 @@ class ShipDialog {
91
91
  }
92
92
  </dialog>
93
93
  }
94
- `, isInline: true, styles: ["dialog[shDialog]{--dialog-p: 1rem;--dialog-g: .5rem;--dialog-bg: var(--base-1);--dialog-s: var(--shape-2);--dialog-inner-s: var(--shape-2);border:var(--border-10);background:transparent;border-radius:var(--dialog-s);box-shadow:var(--box-shadow-40);color:var(--base-8);font:var(--paragraph-30);padding:0;margin:auto;z-index:0;display:flex;flex-direction:column}dialog[shDialog]:focus-visible{outline:none}dialog[shDialog].type-b{--dialog-s: 1.625rem;--dialog-inner-s: 1.25rem;background:var(--base-3);padding:.5rem;outline:var(--border-10);outline-offset:-1px;overflow:hidden}dialog[shDialog].type-b::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog].type-b>.content{border:1px solid rgb(from var(--base-4) r g b/70%)}dialog[shDialog]>.content{position:relative;border-radius:var(--dialog-inner-s);background-color:var(--dialog-bg);z-index:2;max-width:initial;overflow:auto}dialog[shDialog] .closeable-overlay{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog]:focus{outline:none}dialog[shDialog] .dialog-content{position:relative;z-index:2}dialog[shDialog] .dialog-backdrop{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog] [header],dialog[shDialog] [content],dialog[shDialog] [footer]{width:100%}dialog[shDialog] [header]{display:grid;grid-template-areas:\"title actions\" \"description actions\";grid-template-columns:1fr min-content;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [header] h1,dialog[shDialog] [header] h2,dialog[shDialog] [header] h3,dialog[shDialog] [header] h4,dialog[shDialog] [header] [title]{grid-area:title;font:var(--title-20)}dialog[shDialog] [header] p,dialog[shDialog] [header] [description]{grid-area:description;font:var(--paragraph-30)}dialog[shDialog] [header] button,dialog[shDialog] [header] [actions]{grid-area:actions}dialog[shDialog] [header].sticky{background-color:var(--dialog-bg);border-bottom:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;top:0;z-index:100}dialog[shDialog] [content]{padding:0 var(--dialog-p)}dialog[shDialog] [content]:not(:has(~[footer])){padding-bottom:var(--dialog-p)}dialog[shDialog] [footer]{display:flex;align-items:center;justify-content:flex-end;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [footer].sticky{background-color:var(--dialog-bg);border-top:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;bottom:0;z-index:100}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
94
+ `, isInline: true, styles: ["dialog[shDialog]{--dialog-p: 1rem;--dialog-g: .5rem;--dialog-bg: var(--base-1);--dialog-s: var(--shape-2);--dialog-inner-s: var(--shape-2);border:var(--border-10);background:transparent;border-radius:var(--dialog-s);box-shadow:var(--box-shadow-40);color:var(--base-8);font:var(--paragraph-30);padding:0;margin:auto;z-index:0;display:flex;flex-direction:column}dialog[shDialog]:focus-visible{outline:none}dialog[shDialog].type-b{--dialog-s: 1.625rem;--dialog-inner-s: 1.25rem;background:var(--base-3);padding:.5rem;outline:var(--border-10);outline-offset:-1px;overflow:hidden}dialog[shDialog].type-b::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog].type-b>.content{border:1px solid rgb(from var(--base-4) r g b/70%)}dialog[shDialog].type-c::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog]>.content{position:relative;border-radius:var(--dialog-inner-s);background-color:var(--dialog-bg);z-index:2;max-width:initial;overflow:auto}dialog[shDialog] .closeable-overlay{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog]:focus{outline:none}dialog[shDialog] .dialog-content{position:relative;z-index:2}dialog[shDialog] .dialog-backdrop{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog] [header],dialog[shDialog] [content],dialog[shDialog] [footer]{width:100%}dialog[shDialog] [header]{display:grid;grid-template-areas:\"title actions\" \"description actions\";grid-template-columns:1fr min-content;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [header] h1,dialog[shDialog] [header] h2,dialog[shDialog] [header] h3,dialog[shDialog] [header] h4,dialog[shDialog] [header] [title]{grid-area:title;font:var(--title-20)}dialog[shDialog] [header] p,dialog[shDialog] [header] [description]{grid-area:description;font:var(--paragraph-30)}dialog[shDialog] [header] button,dialog[shDialog] [header] [actions]{grid-area:actions}dialog[shDialog] [header].sticky{background-color:var(--dialog-bg);border-bottom:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;top:0;z-index:100}dialog[shDialog] [content]{padding:0 var(--dialog-p)}dialog[shDialog] [content]:not(:has(~[footer])){padding-bottom:var(--dialog-p)}dialog[shDialog] [footer]{display:flex;align-items:center;justify-content:flex-end;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [footer].sticky{background-color:var(--dialog-bg);border-top:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;bottom:0;z-index:100}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
95
95
  }
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDialog, decorators: [{
97
97
  type: Component,
@@ -116,7 +116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
116
116
  }
117
117
  </dialog>
118
118
  }
119
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["dialog[shDialog]{--dialog-p: 1rem;--dialog-g: .5rem;--dialog-bg: var(--base-1);--dialog-s: var(--shape-2);--dialog-inner-s: var(--shape-2);border:var(--border-10);background:transparent;border-radius:var(--dialog-s);box-shadow:var(--box-shadow-40);color:var(--base-8);font:var(--paragraph-30);padding:0;margin:auto;z-index:0;display:flex;flex-direction:column}dialog[shDialog]:focus-visible{outline:none}dialog[shDialog].type-b{--dialog-s: 1.625rem;--dialog-inner-s: 1.25rem;background:var(--base-3);padding:.5rem;outline:var(--border-10);outline-offset:-1px;overflow:hidden}dialog[shDialog].type-b::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog].type-b>.content{border:1px solid rgb(from var(--base-4) r g b/70%)}dialog[shDialog]>.content{position:relative;border-radius:var(--dialog-inner-s);background-color:var(--dialog-bg);z-index:2;max-width:initial;overflow:auto}dialog[shDialog] .closeable-overlay{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog]:focus{outline:none}dialog[shDialog] .dialog-content{position:relative;z-index:2}dialog[shDialog] .dialog-backdrop{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog] [header],dialog[shDialog] [content],dialog[shDialog] [footer]{width:100%}dialog[shDialog] [header]{display:grid;grid-template-areas:\"title actions\" \"description actions\";grid-template-columns:1fr min-content;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [header] h1,dialog[shDialog] [header] h2,dialog[shDialog] [header] h3,dialog[shDialog] [header] h4,dialog[shDialog] [header] [title]{grid-area:title;font:var(--title-20)}dialog[shDialog] [header] p,dialog[shDialog] [header] [description]{grid-area:description;font:var(--paragraph-30)}dialog[shDialog] [header] button,dialog[shDialog] [header] [actions]{grid-area:actions}dialog[shDialog] [header].sticky{background-color:var(--dialog-bg);border-bottom:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;top:0;z-index:100}dialog[shDialog] [content]{padding:0 var(--dialog-p)}dialog[shDialog] [content]:not(:has(~[footer])){padding-bottom:var(--dialog-p)}dialog[shDialog] [footer]{display:flex;align-items:center;justify-content:flex-end;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [footer].sticky{background-color:var(--dialog-bg);border-top:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;bottom:0;z-index:100}\n"] }]
119
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["dialog[shDialog]{--dialog-p: 1rem;--dialog-g: .5rem;--dialog-bg: var(--base-1);--dialog-s: var(--shape-2);--dialog-inner-s: var(--shape-2);border:var(--border-10);background:transparent;border-radius:var(--dialog-s);box-shadow:var(--box-shadow-40);color:var(--base-8);font:var(--paragraph-30);padding:0;margin:auto;z-index:0;display:flex;flex-direction:column}dialog[shDialog]:focus-visible{outline:none}dialog[shDialog].type-b{--dialog-s: 1.625rem;--dialog-inner-s: 1.25rem;background:var(--base-3);padding:.5rem;outline:var(--border-10);outline-offset:-1px;overflow:hidden}dialog[shDialog].type-b::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog].type-b>.content{border:1px solid rgb(from var(--base-4) r g b/70%)}dialog[shDialog].type-c::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog]>.content{position:relative;border-radius:var(--dialog-inner-s);background-color:var(--dialog-bg);z-index:2;max-width:initial;overflow:auto}dialog[shDialog] .closeable-overlay{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog]:focus{outline:none}dialog[shDialog] .dialog-content{position:relative;z-index:2}dialog[shDialog] .dialog-backdrop{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog] [header],dialog[shDialog] [content],dialog[shDialog] [footer]{width:100%}dialog[shDialog] [header]{display:grid;grid-template-areas:\"title actions\" \"description actions\";grid-template-columns:1fr min-content;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [header] h1,dialog[shDialog] [header] h2,dialog[shDialog] [header] h3,dialog[shDialog] [header] h4,dialog[shDialog] [header] [title]{grid-area:title;font:var(--title-20)}dialog[shDialog] [header] p,dialog[shDialog] [header] [description]{grid-area:description;font:var(--paragraph-30)}dialog[shDialog] [header] button,dialog[shDialog] [header] [actions]{grid-area:actions}dialog[shDialog] [header].sticky{background-color:var(--dialog-bg);border-bottom:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;top:0;z-index:100}dialog[shDialog] [content]{padding:0 var(--dialog-p)}dialog[shDialog] [content]:not(:has(~[footer])){padding-bottom:var(--dialog-p)}dialog[shDialog] [footer]{display:flex;align-items:center;justify-content:flex-end;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [footer].sticky{background-color:var(--dialog-bg);border-top:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;bottom:0;z-index:100}\n"] }]
120
120
  }], propDecorators: { dialogRef: [{ type: i0.ViewChild, args: ['dialogRef', { isSignal: true }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }, { type: i0.Output, args: ["isOpenChange"] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
121
121
 
122
122
  class ShipDialogService {
@@ -1 +1 @@
1
- {"version":3,"file":"ship-ui-core-ship-dialog.mjs","sources":["../../../projects/ship-ui/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/ship-dialog/ship-ui-core-ship-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { SHIP_CONFIG } from '@ship-ui/core';\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 styleUrl: './ship-dialog.scss',\n encapsulation: ViewEncapsulation.None,\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 EmbeddedViewRef,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n TemplateRef,\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 TemplateRef<infer C>\n ? (C extends { $implicit: infer K } ? K : unknown) & Partial<Omit<C, 'close' | '$implicit'>> extends infer R\n ? keyof R extends never\n ? void\n : R\n : void\n : T extends { data: InputSignal<infer K> }\n ? K\n : void;\nexport type ComponentClosedType<T> = T extends TemplateRef<infer C>\n ? C extends { close: (res?: infer U) => void }\n ? U\n : undefined\n : T extends { closed: OutputEmitterRef<infer U> }\n ? U\n : 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>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\nexport type ShipDialogTemplateInstance<T> = {\n component: undefined;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\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 insertedTemplateRef: EmbeddedViewRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n I,\n K = ComponentDataType<I>,\n U = ComponentClosedType<I>,\n _Options extends ShipDialogServiceOptions<K, U> = ShipDialogServiceOptions<K, U>,\n >(\n componentOrTemplate: Type<I> | (I extends TemplateRef<any> ? I : never),\n options?: _Options\n ): I extends TemplateRef<any> ? ShipDialogTemplateInstance<I> : ShipDialogInstance<I>;\n open<T = any, K = ComponentDataType<T>, U = ComponentClosedType<T>>(\n componentOrTemplate: Type<T> | TemplateRef<any>,\n options?: any\n ): ShipDialogInstance<any> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n let closedField: OutputEmitterRef<U | undefined> | undefined;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\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 let projectableNodes: any[][] = [];\n\n if (componentOrTemplate instanceof TemplateRef) {\n this.insertedTemplateRef = componentOrTemplate.createEmbeddedView({\n $implicit: data,\n close: (res?: any) => closeAction(res),\n });\n projectableNodes = [this.insertedTemplateRef.rootNodes];\n } else {\n this.insertedCompRef = createComponent<T>(componentOrTemplate, {\n environmentInjector,\n });\n projectableNodes = [[this.insertedCompRef.location.nativeElement]];\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = (insertedInstance as any).data as InputSignal<K>;\n closedField = (insertedInstance as any).closed as OutputEmitterRef<U | undefined>;\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 && 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\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes,\n });\n\n if (this.insertedCompRef) {\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.insertedCompRef.changeDetectorRef.detectChanges();\n }\n\n if (this.insertedTemplateRef) {\n this.#appRef.attachView(this.insertedTemplateRef);\n this.insertedTemplateRef.detectChanges();\n }\n\n this.#appRef.attachView(this.compRef.hostView);\n\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 return {\n component: this.insertedCompRef?.instance as T | undefined,\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 _self.insertedCompRef = null;\n }\n\n if (_self.insertedTemplateRef) {\n _self.#appRef.detachView(_self.insertedTemplateRef);\n _self.insertedTemplateRef.destroy();\n _self.insertedTemplateRef = null;\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAcA,MAAM,eAAe,GAAsB;AACzC,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,mBAAmB,EAAE,IAAI;CAC1B;MA+BY,UAAU,CAAA;AA7BvB,IAAA,WAAA,GAAA;AA8BE,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5B,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnD,IAAA,CAAA,SAAS,GAAG,SAAS,CAAgC,WAAW;sFAAC;QACjE,IAAA,CAAA,MAAM,GAAG,KAAK,CAAU,KAAK;mFAAC;AAC9B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAA8B;QAC7C,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;AAEvB,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,OAAO;AACnC,YAAA,GAAG,eAAe;YAClB,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,SAAS,EAAE;YACrD,GAAG,IAAI,CAAC,OAAO,EAAE;SAClB,CAAC;+FAAC;QAEH,IAAA,CAAA,eAAe,GAA2B,IAAI;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,MAAK;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AAEhD,YAAA,IAAI,CAAC,QAAQ;gBAAE;AACf,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;YAC9B;AAEA,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AAE5C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,QAAQ,CAAC,SAAS,EAAE;AACpB,gBAAA,QAAQ,CAAC,gBAAgB,CACvB,OAAO,EACP,MAAK;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,gBAAA,CAAC,EACD;AACE,oBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM;AACrC,iBAAA,CACF;gBAED,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC7B,SAAS,EACT,CAAC,CAAC,KAAI;AACJ,oBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE;wBAC/D,CAAC,CAAC,cAAc,EAAE;oBACpB;AAEA,oBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE;AAC9D,wBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;oBACxB;AACF,gBAAA,CAAC,EACD;AACE,oBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM;AACrC,iBAAA,CACF;YACH;iBAAO;gBACL,QAAQ,CAAC,KAAK,EAAE;gBAEhB,cAAc,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1C;QACF,CAAC;yFAAC;AAKH,IAAA;AA9DC,IAAA,SAAS;AACT,IAAA,SAAS;IA0DT,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;IAC/B;8GA9DW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBX;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,85EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGU,UAAU,EAAA,UAAA,EAAA,CAAA;kBA7BtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,iBAEN,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,EAAE,EAAA,QAAA,EACD;;;;;;;;;;;;;;;;;;;;;GAqBT,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,85EAAA,CAAA,EAAA;uEAKM,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCFrD,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5B,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;QAEhC,IAAA,CAAA,OAAO,GAAoC,IAAI;QAC/C,IAAA,CAAA,eAAe,GAAiC,IAAI;QACpD,IAAA,CAAA,mBAAmB,GAAoC,IAAI;QAE3D,IAAA,CAAA,cAAc,GAAiC,IAAI;QACnD,IAAA,CAAA,aAAa,GAAiC,IAAI;AA2JnD,IAAA;AApKC,IAAA,SAAS;AACT,IAAA,OAAO;AACP,IAAA,OAAO;IAkBP,IAAI,CACF,mBAA+C,EAC/C,OAAa,EAAA;AAEb,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACjD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;QACpC,IAAI,aAAa,GAAG,KAAK;AACzB,QAAA,IAAI,WAAwD;AAE5D,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE;AAE/C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACzB;QAEA,MAAM,KAAK,GAAG,IAAI;QAElB,SAAS,WAAW,CAAC,GAAA,GAAqB,SAAS,EAAA;YACjD,KAAK,CAAC,YAAY,EAAE;AAEpB,YAAA,IAAI,aAAa;gBAAE;YAEnB,aAAa,GAAG,IAAI;AAEpB,YAAA,IAAI,WAAW,IAAI,WAAW,YAAY,gBAAgB,EAAE;AAC1D,gBAAA,WAAW,CAAC,IAAI,CAAC,GAAU,CAAC;YAC9B;AAEA,YAAA,MAAM,GAAG,GAAQ,CAAC;QACpB;QAEA,IAAI,gBAAgB,GAAY,EAAE;AAElC,QAAA,IAAI,mBAAmB,YAAY,WAAW,EAAE;AAC9C,YAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,kBAAkB,CAAC;AAChE,gBAAA,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC,GAAS,KAAK,WAAW,CAAC,GAAG,CAAC;AACvC,aAAA,CAAC;YACF,gBAAgB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;QACzD;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAI,mBAAmB,EAAE;gBAC7D,mBAAmB;AACpB,aAAA,CAAC;AACF,YAAA,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAElE,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAa;AAC3D,YAAA,MAAM,SAAS,GAAI,gBAAwB,CAAC,IAAsB;AAClE,YAAA,WAAW,GAAI,gBAAwB,CAAC,MAAyC;YAEjF,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;oBACvB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;gBAC7C;AAAO,qBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC/B,oBAAA,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC;gBACxE;YACF;AAEA,YAAA,IAAI,WAAW,IAAI,WAAW,YAAY,gBAAgB,EAAE;gBAC1D,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAkB,KAAI;oBACjE,IAAI,CAAC,YAAY,EAAE;AAEnB,oBAAA,IAAI,aAAa;wBAAE;oBAEnB,aAAa,GAAG,IAAI;AAEpB,oBAAA,MAAM,GAAG,GAAQ,CAAC;AAElB,oBAAA,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAA0C,EAAC,IAAI,CAAC,GAAG,CAAC;AAC9E,gBAAA,CAAC,CAAC;YACJ;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,UAAU,EAAE;YACzC,WAAW;YACX,mBAAmB;YACnB,gBAAgB;AACjB,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACtD,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACxD;AAEA,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACjD,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;QAC1C;QAEA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE9C,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE;QAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;AAEtC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,WAAW,EAAE,CAAC;QAEhF,OAAO;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,QAAyB;AAC1D,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAyC;SAC/C;IAC5B;IAEA,SAAS,GAAA;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC;AAC/D,QAAA,SAAS,CAAC,EAAE,GAAG,eAAe;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;QACjC;QAEA,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,eAAe,CAAE;IACxD;IAEA,YAAY,CAAC,OAAO,GAAG,KAAK,EAAA;QAC1B,MAAM,KAAK,GAAG,IAAI;AAElB,QAAA,OAAO,GAAG,OAAO,GAAG,cAAc,CAAC,MAAM,OAAO,EAAE,CAAC;AAEnD,QAAA,SAAS,OAAO,GAAA;AACd,YAAA,IAAI,KAAK,CAAC,eAAe,EAAE;gBACzB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC;AACxD,gBAAA,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE;AACnC,gBAAA,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,CAAC,eAAe,GAAG,IAAI;YAC9B;AAEA,YAAA,IAAI,KAAK,CAAC,mBAAmB,EAAE;gBAC7B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC;AACnD,gBAAA,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE;AACnC,gBAAA,KAAK,CAAC,mBAAmB,GAAG,IAAI;YAClC;YAEA,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE;YAEpB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAChD,YAAA,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE;AAClC,YAAA,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACzB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;8GApKW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACtDD;;AAEG;;;;"}
1
+ {"version":3,"file":"ship-ui-core-ship-dialog.mjs","sources":["../../../projects/ship-ui/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/ship-dialog/ship-ui-core-ship-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { SHIP_CONFIG } from '@ship-ui/core';\n\nexport type ShipDialogOptions = {\n class?: 'default' | 'type-b' | 'type-c' | 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 styleUrl: './ship-dialog.scss',\n encapsulation: ViewEncapsulation.None,\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 EmbeddedViewRef,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n TemplateRef,\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 TemplateRef<infer C>\n ? (C extends { $implicit: infer K } ? K : unknown) & Partial<Omit<C, 'close' | '$implicit'>> extends infer R\n ? keyof R extends never\n ? void\n : R\n : void\n : T extends { data: InputSignal<infer K> }\n ? K\n : void;\nexport type ComponentClosedType<T> = T extends TemplateRef<infer C>\n ? C extends { close: (res?: infer U) => void }\n ? U\n : undefined\n : T extends { closed: OutputEmitterRef<infer U> }\n ? U\n : 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>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\nexport type ShipDialogTemplateInstance<T> = {\n component: undefined;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\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 insertedTemplateRef: EmbeddedViewRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n I,\n K = ComponentDataType<I>,\n U = ComponentClosedType<I>,\n _Options extends ShipDialogServiceOptions<K, U> = ShipDialogServiceOptions<K, U>,\n >(\n componentOrTemplate: Type<I> | (I extends TemplateRef<any> ? I : never),\n options?: _Options\n ): I extends TemplateRef<any> ? ShipDialogTemplateInstance<I> : ShipDialogInstance<I>;\n open<T = any, K = ComponentDataType<T>, U = ComponentClosedType<T>>(\n componentOrTemplate: Type<T> | TemplateRef<any>,\n options?: any\n ): ShipDialogInstance<any> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n let closedField: OutputEmitterRef<U | undefined> | undefined;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\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 let projectableNodes: any[][] = [];\n\n if (componentOrTemplate instanceof TemplateRef) {\n this.insertedTemplateRef = componentOrTemplate.createEmbeddedView({\n $implicit: data,\n close: (res?: any) => closeAction(res),\n });\n projectableNodes = [this.insertedTemplateRef.rootNodes];\n } else {\n this.insertedCompRef = createComponent<T>(componentOrTemplate, {\n environmentInjector,\n });\n projectableNodes = [[this.insertedCompRef.location.nativeElement]];\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = (insertedInstance as any).data as InputSignal<K>;\n closedField = (insertedInstance as any).closed as OutputEmitterRef<U | undefined>;\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 && 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\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes,\n });\n\n if (this.insertedCompRef) {\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.insertedCompRef.changeDetectorRef.detectChanges();\n }\n\n if (this.insertedTemplateRef) {\n this.#appRef.attachView(this.insertedTemplateRef);\n this.insertedTemplateRef.detectChanges();\n }\n\n this.#appRef.attachView(this.compRef.hostView);\n\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 return {\n component: this.insertedCompRef?.instance as T | undefined,\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 _self.insertedCompRef = null;\n }\n\n if (_self.insertedTemplateRef) {\n _self.#appRef.detachView(_self.insertedTemplateRef);\n _self.insertedTemplateRef.destroy();\n _self.insertedTemplateRef = null;\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -488,7 +488,7 @@ class ShipSpotlightService {
488
488
  this.#contextualRegistryId = null;
489
489
  this.#globalShortcutListener = null;
490
490
  this.#globalShortcutOptions = null;
491
- if (this.#config?.enableShortcuts !== false) {
491
+ if (this.#config?.enableGlobalEventListener !== false) {
492
492
  this.enableGlobalShortcuts();
493
493
  }
494
494
  }
@@ -558,9 +558,10 @@ class ShipSpotlightService {
558
558
  ...options,
559
559
  items: options?.items ?? this.#aggregatedItems(),
560
560
  };
561
+ const dialogClass = options?.dialogClass ?? 'type-c';
561
562
  const dialogRef = this.#dialogService.open(ShipSpotlight, {
562
563
  data: finalOptions,
563
- class: 'spotlight-dialog',
564
+ class: `spotlight-dialog ${dialogClass}`,
564
565
  closeOnOutsideClick: true,
565
566
  closeOnEsc: true,
566
567
  width: '600px',
@@ -1 +1 @@
1
- {"version":3,"file":"ship-ui-core-ship-spotlight.mjs","sources":["../../../projects/ship-ui/ship-spotlight/ship-spotlight.ts","../../../projects/ship-ui/ship-spotlight/ship-spotlight.service.ts","../../../projects/ship-ui/ship-spotlight/ship-ui-core-ship-spotlight.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n InjectionToken,\n Provider,\n} from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipList } from '@ship-ui/core/ship-list';\nimport { ShipKbd } from '@ship-ui/core/ship-kbd';\n\nexport interface ShipSpotlightItem {\n id: string;\n label: string;\n category?: string;\n description?: string;\n icon?: string;\n shortcut?: string;\n data?: any;\n}\n\nexport interface ShipSpotlightServiceOptions {\n items?: ShipSpotlightItem[];\n placeholder?: string;\n shortcut?: string;\n customFilter?: boolean;\n searchQuery?: string;\n}\n\nexport interface ShipSpotlightConfig {\n defaultItems?: ShipSpotlightItem[];\n enableShortcuts?: boolean;\n}\n\nexport const SHIP_SPOTLIGHT_CONFIG = new InjectionToken<ShipSpotlightConfig>('SHIP_SPOTLIGHT_CONFIG');\n\nexport function provideShipSpotlight(config: ShipSpotlightConfig): Provider {\n return {\n provide: SHIP_SPOTLIGHT_CONFIG,\n useValue: config,\n };\n}\n\n@Component({\n selector: 'sh-spotlight',\n styleUrl: './ship-spotlight.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon, ShipList, ShipKbd],\n template: `\n <div class=\"sh-spotlight-container\">\n <div class=\"sh-spotlight-search-bar\">\n <sh-icon class=\"sh-spotlight-search-icon\">magnifying-glass</sh-icon>\n <input\n #inputRef\n type=\"text\"\n class=\"sh-spotlight-input\"\n [placeholder]=\"mergedPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\" />\n @if (searchQuery()) {\n <button class=\"sh-spotlight-clear-btn\" (click)=\"clearSearch()\">\n <sh-icon>x-bold</sh-icon>\n </button>\n }\n </div>\n\n <div #resultsRef class=\"sh-spotlight-results\">\n @if (groupedFilteredItems().length > 0) {\n @for (group of groupedFilteredItems(); track group.category) {\n <div class=\"sh-spotlight-category\">\n <div class=\"sh-spotlight-category-title\">{{ group.category }}</div>\n <sh-list class=\"type-b\">\n @for (itemWithIdx of group.items; track itemWithIdx.item.id) {\n <button\n action\n type=\"button\"\n [class.active]=\"itemWithIdx.flatIndex === activeOptionIndex()\"\n (mouseenter)=\"activeOptionIndex.set(itemWithIdx.flatIndex)\"\n (click)=\"selectItem(itemWithIdx.item)\">\n @if (itemWithIdx.item.icon) {\n <sh-icon>{{ itemWithIdx.item.icon }}</sh-icon>\n }\n <div class=\"text-group\">\n <span class=\"label\">{{ itemWithIdx.item.label }}</span>\n @if (itemWithIdx.item.description) {\n <span class=\"description\">{{ itemWithIdx.item.description }}</span>\n }\n </div>\n @if (itemWithIdx.item.shortcut) {\n <span class=\"shortcut\">\n @for (key of parseShortcutKeys(itemWithIdx.item.shortcut); track key) {\n <sh-kbd\n [meta]=\"key === 'meta' || key === 'cmd' || key === 'command'\"\n [shift]=\"key === 'shift'\"\n [alt]=\"key === 'alt' || key === 'option'\"\n [ctrl]=\"key === 'ctrl' || key === 'control'\"\n [enter]=\"key === 'enter' || key === 'return'\"\n [escape]=\"key === 'escape' || key === 'esc'\"\n [backspace]=\"key === 'backspace'\"\n >\n @if (!['meta', 'cmd', 'command', 'shift', 'alt', 'option', 'ctrl', 'control', 'enter', 'return', 'escape', 'esc', 'backspace'].includes(key)) {\n {{ key }}\n }\n </sh-kbd>\n }\n </span>\n }\n </button>\n }\n </sh-list>\n </div>\n }\n } @else {\n <div class=\"sh-spotlight-no-results\">\n <sh-icon class=\"sh-spotlight-no-results-icon\">warning-octagon</sh-icon>\n <span class=\"sh-spotlight-no-results-text\">No results found for \"{{ searchQuery() }}\"</span>\n </div>\n }\n </div>\n\n <div class=\"sh-spotlight-footer\">\n <span class=\"sh-spotlight-footer-tip\">\n <sh-kbd>↓</sh-kbd> <sh-kbd>↑</sh-kbd>\n to navigate\n </span>\n <span class=\"sh-spotlight-footer-tip\">\n <sh-kbd enter></sh-kbd>\n to select\n </span>\n <span class=\"sh-spotlight-footer-tip\">\n <sh-kbd escape></sh-kbd>\n to close\n </span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipSpotlight {\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n resultsRef = viewChild<ElementRef<HTMLDivElement>>('resultsRef');\n\n // Input config passed from ShipDialogService\n data = input<ShipSpotlightServiceOptions>();\n\n // Standard inputs (fallback)\n items = input<ShipSpotlightItem[]>([]);\n placeholder = input<string>('Search actions, settings, or pages...');\n customFilter = input<boolean>(false);\n searchQuery = model<string>('');\n\n itemSelected = output<ShipSpotlightItem>();\n closed = output<void>();\n\n // Merged config properties\n mergedItems = computed(() => this.data()?.items ?? this.items());\n mergedPlaceholder = computed(() => this.data()?.placeholder ?? this.placeholder());\n mergedCustomFilter = computed(() => this.data()?.customFilter ?? this.customFilter());\n\n activeOptionIndex = signal<number>(0);\n\n // Computes the scored and filtered flat list of items\n flatFilteredItems = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n const allItems = this.mergedItems();\n\n if (this.mergedCustomFilter() || !query) {\n return allItems;\n }\n\n const scored = allItems\n .map((item) => {\n const labelScore = this.#calculateMatchScore(item.label.toLowerCase(), query);\n const descScore = item.description ? this.#calculateMatchScore(item.description.toLowerCase(), query) : 0;\n return { item, score: Math.max(labelScore, descScore) };\n })\n .filter((x) => x.score > 0)\n .sort((a, b) => b.score - a.score);\n\n return scored.map((x) => x.item);\n });\n\n // Groups flat list of items by category and precomputes flat indices\n groupedFilteredItems = computed(() => {\n const flat = this.flatFilteredItems();\n const groups: { category: string; items: { item: ShipSpotlightItem; flatIndex: number }[] }[] = [];\n let currentFlatIndex = 0;\n\n flat.forEach((item) => {\n const cat = item.category || 'Actions';\n let group = groups.find((g) => g.category === cat);\n if (!group) {\n group = { category: cat, items: [] };\n groups.push(group);\n }\n group.items.push({ item, flatIndex: currentFlatIndex++ });\n });\n\n return groups;\n });\n\n constructor() {\n // Sync initial search query if provided in dialog data\n effect(() => {\n const initialQuery = this.data()?.searchQuery;\n if (initialQuery !== undefined) {\n this.searchQuery.set(initialQuery);\n }\n });\n\n // Auto-focus input when the view is initialized\n effect(() => {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl && typeof inputEl.focus === 'function') {\n setTimeout(() => inputEl.focus(), 50);\n }\n });\n\n // Scroll active item into view\n effect(() => {\n const index = this.activeOptionIndex();\n if (index > -1) {\n queueMicrotask(() => this.scrollToActiveItem());\n }\n });\n }\n\n validateItemsEffect = effect(() => {\n const items = this.mergedItems();\n for (const item of items) {\n if (item.shortcut) {\n this.#validateShortcut(item.shortcut);\n }\n }\n });\n\n onSearchInput(event: Event) {\n const val = (event.target as HTMLInputElement).value;\n this.searchQuery.set(val);\n this.activeOptionIndex.set(0);\n }\n\n clearSearch() {\n this.searchQuery.set('');\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n if (typeof inputEl.focus === 'function') {\n inputEl.focus();\n }\n }\n this.activeOptionIndex.set(0);\n }\n\n onKeyDown(event: KeyboardEvent) {\n // Check if the event matches any item shortcut\n const allItems = this.mergedItems();\n const shortcutMatch = allItems.find((item) => item.shortcut && this.#checkShortcutMatch(event, item.shortcut));\n\n if (shortcutMatch) {\n event.preventDefault();\n event.stopPropagation();\n // Delay selection to ensure the browser honors preventDefault before the DOM node is potentially destroyed\n setTimeout(() => this.selectItem(shortcutMatch), 10);\n return;\n }\n\n const flat = this.flatFilteredItems();\n if (flat.length === 0) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n const nextIdx = (this.activeOptionIndex() + 1) % flat.length;\n this.activeOptionIndex.set(nextIdx);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n const prevIdx = (this.activeOptionIndex() - 1 + flat.length) % flat.length;\n this.activeOptionIndex.set(prevIdx);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n if (event.shiftKey) {\n const prevIdx = (this.activeOptionIndex() - 1 + flat.length) % flat.length;\n this.activeOptionIndex.set(prevIdx);\n } else {\n const nextIdx = (this.activeOptionIndex() + 1) % flat.length;\n this.activeOptionIndex.set(nextIdx);\n }\n } else if (event.key === 'Enter') {\n event.preventDefault();\n const selected = flat[this.activeOptionIndex()];\n if (selected) {\n this.selectItem(selected);\n }\n }\n }\n\n selectItem(item: ShipSpotlightItem) {\n this.itemSelected.emit(item);\n this.closed.emit();\n }\n\n scrollToActiveItem() {\n const resultsEl = this.resultsRef()?.nativeElement;\n if (!resultsEl) return;\n\n const activeEl = resultsEl.querySelector('[action].active') as HTMLElement;\n if (activeEl && typeof activeEl.scrollIntoView === 'function') {\n activeEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n parseShortcutKeys(shortcut: string): string[] {\n if (!shortcut) return [];\n return shortcut.split('+').map((s) => s.trim().toLowerCase());\n }\n\n #validateShortcut(shortcut: string) {\n const normalized = shortcut\n .toLowerCase()\n .split('+')\n .map((k) => k.trim())\n .join('+');\n\n const reserved = [\n 'meta+n', 'ctrl+n',\n 'meta+t', 'ctrl+t',\n 'meta+w', 'ctrl+w',\n 'meta+q', 'ctrl+q',\n 'meta+r', 'ctrl+r',\n 'meta+l', 'ctrl+l',\n 'meta+shift+n', 'ctrl+shift+n',\n 'meta+shift+t', 'ctrl+shift+t',\n 'meta+shift+w', 'ctrl+shift+w',\n 'cmd+n', 'cmd+t', 'cmd+w', 'cmd+q', 'cmd+r', 'cmd+l',\n 'cmd+shift+n', 'cmd+shift+t', 'cmd+shift+w',\n ];\n\n if (reserved.includes(normalized)) {\n throw new Error(\n `[ShipUI Error] The shortcut \"${shortcut}\" uses a reserved browser hotkey that cannot be reliably prevented (e.g. New Window, New Tab). Please choose a different shortcut.`\n );\n }\n }\n\n #checkShortcutMatch(event: KeyboardEvent, shortcut: string): boolean {\n if (!shortcut) return false;\n const keys = this.parseShortcutKeys(shortcut);\n\n const needsMeta = keys.includes('meta') || keys.includes('cmd') || keys.includes('command');\n const needsCtrl = keys.includes('ctrl') || keys.includes('control');\n const needsAlt = keys.includes('alt') || keys.includes('option');\n const needsShift = keys.includes('shift');\n\n if (event.metaKey !== needsMeta) return false;\n if (event.ctrlKey !== needsCtrl) return false;\n if (event.altKey !== needsAlt) return false;\n if (event.shiftKey !== needsShift) return false;\n\n const mainKeys = keys.filter(\n (k) => !['meta', 'cmd', 'command', 'ctrl', 'control', 'alt', 'option', 'shift'].includes(k),\n );\n\n if (mainKeys.length === 1) {\n return event.key.toLowerCase() === mainKeys[0].toLowerCase();\n }\n\n return false;\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 lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n return score;\n }\n}\n","import { computed, DOCUMENT, inject, Injectable, OutputEmitterRef, signal, DestroyRef } from '@angular/core';\nimport { ShipDialogService } from '@ship-ui/core/ship-dialog';\nimport { ShipSpotlight, ShipSpotlightItem, ShipSpotlightServiceOptions, SHIP_SPOTLIGHT_CONFIG } from './ship-spotlight';\n\nexport interface ShipSpotlightInstance {\n close: () => void;\n itemSelected: OutputEmitterRef<ShipSpotlightItem>;\n closed: OutputEmitterRef<any>;\n}\n\ninterface SpotlightItemRegistryEntry {\n id: number;\n items: ShipSpotlightItem[];\n overwrite: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipSpotlightService {\n #document = inject(DOCUMENT);\n #dialogService = inject(ShipDialogService);\n #config = inject(SHIP_SPOTLIGHT_CONFIG, { optional: true });\n\n #nextId = 0;\n #registries = signal<SpotlightItemRegistryEntry[]>([]);\n\n #globalItemSelected = signal<ShipSpotlightItem | null>(null);\n globalItemSelected = this.#globalItemSelected.asReadonly();\n\n #isShortcutsEnabled = signal(false);\n isShortcutsEnabled = this.#isShortcutsEnabled.asReadonly();\n\n #aggregatedItems = computed(() => {\n const registries = this.#registries();\n const defaults = this.#config?.defaultItems ?? [];\n let aggregated: ShipSpotlightItem[] = [...defaults];\n\n for (const entry of registries) {\n if (entry.overwrite) {\n aggregated = [...entry.items];\n } else {\n aggregated.push(...entry.items);\n }\n }\n return aggregated;\n });\n\n hasOverwriteItems = computed(() => this.#registries().some((r) => r.overwrite));\n\n constructor() {\n if (this.#config?.enableShortcuts !== false) {\n this.enableGlobalShortcuts();\n }\n }\n\n registerItems(items: ShipSpotlightItem[], overwrite = false): () => void {\n const id = this.#nextId++;\n this.#registries.update((regs) => [...regs, { id, items, overwrite }]);\n\n const cleanup = () => {\n this.#registries.update((regs) => regs.filter((r) => r.id !== id));\n };\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(cleanup);\n } catch {\n // Ignore if not called in injection context\n }\n\n return cleanup;\n }\n\n #contextualRegistryId: number | null = null;\n\n setContextualItems(items: ShipSpotlightItem[], overwrite = false) {\n if (this.#contextualRegistryId !== null) {\n const oldId = this.#contextualRegistryId;\n this.#registries.update((regs) => regs.filter((r) => r.id !== oldId));\n }\n const id = this.#nextId++;\n this.#contextualRegistryId = id;\n this.#registries.update((regs) => [...regs, { id, items, overwrite }]);\n }\n\n clearContextualItems() {\n if (this.#contextualRegistryId !== null) {\n const oldId = this.#contextualRegistryId;\n this.#registries.update((regs) => regs.filter((r) => r.id !== oldId));\n this.#contextualRegistryId = null;\n }\n }\n\n #globalShortcutListener: ((event: KeyboardEvent) => void) | null = null;\n #globalShortcutOptions: Partial<ShipSpotlightServiceOptions> | null = null;\n\n enableGlobalShortcuts(options?: Partial<ShipSpotlightServiceOptions>): void {\n if (this.#globalShortcutListener) {\n this.disableGlobalShortcuts();\n }\n \n if (options) {\n this.#globalShortcutOptions = options;\n }\n\n this.#isShortcutsEnabled.set(true);\n\n this.#globalShortcutListener = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {\n event.preventDefault();\n\n const instance = this.open(this.#globalShortcutOptions || undefined);\n\n const sub = instance.itemSelected.subscribe((item) => {\n this.#globalItemSelected.set(item);\n });\n\n instance.closed.subscribe(() => sub.unsubscribe());\n }\n };\n\n this.#document.addEventListener('keydown', this.#globalShortcutListener);\n }\n\n disableGlobalShortcuts(): void {\n if (this.#globalShortcutListener) {\n this.#document.removeEventListener('keydown', this.#globalShortcutListener);\n this.#globalShortcutListener = null;\n }\n this.#isShortcutsEnabled.set(false);\n }\n\n open(options?: ShipSpotlightServiceOptions): ShipSpotlightInstance {\n const finalOptions = {\n ...options,\n items: options?.items ?? this.#aggregatedItems(),\n };\n\n const dialogRef = this.#dialogService.open(ShipSpotlight, {\n data: finalOptions,\n class: 'spotlight-dialog',\n closeOnOutsideClick: true,\n closeOnEsc: true,\n width: '600px',\n maxWidth: '90vw',\n });\n\n return {\n close: () => dialogRef.close(),\n itemSelected: dialogRef.component.itemSelected,\n closed: dialogRef.closed,\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship-ui-core-ship-spotlight.mjs","sources":["../../../projects/ship-ui/ship-spotlight/ship-spotlight.ts","../../../projects/ship-ui/ship-spotlight/ship-spotlight.service.ts","../../../projects/ship-ui/ship-spotlight/ship-ui-core-ship-spotlight.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n InjectionToken,\n Provider,\n} from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipList } from '@ship-ui/core/ship-list';\nimport { ShipKbd } from '@ship-ui/core/ship-kbd';\n\nexport interface ShipSpotlightItem {\n id: string;\n label: string;\n category?: string;\n description?: string;\n icon?: string;\n shortcut?: string;\n data?: any;\n}\n\nexport interface ShipSpotlightServiceOptions {\n items?: ShipSpotlightItem[];\n placeholder?: string;\n shortcut?: string;\n customFilter?: boolean;\n searchQuery?: string;\n dialogClass?: string;\n}\n\nexport interface ShipSpotlightConfig {\n defaultItems?: ShipSpotlightItem[];\n enableGlobalEventListener?: boolean;\n}\n\nexport const SHIP_SPOTLIGHT_CONFIG = new InjectionToken<ShipSpotlightConfig>('SHIP_SPOTLIGHT_CONFIG');\n\nexport function provideShipSpotlight(config: ShipSpotlightConfig): Provider {\n return {\n provide: SHIP_SPOTLIGHT_CONFIG,\n useValue: config,\n };\n}\n\n@Component({\n selector: 'sh-spotlight',\n styleUrl: './ship-spotlight.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon, ShipList, ShipKbd],\n template: `\n <div class=\"sh-spotlight-container\">\n <div class=\"sh-spotlight-search-bar\">\n <sh-icon class=\"sh-spotlight-search-icon\">magnifying-glass</sh-icon>\n <input\n #inputRef\n type=\"text\"\n class=\"sh-spotlight-input\"\n [placeholder]=\"mergedPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\" />\n @if (searchQuery()) {\n <button class=\"sh-spotlight-clear-btn\" (click)=\"clearSearch()\">\n <sh-icon>x-bold</sh-icon>\n </button>\n }\n </div>\n\n <div #resultsRef class=\"sh-spotlight-results\">\n @if (groupedFilteredItems().length > 0) {\n @for (group of groupedFilteredItems(); track group.category) {\n <div class=\"sh-spotlight-category\">\n <div class=\"sh-spotlight-category-title\">{{ group.category }}</div>\n <sh-list class=\"type-b\">\n @for (itemWithIdx of group.items; track itemWithIdx.item.id) {\n <button\n action\n type=\"button\"\n [class.active]=\"itemWithIdx.flatIndex === activeOptionIndex()\"\n (mouseenter)=\"activeOptionIndex.set(itemWithIdx.flatIndex)\"\n (click)=\"selectItem(itemWithIdx.item)\">\n @if (itemWithIdx.item.icon) {\n <sh-icon>{{ itemWithIdx.item.icon }}</sh-icon>\n }\n <div class=\"text-group\">\n <span class=\"label\">{{ itemWithIdx.item.label }}</span>\n @if (itemWithIdx.item.description) {\n <span class=\"description\">{{ itemWithIdx.item.description }}</span>\n }\n </div>\n @if (itemWithIdx.item.shortcut) {\n <span class=\"shortcut\">\n @for (key of parseShortcutKeys(itemWithIdx.item.shortcut); track key) {\n <sh-kbd\n [meta]=\"key === 'meta' || key === 'cmd' || key === 'command'\"\n [shift]=\"key === 'shift'\"\n [alt]=\"key === 'alt' || key === 'option'\"\n [ctrl]=\"key === 'ctrl' || key === 'control'\"\n [enter]=\"key === 'enter' || key === 'return'\"\n [escape]=\"key === 'escape' || key === 'esc'\"\n [backspace]=\"key === 'backspace'\"\n >\n @if (!['meta', 'cmd', 'command', 'shift', 'alt', 'option', 'ctrl', 'control', 'enter', 'return', 'escape', 'esc', 'backspace'].includes(key)) {\n {{ key }}\n }\n </sh-kbd>\n }\n </span>\n }\n </button>\n }\n </sh-list>\n </div>\n }\n } @else {\n <div class=\"sh-spotlight-no-results\">\n <sh-icon class=\"sh-spotlight-no-results-icon\">warning-octagon</sh-icon>\n <span class=\"sh-spotlight-no-results-text\">No results found for \"{{ searchQuery() }}\"</span>\n </div>\n }\n </div>\n\n <div class=\"sh-spotlight-footer\">\n <span class=\"sh-spotlight-footer-tip\">\n <sh-kbd>↓</sh-kbd> <sh-kbd>↑</sh-kbd>\n to navigate\n </span>\n <span class=\"sh-spotlight-footer-tip\">\n <sh-kbd enter></sh-kbd>\n to select\n </span>\n <span class=\"sh-spotlight-footer-tip\">\n <sh-kbd escape></sh-kbd>\n to close\n </span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipSpotlight {\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n resultsRef = viewChild<ElementRef<HTMLDivElement>>('resultsRef');\n\n // Input config passed from ShipDialogService\n data = input<ShipSpotlightServiceOptions>();\n\n // Standard inputs (fallback)\n items = input<ShipSpotlightItem[]>([]);\n placeholder = input<string>('Search actions, settings, or pages...');\n customFilter = input<boolean>(false);\n searchQuery = model<string>('');\n\n itemSelected = output<ShipSpotlightItem>();\n closed = output<void>();\n\n // Merged config properties\n mergedItems = computed(() => this.data()?.items ?? this.items());\n mergedPlaceholder = computed(() => this.data()?.placeholder ?? this.placeholder());\n mergedCustomFilter = computed(() => this.data()?.customFilter ?? this.customFilter());\n\n activeOptionIndex = signal<number>(0);\n\n // Computes the scored and filtered flat list of items\n flatFilteredItems = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n const allItems = this.mergedItems();\n\n if (this.mergedCustomFilter() || !query) {\n return allItems;\n }\n\n const scored = allItems\n .map((item) => {\n const labelScore = this.#calculateMatchScore(item.label.toLowerCase(), query);\n const descScore = item.description ? this.#calculateMatchScore(item.description.toLowerCase(), query) : 0;\n return { item, score: Math.max(labelScore, descScore) };\n })\n .filter((x) => x.score > 0)\n .sort((a, b) => b.score - a.score);\n\n return scored.map((x) => x.item);\n });\n\n // Groups flat list of items by category and precomputes flat indices\n groupedFilteredItems = computed(() => {\n const flat = this.flatFilteredItems();\n const groups: { category: string; items: { item: ShipSpotlightItem; flatIndex: number }[] }[] = [];\n let currentFlatIndex = 0;\n\n flat.forEach((item) => {\n const cat = item.category || 'Actions';\n let group = groups.find((g) => g.category === cat);\n if (!group) {\n group = { category: cat, items: [] };\n groups.push(group);\n }\n group.items.push({ item, flatIndex: currentFlatIndex++ });\n });\n\n return groups;\n });\n\n constructor() {\n // Sync initial search query if provided in dialog data\n effect(() => {\n const initialQuery = this.data()?.searchQuery;\n if (initialQuery !== undefined) {\n this.searchQuery.set(initialQuery);\n }\n });\n\n // Auto-focus input when the view is initialized\n effect(() => {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl && typeof inputEl.focus === 'function') {\n setTimeout(() => inputEl.focus(), 50);\n }\n });\n\n // Scroll active item into view\n effect(() => {\n const index = this.activeOptionIndex();\n if (index > -1) {\n queueMicrotask(() => this.scrollToActiveItem());\n }\n });\n }\n\n validateItemsEffect = effect(() => {\n const items = this.mergedItems();\n for (const item of items) {\n if (item.shortcut) {\n this.#validateShortcut(item.shortcut);\n }\n }\n });\n\n onSearchInput(event: Event) {\n const val = (event.target as HTMLInputElement).value;\n this.searchQuery.set(val);\n this.activeOptionIndex.set(0);\n }\n\n clearSearch() {\n this.searchQuery.set('');\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n if (typeof inputEl.focus === 'function') {\n inputEl.focus();\n }\n }\n this.activeOptionIndex.set(0);\n }\n\n onKeyDown(event: KeyboardEvent) {\n // Check if the event matches any item shortcut\n const allItems = this.mergedItems();\n const shortcutMatch = allItems.find((item) => item.shortcut && this.#checkShortcutMatch(event, item.shortcut));\n\n if (shortcutMatch) {\n event.preventDefault();\n event.stopPropagation();\n // Delay selection to ensure the browser honors preventDefault before the DOM node is potentially destroyed\n setTimeout(() => this.selectItem(shortcutMatch), 10);\n return;\n }\n\n const flat = this.flatFilteredItems();\n if (flat.length === 0) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n const nextIdx = (this.activeOptionIndex() + 1) % flat.length;\n this.activeOptionIndex.set(nextIdx);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n const prevIdx = (this.activeOptionIndex() - 1 + flat.length) % flat.length;\n this.activeOptionIndex.set(prevIdx);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n if (event.shiftKey) {\n const prevIdx = (this.activeOptionIndex() - 1 + flat.length) % flat.length;\n this.activeOptionIndex.set(prevIdx);\n } else {\n const nextIdx = (this.activeOptionIndex() + 1) % flat.length;\n this.activeOptionIndex.set(nextIdx);\n }\n } else if (event.key === 'Enter') {\n event.preventDefault();\n const selected = flat[this.activeOptionIndex()];\n if (selected) {\n this.selectItem(selected);\n }\n }\n }\n\n selectItem(item: ShipSpotlightItem) {\n this.itemSelected.emit(item);\n this.closed.emit();\n }\n\n scrollToActiveItem() {\n const resultsEl = this.resultsRef()?.nativeElement;\n if (!resultsEl) return;\n\n const activeEl = resultsEl.querySelector('[action].active') as HTMLElement;\n if (activeEl && typeof activeEl.scrollIntoView === 'function') {\n activeEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n parseShortcutKeys(shortcut: string): string[] {\n if (!shortcut) return [];\n return shortcut.split('+').map((s) => s.trim().toLowerCase());\n }\n\n #validateShortcut(shortcut: string) {\n const normalized = shortcut\n .toLowerCase()\n .split('+')\n .map((k) => k.trim())\n .join('+');\n\n const reserved = [\n 'meta+n', 'ctrl+n',\n 'meta+t', 'ctrl+t',\n 'meta+w', 'ctrl+w',\n 'meta+q', 'ctrl+q',\n 'meta+r', 'ctrl+r',\n 'meta+l', 'ctrl+l',\n 'meta+shift+n', 'ctrl+shift+n',\n 'meta+shift+t', 'ctrl+shift+t',\n 'meta+shift+w', 'ctrl+shift+w',\n 'cmd+n', 'cmd+t', 'cmd+w', 'cmd+q', 'cmd+r', 'cmd+l',\n 'cmd+shift+n', 'cmd+shift+t', 'cmd+shift+w',\n ];\n\n if (reserved.includes(normalized)) {\n throw new Error(\n `[ShipUI Error] The shortcut \"${shortcut}\" uses a reserved browser hotkey that cannot be reliably prevented (e.g. New Window, New Tab). Please choose a different shortcut.`\n );\n }\n }\n\n #checkShortcutMatch(event: KeyboardEvent, shortcut: string): boolean {\n if (!shortcut) return false;\n const keys = this.parseShortcutKeys(shortcut);\n\n const needsMeta = keys.includes('meta') || keys.includes('cmd') || keys.includes('command');\n const needsCtrl = keys.includes('ctrl') || keys.includes('control');\n const needsAlt = keys.includes('alt') || keys.includes('option');\n const needsShift = keys.includes('shift');\n\n if (event.metaKey !== needsMeta) return false;\n if (event.ctrlKey !== needsCtrl) return false;\n if (event.altKey !== needsAlt) return false;\n if (event.shiftKey !== needsShift) return false;\n\n const mainKeys = keys.filter(\n (k) => !['meta', 'cmd', 'command', 'ctrl', 'control', 'alt', 'option', 'shift'].includes(k),\n );\n\n if (mainKeys.length === 1) {\n return event.key.toLowerCase() === mainKeys[0].toLowerCase();\n }\n\n return false;\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 lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n return score;\n }\n}\n","import { computed, DOCUMENT, inject, Injectable, OutputEmitterRef, signal, DestroyRef } from '@angular/core';\nimport { ShipDialogService } from '@ship-ui/core/ship-dialog';\nimport { ShipSpotlight, ShipSpotlightItem, ShipSpotlightServiceOptions, SHIP_SPOTLIGHT_CONFIG } from './ship-spotlight';\n\nexport interface ShipSpotlightInstance {\n close: () => void;\n itemSelected: OutputEmitterRef<ShipSpotlightItem>;\n closed: OutputEmitterRef<any>;\n}\n\ninterface SpotlightItemRegistryEntry {\n id: number;\n items: ShipSpotlightItem[];\n overwrite: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipSpotlightService {\n #document = inject(DOCUMENT);\n #dialogService = inject(ShipDialogService);\n #config = inject(SHIP_SPOTLIGHT_CONFIG, { optional: true });\n\n #nextId = 0;\n #registries = signal<SpotlightItemRegistryEntry[]>([]);\n\n #globalItemSelected = signal<ShipSpotlightItem | null>(null);\n globalItemSelected = this.#globalItemSelected.asReadonly();\n\n #isShortcutsEnabled = signal(false);\n isShortcutsEnabled = this.#isShortcutsEnabled.asReadonly();\n\n #aggregatedItems = computed(() => {\n const registries = this.#registries();\n const defaults = this.#config?.defaultItems ?? [];\n let aggregated: ShipSpotlightItem[] = [...defaults];\n\n for (const entry of registries) {\n if (entry.overwrite) {\n aggregated = [...entry.items];\n } else {\n aggregated.push(...entry.items);\n }\n }\n return aggregated;\n });\n\n hasOverwriteItems = computed(() => this.#registries().some((r) => r.overwrite));\n\n constructor() {\n if (this.#config?.enableGlobalEventListener !== false) {\n this.enableGlobalShortcuts();\n }\n }\n\n registerItems(items: ShipSpotlightItem[], overwrite = false): () => void {\n const id = this.#nextId++;\n this.#registries.update((regs) => [...regs, { id, items, overwrite }]);\n\n const cleanup = () => {\n this.#registries.update((regs) => regs.filter((r) => r.id !== id));\n };\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(cleanup);\n } catch {\n // Ignore if not called in injection context\n }\n\n return cleanup;\n }\n\n #contextualRegistryId: number | null = null;\n\n setContextualItems(items: ShipSpotlightItem[], overwrite = false) {\n if (this.#contextualRegistryId !== null) {\n const oldId = this.#contextualRegistryId;\n this.#registries.update((regs) => regs.filter((r) => r.id !== oldId));\n }\n const id = this.#nextId++;\n this.#contextualRegistryId = id;\n this.#registries.update((regs) => [...regs, { id, items, overwrite }]);\n }\n\n clearContextualItems() {\n if (this.#contextualRegistryId !== null) {\n const oldId = this.#contextualRegistryId;\n this.#registries.update((regs) => regs.filter((r) => r.id !== oldId));\n this.#contextualRegistryId = null;\n }\n }\n\n #globalShortcutListener: ((event: KeyboardEvent) => void) | null = null;\n #globalShortcutOptions: Partial<ShipSpotlightServiceOptions> | null = null;\n\n enableGlobalShortcuts(options?: Partial<ShipSpotlightServiceOptions>): void {\n if (this.#globalShortcutListener) {\n this.disableGlobalShortcuts();\n }\n \n if (options) {\n this.#globalShortcutOptions = options;\n }\n\n this.#isShortcutsEnabled.set(true);\n\n this.#globalShortcutListener = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {\n event.preventDefault();\n\n const instance = this.open(this.#globalShortcutOptions || undefined);\n\n const sub = instance.itemSelected.subscribe((item) => {\n this.#globalItemSelected.set(item);\n });\n\n instance.closed.subscribe(() => sub.unsubscribe());\n }\n };\n\n this.#document.addEventListener('keydown', this.#globalShortcutListener);\n }\n\n disableGlobalShortcuts(): void {\n if (this.#globalShortcutListener) {\n this.#document.removeEventListener('keydown', this.#globalShortcutListener);\n this.#globalShortcutListener = null;\n }\n this.#isShortcutsEnabled.set(false);\n }\n\n open(options?: ShipSpotlightServiceOptions): ShipSpotlightInstance {\n const finalOptions = {\n ...options,\n items: options?.items ?? this.#aggregatedItems(),\n };\n\n const dialogClass = options?.dialogClass ?? 'type-c';\n\n const dialogRef = this.#dialogService.open(ShipSpotlight, {\n data: finalOptions,\n class: `spotlight-dialog ${dialogClass}`,\n closeOnOutsideClick: true,\n closeOnEsc: true,\n width: '600px',\n maxWidth: '90vw',\n });\n\n return {\n close: () => dialogRef.close(),\n itemSelected: dialogRef.component.itemSelected,\n closed: dialogRef.closed,\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -98,7 +98,7 @@ class ShipThemeToggle {
98
98
  <sh-icon>circle-half-tilt-bold</sh-icon>
99
99
  }
100
100
  </button>
101
- `, isInline: true, styles: ["ship-theme-toggle{display:flex;align-items:center;justify-content:center;position:relative}ship-theme-toggle [shButton].small sh-icon.small-icon{font-size:.625rem}ship-theme-toggle:has(sh-icon.small-icon) [shButton].small{gap:0}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:first-child{transform:translate(-.0625rem,-.25rem)}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:last-child{transform:translate(.0625rem,.25rem)}ship-theme-toggle:has(sh-icon.small-icon):after{content:\"\";height:1rem;width:1px;background:var(--base-12);position:absolute;inset:0;margin:auto;transform:rotate(30deg)}\n"], dependencies: [{ kind: "component", type: ShipIcon, selector: "sh-icon", inputs: ["color", "size"] }, { kind: "component", type: ShipButton, selector: "[shButton]", inputs: ["color", "variant", "size", "readonly", "noBg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
101
+ `, isInline: true, styles: ["ship-theme-toggle{display:flex;align-items:center;justify-content:center;position:relative}\n"], dependencies: [{ kind: "component", type: ShipIcon, selector: "sh-icon", inputs: ["color", "size"] }, { kind: "component", type: ShipButton, selector: "[shButton]", inputs: ["color", "variant", "size", "readonly", "noBg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
102
102
  }
103
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeToggle, decorators: [{
104
104
  type: Component,
@@ -112,7 +112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
112
112
  <sh-icon>circle-half-tilt-bold</sh-icon>
113
113
  }
114
114
  </button>
115
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["ship-theme-toggle{display:flex;align-items:center;justify-content:center;position:relative}ship-theme-toggle [shButton].small sh-icon.small-icon{font-size:.625rem}ship-theme-toggle:has(sh-icon.small-icon) [shButton].small{gap:0}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:first-child{transform:translate(-.0625rem,-.25rem)}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:last-child{transform:translate(.0625rem,.25rem)}ship-theme-toggle:has(sh-icon.small-icon):after{content:\"\";height:1rem;width:1px;background:var(--base-12);position:absolute;inset:0;margin:auto;transform:rotate(30deg)}\n"] }]
115
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["ship-theme-toggle{display:flex;align-items:center;justify-content:center;position:relative}\n"] }]
116
116
  }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
117
117
 
118
118
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ship-ui-core-ship-theme-toggle.mjs","sources":["../../../projects/ship-ui/ship-theme-toggle/ship-theme-state.ts","../../../projects/ship-ui/ship-theme-toggle/ship-theme-toggle.ts","../../../projects/ship-ui/ship-theme-toggle/ship-ui-core-ship-theme-toggle.ts"],"sourcesContent":["import { isPlatformServer } from '@angular/common';\nimport { DOCUMENT, effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\nexport type ShipThemeOption = 'light' | 'dark' | null;\nexport const THEME_ORDER: ShipThemeOption[] = ['light', 'dark', null];\n\nimport { InjectionToken } from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window>('WindowToken', {\n providedIn: 'root',\n factory: () => (typeof window !== 'undefined' ? window : ({} as Window)),\n});\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipThemeState {\n #document = inject(DOCUMENT);\n #window = inject(WINDOW);\n #platformId = inject(PLATFORM_ID);\n #storedDarkMode = this.localStorage()?.getItem('shipTheme') as ShipThemeOption;\n #theme = signal<ShipThemeOption>(this.#storedDarkMode);\n\n theme = this.#theme.asReadonly();\n\n darkModeEffect = effect(() => {\n const theme = this.#theme();\n\n if (theme === null) {\n this.#document.documentElement.classList.remove('dark');\n this.#document.documentElement.classList.remove('light');\n return;\n }\n\n if (theme === 'dark') {\n this.#document.documentElement.classList.add('dark');\n this.#document.documentElement.classList.remove('light');\n } else {\n this.#document.documentElement.classList.add('light');\n this.#document.documentElement.classList.remove('dark');\n }\n });\n\n localStorage() {\n if (isPlatformServer(this.#platformId)) return null;\n\n return this.#window.localStorage;\n }\n\n toggleTheme() {\n const nextTheme = this.#theme() === null ? THEME_ORDER[0] : THEME_ORDER[THEME_ORDER.indexOf(this.#theme()) + 1];\n\n this.setTheme(nextTheme);\n }\n\n setTheme(theme: ShipThemeOption) {\n if (theme === null) {\n this.localStorage()?.removeItem('shipTheme');\n this.#theme.set(null);\n return;\n }\n\n this.localStorage()?.setItem('shipTheme', theme);\n this.#theme.set(theme);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ShipButtonSize, ShipColor, ShipSheetVariant } from '@ship-ui/core';\nimport { ShipButton } from '@ship-ui/core/ship-button';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipThemeOption, ShipThemeState } from './ship-theme-state';\n\n@Component({\n selector: 'ship-theme-toggle',\n styleUrl: './ship-theme-toggle.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon, ShipButton],\n template: `\n <button shButton [color]=\"color()\" [variant]=\"variant()\" [size]=\"size()\" (click)=\"toggleTheme()\">\n @if (theme() === 'dark') {\n <sh-icon>moon-bold</sh-icon>\n } @else if (theme() === 'light') {\n <sh-icon>sun-bold</sh-icon>\n } @else if (theme() === null) {\n <sh-icon>circle-half-tilt-bold</sh-icon>\n }\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipThemeToggle {\n #themeState = inject(ShipThemeState);\n\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n size = input<ShipButtonSize | null>('small');\n\n theme = this.#themeState.theme;\n\n toggleTheme() {\n this.#themeState.toggleTheme();\n }\n\n setTheme(theme: ShipThemeOption) {\n this.#themeState.setTheme(theme);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship-ui-core-ship-theme-toggle.mjs","sources":["../../../projects/ship-ui/ship-theme-toggle/ship-theme-state.ts","../../../projects/ship-ui/ship-theme-toggle/ship-theme-toggle.ts","../../../projects/ship-ui/ship-theme-toggle/ship-ui-core-ship-theme-toggle.ts"],"sourcesContent":["import { isPlatformServer } from '@angular/common';\nimport { DOCUMENT, effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\nexport type ShipThemeOption = 'light' | 'dark' | null;\nexport const THEME_ORDER: ShipThemeOption[] = ['light', 'dark', null];\n\nimport { InjectionToken } from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window>('WindowToken', {\n providedIn: 'root',\n factory: () => (typeof window !== 'undefined' ? window : ({} as Window)),\n});\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipThemeState {\n #document = inject(DOCUMENT);\n #window = inject(WINDOW);\n #platformId = inject(PLATFORM_ID);\n #storedDarkMode = this.localStorage()?.getItem('shipTheme') as ShipThemeOption;\n #theme = signal<ShipThemeOption>(this.#storedDarkMode);\n\n theme = this.#theme.asReadonly();\n\n darkModeEffect = effect(() => {\n const theme = this.#theme();\n\n if (theme === null) {\n this.#document.documentElement.classList.remove('dark');\n this.#document.documentElement.classList.remove('light');\n return;\n }\n\n if (theme === 'dark') {\n this.#document.documentElement.classList.add('dark');\n this.#document.documentElement.classList.remove('light');\n } else {\n this.#document.documentElement.classList.add('light');\n this.#document.documentElement.classList.remove('dark');\n }\n });\n\n localStorage() {\n if (isPlatformServer(this.#platformId)) return null;\n\n return this.#window.localStorage;\n }\n\n toggleTheme() {\n const nextTheme = this.#theme() === null ? THEME_ORDER[0] : THEME_ORDER[THEME_ORDER.indexOf(this.#theme()) + 1];\n\n this.setTheme(nextTheme);\n }\n\n setTheme(theme: ShipThemeOption) {\n if (theme === null) {\n this.localStorage()?.removeItem('shipTheme');\n this.#theme.set(null);\n return;\n }\n\n this.localStorage()?.setItem('shipTheme', theme);\n this.#theme.set(theme);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ShipButtonSize, ShipColor, ShipSheetVariant } from '@ship-ui/core';\nimport { ShipButton } from '@ship-ui/core/ship-button';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipThemeOption, ShipThemeState } from './ship-theme-state';\n\n@Component({\n selector: 'ship-theme-toggle',\n styleUrl: './ship-theme-toggle.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon, ShipButton],\n template: `\n <button shButton [color]=\"color()\" [variant]=\"variant()\" [size]=\"size()\" (click)=\"toggleTheme()\">\n @if (theme() === 'dark') {\n <sh-icon>moon-bold</sh-icon>\n } @else if (theme() === 'light') {\n <sh-icon>sun-bold</sh-icon>\n } @else if (theme() === null) {\n <sh-icon>circle-half-tilt-bold</sh-icon>\n }\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipThemeToggle {\n #themeState = inject(ShipThemeState);\n\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n size = input<ShipButtonSize | null>('small');\n\n theme = this.#themeState.theme;\n\n toggleTheme() {\n this.#themeState.toggleTheme();\n }\n\n setTheme(theme: ShipThemeOption) {\n this.#themeState.setTheme(theme);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ship-ui/core",
3
3
  "license": "MIT",
4
- "version": "0.22.9",
4
+ "version": "0.22.10",
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=20",
7
7
  "@angular/core": ">=20",
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { ElementRef, TemplateRef, OutputEmitterRef, InputSignal, ComponentRef, EmbeddedViewRef, OutputRefSubscription, Type } from '@angular/core';
3
3
 
4
4
  type ShipDialogOptions = {
5
- class?: 'default' | 'type-b' | string;
5
+ class?: 'default' | 'type-b' | 'type-c' | string;
6
6
  width?: string;
7
7
  maxWidth?: string;
8
8
  height?: string;
@@ -18,7 +18,7 @@ declare class ShipDialog {
18
18
  options: _angular_core.InputSignal<Partial<ShipDialogOptions> | undefined>;
19
19
  closed: _angular_core.OutputEmitterRef<void>;
20
20
  defaultOptionMerge: _angular_core.Signal<{
21
- class: "default" | "type-b" | string;
21
+ class: "default" | "type-b" | "type-c" | string;
22
22
  width?: string;
23
23
  maxWidth?: string;
24
24
  height?: string;
@@ -16,10 +16,11 @@ interface ShipSpotlightServiceOptions {
16
16
  shortcut?: string;
17
17
  customFilter?: boolean;
18
18
  searchQuery?: string;
19
+ dialogClass?: string;
19
20
  }
20
21
  interface ShipSpotlightConfig {
21
22
  defaultItems?: ShipSpotlightItem[];
22
- enableShortcuts?: boolean;
23
+ enableGlobalEventListener?: boolean;
23
24
  }
24
25
  declare const SHIP_SPOTLIGHT_CONFIG: InjectionToken<ShipSpotlightConfig>;
25
26
  declare function provideShipSpotlight(config: ShipSpotlightConfig): Provider;