@3ddv/software-division-components 2.0.15 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +2 -0
  2. package/backoffice/datepicker/datepicker.component.css +262 -0
  3. package/fesm2022/3ddv-software-division-components-dvm-cart.mjs +18 -6
  4. package/fesm2022/3ddv-software-division-components-dvm-cart.mjs.map +1 -1
  5. package/fesm2022/3ddv-software-division-components-dvm-loader.mjs +18 -4
  6. package/fesm2022/3ddv-software-division-components-dvm-loader.mjs.map +1 -1
  7. package/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs +26 -9
  8. package/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs.map +1 -1
  9. package/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs +2 -2
  10. package/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs.map +1 -1
  11. package/fesm2022/3ddv-software-division-components-generic-dialog.mjs +173 -19
  12. package/fesm2022/3ddv-software-division-components-generic-dialog.mjs.map +1 -1
  13. package/fesm2022/3ddv-software-division-components-generic-icon.mjs +45 -19
  14. package/fesm2022/3ddv-software-division-components-generic-icon.mjs.map +1 -1
  15. package/fesm2022/3ddv-software-division-components-generic-select.mjs +4 -3
  16. package/fesm2022/3ddv-software-division-components-generic-select.mjs.map +1 -1
  17. package/fesm2022/3ddv-software-division-components.mjs +14 -8
  18. package/fesm2022/3ddv-software-division-components.mjs.map +1 -1
  19. package/generic/braintree/braintree.component.css +7 -0
  20. package/host-tailwind-layer.css +7 -0
  21. package/package.json +77 -6
  22. package/shared/themes/sdc.css +68 -0
  23. package/styles.css +1 -1
  24. package/types/3ddv-software-division-components-dvm-cart.d.ts +20 -3
  25. package/types/3ddv-software-division-components-dvm-loader.d.ts +12 -5
  26. package/types/3ddv-software-division-components-dvm-map-loader.d.ts +3 -3
  27. package/types/3ddv-software-division-components-generic-dialog.d.ts +121 -49
  28. package/types/3ddv-software-division-components-generic-icon.d.ts +8 -2
  29. package/types/3ddv-software-division-components-generic-select.d.ts +2 -1
  30. package/types/3ddv-software-division-components.d.ts +10 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, effect, untracked, Directive, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, ViewContainerRef, ViewChild, signal, OutputEmitterRef, Injectable, NgModule, viewChild } from '@angular/core';
2
+ import { input, computed, effect, untracked, Directive, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, ViewContainerRef, ViewChild, signal, OutputEmitterRef, Injectable, NgModule, viewChild, ElementRef } from '@angular/core';
3
3
  import * as i1 from '@spartan-ng/brain/dialog';
4
4
  import { BrnDialog, BrnDialogOverlay, provideBrnDialogDefaultOptions, BrnDialogRef, injectBrnDialogContext, BrnDialogClose, BrnDialogDescription, BrnDialogTitle, BrnDialogService, cssClassesToArray, DEFAULT_BRN_DIALOG_OPTIONS } from '@spartan-ng/brain/dialog';
5
5
  import { injectCustomClassSettable, hlm } from '@spartan-ng/brain/core';
@@ -99,16 +99,30 @@ class HlmDialogContent {
99
99
  _outlet;
100
100
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
101
101
  fitContent = input(false, ...(ngDevMode ? [{ debugName: "fitContent" }] : []));
102
+ /** When false, the panel close (X) control is not rendered. Default true. Overridden by dialog open context `$showCloseButton` when set. */
103
+ showCloseButton = input(true, ...(ngDevMode ? [{ debugName: "showCloseButton" }] : []));
102
104
  projectedRef = null;
103
105
  state = computed(() => this._dialogRef?.state() ?? 'closed', ...(ngDevMode ? [{ debugName: "state" }] : []));
104
106
  componentInputs = computed(() => {
105
- const { $component, $dynamicComponentClass, $fitContent, close, ...rest } = this._dialogContext;
107
+ const rawContext = this._dialogContext;
108
+ if (rawContext == null || typeof rawContext !== 'object') {
109
+ return {};
110
+ }
111
+ const { $component, $dynamicComponentClass, $fitContent, $showCloseButton, close, ...rest } = rawContext;
106
112
  return rest;
107
113
  }, ...(ngDevMode ? [{ debugName: "componentInputs" }] : []));
108
- _computedClass = computed(() => hlm('border-border grid w-full relative gap-4 border bg-white p-6 shadow-lg [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] rounded-lg md:w-full', this.userClass(), this.fitContent() || this._fitContent ? '' : 'max-w-lg', this._dynamicComponentClass), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
114
+ _computedClass = computed(() => hlm('grid w-full relative gap-4 border-0 bg-white p-6 shadow-lg outline-none ring-0 [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] rounded-lg md:w-full', this.userClass(), this.fitContent() || this._fitContent ? '' : 'max-w-lg', this._dynamicComponentClass), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
109
115
  component = this._dialogContext?.$component;
110
116
  _dynamicComponentClass = this._dialogContext?.$dynamicComponentClass;
111
117
  _fitContent = this._dialogContext?.$fitContent ?? false;
118
+ effectiveShowCloseButton = computed(() => {
119
+ const ctx = this._dialogContext;
120
+ const fromContext = ctx != null && typeof ctx === 'object' && '$showCloseButton' in ctx ? ctx.$showCloseButton : undefined;
121
+ if (typeof fromContext === 'boolean') {
122
+ return fromContext;
123
+ }
124
+ return this.showCloseButton();
125
+ }, ...(ngDevMode ? [{ debugName: "effectiveShowCloseButton" }] : []));
112
126
  ngAfterViewInit() {
113
127
  if (!this.component || !this._outlet) {
114
128
  return;
@@ -119,17 +133,19 @@ class HlmDialogContent {
119
133
  }
120
134
  }
121
135
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: HlmDialogContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: HlmDialogContent, isStandalone: true, selector: "hlm-dialog-content", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, fitContent: { classPropertyName: "fitContent", publicName: "fitContent", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()", "attr.data-state": "state()" } }, providers: [provideIcons({ lucideX })], viewQueries: [{ propertyName: "_outlet", first: true, predicate: ["outlet"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: HlmDialogContent, isStandalone: true, selector: "hlm-dialog-content", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, fitContent: { classPropertyName: "fitContent", publicName: "fitContent", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()", "attr.data-state": "state()" } }, providers: [provideIcons({ lucideX })], viewQueries: [{ propertyName: "_outlet", first: true, predicate: ["outlet"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
123
137
  @if (component) {
124
138
  <ng-container #outlet />
125
139
  } @else {
126
140
  <ng-content />
127
141
  }
128
142
 
129
- <button brnDialogClose class="animated-button" hlm>
130
- <span class="sr-only">Close</span>
131
- <ng-icon hlm name="lucideX" size="sm" />
132
- </button>
143
+ @if (effectiveShowCloseButton()) {
144
+ <button brnDialogClose class="animated-button" hlm type="button">
145
+ <span class="sr-only">Close</span>
146
+ <ng-icon hlm name="lucideX" size="sm" />
147
+ </button>
148
+ }
133
149
  `, isInline: true, dependencies: [{ kind: "directive", type: BrnDialogClose, selector: "button[brnDialogClose]", inputs: ["delay"] }, { kind: "directive", type: HlmDialogClose, selector: "[hlmDialogClose],[brnDialogClose][hlm]", inputs: ["class"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: HlmIcon, selector: "ng-icon[hlm]", inputs: ["size", "variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
134
150
  }
135
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: HlmDialogContent, decorators: [{
@@ -149,10 +165,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
149
165
  <ng-content />
150
166
  }
151
167
 
152
- <button brnDialogClose class="animated-button" hlm>
153
- <span class="sr-only">Close</span>
154
- <ng-icon hlm name="lucideX" size="sm" />
155
- </button>
168
+ @if (effectiveShowCloseButton()) {
169
+ <button brnDialogClose class="animated-button" hlm type="button">
170
+ <span class="sr-only">Close</span>
171
+ <ng-icon hlm name="lucideX" size="sm" />
172
+ </button>
173
+ }
156
174
  `,
157
175
  changeDetection: ChangeDetectionStrategy.OnPush,
158
176
  encapsulation: ViewEncapsulation.None,
@@ -160,7 +178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
160
178
  }], propDecorators: { _outlet: [{
161
179
  type: ViewChild,
162
180
  args: ['outlet', { read: ViewContainerRef }]
163
- }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], fitContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitContent", required: false }] }] } });
181
+ }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], fitContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitContent", required: false }] }], showCloseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCloseButton", required: false }] }] } });
164
182
 
165
183
  class HlmDialogDescription {
166
184
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
@@ -232,10 +250,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
232
250
  }]
233
251
  }], propDecorators: { userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
234
252
 
253
+ /** CSS custom properties read from `sdc-dialog` (or any host element). */
254
+ const SDC_DIALOG_PANE_CSS_VARS = {
255
+ width: '--sdc-dialog-pane-width',
256
+ maxWidth: '--sdc-dialog-pane-max-width',
257
+ height: '--sdc-dialog-pane-height',
258
+ maxHeight: '--sdc-dialog-pane-max-height',
259
+ };
260
+ function readOverlayPaneCssVars(host) {
261
+ const computed = getComputedStyle(host);
262
+ const read = (varName) => {
263
+ const raw = computed.getPropertyValue(varName).trim();
264
+ return raw === '' ? undefined : raw;
265
+ };
266
+ return {
267
+ width: read(SDC_DIALOG_PANE_CSS_VARS.width),
268
+ maxWidth: read(SDC_DIALOG_PANE_CSS_VARS.maxWidth),
269
+ height: read(SDC_DIALOG_PANE_CSS_VARS.height),
270
+ maxHeight: read(SDC_DIALOG_PANE_CSS_VARS.maxHeight),
271
+ };
272
+ }
273
+ function pickOverlayPaneFromOptions(options) {
274
+ if (!options) {
275
+ return {};
276
+ }
277
+ const size = {};
278
+ if (options.overlayPaneWidth !== undefined && options.overlayPaneWidth !== '') {
279
+ size.width = options.overlayPaneWidth;
280
+ }
281
+ if (options.overlayPaneMaxWidth !== undefined && options.overlayPaneMaxWidth !== '') {
282
+ size.maxWidth = options.overlayPaneMaxWidth;
283
+ }
284
+ if (options.overlayPaneHeight !== undefined && options.overlayPaneHeight !== '') {
285
+ size.height = options.overlayPaneHeight;
286
+ }
287
+ if (options.overlayPaneMaxHeight !== undefined && options.overlayPaneMaxHeight !== '') {
288
+ size.maxHeight = options.overlayPaneMaxHeight;
289
+ }
290
+ return size;
291
+ }
292
+ function mergeOverlayPaneSizes(...layers) {
293
+ const merged = {};
294
+ for (const layer of layers) {
295
+ for (const key of ['width', 'maxWidth', 'height', 'maxHeight']) {
296
+ const v = layer[key];
297
+ if (v !== undefined && v !== '') {
298
+ merged[key] = v;
299
+ }
300
+ }
301
+ }
302
+ return merged;
303
+ }
304
+ function overlayPaneSizeToUpdateConfig(size) {
305
+ const cfg = {};
306
+ if (size.width !== undefined) {
307
+ cfg.width = size.width;
308
+ }
309
+ if (size.maxWidth !== undefined) {
310
+ cfg.maxWidth = size.maxWidth;
311
+ }
312
+ if (size.height !== undefined) {
313
+ cfg.height = size.height;
314
+ }
315
+ if (size.maxHeight !== undefined) {
316
+ cfg.maxHeight = size.maxHeight;
317
+ }
318
+ return cfg;
319
+ }
320
+
235
321
  class HlmDialogService {
236
322
  ref = signal(null, ...(ngDevMode ? [{ debugName: "ref" }] : []));
237
323
  component = signal(null, ...(ngDevMode ? [{ debugName: "component" }] : []));
324
+ /**
325
+ * Host element of `sdc-dialog`; used to read `--sdc-dialog-pane-*` CSS variables on each `open()`.
326
+ * Registered by `DialogComponent`; expect a single dialog host per app.
327
+ */
328
+ hostElement = signal(null, ...(ngDevMode ? [{ debugName: "hostElement" }] : []));
329
+ /**
330
+ * Default overlay pane size from `sdc-dialog` inputs. Overridden per `open()` and by CSS vars
331
+ * when defined on the host (merge order: CSS vars → this signal → `open()` options).
332
+ */
333
+ defaultOverlayPaneSize = signal({}, ...(ngDevMode ? [{ debugName: "defaultOverlayPaneSize" }] : []));
238
334
  _brnDialogService = inject(BrnDialogService);
335
+ /**
336
+ * Clears host registration when the active `sdc-dialog` is destroyed (single-host apps).
337
+ */
338
+ releaseHostIfMatch(host) {
339
+ if (this.hostElement() === host) {
340
+ this.hostElement.set(null);
341
+ this.defaultOverlayPaneSize.set({});
342
+ }
343
+ }
239
344
  open(component, options) {
240
345
  if (options) {
241
346
  options.panelClass = 'dialog-overlay-margin';
@@ -243,24 +348,41 @@ class HlmDialogService {
243
348
  else {
244
349
  options = { panelClass: 'dialog-overlay-margin' };
245
350
  }
351
+ const baseContext = typeof options?.context === 'object' && options?.context !== null ? options.context : {};
352
+ const showCloseFromContext = baseContext &&
353
+ typeof baseContext === 'object' &&
354
+ '$showCloseButton' in baseContext &&
355
+ typeof baseContext.$showCloseButton === 'boolean'
356
+ ? baseContext.$showCloseButton
357
+ : undefined;
358
+ const resolvedShowCloseButton = options?.showCloseButton !== undefined ? options.showCloseButton : (showCloseFromContext ?? true);
246
359
  const mergedOptions = {
247
360
  ...DEFAULT_BRN_DIALOG_OPTIONS,
248
361
  ...options,
249
362
  backdropClass: cssClassesToArray(`${hlmDialogOverlayClass} ${options?.backdropClass ?? ''} dialog-container`),
250
363
  context: {
251
- ...(typeof options?.context === 'object' && options?.context !== null ? options.context : {}),
364
+ ...baseContext,
252
365
  $component: component,
253
366
  $dynamicComponentClass: options?.contentClass,
254
367
  $fitContent: options?.fitContent,
368
+ $showCloseButton: resolvedShowCloseButton,
255
369
  },
256
370
  };
257
371
  const reference = this._brnDialogService.open(HlmDialogContent, undefined, mergedOptions.context, mergedOptions);
258
372
  this.ref.set(reference);
259
373
  const cdkRef = reference._cdkDialogRef;
374
+ const host = this.hostElement();
375
+ const fromCss = host ? readOverlayPaneCssVars(host) : {};
376
+ const fromInputs = this.defaultOverlayPaneSize();
377
+ const fromOpen = pickOverlayPaneFromOptions(options);
378
+ const resolvedPane = mergeOverlayPaneSizes(fromCss, fromInputs, fromOpen);
379
+ const updateCfg = overlayPaneSizeToUpdateConfig(resolvedPane);
380
+ if (Object.keys(updateCfg).length > 0) {
381
+ cdkRef?.overlayRef?.updateSize(updateCfg);
382
+ }
260
383
  cdkRef?.componentRef?.changeDetectorRef?.detectChanges();
261
384
  const contentInstance = cdkRef?.componentRef?.instance;
262
385
  const instance = contentInstance?.projectedRef?.instance;
263
- // We only expose the component outputs here
264
386
  let outputs = null;
265
387
  if (instance) {
266
388
  const result = {};
@@ -315,19 +437,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
315
437
  class DialogComponent {
316
438
  dialogService = inject(HlmDialogService);
317
439
  dialogComponent = viewChild(BrnDialog, ...(ngDevMode ? [{ debugName: "dialogComponent" }] : []));
440
+ hostEl = inject(ElementRef);
318
441
  fitContent = input(false, ...(ngDevMode ? [{ debugName: "fitContent" }] : []));
442
+ showCloseButton = input(true, ...(ngDevMode ? [{ debugName: "showCloseButton" }] : []));
443
+ /**
444
+ * Default CDK overlay pane width (e.g. `800px`). Merge order: CSS vars on `sdc-dialog` → these inputs →
445
+ * `DialogService.open({ overlayPaneWidth, ... })` (strongest).
446
+ */
447
+ overlayPaneWidth = input(undefined, ...(ngDevMode ? [{ debugName: "overlayPaneWidth" }] : []));
448
+ overlayPaneMaxWidth = input(undefined, ...(ngDevMode ? [{ debugName: "overlayPaneMaxWidth" }] : []));
449
+ overlayPaneHeight = input(undefined, ...(ngDevMode ? [{ debugName: "overlayPaneHeight" }] : []));
450
+ overlayPaneMaxHeight = input(undefined, ...(ngDevMode ? [{ debugName: "overlayPaneMaxHeight" }] : []));
319
451
  constructor() {
320
452
  effect(() => {
321
453
  this.dialogService.component.set(this.dialogComponent() ?? null);
454
+ this.dialogService.hostElement.set(this.hostEl.nativeElement);
455
+ const size = {};
456
+ const w = this.overlayPaneWidth();
457
+ const maxW = this.overlayPaneMaxWidth();
458
+ const h = this.overlayPaneHeight();
459
+ const maxH = this.overlayPaneMaxHeight();
460
+ if (w !== undefined && w !== '') {
461
+ size.width = w;
462
+ }
463
+ if (maxW !== undefined && maxW !== '') {
464
+ size.maxWidth = maxW;
465
+ }
466
+ if (h !== undefined && h !== '') {
467
+ size.height = h;
468
+ }
469
+ if (maxH !== undefined && maxH !== '') {
470
+ size.maxHeight = maxH;
471
+ }
472
+ this.dialogService.defaultOverlayPaneSize.set(size);
322
473
  });
323
474
  }
475
+ ngOnDestroy() {
476
+ this.dialogService.releaseHostIfMatch(this.hostEl.nativeElement);
477
+ }
324
478
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
325
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.4", type: DialogComponent, isStandalone: true, selector: "sdc-dialog", inputs: { fitContent: { classPropertyName: "fitContent", publicName: "fitContent", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "dialogComponent", first: true, predicate: BrnDialog, descendants: true, isSignal: true }], ngImport: i0, template: "<hlm-dialog #dialogRef>\n <hlm-dialog-content *hlmDialogContent=\"let ctx\" [fitContent]=\"fitContent()\" class=\"dialog-content\" />\n</hlm-dialog>\n", dependencies: [{ kind: "component", type: HlmDialogContent, selector: "hlm-dialog-content", inputs: ["class", "fitContent"] }, { kind: "component", type: HlmDialog, selector: "hlm-dialog", exportAs: ["hlmDialog"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
479
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.4", type: DialogComponent, isStandalone: true, selector: "sdc-dialog", inputs: { fitContent: { classPropertyName: "fitContent", publicName: "fitContent", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, overlayPaneWidth: { classPropertyName: "overlayPaneWidth", publicName: "overlayPaneWidth", isSignal: true, isRequired: false, transformFunction: null }, overlayPaneMaxWidth: { classPropertyName: "overlayPaneMaxWidth", publicName: "overlayPaneMaxWidth", isSignal: true, isRequired: false, transformFunction: null }, overlayPaneHeight: { classPropertyName: "overlayPaneHeight", publicName: "overlayPaneHeight", isSignal: true, isRequired: false, transformFunction: null }, overlayPaneMaxHeight: { classPropertyName: "overlayPaneMaxHeight", publicName: "overlayPaneMaxHeight", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "dialogComponent", first: true, predicate: BrnDialog, descendants: true, isSignal: true }], ngImport: i0, template: "<hlm-dialog #dialogRef>\n <hlm-dialog-content\n *hlmDialogContent=\"let ctx\"\n [fitContent]=\"fitContent()\"\n [showCloseButton]=\"showCloseButton()\"\n class=\"dialog-content\" />\n</hlm-dialog>\n", dependencies: [{ kind: "component", type: HlmDialogContent, selector: "hlm-dialog-content", inputs: ["class", "fitContent", "showCloseButton"] }, { kind: "component", type: HlmDialog, selector: "hlm-dialog", exportAs: ["hlmDialog"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
326
480
  }
327
481
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DialogComponent, decorators: [{
328
482
  type: Component,
329
- args: [{ selector: 'sdc-dialog', imports: [HlmDialogContent, HlmDialog], changeDetection: ChangeDetectionStrategy.OnPush, template: "<hlm-dialog #dialogRef>\n <hlm-dialog-content *hlmDialogContent=\"let ctx\" [fitContent]=\"fitContent()\" class=\"dialog-content\" />\n</hlm-dialog>\n" }]
330
- }], ctorParameters: () => [], propDecorators: { dialogComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => BrnDialog), { isSignal: true }] }], fitContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitContent", required: false }] }] } });
483
+ args: [{ selector: 'sdc-dialog', imports: [HlmDialogContent, HlmDialog], changeDetection: ChangeDetectionStrategy.OnPush, template: "<hlm-dialog #dialogRef>\n <hlm-dialog-content\n *hlmDialogContent=\"let ctx\"\n [fitContent]=\"fitContent()\"\n [showCloseButton]=\"showCloseButton()\"\n class=\"dialog-content\" />\n</hlm-dialog>\n" }]
484
+ }], ctorParameters: () => [], propDecorators: { dialogComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => BrnDialog), { isSignal: true }] }], fitContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitContent", required: false }] }], showCloseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCloseButton", required: false }] }], overlayPaneWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPaneWidth", required: false }] }], overlayPaneMaxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPaneMaxWidth", required: false }] }], overlayPaneHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPaneHeight", required: false }] }], overlayPaneMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPaneMaxHeight", required: false }] }] } });
331
485
 
332
486
  /*
333
487
  * Public API Surface of software-division-components
@@ -337,5 +491,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
337
491
  * Generated bundle index. Do not edit.
338
492
  */
339
493
 
340
- export { DialogComponent, HlmDialogService as DialogService, HlmDialog, HlmDialogClose, HlmDialogContent, HlmDialogDescription, HlmDialogFooter, HlmDialogHeader, HlmDialogImports, HlmDialogModule, HlmDialogOverlay, HlmDialogService, HlmDialogTitle, hlmDialogOverlayClass };
494
+ export { DialogComponent, HlmDialogService as DialogService, HlmDialog, HlmDialogClose, HlmDialogContent, HlmDialogDescription, HlmDialogFooter, HlmDialogHeader, HlmDialogImports, HlmDialogModule, HlmDialogOverlay, HlmDialogService, HlmDialogTitle, SDC_DIALOG_PANE_CSS_VARS, hlmDialogOverlayClass, mergeOverlayPaneSizes, overlayPaneSizeToUpdateConfig, pickOverlayPaneFromOptions, readOverlayPaneCssVars };
341
495
  //# sourceMappingURL=3ddv-software-division-components-generic-dialog.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"3ddv-software-division-components-generic-dialog.mjs","sources":["../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.ts","../../generic/dialog/libs/ui-dialog-helm/src/index.ts","../../generic/dialog/dialog.component.ts","../../generic/dialog/dialog.component.html","../../generic/dialog/public-api.ts","../../generic/dialog/3ddv-software-division-components-generic-dialog.ts"],"sourcesContent":["import { computed, Directive, effect, input, untracked } from '@angular/core';\nimport { hlm, injectCustomClassSettable } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\nexport const hlmDialogOverlayClass =\n 'bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0';\n\n@Directive({\n selector: '[hlmDialogOverlay],brn-dialog-overlay[hlm]',\n})\nexport class HlmDialogOverlay {\n private readonly _classSettable = injectCustomClassSettable({ optional: true, host: true });\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm(hlmDialogOverlayClass, this.userClass()));\n\n constructor() {\n effect(() => {\n const newClass = this._computedClass();\n untracked(() => this._classSettable?.setClassToCustomElement(newClass));\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from '@angular/core';\nimport { BrnDialog, BrnDialogOverlay, provideBrnDialogDefaultOptions } from '@spartan-ng/brain/dialog';\nimport { HlmDialogOverlay } from './hlm-dialog-overlay';\n\n@Component({\n selector: 'hlm-dialog',\n\n imports: [BrnDialogOverlay, HlmDialogOverlay],\n providers: [\n {\n provide: BrnDialog,\n useExisting: forwardRef(() => HlmDialog),\n },\n provideBrnDialogDefaultOptions({\n hasBackdrop: true,\n disableClose: false,\n closeOnBackdropClick: true,\n closeOnOutsidePointerEvents: true,\n scrollStrategy: 'reposition',\n attachPositions: [{ originX: 'center', originY: 'center', overlayX: 'center', overlayY: 'center' }],\n }),\n ],\n template: `\n <brn-dialog-overlay hlm />\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'hlmDialog',\n})\nexport class HlmDialog extends BrnDialog {}\n","import { computed, Directive, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmDialogClose],[brnDialogClose][hlm]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmDialogClose {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(\n 'absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n this.userClass()\n )\n );\n}\n","import { HlmIcon } from '@3ddv/software-division-components/generic/icon';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n computed,\n inject,\n input,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideX } from '@ng-icons/lucide';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { BrnDialogClose, BrnDialogRef, injectBrnDialogContext } from '@spartan-ng/brain/dialog';\nimport type { ClassValue } from 'clsx';\nimport { HlmDialogClose } from './hlm-dialog-close';\n\n@Component({\n selector: 'hlm-dialog-content',\n imports: [BrnDialogClose, HlmDialogClose, NgIcon, HlmIcon],\n providers: [provideIcons({ lucideX })],\n host: {\n '[class]': '_computedClass()',\n '[attr.data-state]': 'state()',\n },\n template: `\n @if (component) {\n <ng-container #outlet />\n } @else {\n <ng-content />\n }\n\n <button brnDialogClose class=\"animated-button\" hlm>\n <span class=\"sr-only\">Close</span>\n <ng-icon hlm name=\"lucideX\" size=\"sm\" />\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HlmDialogContent implements AfterViewInit {\n private readonly _dialogRef = inject(BrnDialogRef);\n private readonly _dialogContext = injectBrnDialogContext({ optional: true });\n\n @ViewChild('outlet', { read: ViewContainerRef }) private readonly _outlet!: ViewContainerRef;\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n public readonly fitContent = input<boolean>(false);\n public projectedRef: ComponentRef<unknown> | null = null;\n\n public readonly state = computed(() => this._dialogRef?.state() ?? 'closed');\n public readonly componentInputs = computed(() => {\n const { $component, $dynamicComponentClass, $fitContent, close, ...rest } = this._dialogContext;\n return rest;\n });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'border-border grid w-full relative gap-4 border bg-white p-6 shadow-lg [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] rounded-lg md:w-full',\n this.userClass(),\n this.fitContent() || this._fitContent ? '' : 'max-w-lg',\n this._dynamicComponentClass\n )\n );\n\n public readonly component = this._dialogContext?.$component;\n private readonly _dynamicComponentClass = this._dialogContext?.$dynamicComponentClass;\n private readonly _fitContent = this._dialogContext?.$fitContent ?? false;\n\n public ngAfterViewInit(): void {\n if (!this.component || !this._outlet) {\n return;\n }\n this.projectedRef = this._outlet.createComponent(this.component);\n for (const [key, value] of Object.entries(this.componentInputs())) {\n this.projectedRef.setInput(key, value);\n }\n }\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { BrnDialogDescription } from '@spartan-ng/brain/dialog';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmDialogDescription]',\n\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [BrnDialogDescription],\n})\nexport class HlmDialogDescription {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm('text-sm text-muted-foreground', this.userClass()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-dialog-footer',\n\n template: ` <ng-content /> `,\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDialogFooter {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected _computedClass = computed(() =>\n hlm('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', this.userClass())\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-dialog-header',\n\n template: ` <ng-content /> `,\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDialogHeader {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected _computedClass = computed(() =>\n hlm('flex flex-col space-y-1.5 text-center sm:text-left', this.userClass())\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { BrnDialogTitle } from '@spartan-ng/brain/dialog';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmDialogTitle]',\n\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [BrnDialogTitle],\n})\nexport class HlmDialogTitle {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm('text-lg font-semibold leading-none tracking-tight', this.userClass())\n );\n}\n","import type { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable, OutputEmitterRef, signal, TemplateRef } from '@angular/core';\nimport {\n BrnDialog,\n type BrnDialogOptions,\n BrnDialogRef,\n BrnDialogService,\n cssClassesToArray,\n DEFAULT_BRN_DIALOG_OPTIONS,\n} from '@spartan-ng/brain/dialog';\nimport { HlmDialogContent } from './hlm-dialog-content';\nimport { hlmDialogOverlayClass } from './hlm-dialog-overlay';\n\nexport type HlmDialogOptions<DialogContext = unknown> = BrnDialogOptions & {\n contentClass?: string;\n fitContent?: boolean;\n context?: DialogContext;\n};\n\nexport type OutputsOf<T> = {\n [K in keyof T as T[K] extends OutputEmitterRef<any> ? K : never]: T[K];\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HlmDialogService {\n public ref = signal<BrnDialogRef<any> | null>(null);\n public component = signal<BrnDialog | null>(null);\n private readonly _brnDialogService = inject(BrnDialogService);\n\n public open<T = unknown>(\n component: ComponentType<T> | TemplateRef<T>,\n options?: Partial<HlmDialogOptions>\n ): { reference: BrnDialogRef<any>; outputs: OutputsOf<T> | null } {\n if (options) {\n options.panelClass = 'dialog-overlay-margin';\n } else {\n options = { panelClass: 'dialog-overlay-margin' };\n }\n\n const mergedOptions = {\n ...DEFAULT_BRN_DIALOG_OPTIONS,\n ...options,\n backdropClass: cssClassesToArray(`${hlmDialogOverlayClass} ${options?.backdropClass ?? ''} dialog-container`),\n context: {\n ...(typeof options?.context === 'object' && options?.context !== null ? options.context : {}),\n $component: component,\n $dynamicComponentClass: options?.contentClass,\n $fitContent: options?.fitContent,\n },\n };\n const reference = this._brnDialogService.open(HlmDialogContent, undefined, mergedOptions.context, mergedOptions);\n this.ref.set(reference);\n\n const cdkRef = (reference as any)._cdkDialogRef;\n cdkRef?.componentRef?.changeDetectorRef?.detectChanges();\n\n const contentInstance = cdkRef?.componentRef?.instance as HlmDialogContent;\n const instance = contentInstance?.projectedRef?.instance as T | undefined;\n\n // We only expose the component outputs here\n let outputs: OutputsOf<T> | null = null;\n if (instance) {\n const result = {} as Record<string, unknown>;\n for (const key of Object.getOwnPropertyNames(instance)) {\n if ((instance as any)[key] instanceof OutputEmitterRef) {\n result[key] = (instance as any)[key];\n }\n }\n outputs = result as OutputsOf<T>;\n }\n\n return { reference, outputs };\n }\n\n public close(): void {\n if (!this.ref()) {\n return;\n }\n\n this.ref()?.close();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { HlmDialog } from './lib/hlm-dialog';\nimport { HlmDialogClose } from './lib/hlm-dialog-close';\nimport { HlmDialogContent } from './lib/hlm-dialog-content';\nimport { HlmDialogDescription } from './lib/hlm-dialog-description';\nimport { HlmDialogFooter } from './lib/hlm-dialog-footer';\nimport { HlmDialogHeader } from './lib/hlm-dialog-header';\nimport { HlmDialogOverlay } from './lib/hlm-dialog-overlay';\nimport { HlmDialogTitle } from './lib/hlm-dialog-title';\n\nexport * from './lib/hlm-dialog';\nexport * from './lib/hlm-dialog-close';\nexport * from './lib/hlm-dialog-content';\nexport * from './lib/hlm-dialog-description';\nexport * from './lib/hlm-dialog-footer';\nexport * from './lib/hlm-dialog-header';\nexport * from './lib/hlm-dialog-overlay';\nexport * from './lib/hlm-dialog-title';\nexport * from './lib/hlm-dialog.service';\n\nexport const HlmDialogImports = [\n HlmDialog,\n HlmDialogClose,\n HlmDialogContent,\n HlmDialogDescription,\n HlmDialogFooter,\n HlmDialogHeader,\n HlmDialogOverlay,\n HlmDialogTitle,\n] as const;\n\n@NgModule({\n // imports: [...HlmDialogImports],\n // exports: [...HlmDialogImports],\n})\nexport class HlmDialogModule {}\n","import { ChangeDetectionStrategy, Component, effect, inject, input, viewChild } from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\nimport { HlmDialog, HlmDialogContent, HlmDialogService } from './libs/ui-dialog-helm/src';\n\n@Component({\n selector: 'sdc-dialog',\n imports: [HlmDialogContent, HlmDialog],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dialog.component.html',\n})\nexport class DialogComponent {\n public dialogService = inject(HlmDialogService);\n public dialogComponent = viewChild(BrnDialog);\n public fitContent = input<boolean>(false);\n\n public constructor() {\n effect(() => {\n this.dialogService.component.set(this.dialogComponent() ?? null);\n });\n }\n}\n","<hlm-dialog #dialogRef>\n <hlm-dialog-content *hlmDialogContent=\"let ctx\" [fitContent]=\"fitContent()\" class=\"dialog-content\" />\n</hlm-dialog>\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './dialog.component';\nexport * from './libs/ui-dialog-helm/src';\nexport { HlmDialogService as DialogService } from './libs/ui-dialog-helm/src/lib/hlm-dialog.service';\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":"3ddv-software-division-components-generic-dialog.mjs","sources":["../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay-pane.ts","../../generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.ts","../../generic/dialog/libs/ui-dialog-helm/src/index.ts","../../generic/dialog/dialog.component.ts","../../generic/dialog/dialog.component.html","../../generic/dialog/public-api.ts","../../generic/dialog/3ddv-software-division-components-generic-dialog.ts"],"sourcesContent":["import { computed, Directive, effect, input, untracked } from '@angular/core';\nimport { hlm, injectCustomClassSettable } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\nexport const hlmDialogOverlayClass =\n 'bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0';\n\n@Directive({\n selector: '[hlmDialogOverlay],brn-dialog-overlay[hlm]',\n})\nexport class HlmDialogOverlay {\n private readonly _classSettable = injectCustomClassSettable({ optional: true, host: true });\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm(hlmDialogOverlayClass, this.userClass()));\n\n constructor() {\n effect(() => {\n const newClass = this._computedClass();\n untracked(() => this._classSettable?.setClassToCustomElement(newClass));\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from '@angular/core';\nimport { BrnDialog, BrnDialogOverlay, provideBrnDialogDefaultOptions } from '@spartan-ng/brain/dialog';\nimport { HlmDialogOverlay } from './hlm-dialog-overlay';\n\n@Component({\n selector: 'hlm-dialog',\n\n imports: [BrnDialogOverlay, HlmDialogOverlay],\n providers: [\n {\n provide: BrnDialog,\n useExisting: forwardRef(() => HlmDialog),\n },\n provideBrnDialogDefaultOptions({\n hasBackdrop: true,\n disableClose: false,\n closeOnBackdropClick: true,\n closeOnOutsidePointerEvents: true,\n scrollStrategy: 'reposition',\n attachPositions: [{ originX: 'center', originY: 'center', overlayX: 'center', overlayY: 'center' }],\n }),\n ],\n template: `\n <brn-dialog-overlay hlm />\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'hlmDialog',\n})\nexport class HlmDialog extends BrnDialog {}\n","import { computed, Directive, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmDialogClose],[brnDialogClose][hlm]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmDialogClose {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(\n 'absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n this.userClass()\n )\n );\n}\n","import { HlmIcon } from '@3ddv/software-division-components/generic/icon';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n computed,\n inject,\n input,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideX } from '@ng-icons/lucide';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { BrnDialogClose, BrnDialogRef, injectBrnDialogContext } from '@spartan-ng/brain/dialog';\nimport type { ClassValue } from 'clsx';\nimport { HlmDialogClose } from './hlm-dialog-close';\n\n@Component({\n selector: 'hlm-dialog-content',\n imports: [BrnDialogClose, HlmDialogClose, NgIcon, HlmIcon],\n providers: [provideIcons({ lucideX })],\n host: {\n '[class]': '_computedClass()',\n '[attr.data-state]': 'state()',\n },\n template: `\n @if (component) {\n <ng-container #outlet />\n } @else {\n <ng-content />\n }\n\n @if (effectiveShowCloseButton()) {\n <button brnDialogClose class=\"animated-button\" hlm type=\"button\">\n <span class=\"sr-only\">Close</span>\n <ng-icon hlm name=\"lucideX\" size=\"sm\" />\n </button>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HlmDialogContent implements AfterViewInit {\n private readonly _dialogRef = inject(BrnDialogRef);\n private readonly _dialogContext = injectBrnDialogContext({ optional: true });\n\n @ViewChild('outlet', { read: ViewContainerRef }) private readonly _outlet!: ViewContainerRef;\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n public readonly fitContent = input<boolean>(false);\n /** When false, the panel close (X) control is not rendered. Default true. Overridden by dialog open context `$showCloseButton` when set. */\n public readonly showCloseButton = input<boolean>(true);\n public projectedRef: ComponentRef<unknown> | null = null;\n\n public readonly state = computed(() => this._dialogRef?.state() ?? 'closed');\n public readonly componentInputs = computed(() => {\n const rawContext = this._dialogContext;\n if (rawContext == null || typeof rawContext !== 'object') {\n return {};\n }\n const { $component, $dynamicComponentClass, $fitContent, $showCloseButton, close, ...rest } = rawContext as Record<\n string,\n unknown\n >;\n return rest;\n });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'grid w-full relative gap-4 border-0 bg-white p-6 shadow-lg outline-none ring-0 [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] rounded-lg md:w-full',\n this.userClass(),\n this.fitContent() || this._fitContent ? '' : 'max-w-lg',\n this._dynamicComponentClass\n )\n );\n\n public readonly component = this._dialogContext?.$component;\n private readonly _dynamicComponentClass = this._dialogContext?.$dynamicComponentClass;\n private readonly _fitContent = this._dialogContext?.$fitContent ?? false;\n\n public readonly effectiveShowCloseButton = computed(() => {\n const ctx = this._dialogContext as { $showCloseButton?: boolean } | null | undefined;\n const fromContext =\n ctx != null && typeof ctx === 'object' && '$showCloseButton' in ctx ? ctx.$showCloseButton : undefined;\n if (typeof fromContext === 'boolean') {\n return fromContext;\n }\n return this.showCloseButton();\n });\n\n public ngAfterViewInit(): void {\n if (!this.component || !this._outlet) {\n return;\n }\n this.projectedRef = this._outlet.createComponent(this.component);\n for (const [key, value] of Object.entries(this.componentInputs())) {\n this.projectedRef.setInput(key, value);\n }\n }\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { BrnDialogDescription } from '@spartan-ng/brain/dialog';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmDialogDescription]',\n\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [BrnDialogDescription],\n})\nexport class HlmDialogDescription {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm('text-sm text-muted-foreground', this.userClass()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-dialog-footer',\n\n template: ` <ng-content /> `,\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDialogFooter {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected _computedClass = computed(() =>\n hlm('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', this.userClass())\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-dialog-header',\n\n template: ` <ng-content /> `,\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDialogHeader {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected _computedClass = computed(() =>\n hlm('flex flex-col space-y-1.5 text-center sm:text-left', this.userClass())\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { BrnDialogTitle } from '@spartan-ng/brain/dialog';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmDialogTitle]',\n\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [BrnDialogTitle],\n})\nexport class HlmDialogTitle {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm('text-lg font-semibold leading-none tracking-tight', this.userClass())\n );\n}\n","/**\n * CDK overlay pane sizing (Angular CDK applies this via `OverlayRef.updateSize`).\n * Configure from the host app using `DialogService.open({ ... })`, `sdc-dialog` inputs,\n * or CSS custom properties on `sdc-dialog` (see `readOverlayPaneCssVars`).\n */\nexport type HlmOverlayPaneSize = {\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n};\n\n/** CSS custom properties read from `sdc-dialog` (or any host element). */\nexport const SDC_DIALOG_PANE_CSS_VARS = {\n width: '--sdc-dialog-pane-width',\n maxWidth: '--sdc-dialog-pane-max-width',\n height: '--sdc-dialog-pane-height',\n maxHeight: '--sdc-dialog-pane-max-height',\n} as const;\n\nexport function readOverlayPaneCssVars(host: HTMLElement): HlmOverlayPaneSize {\n const computed = getComputedStyle(host);\n const read = (varName: string): string | undefined => {\n const raw = computed.getPropertyValue(varName).trim();\n return raw === '' ? undefined : raw;\n };\n return {\n width: read(SDC_DIALOG_PANE_CSS_VARS.width),\n maxWidth: read(SDC_DIALOG_PANE_CSS_VARS.maxWidth),\n height: read(SDC_DIALOG_PANE_CSS_VARS.height),\n maxHeight: read(SDC_DIALOG_PANE_CSS_VARS.maxHeight),\n };\n}\n\nexport function pickOverlayPaneFromOptions(options?: {\n overlayPaneWidth?: string;\n overlayPaneMaxWidth?: string;\n overlayPaneHeight?: string;\n overlayPaneMaxHeight?: string;\n}): HlmOverlayPaneSize {\n if (!options) {\n return {};\n }\n const size: HlmOverlayPaneSize = {};\n if (options.overlayPaneWidth !== undefined && options.overlayPaneWidth !== '') {\n size.width = options.overlayPaneWidth;\n }\n if (options.overlayPaneMaxWidth !== undefined && options.overlayPaneMaxWidth !== '') {\n size.maxWidth = options.overlayPaneMaxWidth;\n }\n if (options.overlayPaneHeight !== undefined && options.overlayPaneHeight !== '') {\n size.height = options.overlayPaneHeight;\n }\n if (options.overlayPaneMaxHeight !== undefined && options.overlayPaneMaxHeight !== '') {\n size.maxHeight = options.overlayPaneMaxHeight;\n }\n return size;\n}\n\nexport function mergeOverlayPaneSizes(...layers: HlmOverlayPaneSize[]): HlmOverlayPaneSize {\n const merged: HlmOverlayPaneSize = {};\n for (const layer of layers) {\n for (const key of ['width', 'maxWidth', 'height', 'maxHeight'] as const) {\n const v = layer[key];\n if (v !== undefined && v !== '') {\n merged[key] = v;\n }\n }\n }\n return merged;\n}\n\nexport function overlayPaneSizeToUpdateConfig(size: HlmOverlayPaneSize): {\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n} {\n const cfg: { width?: string; maxWidth?: string; height?: string; maxHeight?: string } = {};\n if (size.width !== undefined) {\n cfg.width = size.width;\n }\n if (size.maxWidth !== undefined) {\n cfg.maxWidth = size.maxWidth;\n }\n if (size.height !== undefined) {\n cfg.height = size.height;\n }\n if (size.maxHeight !== undefined) {\n cfg.maxHeight = size.maxHeight;\n }\n return cfg;\n}\n","import type { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable, OutputEmitterRef, signal, TemplateRef } from '@angular/core';\nimport {\n BrnDialog,\n BrnDialogRef,\n BrnDialogService,\n cssClassesToArray,\n DEFAULT_BRN_DIALOG_OPTIONS,\n type BrnDialogOptions,\n} from '@spartan-ng/brain/dialog';\nimport { HlmDialogContent } from './hlm-dialog-content';\nimport { hlmDialogOverlayClass } from './hlm-dialog-overlay';\nimport {\n mergeOverlayPaneSizes,\n overlayPaneSizeToUpdateConfig,\n pickOverlayPaneFromOptions,\n readOverlayPaneCssVars,\n type HlmOverlayPaneSize,\n} from './hlm-dialog-overlay-pane';\n\nexport type { HlmOverlayPaneSize } from './hlm-dialog-overlay-pane';\n\nexport type HlmDialogOptions<DialogContext = unknown> = BrnDialogOptions & {\n contentClass?: string;\n fitContent?: boolean;\n showCloseButton?: boolean;\n context?: DialogContext;\n /**\n * CDK overlay pane size (see `HlmOverlayPaneSize`). Overrides defaults from `sdc-dialog` inputs / CSS vars.\n * Spartan does not forward these to CDK; applied via `OverlayRef.updateSize`.\n */\n overlayPaneWidth?: string;\n overlayPaneMaxWidth?: string;\n overlayPaneHeight?: string;\n overlayPaneMaxHeight?: string;\n};\n\nexport type OutputsOf<T> = {\n [K in keyof T as T[K] extends OutputEmitterRef<any> ? K : never]: T[K];\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HlmDialogService {\n public ref = signal<BrnDialogRef<any> | null>(null);\n public component = signal<BrnDialog | null>(null);\n /**\n * Host element of `sdc-dialog`; used to read `--sdc-dialog-pane-*` CSS variables on each `open()`.\n * Registered by `DialogComponent`; expect a single dialog host per app.\n */\n public readonly hostElement = signal<HTMLElement | null>(null);\n /**\n * Default overlay pane size from `sdc-dialog` inputs. Overridden per `open()` and by CSS vars\n * when defined on the host (merge order: CSS vars → this signal → `open()` options).\n */\n public readonly defaultOverlayPaneSize = signal<HlmOverlayPaneSize>({});\n\n private readonly _brnDialogService = inject(BrnDialogService);\n\n /**\n * Clears host registration when the active `sdc-dialog` is destroyed (single-host apps).\n */\n public releaseHostIfMatch(host: HTMLElement): void {\n if (this.hostElement() === host) {\n this.hostElement.set(null);\n this.defaultOverlayPaneSize.set({});\n }\n }\n\n public open<T = unknown>(\n component: ComponentType<T> | TemplateRef<T>,\n options?: Partial<HlmDialogOptions>\n ): { reference: BrnDialogRef<any>; outputs: OutputsOf<T> | null } {\n if (options) {\n options.panelClass = 'dialog-overlay-margin';\n } else {\n options = { panelClass: 'dialog-overlay-margin' };\n }\n\n const baseContext = typeof options?.context === 'object' && options?.context !== null ? options.context : {};\n const showCloseFromContext =\n baseContext &&\n typeof baseContext === 'object' &&\n '$showCloseButton' in baseContext &&\n typeof (baseContext as { $showCloseButton: unknown }).$showCloseButton === 'boolean'\n ? (baseContext as { $showCloseButton: boolean }).$showCloseButton\n : undefined;\n const resolvedShowCloseButton =\n options?.showCloseButton !== undefined ? options.showCloseButton : (showCloseFromContext ?? true);\n\n const mergedOptions = {\n ...DEFAULT_BRN_DIALOG_OPTIONS,\n ...options,\n backdropClass: cssClassesToArray(`${hlmDialogOverlayClass} ${options?.backdropClass ?? ''} dialog-container`),\n context: {\n ...baseContext,\n $component: component,\n $dynamicComponentClass: options?.contentClass,\n $fitContent: options?.fitContent,\n $showCloseButton: resolvedShowCloseButton,\n },\n };\n const reference = this._brnDialogService.open(HlmDialogContent, undefined, mergedOptions.context, mergedOptions);\n this.ref.set(reference);\n\n const cdkRef = (reference as any)._cdkDialogRef;\n const host = this.hostElement();\n const fromCss = host ? readOverlayPaneCssVars(host) : {};\n const fromInputs = this.defaultOverlayPaneSize();\n const fromOpen = pickOverlayPaneFromOptions(options);\n const resolvedPane = mergeOverlayPaneSizes(fromCss, fromInputs, fromOpen);\n const updateCfg = overlayPaneSizeToUpdateConfig(resolvedPane);\n if (Object.keys(updateCfg).length > 0) {\n cdkRef?.overlayRef?.updateSize(updateCfg);\n }\n cdkRef?.componentRef?.changeDetectorRef?.detectChanges();\n\n const contentInstance = cdkRef?.componentRef?.instance as HlmDialogContent;\n const instance = contentInstance?.projectedRef?.instance as T | undefined;\n\n let outputs: OutputsOf<T> | null = null;\n if (instance) {\n const result = {} as Record<string, unknown>;\n for (const key of Object.getOwnPropertyNames(instance)) {\n if ((instance as any)[key] instanceof OutputEmitterRef) {\n result[key] = (instance as any)[key];\n }\n }\n outputs = result as OutputsOf<T>;\n }\n\n return { reference, outputs };\n }\n\n public close(): void {\n if (!this.ref()) {\n return;\n }\n\n this.ref()?.close();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { HlmDialog } from './lib/hlm-dialog';\nimport { HlmDialogClose } from './lib/hlm-dialog-close';\nimport { HlmDialogContent } from './lib/hlm-dialog-content';\nimport { HlmDialogDescription } from './lib/hlm-dialog-description';\nimport { HlmDialogFooter } from './lib/hlm-dialog-footer';\nimport { HlmDialogHeader } from './lib/hlm-dialog-header';\nimport { HlmDialogOverlay } from './lib/hlm-dialog-overlay';\nimport { HlmDialogTitle } from './lib/hlm-dialog-title';\n\nexport * from './lib/hlm-dialog';\nexport * from './lib/hlm-dialog-close';\nexport * from './lib/hlm-dialog-content';\nexport * from './lib/hlm-dialog-description';\nexport * from './lib/hlm-dialog-footer';\nexport * from './lib/hlm-dialog-header';\nexport * from './lib/hlm-dialog-overlay';\nexport * from './lib/hlm-dialog-overlay-pane';\nexport * from './lib/hlm-dialog-title';\nexport * from './lib/hlm-dialog.service';\n\nexport const HlmDialogImports = [\n HlmDialog,\n HlmDialogClose,\n HlmDialogContent,\n HlmDialogDescription,\n HlmDialogFooter,\n HlmDialogHeader,\n HlmDialogOverlay,\n HlmDialogTitle,\n] as const;\n\n@NgModule({\n // imports: [...HlmDialogImports],\n // exports: [...HlmDialogImports],\n})\nexport class HlmDialogModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n viewChild,\n} from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\nimport type { HlmOverlayPaneSize } from './libs/ui-dialog-helm/src';\nimport { HlmDialog, HlmDialogContent, HlmDialogService } from './libs/ui-dialog-helm/src';\n\n@Component({\n selector: 'sdc-dialog',\n imports: [HlmDialogContent, HlmDialog],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dialog.component.html',\n})\nexport class DialogComponent implements OnDestroy {\n public dialogService = inject(HlmDialogService);\n public dialogComponent = viewChild(BrnDialog);\n\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n public fitContent = input<boolean>(false);\n public showCloseButton = input<boolean>(true);\n\n /**\n * Default CDK overlay pane width (e.g. `800px`). Merge order: CSS vars on `sdc-dialog` → these inputs →\n * `DialogService.open({ overlayPaneWidth, ... })` (strongest).\n */\n public overlayPaneWidth = input<string | undefined>(undefined);\n public overlayPaneMaxWidth = input<string | undefined>(undefined);\n public overlayPaneHeight = input<string | undefined>(undefined);\n public overlayPaneMaxHeight = input<string | undefined>(undefined);\n\n public constructor() {\n effect(() => {\n this.dialogService.component.set(this.dialogComponent() ?? null);\n this.dialogService.hostElement.set(this.hostEl.nativeElement);\n\n const size: HlmOverlayPaneSize = {};\n const w = this.overlayPaneWidth();\n const maxW = this.overlayPaneMaxWidth();\n const h = this.overlayPaneHeight();\n const maxH = this.overlayPaneMaxHeight();\n if (w !== undefined && w !== '') {\n size.width = w;\n }\n if (maxW !== undefined && maxW !== '') {\n size.maxWidth = maxW;\n }\n if (h !== undefined && h !== '') {\n size.height = h;\n }\n if (maxH !== undefined && maxH !== '') {\n size.maxHeight = maxH;\n }\n this.dialogService.defaultOverlayPaneSize.set(size);\n });\n }\n\n public ngOnDestroy(): void {\n this.dialogService.releaseHostIfMatch(this.hostEl.nativeElement);\n }\n}\n","<hlm-dialog #dialogRef>\n <hlm-dialog-content\n *hlmDialogContent=\"let ctx\"\n [fitContent]=\"fitContent()\"\n [showCloseButton]=\"showCloseButton()\"\n class=\"dialog-content\" />\n</hlm-dialog>\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './dialog.component';\nexport * from './libs/ui-dialog-helm/src';\nexport { HlmDialogService as DialogService } from './libs/ui-dialog-helm/src/lib/hlm-dialog.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
- import { HttpClient } from '@angular/common/http';
1
+ import { HttpClient, HttpBackend } from '@angular/common/http';
2
2
  import * as i0 from '@angular/core';
3
3
  import { inject, ElementRef, input, signal, effect, ChangeDetectionStrategy, ViewEncapsulation, Component, InjectionToken, computed, Directive, NgModule } from '@angular/core';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
5
5
  import { map, shareReplay } from 'rxjs';
6
6
 
7
+ /** Bumped when fetch strategy changes so we do not reuse errored `shareReplay` streams. */
8
+ const ICON_CACHE_SCHEME = 'http-backend-v1';
7
9
  const iconCache = new Map();
8
10
  class SvgIconComponent {
9
- // DI
10
- http = inject(HttpClient);
11
+ // DI — use HttpClient(HttpBackend) so static SVG fetches skip app interceptors
12
+ httpPlain = new HttpClient(inject(HttpBackend));
11
13
  cache = iconCache;
12
14
  sanitizer = inject(DomSanitizer);
13
15
  elementRef = inject(ElementRef);
@@ -16,17 +18,17 @@ class SvgIconComponent {
16
18
  iconFolder = input(...(ngDevMode ? [undefined, { debugName: "iconFolder" }] : []));
17
19
  className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
18
20
  color = input('currentColor', ...(ngDevMode ? [{ debugName: "color" }] : []));
19
- strokeWidth = input(1, ...(ngDevMode ? [{ debugName: "strokeWidth" }] : []));
21
+ /** Use `> 0` when the asset relies on stroke */
22
+ strokeWidth = input(0, ...(ngDevMode ? [{ debugName: "strokeWidth" }] : []));
20
23
  // STATE
21
24
  svgContent = signal(null, ...(ngDevMode ? [{ debugName: "svgContent" }] : []));
22
25
  constructor() {
23
26
  effect(() => {
24
- this.getIcon(this.name()).subscribe({
27
+ this.syncHostPaintVars();
28
+ });
29
+ effect(() => {
30
+ this.getIcon().subscribe({
25
31
  next: svg => {
26
- const element = this.elementRef.nativeElement;
27
- // Apply dynamic properties
28
- element.style.setProperty('--icon-color', this.resolveColor(this.color()));
29
- element.style.setProperty('--icon-stroke-width', this.strokeWidth().toString());
30
32
  this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(svg));
31
33
  },
32
34
  error: (error) => {
@@ -38,22 +40,46 @@ class SvgIconComponent {
38
40
  });
39
41
  });
40
42
  }
41
- getIcon(name) {
42
- if (!this.cache.has(name)) {
43
- const folder = this.iconFolder() ?? 'assets';
44
- const icon$ = this.http.get(`/${folder}/${name}.svg`, { responseType: 'text' }).pipe(map(svg => this.sanitizeSvg(svg)), shareReplay({ bufferSize: 1, refCount: true }));
45
- this.cache.set(name, icon$);
43
+ syncHostPaintVars() {
44
+ const element = this.elementRef.nativeElement;
45
+ element.style.setProperty('--icon-color', this.resolveColor(this.color()));
46
+ const sw = this.strokeWidth();
47
+ if (sw > 0) {
48
+ element.classList.add('sdc-svg-icon--stroke');
49
+ element.style.setProperty('--icon-stroke-width', String(sw));
50
+ }
51
+ else {
52
+ element.classList.remove('sdc-svg-icon--stroke');
53
+ element.style.removeProperty('--icon-stroke-width');
54
+ }
55
+ }
56
+ /**
57
+ * Cache key must include folder: the same `name` can exist under different paths
58
+ * (e.g. `assets/x.svg` vs `assets/img/x.svg`). Caching by name alone poisoned later loads.
59
+ */
60
+ getIcon() {
61
+ const folder = this.iconFolder() ?? 'assets';
62
+ const iconName = this.name();
63
+ const cacheKey = `${ICON_CACHE_SCHEME}:${folder}/${iconName}`;
64
+ if (!this.cache.has(cacheKey)) {
65
+ const icon$ = this.httpPlain.get(`/${folder}/${iconName}.svg`, { responseType: 'text' }).pipe(map((svg) => this.sanitizeSvg(svg)), shareReplay({ bufferSize: 1, refCount: true }));
66
+ this.cache.set(cacheKey, icon$);
46
67
  }
47
- return this.cache.get(name);
68
+ return this.cache.get(cacheKey);
48
69
  }
49
70
  sanitizeSvg(svg) {
50
- return (svg
71
+ let out = svg
51
72
  // Remove any existing width/height attributes to make the SVG more flexible
52
73
  .replace(/\swidth="[^"]*"/g, '')
53
74
  .replace(/\sheight="[^"]*"/g, '')
54
75
  // Strip hardcoded fill/stroke so CSS variable takes effect
55
76
  .replace(/\sfill="(?!none)[^"]*"/g, '')
56
- .replace(/\sstroke="(?!none)[^"]*"/g, ''));
77
+ .replace(/\sstroke="(?!none)[^"]*"/g, '');
78
+ // Avoid clipping stroke/paint at the root when assets are tight to viewBox
79
+ if (!/\soverflow\s*=/i.test(out)) {
80
+ out = out.replace(/<svg\b/i, '<svg overflow="visible" ');
81
+ }
82
+ return out;
57
83
  }
58
84
  /**
59
85
  * Resolves the color input to a valid CSS value.
@@ -73,13 +99,13 @@ class SvgIconComponent {
73
99
  return `var(--color-${color})`;
74
100
  }
75
101
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SvgIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
76
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: SvgIconComponent, isStandalone: true, selector: "sdc-svg-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, iconFolder: { classPropertyName: "iconFolder", publicName: "iconFolder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()" } }, ngImport: i0, template: "@if (svgContent(); as content) {\n <span class=\"inline-block app-svg-icon\" [innerHTML]=\"content\"></span>\n}\n", styles: [".app-svg-icon svg{fill:var(--icon-color, currentColor);stroke:var(--icon-color, currentColor);stroke-width:var(--icon-stroke-width, 1);width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: SvgIconComponent, isStandalone: true, selector: "sdc-svg-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, iconFolder: { classPropertyName: "iconFolder", publicName: "iconFolder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()" } }, ngImport: i0, template: "@if (svgContent(); as content) {\n <span class=\"sdc-svg-icon\" [innerHTML]=\"content\"></span>\n}\n", styles: [":host{display:inline-block;vertical-align:middle;line-height:0;box-sizing:border-box}.sdc-svg-icon{display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-sizing:border-box}.sdc-svg-icon svg{display:block;flex-shrink:0;width:100%;height:100%;max-width:100%;max-height:100%;box-sizing:border-box;overflow:visible;fill:var(--icon-color, currentColor);stroke:none;stroke-width:0}:host(.sdc-svg-icon--stroke) .sdc-svg-icon svg{stroke:var(--icon-color, currentColor);stroke-width:var(--icon-stroke-width, 1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
77
103
  }
78
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SvgIconComponent, decorators: [{
79
105
  type: Component,
80
106
  args: [{ selector: 'sdc-svg-icon', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
81
107
  '[class]': 'className()',
82
- }, template: "@if (svgContent(); as content) {\n <span class=\"inline-block app-svg-icon\" [innerHTML]=\"content\"></span>\n}\n", styles: [".app-svg-icon svg{fill:var(--icon-color, currentColor);stroke:var(--icon-color, currentColor);stroke-width:var(--icon-stroke-width, 1);width:100%;height:100%}\n"] }]
108
+ }, template: "@if (svgContent(); as content) {\n <span class=\"sdc-svg-icon\" [innerHTML]=\"content\"></span>\n}\n", styles: [":host{display:inline-block;vertical-align:middle;line-height:0;box-sizing:border-box}.sdc-svg-icon{display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-sizing:border-box}.sdc-svg-icon svg{display:block;flex-shrink:0;width:100%;height:100%;max-width:100%;max-height:100%;box-sizing:border-box;overflow:visible;fill:var(--icon-color, currentColor);stroke:none;stroke-width:0}:host(.sdc-svg-icon--stroke) .sdc-svg-icon svg{stroke:var(--icon-color, currentColor);stroke-width:var(--icon-stroke-width, 1)}\n"] }]
83
109
  }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], iconFolder: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconFolder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }] } });
84
110
 
85
111
  const defaultConfig = {