@ng-brutalism/ui 0.1.2 → 0.2.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.
@@ -1,7 +1,7 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, makeEnvironmentProviders, provideAppInitializer, inject, DOCUMENT, PLATFORM_ID, input, computed, Directive, booleanAttribute, ChangeDetectionStrategy, Component, model, contentChildren, viewChild, DestroyRef, signal, afterNextRender, ElementRef } from '@angular/core';
4
+ import { InjectionToken, makeEnvironmentProviders, provideAppInitializer, inject, DOCUMENT, PLATFORM_ID, input, computed, Directive, ElementRef, effect, booleanAttribute, ChangeDetectionStrategy, Component, model, contentChildren, isDevMode, viewChild, DestroyRef, signal, afterNextRender, numberAttribute } from '@angular/core';
5
5
  import { isPlatformBrowser } from '@angular/common';
6
6
 
7
7
  /**
@@ -24,6 +24,12 @@ function applyThemeVars(doc, config) {
24
24
  primary: '--nb-primary',
25
25
  secondary: '--nb-secondary',
26
26
  accent: '--nb-accent',
27
+ yellow: '--nb-yellow',
28
+ pink: '--nb-pink',
29
+ mint: '--nb-mint',
30
+ lavender: '--nb-lavender',
31
+ blue: '--nb-blue',
32
+ cream: '--nb-cream',
27
33
  danger: '--nb-danger',
28
34
  success: '--nb-success',
29
35
  warning: '--nb-warning',
@@ -63,12 +69,522 @@ function provideNgBrutalism(config = {}) {
63
69
  ]);
64
70
  }
65
71
 
72
+ const NB_TONE_TOKENS = {
73
+ default: {
74
+ bg: 'var(--nb-surface)',
75
+ fg: 'var(--nb-surface-foreground)',
76
+ },
77
+ cream: {
78
+ bg: 'var(--nb-cream)',
79
+ fg: '#000000',
80
+ },
81
+ white: {
82
+ bg: '#ffffff',
83
+ fg: '#000000',
84
+ },
85
+ black: {
86
+ bg: '#000000',
87
+ fg: '#ffffff',
88
+ },
89
+ yellow: {
90
+ bg: 'var(--nb-yellow)',
91
+ fg: '#000000',
92
+ },
93
+ pink: {
94
+ bg: 'var(--nb-pink)',
95
+ fg: '#000000',
96
+ },
97
+ mint: {
98
+ bg: 'var(--nb-mint)',
99
+ fg: '#000000',
100
+ },
101
+ lavender: {
102
+ bg: 'var(--nb-lavender)',
103
+ fg: '#000000',
104
+ },
105
+ blue: {
106
+ bg: 'var(--nb-blue)',
107
+ fg: '#000000',
108
+ },
109
+ primary: {
110
+ bg: 'var(--nb-primary)',
111
+ fg: 'var(--nb-primary-foreground)',
112
+ },
113
+ secondary: {
114
+ bg: 'var(--nb-secondary)',
115
+ fg: 'var(--nb-secondary-foreground)',
116
+ },
117
+ accent: {
118
+ bg: 'var(--nb-accent)',
119
+ fg: 'var(--nb-accent-foreground)',
120
+ },
121
+ success: {
122
+ bg: 'var(--nb-success)',
123
+ fg: 'var(--nb-success-foreground)',
124
+ },
125
+ warning: {
126
+ bg: 'var(--nb-warning)',
127
+ fg: 'var(--nb-warning-foreground)',
128
+ },
129
+ danger: {
130
+ bg: 'var(--nb-danger)',
131
+ fg: 'var(--nb-danger-foreground)',
132
+ },
133
+ };
134
+ function nbToneTokens(tone) {
135
+ return NB_TONE_TOKENS[tone];
136
+ }
137
+ function nbToneVars(tone) {
138
+ const borderColor = 'var(--nb-border)';
139
+ if (tone === 'surface') {
140
+ return { ...nbToneTokens('default'), borderColor };
141
+ }
142
+ if (tone === 'background') {
143
+ return {
144
+ bg: 'var(--nb-background)',
145
+ fg: 'var(--nb-foreground)',
146
+ borderColor,
147
+ };
148
+ }
149
+ if (tone === 'ink') {
150
+ return { ...nbToneTokens('black'), borderColor };
151
+ }
152
+ return { ...nbToneTokens(tone), borderColor };
153
+ }
154
+
155
+ const RADIUS_VALUES = {
156
+ none: '0px',
157
+ sm: '0.25rem',
158
+ md: '0.5rem',
159
+ lg: '0.75rem',
160
+ xl: '1rem',
161
+ full: '9999px',
162
+ };
163
+ function nbRadiusValue(radius) {
164
+ return RADIUS_VALUES[radius];
165
+ }
166
+
167
+ const SHADOW_VALUES = {
168
+ none: 'none',
169
+ sm: '2px 2px 0 0 var(--nb-shadow)',
170
+ default: 'var(--nb-shadow-offset-x) var(--nb-shadow-offset-y) 0 0 var(--nb-shadow)',
171
+ hard: '6px 6px 0 0 var(--nb-shadow)',
172
+ heavy: '10px 10px 0 0 var(--nb-shadow)',
173
+ };
174
+ function nbShadowValue(shadow) {
175
+ return SHADOW_VALUES[shadow];
176
+ }
177
+
178
+ const BORDER_WIDTH_VALUES = {
179
+ none: '0px',
180
+ thin: '1px',
181
+ default: 'var(--nb-border-width)',
182
+ strong: '3px',
183
+ thick: '4px',
184
+ };
185
+ function nbBorderWidthValue(border) {
186
+ return BORDER_WIDTH_VALUES[border];
187
+ }
188
+
189
+ const SPACING_VALUES = {
190
+ none: '0px',
191
+ xs: '0.25rem',
192
+ sm: '0.5rem',
193
+ md: '0.75rem',
194
+ lg: '1rem',
195
+ xl: '1.5rem',
196
+ '2xl': '2rem',
197
+ };
198
+ function nbSpacingValue(spacing) {
199
+ return SPACING_VALUES[spacing];
200
+ }
201
+
202
+ const PADDING_VALUES = {
203
+ none: '0px',
204
+ xs: '0.5rem',
205
+ sm: '0.75rem',
206
+ md: '1rem',
207
+ lg: '1.5rem',
208
+ xl: '2rem',
209
+ };
210
+ function nbPaddingValue(padding) {
211
+ return PADDING_VALUES[padding];
212
+ }
213
+
214
+ /**
215
+ * Shared typography vocabulary. One source of truth for the font-weight scale,
216
+ * the font-role contract, underline customization, and the text-tracking scale
217
+ * so a token means the same thing across nbText / nbDisplay / nbTypography /
218
+ * nbChipGroup.
219
+ */
220
+ const FONT_WEIGHT_VALUES = {
221
+ normal: '400',
222
+ medium: '500',
223
+ semibold: '600',
224
+ bold: '700',
225
+ extrabold: '800',
226
+ black: '900',
227
+ };
228
+ function nbFontWeightValue(weight) {
229
+ return FONT_WEIGHT_VALUES[weight];
230
+ }
231
+ const FONT_ROLE_VALUES = {
232
+ inherit: null,
233
+ body: 'var(--nb-font-body, var(--nb-font-sans))',
234
+ display: 'var(--nb-font-display, var(--nb-font-sans))',
235
+ accent: 'var(--nb-font-accent, var(--nb-font-sans))',
236
+ mono: 'var(--nb-font-mono, monospace)',
237
+ };
238
+ function nbTypographyFontValue(font) {
239
+ return FONT_ROLE_VALUES[font];
240
+ }
241
+ const UNDERLINE_GAP_VALUES = {
242
+ none: '0',
243
+ xs: '0.25rem',
244
+ sm: '0.5rem',
245
+ md: '0.75rem',
246
+ lg: '1.25rem',
247
+ };
248
+ const UNDERLINE_WIDTH_VALUES = {
249
+ auto: null,
250
+ xs: '2rem',
251
+ sm: '4rem',
252
+ md: '7rem',
253
+ lg: '12rem',
254
+ full: '100%',
255
+ };
256
+ function nbUnderlineGapValue(gap) {
257
+ return UNDERLINE_GAP_VALUES[gap];
258
+ }
259
+ function nbUnderlineWidthValue(width) {
260
+ return UNDERLINE_WIDTH_VALUES[width];
261
+ }
262
+
263
+ /**
264
+ * INTERNAL. The CSS-variable namespace a primitive owns, e.g. `'surface'` →
265
+ * capabilities write `--nb-surface-*`. Every primitive that composes a style
266
+ * capability must provide this on its element injector.
267
+ */
268
+ const NB_STYLE_NAMESPACE = new InjectionToken('NB_STYLE_NAMESPACE');
269
+ const NB_STYLE_DEFAULTS = new InjectionToken('NB_STYLE_DEFAULTS', { factory: () => ({}) });
270
+
271
+ /**
272
+ * INTERNAL capability — not part of the public API. Composed into primitives via
273
+ * `hostDirectives`. Defaults and scoped public tokens flow through low
274
+ * specificity marker CSS; explicit inputs write final inline color properties.
275
+ */
276
+ class NbToneCapability {
277
+ namespace = inject(NB_STYLE_NAMESPACE);
278
+ defaults = inject(NB_STYLE_DEFAULTS);
279
+ tone = input(undefined, ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
280
+ resolved = computed(() => this.tone() ?? this.defaults.tone ?? 'default', ...(ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []));
281
+ defaultVars = computed(() => nbToneVars(this.defaults.tone ?? 'default'), ...(ngDevMode ? [{ debugName: "defaultVars" }] : /* istanbul ignore next */ []));
282
+ inputVars = computed(() => {
283
+ const tone = this.tone();
284
+ return tone ? nbToneVars(tone) : null;
285
+ }, ...(ngDevMode ? [{ debugName: "inputVars" }] : /* istanbul ignore next */ []));
286
+ toneBgDefaultVar = computed(() => this.defaultVars().bg, ...(ngDevMode ? [{ debugName: "toneBgDefaultVar" }] : /* istanbul ignore next */ []));
287
+ toneFgDefaultVar = computed(() => this.defaultVars().fg, ...(ngDevMode ? [{ debugName: "toneFgDefaultVar" }] : /* istanbul ignore next */ []));
288
+ toneBorderColorDefaultVar = computed(() => this.defaultVars().borderColor, ...(ngDevMode ? [{ debugName: "toneBorderColorDefaultVar" }] : /* istanbul ignore next */ []));
289
+ toneBgTokenVar = computed(() => `var(--nb-${this.namespace}-bg, var(--_nb-tone-bg-default))`, ...(ngDevMode ? [{ debugName: "toneBgTokenVar" }] : /* istanbul ignore next */ []));
290
+ toneFgTokenVar = computed(() => `var(--nb-${this.namespace}-fg, var(--_nb-tone-fg-default))`, ...(ngDevMode ? [{ debugName: "toneFgTokenVar" }] : /* istanbul ignore next */ []));
291
+ toneBorderColorTokenVar = computed(() => `var(--nb-${this.namespace}-border-color, var(--_nb-tone-border-color-default))`, ...(ngDevMode ? [{ debugName: "toneBorderColorTokenVar" }] : /* istanbul ignore next */ []));
292
+ toneInputBgStyle = computed(() => this.inputVars()?.bg ?? null, ...(ngDevMode ? [{ debugName: "toneInputBgStyle" }] : /* istanbul ignore next */ []));
293
+ toneInputFgStyle = computed(() => this.inputVars()?.fg ?? null, ...(ngDevMode ? [{ debugName: "toneInputFgStyle" }] : /* istanbul ignore next */ []));
294
+ toneInputBorderColorStyle = computed(() => this.inputVars()?.borderColor ?? null, ...(ngDevMode ? [{ debugName: "toneInputBorderColorStyle" }] : /* istanbul ignore next */ []));
295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbToneCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
296
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbToneCapability, isStandalone: true, selector: "[nbToneCapability]", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--_nb-tone-bg-default": "toneBgDefaultVar()", "style.--_nb-tone-fg-default": "toneFgDefaultVar()", "style.--_nb-tone-border-color-default": "toneBorderColorDefaultVar()", "style.--_nb-tone-bg-token": "toneBgTokenVar()", "style.--_nb-tone-fg-token": "toneFgTokenVar()", "style.--_nb-tone-border-color-token": "toneBorderColorTokenVar()", "style.background-color": "toneInputBgStyle()", "style.color": "toneInputFgStyle()", "style.border-color": "toneInputBorderColorStyle()", "attr.data-tone": "resolved()" }, classAttribute: "nb-tone" }, ngImport: i0 });
297
+ }
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbToneCapability, decorators: [{
299
+ type: Directive,
300
+ args: [{
301
+ selector: '[nbToneCapability]',
302
+ host: {
303
+ class: 'nb-tone',
304
+ '[style.--_nb-tone-bg-default]': 'toneBgDefaultVar()',
305
+ '[style.--_nb-tone-fg-default]': 'toneFgDefaultVar()',
306
+ '[style.--_nb-tone-border-color-default]': 'toneBorderColorDefaultVar()',
307
+ '[style.--_nb-tone-bg-token]': 'toneBgTokenVar()',
308
+ '[style.--_nb-tone-fg-token]': 'toneFgTokenVar()',
309
+ '[style.--_nb-tone-border-color-token]': 'toneBorderColorTokenVar()',
310
+ '[style.background-color]': 'toneInputBgStyle()',
311
+ '[style.color]': 'toneInputFgStyle()',
312
+ '[style.border-color]': 'toneInputBorderColorStyle()',
313
+ '[attr.data-tone]': 'resolved()',
314
+ },
315
+ }]
316
+ }], propDecorators: { tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }] } });
317
+
318
+ /**
319
+ * INTERNAL capability — not part of the public API. Defaults and scoped public
320
+ * tokens flow through marker CSS; explicit inputs write the final property.
321
+ */
322
+ class NbRadiusCapability {
323
+ namespace = inject(NB_STYLE_NAMESPACE);
324
+ defaults = inject(NB_STYLE_DEFAULTS);
325
+ radius = input(undefined, ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
326
+ fallback = computed(() => this.defaults.radius ?? 'md', ...(ngDevMode ? [{ debugName: "fallback" }] : /* istanbul ignore next */ []));
327
+ resolved = computed(() => this.radius() ?? this.fallback(), ...(ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []));
328
+ radiusDefaultVar = computed(() => {
329
+ const radius = this.fallback();
330
+ return radius === 'md' ? 'var(--nb-radius)' : nbRadiusValue(radius);
331
+ }, ...(ngDevMode ? [{ debugName: "radiusDefaultVar" }] : /* istanbul ignore next */ []));
332
+ radiusTokenVar = computed(() => `var(--nb-${this.namespace}-radius, var(--_nb-radius-default))`, ...(ngDevMode ? [{ debugName: "radiusTokenVar" }] : /* istanbul ignore next */ []));
333
+ radiusInputStyle = computed(() => {
334
+ const radius = this.radius();
335
+ return radius ? nbRadiusValue(radius) : null;
336
+ }, ...(ngDevMode ? [{ debugName: "radiusInputStyle" }] : /* istanbul ignore next */ []));
337
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbRadiusCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
338
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbRadiusCapability, isStandalone: true, selector: "[nbRadiusCapability]", inputs: { radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--_nb-radius-default": "radiusDefaultVar()", "style.--nb-radius-token": "radiusTokenVar()", "style.border-radius": "radiusInputStyle()", "attr.data-radius": "resolved()" }, classAttribute: "nb-radius" }, ngImport: i0 });
339
+ }
340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbRadiusCapability, decorators: [{
341
+ type: Directive,
342
+ args: [{
343
+ selector: '[nbRadiusCapability]',
344
+ host: {
345
+ class: 'nb-radius',
346
+ '[style.--_nb-radius-default]': 'radiusDefaultVar()',
347
+ '[style.--nb-radius-token]': 'radiusTokenVar()',
348
+ '[style.border-radius]': 'radiusInputStyle()',
349
+ '[attr.data-radius]': 'resolved()',
350
+ },
351
+ }]
352
+ }], propDecorators: { radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }] } });
353
+
354
+ /**
355
+ * INTERNAL capability — not part of the public API. Defaults and scoped public
356
+ * tokens flow through marker CSS; explicit inputs write the final property.
357
+ */
358
+ class NbShadowCapability {
359
+ namespace = inject(NB_STYLE_NAMESPACE);
360
+ defaults = inject(NB_STYLE_DEFAULTS);
361
+ shadow = input(undefined, ...(ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []));
362
+ fallback = computed(() => this.defaults.shadow ?? 'default', ...(ngDevMode ? [{ debugName: "fallback" }] : /* istanbul ignore next */ []));
363
+ resolved = computed(() => this.shadow() ?? this.fallback(), ...(ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []));
364
+ shadowDefaultVar = computed(() => nbShadowValue(this.fallback()), ...(ngDevMode ? [{ debugName: "shadowDefaultVar" }] : /* istanbul ignore next */ []));
365
+ shadowTokenVar = computed(() => `var(--nb-${this.namespace}-shadow, var(--_nb-shadow-default))`, ...(ngDevMode ? [{ debugName: "shadowTokenVar" }] : /* istanbul ignore next */ []));
366
+ shadowInputStyle = computed(() => {
367
+ const shadow = this.shadow();
368
+ return shadow ? nbShadowValue(shadow) : null;
369
+ }, ...(ngDevMode ? [{ debugName: "shadowInputStyle" }] : /* istanbul ignore next */ []));
370
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbShadowCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
371
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbShadowCapability, isStandalone: true, selector: "[nbShadowCapability]", inputs: { shadow: { classPropertyName: "shadow", publicName: "shadow", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--_nb-shadow-default": "shadowDefaultVar()", "style.--nb-shadow-token": "shadowTokenVar()", "style.box-shadow": "shadowInputStyle()", "attr.data-shadow": "resolved()" }, classAttribute: "nb-shadow" }, ngImport: i0 });
372
+ }
373
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbShadowCapability, decorators: [{
374
+ type: Directive,
375
+ args: [{
376
+ selector: '[nbShadowCapability]',
377
+ host: {
378
+ class: 'nb-shadow',
379
+ '[style.--_nb-shadow-default]': 'shadowDefaultVar()',
380
+ '[style.--nb-shadow-token]': 'shadowTokenVar()',
381
+ '[style.box-shadow]': 'shadowInputStyle()',
382
+ '[attr.data-shadow]': 'resolved()',
383
+ },
384
+ }]
385
+ }], propDecorators: { shadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "shadow", required: false }] }] } });
386
+
387
+ /**
388
+ * INTERNAL capability — not part of the public API. Defaults and scoped public
389
+ * tokens flow through marker CSS; explicit inputs write the final property.
390
+ * Border color is owned by the tone capability.
391
+ */
392
+ class NbBorderCapability {
393
+ namespace = inject(NB_STYLE_NAMESPACE);
394
+ defaults = inject(NB_STYLE_DEFAULTS);
395
+ border = input(undefined, ...(ngDevMode ? [{ debugName: "border" }] : /* istanbul ignore next */ []));
396
+ fallback = computed(() => this.defaults.border ?? 'default', ...(ngDevMode ? [{ debugName: "fallback" }] : /* istanbul ignore next */ []));
397
+ resolved = computed(() => this.border() ?? this.fallback(), ...(ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []));
398
+ borderWidthDefaultVar = computed(() => nbBorderWidthValue(this.fallback()), ...(ngDevMode ? [{ debugName: "borderWidthDefaultVar" }] : /* istanbul ignore next */ []));
399
+ borderWidthTokenVar = computed(() => `var(--nb-${this.namespace}-border-width, var(--_nb-border-width-default))`, ...(ngDevMode ? [{ debugName: "borderWidthTokenVar" }] : /* istanbul ignore next */ []));
400
+ borderWidthInputStyle = computed(() => {
401
+ const border = this.border();
402
+ return border ? nbBorderWidthValue(border) : null;
403
+ }, ...(ngDevMode ? [{ debugName: "borderWidthInputStyle" }] : /* istanbul ignore next */ []));
404
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbBorderCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
405
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbBorderCapability, isStandalone: true, selector: "[nbBorderCapability]", inputs: { border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--_nb-border-width-default": "borderWidthDefaultVar()", "style.--nb-border-width-token": "borderWidthTokenVar()", "style.border-width": "borderWidthInputStyle()", "attr.data-border": "resolved()" }, classAttribute: "nb-border-width" }, ngImport: i0 });
406
+ }
407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbBorderCapability, decorators: [{
408
+ type: Directive,
409
+ args: [{
410
+ selector: '[nbBorderCapability]',
411
+ host: {
412
+ class: 'nb-border-width',
413
+ '[style.--_nb-border-width-default]': 'borderWidthDefaultVar()',
414
+ '[style.--nb-border-width-token]': 'borderWidthTokenVar()',
415
+ '[style.border-width]': 'borderWidthInputStyle()',
416
+ '[attr.data-border]': 'resolved()',
417
+ },
418
+ }]
419
+ }], propDecorators: { border: [{ type: i0.Input, args: [{ isSignal: true, alias: "border", required: false }] }] } });
420
+
421
+ /**
422
+ * INTERNAL capability — not part of the public API. Defaults and scoped public
423
+ * tokens flow through marker CSS; explicit inputs write the final property.
424
+ */
425
+ class NbPaddingCapability {
426
+ namespace = inject(NB_STYLE_NAMESPACE);
427
+ defaults = inject(NB_STYLE_DEFAULTS);
428
+ padding = input(undefined, ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
429
+ fallback = computed(() => this.defaults.padding ?? 'md', ...(ngDevMode ? [{ debugName: "fallback" }] : /* istanbul ignore next */ []));
430
+ resolved = computed(() => this.padding() ?? this.fallback(), ...(ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []));
431
+ paddingDefaultVar = computed(() => nbPaddingValue(this.fallback()), ...(ngDevMode ? [{ debugName: "paddingDefaultVar" }] : /* istanbul ignore next */ []));
432
+ paddingTokenVar = computed(() => `var(--nb-${this.namespace}-padding, var(--_nb-padding-default))`, ...(ngDevMode ? [{ debugName: "paddingTokenVar" }] : /* istanbul ignore next */ []));
433
+ paddingInputStyle = computed(() => {
434
+ const padding = this.padding();
435
+ return padding ? nbPaddingValue(padding) : null;
436
+ }, ...(ngDevMode ? [{ debugName: "paddingInputStyle" }] : /* istanbul ignore next */ []));
437
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbPaddingCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
438
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbPaddingCapability, isStandalone: true, selector: "[nbPaddingCapability]", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--_nb-padding-default": "paddingDefaultVar()", "style.--nb-padding-token": "paddingTokenVar()", "style.padding": "paddingInputStyle()", "attr.data-padding": "resolved()" }, classAttribute: "nb-padding" }, ngImport: i0 });
439
+ }
440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbPaddingCapability, decorators: [{
441
+ type: Directive,
442
+ args: [{
443
+ selector: '[nbPaddingCapability]',
444
+ host: {
445
+ class: 'nb-padding',
446
+ '[style.--_nb-padding-default]': 'paddingDefaultVar()',
447
+ '[style.--nb-padding-token]': 'paddingTokenVar()',
448
+ '[style.padding]': 'paddingInputStyle()',
449
+ '[attr.data-padding]': 'resolved()',
450
+ },
451
+ }]
452
+ }], propDecorators: { padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }] } });
453
+
454
+ /**
455
+ * INTERNAL capability — not part of the public API. Defaults and scoped public
456
+ * tokens flow through marker CSS; explicit inputs write the final property.
457
+ */
458
+ class NbGapCapability {
459
+ namespace = inject(NB_STYLE_NAMESPACE);
460
+ defaults = inject(NB_STYLE_DEFAULTS);
461
+ gap = input(undefined, ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
462
+ fallback = computed(() => this.defaults.gap ?? 'md', ...(ngDevMode ? [{ debugName: "fallback" }] : /* istanbul ignore next */ []));
463
+ resolved = computed(() => this.gap() ?? this.fallback(), ...(ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []));
464
+ gapDefaultVar = computed(() => nbSpacingValue(this.fallback()), ...(ngDevMode ? [{ debugName: "gapDefaultVar" }] : /* istanbul ignore next */ []));
465
+ gapInputVar = computed(() => {
466
+ const gap = this.gap();
467
+ return gap ? nbSpacingValue(gap) : null;
468
+ }, ...(ngDevMode ? [{ debugName: "gapInputVar" }] : /* istanbul ignore next */ []));
469
+ gapResolvedVar = computed(() => `var(--_nb-gap-input, var(--nb-${this.namespace}-gap, var(--_nb-gap-default)))`, ...(ngDevMode ? [{ debugName: "gapResolvedVar" }] : /* istanbul ignore next */ []));
470
+ gapInputStyle = computed(() => {
471
+ const gap = this.gap();
472
+ return gap ? nbSpacingValue(gap) : null;
473
+ }, ...(ngDevMode ? [{ debugName: "gapInputStyle" }] : /* istanbul ignore next */ []));
474
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbGapCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
475
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbGapCapability, isStandalone: true, selector: "[nbGapCapability]", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--_nb-gap-input": "gapInputVar()", "style.--_nb-gap-default": "gapDefaultVar()", "style.--_nb-gap-resolved": "gapResolvedVar()", "style.gap": "gapInputStyle()", "attr.data-gap": "resolved()" }, classAttribute: "nb-gap" }, ngImport: i0 });
476
+ }
477
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbGapCapability, decorators: [{
478
+ type: Directive,
479
+ args: [{
480
+ selector: '[nbGapCapability]',
481
+ host: {
482
+ class: 'nb-gap',
483
+ '[style.--_nb-gap-input]': 'gapInputVar()',
484
+ '[style.--_nb-gap-default]': 'gapDefaultVar()',
485
+ '[style.--_nb-gap-resolved]': 'gapResolvedVar()',
486
+ '[style.gap]': 'gapInputStyle()',
487
+ '[attr.data-gap]': 'resolved()',
488
+ },
489
+ }]
490
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }] } });
491
+
492
+ /**
493
+ * INTERNAL capability — not part of the public API. Handles the three underline
494
+ * inputs shared by nbText and nbDisplay: the variant (none/bar/wave), the gap
495
+ * between text baseline and the decoration, and the decoration width.
496
+ *
497
+ * Writes `data-underline`, `--nb-underline-gap`, and `--nb-underline-width`
498
+ * onto the host when the Angular inputs are present so the underline CSS in the
499
+ * theme can read them without each text primitive re-implementing the same
500
+ * computed chain.
501
+ */
502
+ class NbUnderlineCapability {
503
+ element = inject(ElementRef);
504
+ writtenCustomProperties = new Set();
505
+ underline = input('none', ...(ngDevMode ? [{ debugName: "underline" }] : /* istanbul ignore next */ []));
506
+ underlineGap = input(undefined, ...(ngDevMode ? [{ debugName: "underlineGap" }] : /* istanbul ignore next */ []));
507
+ underlineWidth = input(undefined, ...(ngDevMode ? [{ debugName: "underlineWidth" }] : /* istanbul ignore next */ []));
508
+ constructor() {
509
+ effect(() => {
510
+ this.syncCustomProperty('--nb-underline-gap', this.underlineGapValue());
511
+ });
512
+ effect(() => {
513
+ this.syncCustomProperty('--nb-underline-width', this.underlineWidthValue());
514
+ });
515
+ }
516
+ underlineAttr = computed(() => {
517
+ const u = this.underline();
518
+ return u === 'none' ? null : u;
519
+ }, ...(ngDevMode ? [{ debugName: "underlineAttr" }] : /* istanbul ignore next */ []));
520
+ underlineGapValue = computed(() => {
521
+ const gap = this.underlineGap();
522
+ return gap ? nbUnderlineGapValue(gap) : null;
523
+ }, ...(ngDevMode ? [{ debugName: "underlineGapValue" }] : /* istanbul ignore next */ []));
524
+ underlineWidthValue = computed(() => {
525
+ const width = this.underlineWidth();
526
+ return width ? nbUnderlineWidthValue(width) : null;
527
+ }, ...(ngDevMode ? [{ debugName: "underlineWidthValue" }] : /* istanbul ignore next */ []));
528
+ syncCustomProperty(name, value) {
529
+ const style = this.element.nativeElement.style;
530
+ if (value !== null) {
531
+ style.setProperty(name, value);
532
+ this.writtenCustomProperties.add(name);
533
+ return;
534
+ }
535
+ if (this.writtenCustomProperties.has(name)) {
536
+ style.removeProperty(name);
537
+ this.writtenCustomProperties.delete(name);
538
+ }
539
+ }
540
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbUnderlineCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
541
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbUnderlineCapability, isStandalone: true, selector: "[nbUnderlineCapability]", inputs: { underline: { classPropertyName: "underline", publicName: "underline", isSignal: true, isRequired: false, transformFunction: null }, underlineGap: { classPropertyName: "underlineGap", publicName: "underlineGap", isSignal: true, isRequired: false, transformFunction: null }, underlineWidth: { classPropertyName: "underlineWidth", publicName: "underlineWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-underline": "underlineAttr()" } }, ngImport: i0 });
542
+ }
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbUnderlineCapability, decorators: [{
544
+ type: Directive,
545
+ args: [{
546
+ selector: '[nbUnderlineCapability]',
547
+ host: {
548
+ '[attr.data-underline]': 'underlineAttr()',
549
+ },
550
+ }]
551
+ }], ctorParameters: () => [], propDecorators: { underline: [{ type: i0.Input, args: [{ isSignal: true, alias: "underline", required: false }] }], underlineGap: [{ type: i0.Input, args: [{ isSignal: true, alias: "underlineGap", required: false }] }], underlineWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "underlineWidth", required: false }] }] } });
552
+
553
+ /**
554
+ * INTERNAL capability — not part of the public API. Marks the host for a
555
+ * low-specificity stylesheet margin reset when `reset` is true (the default),
556
+ * so browser-default margins on `<p>`, `<h1>`–`<h6>`, and other typographic
557
+ * elements don't interfere with layout-primitive spacing (nbStack, nbCluster,
558
+ * etc.).
559
+ *
560
+ * Shared by nbText and nbDisplay so neither primitive re-implements the same
561
+ * one-line computed.
562
+ */
563
+ class NbResetMarginCapability {
564
+ reset = input(true, { ...(ngDevMode ? { debugName: "reset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
565
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbResetMarginCapability, deps: [], target: i0.ɵɵFactoryTarget.Directive });
566
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbResetMarginCapability, isStandalone: true, selector: "[nbResetMarginCapability]", inputs: { reset: { classPropertyName: "reset", publicName: "reset", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-nb-reset-margin": "reset() ? \"\" : null" } }, ngImport: i0 });
567
+ }
568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbResetMarginCapability, decorators: [{
569
+ type: Directive,
570
+ args: [{
571
+ selector: '[nbResetMarginCapability]',
572
+ host: {
573
+ '[attr.data-nb-reset-margin]': 'reset() ? "" : null',
574
+ },
575
+ }]
576
+ }], propDecorators: { reset: [{ type: i0.Input, args: [{ isSignal: true, alias: "reset", required: false }] }] } });
577
+
578
+ // INTERNAL barrel. Consumed by library primitives only — NOT re-exported from
579
+ // the package entry point (`libs/ui/src/index.ts`). Capability directives are an
580
+ // internal composition mechanism; users compose the public primitives instead.
581
+
66
582
  class NbCheckbox {
67
- size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
583
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
68
584
  classes = computed(() => nbClass('[--nb-checkbox-bg:var(--nb-main)]', '[--nb-checkbox-fg:#fff]', '[--nb-checkbox-border:var(--nb-border)]', '[--nb-checkbox-radius:0]', 'peer grid shrink-0 cursor-pointer appearance-none place-content-center', 'rounded-(--nb-checkbox-radius) outline-2 outline-(--nb-checkbox-border) ring-offset-white', 'checked:bg-(--nb-checkbox-bg) checked:text-(--nb-checkbox-fg)', 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-(--nb-checkbox-border) focus-visible:ring-offset-2', 'disabled:opacity-50 disabled:cursor-not-allowed', this.sizeClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
69
585
  sizeClass() {
70
586
  const map = {
71
- default: 'size-4',
587
+ md: 'size-4',
72
588
  sm: 'size-3.5',
73
589
  lg: 'size-5',
74
590
  };
@@ -99,14 +615,25 @@ class NbAccordionItem {
99
615
  triggerId = `neo-accordion-trigger-${this.id}`;
100
616
  contentId = `neo-accordion-content-${this.id}`;
101
617
  open = computed(() => this.accordion.isItemOpen(this.value()), ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
102
- classes = computed(() => nbClass('[--nb-accordion-item-bg:var(--nb-surface)]', '[--nb-accordion-item-fg:var(--nb-surface-foreground)]', '[--nb-accordion-item-border:var(--nb-border)]', '[--nb-accordion-item-radius:var(--nb-radius)]', '[--nb-accordion-item-shadow:var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_var(--nb-shadow)]', 'overflow-hidden rounded-(--nb-accordion-item-radius)', 'border-2 border-(--nb-accordion-item-border)', 'bg-(--nb-accordion-item-bg) text-(--nb-accordion-item-fg)', 'shadow-[var(--nb-accordion-item-shadow)]', this.disabled() && 'opacity-50'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
618
+ classes = computed(() => nbClass('overflow-hidden rounded-[var(--nb-radius-token,var(--_nb-radius-default))]', 'border-[length:var(--nb-border-width-token,var(--_nb-border-width-default))]', 'nb-tone', 'shadow-[var(--nb-shadow-token,var(--_nb-shadow-default))]', this.disabled() && 'opacity-50'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
103
619
  toggle() {
104
620
  if (!this.disabled()) {
105
621
  this.accordion.toggleItem(this.value());
106
622
  }
107
623
  }
108
624
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbAccordionItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
109
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbAccordionItem, isStandalone: true, selector: "nb-accordion-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-state": "open() ? \"open\" : \"closed\"", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-orientation": "\"vertical\"" }, classAttribute: "block" }, ngImport: i0, template: `
625
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbAccordionItem, isStandalone: true, selector: "nb-accordion-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-state": "open() ? \"open\" : \"closed\"", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-orientation": "\"vertical\"" }, classAttribute: "block" }, providers: [
626
+ { provide: NB_STYLE_NAMESPACE, useValue: 'accordion-item' },
627
+ {
628
+ provide: NB_STYLE_DEFAULTS,
629
+ useValue: {
630
+ tone: 'surface',
631
+ radius: 'md',
632
+ shadow: 'default',
633
+ border: 'default',
634
+ },
635
+ },
636
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `
110
637
  <div [class]="classes()">
111
638
  <ng-content />
112
639
  </div>
@@ -121,6 +648,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
121
648
  <ng-content />
122
649
  </div>
123
650
  `,
651
+ providers: [
652
+ { provide: NB_STYLE_NAMESPACE, useValue: 'accordion-item' },
653
+ {
654
+ provide: NB_STYLE_DEFAULTS,
655
+ useValue: {
656
+ tone: 'surface',
657
+ radius: 'md',
658
+ shadow: 'default',
659
+ border: 'default',
660
+ },
661
+ },
662
+ ],
663
+ hostDirectives: [
664
+ { directive: NbToneCapability, inputs: ['tone'] },
665
+ { directive: NbRadiusCapability, inputs: ['radius'] },
666
+ { directive: NbShadowCapability, inputs: ['shadow'] },
667
+ { directive: NbBorderCapability, inputs: ['border'] },
668
+ ],
124
669
  host: {
125
670
  class: 'block',
126
671
  '[attr.data-state]': 'open() ? "open" : "closed"',
@@ -246,7 +791,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
246
791
 
247
792
  class NbAccordionTrigger {
248
793
  item = inject(NbAccordionItem);
249
- triggerClasses = computed(() => nbClass('[--nb-accordion-trigger-bg:var(--nb-main)]', '[--nb-accordion-trigger-fg:var(--nb-main-foreground)]', 'flex min-h-14 flex-1 items-center justify-between gap-4', 'w-full bg-(--nb-accordion-trigger-bg) p-4 text-left text-base font-bold', 'text-(--nb-accordion-trigger-fg) transition-all duration-200', 'focus-visible:outline-none focus-visible:ring-2', 'focus-visible:ring-(--nb-accordion-item-border) focus-visible:ring-offset-2', 'disabled:pointer-events-none disabled:opacity-50', this.item.open() && 'border-b-2 border-(--nb-accordion-item-border)'), ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
794
+ triggerClasses = computed(() => nbClass('[--nb-accordion-trigger-bg:var(--nb-main)]', '[--nb-accordion-trigger-fg:var(--nb-main-foreground)]', 'flex min-h-14 flex-1 items-center justify-between gap-4', 'w-full bg-(--nb-accordion-trigger-bg) p-4 text-left text-base font-bold', 'text-(--nb-accordion-trigger-fg) transition-all duration-200', 'focus-visible:outline-none focus-visible:ring-2', 'focus-visible:ring-[var(--_nb-tone-border-color-token,var(--_nb-tone-border-color-default))] focus-visible:ring-offset-2', 'disabled:pointer-events-none disabled:opacity-50', this.item.open() &&
795
+ 'border-b-[length:var(--nb-border-width-token,var(--_nb-border-width-default))] border-b-[var(--_nb-tone-border-color-token,var(--_nb-tone-border-color-default))]'), ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
250
796
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbAccordionTrigger, deps: [], target: i0.ɵɵFactoryTarget.Component });
251
797
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: NbAccordionTrigger, isStandalone: true, selector: "nb-accordion-trigger", ngImport: i0, template: `
252
798
  <h3 class="flex">
@@ -303,70 +849,293 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
303
849
  }]
304
850
  }] });
305
851
 
852
+ const sizeMap$3 = {
853
+ sm: 'h-9 px-3 text-sm gap-1.5',
854
+ md: 'h-11 px-4 text-base gap-2',
855
+ lg: 'h-[3.25rem] px-5 text-lg gap-2.5',
856
+ xl: 'h-14 px-4 text-xl gap-3',
857
+ };
306
858
  class NbButton {
307
- variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
308
- shadow = input('default', ...(ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []));
309
- size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
310
- fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
311
- classes = computed(() => nbClass('inline-flex items-center justify-center whitespace-nowrap select-none', 'gap-2', 'font-bold', '[--nb-button-bg:var(--nb-main)]', '[--nb-button-fg:var(--nb-main-foreground)]', '[--nb-button-border:var(--nb-border)]', '[--nb-button-radius:var(--nb-radius)]', '[--nb-button-shadow:var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_var(--nb-shadow)]', 'bg-(--nb-button-bg) text-(--nb-button-fg)', 'rounded-(--nb-button-radius)', 'border-2 border-(--nb-button-border)', 'shadow-[var(--nb-button-shadow)]', 'transition-all duration-150 ease-out', '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--nb-border) focus-visible:ring-offset-2', 'disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none', 'aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:pointer-events-none', this.variantClass(), this.shadowClass(), this.sizeClass(), this.fullWidth() && 'w-full'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
312
- variantClass() {
313
- const variant = this.variant();
314
- const map = {
315
- default: '',
316
- neutral: '[--nb-button-bg:var(--nb-background)] [--nb-button-fg:var(--nb-foreground)]',
317
- primary: '[--nb-button-bg:var(--nb-primary)] [--nb-button-fg:var(--nb-primary-foreground)]',
318
- secondary: '[--nb-button-bg:var(--nb-secondary)] [--nb-button-fg:var(--nb-secondary-foreground)]',
319
- accent: '[--nb-button-bg:var(--nb-accent)] [--nb-button-fg:var(--nb-accent-foreground)]',
320
- danger: '[--nb-button-bg:var(--nb-danger)] [--nb-button-fg:var(--nb-danger-foreground)]',
321
- success: '[--nb-button-bg:var(--nb-success)] [--nb-button-fg:var(--nb-success-foreground)]',
322
- warning: '[--nb-button-bg:var(--nb-warning)] [--nb-button-fg:var(--nb-warning-foreground)]',
323
- };
324
- return map[variant];
325
- }
859
+ press = input('push', ...(ngDevMode ? [{ debugName: "press" }] : /* istanbul ignore next */ []));
860
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
861
+ fullWidth = input(false, { ...(ngDevMode ? { debugName: "fullWidth" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
862
+ classes = computed(() => nbClass('inline-flex items-center justify-center whitespace-nowrap select-none font-bold', 'transition-all duration-150 ease-out', '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--nb-border) focus-visible:ring-offset-2', 'disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none', 'aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:pointer-events-none', this.shadowClass(), this.sizeClass(), this.fullWidth() && 'w-full'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
326
863
  shadowClass() {
327
864
  const map = {
328
- default: 'hover:translate-x-(--nb-shadow-offset-x) hover:translate-y-(--nb-shadow-offset-y) hover:shadow-none',
329
- none: '[--nb-button-shadow:none]',
330
- reverse: '[--nb-button-shadow:none] hover:-translate-x-(--nb-reverse-shadow-offset-x) hover:-translate-y-(--nb-reverse-shadow-offset-y) hover:shadow-[var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_var(--nb-shadow)]',
865
+ push: 'hover:translate-x-(--nb-shadow-offset-x) hover:translate-y-(--nb-shadow-offset-y) hover:shadow-none',
866
+ reverse: 'hover:-translate-x-(--nb-reverse-shadow-offset-x) hover:-translate-y-(--nb-reverse-shadow-offset-y)',
867
+ none: '',
331
868
  };
332
- return map[this.shadow()];
869
+ return map[this.press()];
333
870
  }
334
871
  sizeClass() {
335
- const map = {
336
- default: 'h-10 px-4 py-2 text-sm',
337
- sm: 'h-9 px-3 text-sm',
338
- lg: 'h-11 px-8 text-sm',
339
- icon: 'size-10',
340
- };
341
- return map[this.size()];
872
+ return sizeMap$3[this.size()];
342
873
  }
343
874
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
344
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbButton, isStandalone: true, selector: "button[nbButton], a[nbButton]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, shadow: { classPropertyName: "shadow", publicName: "shadow", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-variant": "variant()", "attr.data-shadow": "shadow()", "attr.data-size": "size()", "attr.data-full-width": "fullWidth() ? \"\" : null" } }, ngImport: i0 });
875
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbButton, isStandalone: true, selector: "button[nbButton], a[nbButton]", inputs: { press: { classPropertyName: "press", publicName: "press", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-press": "press()", "attr.data-size": "size()", "attr.data-full-width": "fullWidth() ? \"\" : null" } }, providers: [
876
+ { provide: NB_STYLE_NAMESPACE, useValue: 'button' },
877
+ {
878
+ provide: NB_STYLE_DEFAULTS,
879
+ useValue: {
880
+ tone: 'primary',
881
+ radius: 'md',
882
+ shadow: 'default',
883
+ border: 'default',
884
+ },
885
+ },
886
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0 });
345
887
  }
346
888
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbButton, decorators: [{
347
889
  type: Directive,
348
890
  args: [{
349
891
  selector: 'button[nbButton], a[nbButton]',
892
+ providers: [
893
+ { provide: NB_STYLE_NAMESPACE, useValue: 'button' },
894
+ {
895
+ provide: NB_STYLE_DEFAULTS,
896
+ useValue: {
897
+ tone: 'primary',
898
+ radius: 'md',
899
+ shadow: 'default',
900
+ border: 'default',
901
+ },
902
+ },
903
+ ],
904
+ hostDirectives: [
905
+ { directive: NbToneCapability, inputs: ['tone'] },
906
+ { directive: NbRadiusCapability, inputs: ['radius'] },
907
+ { directive: NbShadowCapability, inputs: ['shadow'] },
908
+ { directive: NbBorderCapability, inputs: ['border'] },
909
+ ],
350
910
  host: {
351
911
  '[class]': 'classes()',
352
- '[attr.data-variant]': 'variant()',
353
- '[attr.data-shadow]': 'shadow()',
912
+ '[attr.data-press]': 'press()',
354
913
  '[attr.data-size]': 'size()',
355
914
  '[attr.data-full-width]': 'fullWidth() ? "" : null',
356
915
  },
357
916
  }]
358
- }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], shadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "shadow", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }] } });
917
+ }], propDecorators: { press: [{ type: i0.Input, args: [{ isSignal: true, alias: "press", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }] } });
918
+
919
+ const sizeMap$2 = {
920
+ xs: '0.75rem',
921
+ sm: '1rem',
922
+ md: '1.25rem',
923
+ lg: '1.5rem',
924
+ xl: '2rem',
925
+ };
926
+ const toneMap$1 = {
927
+ current: 'currentColor',
928
+ default: 'var(--nb-foreground)',
929
+ muted: 'color-mix(in srgb, var(--nb-foreground) 75%, transparent)',
930
+ inverse: 'var(--nb-background)',
931
+ primary: 'var(--nb-primary)',
932
+ secondary: 'var(--nb-secondary)',
933
+ accent: 'var(--nb-accent)',
934
+ danger: 'var(--nb-danger)',
935
+ success: 'var(--nb-success)',
936
+ warning: 'var(--nb-warning)',
937
+ };
938
+ class NbIcon {
939
+ src = input.required(...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
940
+ mode = input('mask', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
941
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
942
+ tone = input('current', ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
943
+ decorative = input(false, { ...(ngDevMode ? { debugName: "decorative" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
944
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
945
+ hasWarnedAboutMissingA11y = false;
946
+ sizeValue = computed(() => sizeMap$2[this.size()], ...(ngDevMode ? [{ debugName: "sizeValue" }] : /* istanbul ignore next */ []));
947
+ toneValue = computed(() => toneMap$1[this.tone()], ...(ngDevMode ? [{ debugName: "toneValue" }] : /* istanbul ignore next */ []));
948
+ srcValue = computed(() => `url("${this.src()}")`, ...(ngDevMode ? [{ debugName: "srcValue" }] : /* istanbul ignore next */ []));
949
+ isMaskMode = computed(() => this.mode() === 'mask', ...(ngDevMode ? [{ debugName: "isMaskMode" }] : /* istanbul ignore next */ []));
950
+ isImageMode = computed(() => this.mode() === 'image', ...(ngDevMode ? [{ debugName: "isImageMode" }] : /* istanbul ignore next */ []));
951
+ roleValue = computed(() => !this.decorative() && this.label() ? 'img' : null, ...(ngDevMode ? [{ debugName: "roleValue" }] : /* istanbul ignore next */ []));
952
+ ariaHiddenValue = computed(() => this.decorative() ? 'true' : null, ...(ngDevMode ? [{ debugName: "ariaHiddenValue" }] : /* istanbul ignore next */ []));
953
+ ariaLabelValue = computed(() => this.decorative() ? null : this.label(), ...(ngDevMode ? [{ debugName: "ariaLabelValue" }] : /* istanbul ignore next */ []));
954
+ backgroundColorValue = computed(() => this.isMaskMode() ? 'var(--nb-icon-color, currentColor)' : null, ...(ngDevMode ? [{ debugName: "backgroundColorValue" }] : /* istanbul ignore next */ []));
955
+ backgroundImageValue = computed(() => this.isImageMode() ? this.srcValue() : null, ...(ngDevMode ? [{ debugName: "backgroundImageValue" }] : /* istanbul ignore next */ []));
956
+ backgroundSizeValue = computed(() => this.isImageMode() ? 'contain' : null, ...(ngDevMode ? [{ debugName: "backgroundSizeValue" }] : /* istanbul ignore next */ []));
957
+ backgroundPositionValue = computed(() => this.isImageMode() ? 'center' : null, ...(ngDevMode ? [{ debugName: "backgroundPositionValue" }] : /* istanbul ignore next */ []));
958
+ backgroundRepeatValue = computed(() => this.isImageMode() ? 'no-repeat' : null, ...(ngDevMode ? [{ debugName: "backgroundRepeatValue" }] : /* istanbul ignore next */ []));
959
+ maskImageValue = computed(() => this.isMaskMode() ? this.srcValue() : null, ...(ngDevMode ? [{ debugName: "maskImageValue" }] : /* istanbul ignore next */ []));
960
+ maskSizeValue = computed(() => this.isMaskMode() ? 'contain' : null, ...(ngDevMode ? [{ debugName: "maskSizeValue" }] : /* istanbul ignore next */ []));
961
+ maskPositionValue = computed(() => this.isMaskMode() ? 'center' : null, ...(ngDevMode ? [{ debugName: "maskPositionValue" }] : /* istanbul ignore next */ []));
962
+ maskRepeatValue = computed(() => this.isMaskMode() ? 'no-repeat' : null, ...(ngDevMode ? [{ debugName: "maskRepeatValue" }] : /* istanbul ignore next */ []));
963
+ constructor() {
964
+ if (isDevMode()) {
965
+ effect(() => {
966
+ if (!this.hasWarnedAboutMissingA11y &&
967
+ !this.decorative() &&
968
+ !this.label()) {
969
+ console.warn('[ng-brutalism] nbIcon should be marked decorative or given a label.');
970
+ this.hasWarnedAboutMissingA11y = true;
971
+ }
972
+ });
973
+ }
974
+ }
975
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
976
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbIcon, isStandalone: true, selector: "[nbIcon]", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, decorative: { classPropertyName: "decorative", publicName: "decorative", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-nb-icon": "\"\"", "attr.data-size": "size()", "attr.data-tone": "tone()", "attr.data-mode": "mode()", "attr.role": "roleValue()", "attr.aria-hidden": "ariaHiddenValue()", "attr.aria-label": "ariaLabelValue()", "style.--nb-icon-color": "toneValue()", "style.display": "\"inline-block\"", "style.width": "sizeValue()", "style.height": "sizeValue()", "style.flex-shrink": "\"0\"", "style.vertical-align": "\"middle\"", "style.color": "toneValue()", "style.background-color": "backgroundColorValue()", "style.background-image": "backgroundImageValue()", "style.background-size": "backgroundSizeValue()", "style.background-position": "backgroundPositionValue()", "style.background-repeat": "backgroundRepeatValue()", "style.mask-image": "maskImageValue()", "style.-webkit-mask-image": "maskImageValue()", "style.mask-size": "maskSizeValue()", "style.-webkit-mask-size": "maskSizeValue()", "style.mask-position": "maskPositionValue()", "style.-webkit-mask-position": "maskPositionValue()", "style.mask-repeat": "maskRepeatValue()", "style.-webkit-mask-repeat": "maskRepeatValue()" } }, exportAs: ["nbIcon"], ngImport: i0 });
977
+ }
978
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbIcon, decorators: [{
979
+ type: Directive,
980
+ args: [{
981
+ selector: '[nbIcon]',
982
+ standalone: true,
983
+ exportAs: 'nbIcon',
984
+ host: {
985
+ '[attr.data-nb-icon]': '""',
986
+ '[attr.data-size]': 'size()',
987
+ '[attr.data-tone]': 'tone()',
988
+ '[attr.data-mode]': 'mode()',
989
+ '[attr.role]': 'roleValue()',
990
+ '[attr.aria-hidden]': 'ariaHiddenValue()',
991
+ '[attr.aria-label]': 'ariaLabelValue()',
992
+ '[style.--nb-icon-color]': 'toneValue()',
993
+ '[style.display]': '"inline-block"',
994
+ '[style.width]': 'sizeValue()',
995
+ '[style.height]': 'sizeValue()',
996
+ '[style.flex-shrink]': '"0"',
997
+ '[style.vertical-align]': '"middle"',
998
+ '[style.color]': 'toneValue()',
999
+ '[style.background-color]': 'backgroundColorValue()',
1000
+ '[style.background-image]': 'backgroundImageValue()',
1001
+ '[style.background-size]': 'backgroundSizeValue()',
1002
+ '[style.background-position]': 'backgroundPositionValue()',
1003
+ '[style.background-repeat]': 'backgroundRepeatValue()',
1004
+ '[style.mask-image]': 'maskImageValue()',
1005
+ '[style.-webkit-mask-image]': 'maskImageValue()',
1006
+ '[style.mask-size]': 'maskSizeValue()',
1007
+ '[style.-webkit-mask-size]': 'maskSizeValue()',
1008
+ '[style.mask-position]': 'maskPositionValue()',
1009
+ '[style.-webkit-mask-position]': 'maskPositionValue()',
1010
+ '[style.mask-repeat]': 'maskRepeatValue()',
1011
+ '[style.-webkit-mask-repeat]': 'maskRepeatValue()',
1012
+ },
1013
+ }]
1014
+ }], ctorParameters: () => [], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: true }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], decorative: [{ type: i0.Input, args: [{ isSignal: true, alias: "decorative", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
1015
+
1016
+ const iconSizeMap$1 = {
1017
+ sm: '1.5rem',
1018
+ md: '2rem',
1019
+ lg: '2.5rem',
1020
+ };
1021
+ // Glyph size for the internal `nbIcon`, sized to sit comfortably inside the
1022
+ // badge box defined by `size` above (roughly half the box).
1023
+ const iconGlyphMap = {
1024
+ sm: 'xs',
1025
+ md: 'sm',
1026
+ lg: 'md',
1027
+ };
1028
+ const iconRadiusMap = {
1029
+ none: '0',
1030
+ square: 'var(--nb-radius-sm, 0.25rem)',
1031
+ circle: '999px',
1032
+ };
1033
+ const iconToneMap = {
1034
+ default: { bg: 'transparent', color: 'currentColor' },
1035
+ inverse: { bg: 'var(--nb-foreground)', color: 'var(--nb-background)' },
1036
+ current: { bg: 'currentColor', color: 'var(--nb-background)' },
1037
+ };
1038
+ class NbButtonTrailingIcon {
1039
+ size = input(undefined, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1040
+ shape = input(undefined, ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
1041
+ tone = input(undefined, ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
1042
+ push = input('none', ...(ngDevMode ? [{ debugName: "push" }] : /* istanbul ignore next */ []));
1043
+ // Optional icon, given as an SVG/image URL. Rendered through nbIcon in mask
1044
+ // mode so it tints to the badge's foreground color. Omit to project your own
1045
+ // icon as content instead.
1046
+ icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
1047
+ sizeVal = computed(() => {
1048
+ const s = this.size();
1049
+ return s !== undefined ? iconSizeMap$1[s] : null;
1050
+ }, ...(ngDevMode ? [{ debugName: "sizeVal" }] : /* istanbul ignore next */ []));
1051
+ iconSize = computed(() => {
1052
+ const s = this.size();
1053
+ return s !== undefined ? iconGlyphMap[s] : 'sm';
1054
+ }, ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
1055
+ radiusVal = computed(() => {
1056
+ const s = this.shape();
1057
+ return s !== undefined ? iconRadiusMap[s] : null;
1058
+ }, ...(ngDevMode ? [{ debugName: "radiusVal" }] : /* istanbul ignore next */ []));
1059
+ bgVal = computed(() => {
1060
+ const t = this.tone();
1061
+ return t !== undefined ? iconToneMap[t].bg : null;
1062
+ }, ...(ngDevMode ? [{ debugName: "bgVal" }] : /* istanbul ignore next */ []));
1063
+ colorVal = computed(() => {
1064
+ const t = this.tone();
1065
+ return t !== undefined ? iconToneMap[t].color : null;
1066
+ }, ...(ngDevMode ? [{ debugName: "colorVal" }] : /* istanbul ignore next */ []));
1067
+ classes = computed(() => nbClass('[&_svg]:pointer-events-none [&_svg]:shrink-0', this.push() === 'end' && 'ml-auto', this.size() !== undefined && 'inline-flex items-center justify-center shrink-0'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1068
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbButtonTrailingIcon, deps: [], target: i0.ɵɵFactoryTarget.Component });
1069
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbButtonTrailingIcon, isStandalone: true, selector: "[nbButtonTrailingIcon]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, push: { classPropertyName: "push", publicName: "push", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-button-trailing-icon": "\"\"", "style.width": "sizeVal()", "style.height": "sizeVal()", "style.borderRadius": "radiusVal()", "style.background": "bgVal()", "style.color": "colorVal()" } }, ngImport: i0, template: `
1070
+ @if (icon(); as iconSrc) {
1071
+ <span nbIcon [src]="iconSrc" [size]="iconSize()" decorative></span>
1072
+ }
1073
+ <ng-content />
1074
+ `, isInline: true, dependencies: [{ kind: "directive", type: NbIcon, selector: "[nbIcon]", inputs: ["src", "mode", "size", "tone", "decorative", "label"], exportAs: ["nbIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1075
+ }
1076
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbButtonTrailingIcon, decorators: [{
1077
+ type: Component,
1078
+ args: [{
1079
+ selector: '[nbButtonTrailingIcon]',
1080
+ imports: [NbIcon],
1081
+ template: `
1082
+ @if (icon(); as iconSrc) {
1083
+ <span nbIcon [src]="iconSrc" [size]="iconSize()" decorative></span>
1084
+ }
1085
+ <ng-content />
1086
+ `,
1087
+ host: {
1088
+ '[class]': 'classes()',
1089
+ '[attr.data-nb-button-trailing-icon]': '""',
1090
+ '[style.width]': 'sizeVal()',
1091
+ '[style.height]': 'sizeVal()',
1092
+ '[style.borderRadius]': 'radiusVal()',
1093
+ '[style.background]': 'bgVal()',
1094
+ '[style.color]': 'colorVal()',
1095
+ },
1096
+ changeDetection: ChangeDetectionStrategy.OnPush,
1097
+ }]
1098
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], push: [{ type: i0.Input, args: [{ isSignal: true, alias: "push", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
359
1099
 
360
1100
  class NbCard {
361
- classes = nbClass('[--nb-card-bg:var(--nb-background)]', '[--nb-card-fg:var(--nb-foreground)]', '[--nb-card-border:var(--nb-border)]', '[--nb-card-radius:18px]', '[--nb-card-shadow:var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_var(--nb-shadow)]', 'flex flex-col gap-6 py-6', 'rounded-(--nb-card-radius) border-2 border-(--nb-card-border)', 'bg-(--nb-card-bg) text-(--nb-card-fg)', 'shadow-[var(--nb-card-shadow)] font-medium');
1101
+ classes = nbClass('flex flex-col gap-6 py-6', 'font-medium');
362
1102
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
363
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: NbCard, isStandalone: true, selector: "nb-card", host: { properties: { "class": "classes", "attr.data-slot": "\"card\"" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1103
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: NbCard, isStandalone: true, selector: "nb-card", host: { properties: { "class": "classes", "attr.data-slot": "\"card\"" } }, providers: [
1104
+ { provide: NB_STYLE_NAMESPACE, useValue: 'card' },
1105
+ {
1106
+ provide: NB_STYLE_DEFAULTS,
1107
+ useValue: {
1108
+ tone: 'background',
1109
+ radius: 'lg',
1110
+ shadow: 'default',
1111
+ border: 'default',
1112
+ },
1113
+ },
1114
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
364
1115
  }
365
1116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbCard, decorators: [{
366
1117
  type: Component,
367
1118
  args: [{
368
1119
  selector: 'nb-card',
369
1120
  template: `<ng-content />`,
1121
+ providers: [
1122
+ { provide: NB_STYLE_NAMESPACE, useValue: 'card' },
1123
+ {
1124
+ provide: NB_STYLE_DEFAULTS,
1125
+ useValue: {
1126
+ tone: 'background',
1127
+ radius: 'lg',
1128
+ shadow: 'default',
1129
+ border: 'default',
1130
+ },
1131
+ },
1132
+ ],
1133
+ hostDirectives: [
1134
+ { directive: NbToneCapability, inputs: ['tone'] },
1135
+ { directive: NbRadiusCapability, inputs: ['radius'] },
1136
+ { directive: NbShadowCapability, inputs: ['shadow'] },
1137
+ { directive: NbBorderCapability, inputs: ['border'] },
1138
+ ],
370
1139
  host: {
371
1140
  '[class]': 'classes',
372
1141
  '[attr.data-slot]': '"card"',
@@ -482,10 +1251,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
482
1251
  class NbImageCard {
483
1252
  image = input.required(...(ngDevMode ? [{ debugName: "image" }] : /* istanbul ignore next */ []));
484
1253
  alt = input.required(...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
485
- classes = nbClass('[--nb-image-card-bg:var(--nb-background)]', '[--nb-image-card-fg:var(--nb-foreground)]', '[--nb-image-card-border:var(--nb-border)]', '[--nb-image-card-radius:var(--nb-radius)]', '[--nb-image-card-shadow:var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_var(--nb-shadow)]', 'flex flex-col overflow-hidden', 'rounded-(--nb-image-card-radius) border-2 border-(--nb-image-card-border)', 'bg-(--nb-image-card-bg) text-(--nb-image-card-fg)', 'shadow-[var(--nb-image-card-shadow)] font-medium');
1254
+ classes = nbClass('flex flex-col overflow-hidden', 'font-medium');
486
1255
  imageClasses = nbClass('block w-full h-auto');
487
1256
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbImageCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
488
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbImageCard, isStandalone: true, selector: "nb-image-card", inputs: { image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: true, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "classes", "attr.data-slot": "\"image-card\"" } }, ngImport: i0, template: `
1257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbImageCard, isStandalone: true, selector: "nb-image-card", inputs: { image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: true, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "classes", "attr.data-slot": "\"image-card\"" } }, providers: [
1258
+ { provide: NB_STYLE_NAMESPACE, useValue: 'image-card' },
1259
+ {
1260
+ provide: NB_STYLE_DEFAULTS,
1261
+ useValue: {
1262
+ tone: 'background',
1263
+ radius: 'md',
1264
+ shadow: 'default',
1265
+ border: 'default',
1266
+ },
1267
+ },
1268
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `
489
1269
  <img
490
1270
  [src]="image()"
491
1271
  [alt]="alt()"
@@ -510,6 +1290,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
510
1290
  />
511
1291
  <ng-content select="nb-image-card-caption" />
512
1292
  `,
1293
+ providers: [
1294
+ { provide: NB_STYLE_NAMESPACE, useValue: 'image-card' },
1295
+ {
1296
+ provide: NB_STYLE_DEFAULTS,
1297
+ useValue: {
1298
+ tone: 'background',
1299
+ radius: 'md',
1300
+ shadow: 'default',
1301
+ border: 'default',
1302
+ },
1303
+ },
1304
+ ],
1305
+ hostDirectives: [
1306
+ { directive: NbToneCapability, inputs: ['tone'] },
1307
+ { directive: NbRadiusCapability, inputs: ['radius'] },
1308
+ { directive: NbShadowCapability, inputs: ['shadow'] },
1309
+ { directive: NbBorderCapability, inputs: ['border'] },
1310
+ ],
513
1311
  host: {
514
1312
  '[class]': 'classes',
515
1313
  '[attr.data-slot]': '"image-card"',
@@ -518,7 +1316,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
518
1316
  }]
519
1317
  }], propDecorators: { image: [{ type: i0.Input, args: [{ isSignal: true, alias: "image", required: true }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: true }] }] } });
520
1318
  class NbImageCardCaption {
521
- classes = nbClass('border-t-2 border-(--nb-image-card-border)', 'px-6 py-4 text-center font-bold text-base');
1319
+ classes = nbClass('border-t-[length:var(--nb-border-width-token,var(--_nb-border-width-default))] border-t-[var(--_nb-tone-border-color-token,var(--_nb-tone-border-color-default))]', 'px-6 py-4 text-center font-bold text-base');
522
1320
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbImageCardCaption, deps: [], target: i0.ɵɵFactoryTarget.Component });
523
1321
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: NbImageCardCaption, isStandalone: true, selector: "nb-image-card-caption", host: { properties: { "class": "classes", "attr.data-slot": "\"image-card-caption\"" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
524
1322
  }
@@ -653,7 +1451,7 @@ const NB_INPUT_PREFIX = new InjectionToken('NB_INPUT_PREFIX');
653
1451
  const NB_INPUT_SUFFIX = new InjectionToken('NB_INPUT_SUFFIX');
654
1452
 
655
1453
  class NbInput {
656
- size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1454
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
657
1455
  group = inject(NB_INPUT_GROUP, { optional: true });
658
1456
  classes = computed(() => {
659
1457
  const inGroup = this.group !== null;
@@ -702,7 +1500,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
702
1500
 
703
1501
  class NbTitle {
704
1502
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
705
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: NbTitle, isStandalone: true, selector: "[nbTitle]", host: { properties: { "attr.data-nb-title": "\"\"" } }, ngImport: i0 });
1503
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: NbTitle, isStandalone: true, selector: "[nbTitle]", host: { properties: { "attr.data-nb-title": "\"\"", "attr.data-underline": "\"wave\"" } }, ngImport: i0 });
706
1504
  }
707
1505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbTitle, decorators: [{
708
1506
  type: Directive,
@@ -710,12 +1508,150 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
710
1508
  selector: '[nbTitle]',
711
1509
  host: {
712
1510
  '[attr.data-nb-title]': '""',
1511
+ '[attr.data-underline]': '"wave"',
713
1512
  },
714
1513
  }]
715
1514
  }] });
716
1515
 
1516
+ const SIZE_MAP = {
1517
+ sm: '2rem',
1518
+ md: '3rem',
1519
+ lg: '3.75rem',
1520
+ xl: '4.75rem',
1521
+ };
1522
+ // Fluid scale: each size becomes a viewport-based clamp whose max matches the
1523
+ // fixed size above. Viewport units (vw) are used rather than container query
1524
+ // units so the scale is safe with or without an explicit container — the
1525
+ // library owns the min/preferred/max formula; users only opt in with `fluid`.
1526
+ const FLUID_MAP = {
1527
+ sm: 'clamp(1.75rem, 1.2rem + 2.75vw, 2rem)',
1528
+ md: 'clamp(2.25rem, 1.5rem + 3.75vw, 3rem)',
1529
+ lg: 'clamp(2.75rem, 1.8rem + 4.75vw, 3.75rem)',
1530
+ xl: 'clamp(3.25rem, 2rem + 6.25vw, 4.75rem)',
1531
+ };
1532
+ const TRACKING_MAP = {
1533
+ normal: '0',
1534
+ tight: '-0.025em',
1535
+ tighter: '-0.08em',
1536
+ };
1537
+ const LEADING_MAP = {
1538
+ none: '1',
1539
+ tight: '0.9',
1540
+ display: '0.84',
1541
+ };
1542
+ class NbDisplay {
1543
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1544
+ weight = input('black', ...(ngDevMode ? [{ debugName: "weight" }] : /* istanbul ignore next */ []));
1545
+ fluid = input(false, { ...(ngDevMode ? { debugName: "fluid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1546
+ tracking = input('tight', ...(ngDevMode ? [{ debugName: "tracking" }] : /* istanbul ignore next */ []));
1547
+ leading = input('none', ...(ngDevMode ? [{ debugName: "leading" }] : /* istanbul ignore next */ []));
1548
+ // underline / underlineGap / underlineWidth / reset → composed capabilities
1549
+ fontSize = computed(() => {
1550
+ const base = this.fluid() ? FLUID_MAP[this.size()] : SIZE_MAP[this.size()];
1551
+ return `var(--nb-display-size, ${base})`;
1552
+ }, ...(ngDevMode ? [{ debugName: "fontSize" }] : /* istanbul ignore next */ []));
1553
+ weightValue = computed(() => nbFontWeightValue(this.weight()), ...(ngDevMode ? [{ debugName: "weightValue" }] : /* istanbul ignore next */ []));
1554
+ trackingValue = computed(() => TRACKING_MAP[this.tracking()], ...(ngDevMode ? [{ debugName: "trackingValue" }] : /* istanbul ignore next */ []));
1555
+ leadingValue = computed(() => LEADING_MAP[this.leading()], ...(ngDevMode ? [{ debugName: "leadingValue" }] : /* istanbul ignore next */ []));
1556
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbDisplay, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1557
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbDisplay, isStandalone: true, selector: "[nbDisplay]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, weight: { classPropertyName: "weight", publicName: "weight", isSignal: true, isRequired: false, transformFunction: null }, fluid: { classPropertyName: "fluid", publicName: "fluid", isSignal: true, isRequired: false, transformFunction: null }, tracking: { classPropertyName: "tracking", publicName: "tracking", isSignal: true, isRequired: false, transformFunction: null }, leading: { classPropertyName: "leading", publicName: "leading", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.font-size": "fontSize()", "style.font-weight": "weightValue()", "style.color": "\"var(--nb-display-color, currentColor)\"", "style.letter-spacing": "trackingValue()", "style.line-height": "leadingValue()", "attr.data-nb-display": "\"\"" } }, hostDirectives: [{ directive: NbUnderlineCapability, inputs: ["underline", "underline", "underlineGap", "underlineGap", "underlineWidth", "underlineWidth"] }, { directive: NbResetMarginCapability, inputs: ["reset", "reset"] }], ngImport: i0 });
1558
+ }
1559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbDisplay, decorators: [{
1560
+ type: Directive,
1561
+ args: [{
1562
+ selector: '[nbDisplay]',
1563
+ hostDirectives: [
1564
+ // underline variant + optional gap/width overrides → data-underline + CSS vars
1565
+ {
1566
+ directive: NbUnderlineCapability,
1567
+ inputs: ['underline', 'underlineGap', 'underlineWidth'],
1568
+ },
1569
+ // reset input → margin: 0 (removes native heading margin)
1570
+ { directive: NbResetMarginCapability, inputs: ['reset'] },
1571
+ ],
1572
+ host: {
1573
+ '[style.font-size]': 'fontSize()',
1574
+ '[style.font-weight]': 'weightValue()',
1575
+ '[style.color]': '"var(--nb-display-color, currentColor)"',
1576
+ '[style.letter-spacing]': 'trackingValue()',
1577
+ '[style.line-height]': 'leadingValue()',
1578
+ '[attr.data-nb-display]': '""',
1579
+ },
1580
+ }]
1581
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], weight: [{ type: i0.Input, args: [{ isSignal: true, alias: "weight", required: false }] }], fluid: [{ type: i0.Input, args: [{ isSignal: true, alias: "fluid", required: false }] }], tracking: [{ type: i0.Input, args: [{ isSignal: true, alias: "tracking", required: false }] }], leading: [{ type: i0.Input, args: [{ isSignal: true, alias: "leading", required: false }] }] } });
1582
+
1583
+ /**
1584
+ * Typography context. Picks a font *role* and writes the resolved stack as
1585
+ * `font-family` on the host so every descendant primitive (nbText, nbDisplay,
1586
+ * nbButton, nbChip, nbMediaItemTitle, …) inherits it through the cascade — no
1587
+ * raw font-family strings in templates.
1588
+ *
1589
+ * Precedence falls out of the cascade: a nested context overrides an outer one
1590
+ * (closest wins), and an inline token override (`--nb-font-accent: …`) wins over
1591
+ * the preset because the resolved value reads that token first.
1592
+ *
1593
+ * Also available as the `typography` input on nbSurface, which composes this
1594
+ * directive directly.
1595
+ */
1596
+ class NbTypography {
1597
+ font = input('inherit', ...(ngDevMode ? [{ debugName: "font" }] : /* istanbul ignore next */ []));
1598
+ fontValue = computed(() => nbTypographyFontValue(this.font()), ...(ngDevMode ? [{ debugName: "fontValue" }] : /* istanbul ignore next */ []));
1599
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbTypography, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1600
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbTypography, isStandalone: true, selector: "[nbTypography]", inputs: { font: { classPropertyName: "font", publicName: "font", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-nb-typography": "font()", "style.--nb-typography-font": "fontValue()", "style.font-family": "fontValue()" } }, exportAs: ["nbTypography"], ngImport: i0 });
1601
+ }
1602
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbTypography, decorators: [{
1603
+ type: Directive,
1604
+ args: [{
1605
+ selector: '[nbTypography]',
1606
+ exportAs: 'nbTypography',
1607
+ host: {
1608
+ '[attr.data-nb-typography]': 'font()',
1609
+ '[style.--nb-typography-font]': 'fontValue()',
1610
+ '[style.font-family]': 'fontValue()',
1611
+ },
1612
+ }]
1613
+ }], propDecorators: { font: [{ type: i0.Input, args: [{ isSignal: true, alias: "font", required: false }] }] } });
1614
+
1615
+ const THICKNESS = {
1616
+ solid: '2px',
1617
+ dashed: '2px',
1618
+ thick: '4px',
1619
+ };
1620
+ class NbSeparator {
1621
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
1622
+ variant = input('solid', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1623
+ isHorizontal = computed(() => this.orientation() === 'horizontal', ...(ngDevMode ? [{ debugName: "isHorizontal" }] : /* istanbul ignore next */ []));
1624
+ isVertical = computed(() => this.orientation() === 'vertical', ...(ngDevMode ? [{ debugName: "isVertical" }] : /* istanbul ignore next */ []));
1625
+ borderLine = computed(() => {
1626
+ const v = this.variant();
1627
+ const thickness = `var(--nb-separator-thickness, ${THICKNESS[v]})`;
1628
+ const style = v === 'dashed' ? 'dashed' : 'solid';
1629
+ return `${thickness} ${style} var(--nb-separator-color, var(--nb-border))`;
1630
+ }, ...(ngDevMode ? [{ debugName: "borderLine" }] : /* istanbul ignore next */ []));
1631
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1632
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbSeparator, isStandalone: true, selector: "hr[nbSeparator]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-nb-separator": "\"\"", "attr.aria-orientation": "orientation()", "style.margin": "\"0\"", "style.border-top": "isHorizontal() ? borderLine() : \"none\"", "style.border-bottom": "\"none\"", "style.border-left": "isVertical() ? borderLine() : \"none\"", "style.border-right": "\"none\"", "style.width": "isVertical() ? \"0\" : \"100%\"", "style.height": "isVertical() ? \"auto\" : \"0\"", "style.align-self": "isVertical() ? \"stretch\" : \"auto\"" } }, ngImport: i0 });
1633
+ }
1634
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSeparator, decorators: [{
1635
+ type: Directive,
1636
+ args: [{
1637
+ selector: 'hr[nbSeparator]',
1638
+ host: {
1639
+ '[attr.data-nb-separator]': '""',
1640
+ '[attr.aria-orientation]': 'orientation()',
1641
+ '[style.margin]': '"0"',
1642
+ '[style.border-top]': 'isHorizontal() ? borderLine() : "none"',
1643
+ '[style.border-bottom]': '"none"',
1644
+ '[style.border-left]': 'isVertical() ? borderLine() : "none"',
1645
+ '[style.border-right]': '"none"',
1646
+ '[style.width]': 'isVertical() ? "0" : "100%"',
1647
+ '[style.height]': 'isVertical() ? "auto" : "0"',
1648
+ '[style.align-self]': 'isVertical() ? "stretch" : "auto"',
1649
+ },
1650
+ }]
1651
+ }], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
1652
+
717
1653
  class NbTextarea {
718
- size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1654
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
719
1655
  group = inject(NB_INPUT_GROUP, { optional: true });
720
1656
  classes = computed(() => {
721
1657
  const inGroup = this.group !== null;
@@ -1134,38 +2070,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1134
2070
  }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], options: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => NbSelectOption), { isSignal: true }] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }] } });
1135
2071
 
1136
2072
  class NbBadge {
1137
- variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1138
- classes = computed(() => nbClass('inline-flex items-center rounded-(--nb-badge-radius) border-2 border-(--nb-badge-border)', 'bg-(--nb-badge-bg) text-(--nb-badge-fg)', '[--nb-badge-bg:#fff]', '[--nb-badge-fg:var(--nb-foreground)]', '[--nb-badge-border:var(--nb-border)]', '[--nb-badge-radius:9999px]', '[--nb-badge-shadow:2px_2px_0_var(--nb-shadow)]', 'px-2.5 py-0.5 text-xs font-bold', 'shadow-[var(--nb-badge-shadow)]', this.variantClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
1139
- variantClass() {
1140
- const map = {
1141
- default: '',
1142
- secondary: '[--nb-badge-bg:var(--nb-accent)] [--nb-badge-fg:var(--nb-accent-foreground)]',
1143
- success: '[--nb-badge-bg:var(--nb-success)] [--nb-badge-fg:var(--nb-success-foreground)]',
1144
- warning: '[--nb-badge-bg:var(--nb-warning)] [--nb-badge-fg:var(--nb-warning-foreground)]',
1145
- danger: '[--nb-badge-bg:var(--nb-danger)] [--nb-badge-fg:var(--nb-danger-foreground)]',
1146
- };
1147
- return map[this.variant()];
1148
- }
2073
+ classes = nbClass('inline-flex items-center gap-1.5', 'px-2.5 py-0.5 text-xs font-bold');
1149
2074
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbBadge, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1150
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbBadge, isStandalone: true, selector: "span[nbBadge]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-variant": "variant()" } }, ngImport: i0 });
2075
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: NbBadge, isStandalone: true, selector: "span[nbBadge]", host: { properties: { "class": "classes", "attr.data-nb-badge": "\"\"" } }, providers: [
2076
+ { provide: NB_STYLE_NAMESPACE, useValue: 'badge' },
2077
+ {
2078
+ provide: NB_STYLE_DEFAULTS,
2079
+ useValue: {
2080
+ tone: 'white',
2081
+ radius: 'full',
2082
+ shadow: 'sm',
2083
+ border: 'default',
2084
+ },
2085
+ },
2086
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0 });
1151
2087
  }
1152
2088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbBadge, decorators: [{
1153
2089
  type: Directive,
1154
2090
  args: [{
1155
2091
  selector: 'span[nbBadge]',
2092
+ providers: [
2093
+ { provide: NB_STYLE_NAMESPACE, useValue: 'badge' },
2094
+ {
2095
+ provide: NB_STYLE_DEFAULTS,
2096
+ useValue: {
2097
+ tone: 'white',
2098
+ radius: 'full',
2099
+ shadow: 'sm',
2100
+ border: 'default',
2101
+ },
2102
+ },
2103
+ ],
2104
+ hostDirectives: [
2105
+ { directive: NbToneCapability, inputs: ['tone'] },
2106
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2107
+ { directive: NbShadowCapability, inputs: ['shadow'] },
2108
+ { directive: NbBorderCapability, inputs: ['border'] },
2109
+ ],
1156
2110
  host: {
1157
- '[class]': 'classes()',
1158
- '[attr.data-variant]': 'variant()',
2111
+ '[class]': 'classes',
2112
+ '[attr.data-nb-badge]': '""',
1159
2113
  },
1160
2114
  }]
1161
- }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
2115
+ }] });
1162
2116
 
1163
2117
  class NbAvatar {
1164
2118
  src = input(undefined, ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
1165
2119
  alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
1166
- classes = nbClass('[--nb-avatar-bg:var(--nb-secondary-background)]', '[--nb-avatar-fg:var(--nb-foreground)]', '[--nb-avatar-border:var(--nb-border)]', '[--nb-avatar-radius:9999px]', '[--nb-avatar-shadow:2px_2px_0_0_var(--nb-shadow)]', 'relative inline-flex h-10 w-10 shrink-0 overflow-hidden', 'rounded-(--nb-avatar-radius) border-2 border-(--nb-avatar-border)', 'bg-(--nb-avatar-bg) text-(--nb-avatar-fg)', 'shadow-[var(--nb-avatar-shadow)]', 'font-bold text-sm items-center justify-center');
2120
+ classes = nbClass('relative inline-flex h-10 w-10 shrink-0 overflow-hidden', 'font-bold text-sm items-center justify-center');
1167
2121
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
1168
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbAvatar, isStandalone: true, selector: "nb-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes", "attr.data-slot": "\"avatar\"", "attr.role": "\"img\"", "attr.aria-label": "alt()" } }, ngImport: i0, template: `
2122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbAvatar, isStandalone: true, selector: "nb-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes", "attr.data-slot": "\"avatar\"", "attr.role": "\"img\"", "attr.aria-label": "alt()" } }, providers: [
2123
+ { provide: NB_STYLE_NAMESPACE, useValue: 'avatar' },
2124
+ {
2125
+ provide: NB_STYLE_DEFAULTS,
2126
+ useValue: {
2127
+ tone: 'surface',
2128
+ radius: 'full',
2129
+ shadow: 'sm',
2130
+ border: 'default',
2131
+ },
2132
+ },
2133
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `
1169
2134
  @if (src()) {
1170
2135
  <img [src]="src()" [alt]="alt()" class="h-full w-full object-cover" />
1171
2136
  } @else {
@@ -1184,6 +2149,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1184
2149
  <ng-content />
1185
2150
  }
1186
2151
  `,
2152
+ providers: [
2153
+ { provide: NB_STYLE_NAMESPACE, useValue: 'avatar' },
2154
+ {
2155
+ provide: NB_STYLE_DEFAULTS,
2156
+ useValue: {
2157
+ tone: 'surface',
2158
+ radius: 'full',
2159
+ shadow: 'sm',
2160
+ border: 'default',
2161
+ },
2162
+ },
2163
+ ],
2164
+ hostDirectives: [
2165
+ { directive: NbToneCapability, inputs: ['tone'] },
2166
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2167
+ { directive: NbShadowCapability, inputs: ['shadow'] },
2168
+ { directive: NbBorderCapability, inputs: ['border'] },
2169
+ ],
1187
2170
  host: {
1188
2171
  '[class]': 'classes',
1189
2172
  '[attr.data-slot]': '"avatar"',
@@ -1194,12 +2177,163 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1194
2177
  }]
1195
2178
  }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }] } });
1196
2179
 
2180
+ class NbMediaFrame {
2181
+ ratio = input('auto', ...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
2182
+ fit = input('cover', ...(ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []));
2183
+ classes = computed(() => nbClass('relative isolate block overflow-hidden', '[&>img]:h-full [&>img]:w-full', '[&>video]:h-full [&>video]:w-full', '[&>picture]:block [&>picture]:h-full [&>picture]:w-full', '[&>picture>img]:h-full [&>picture>img]:w-full', this.ratioClass(), this.fitClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2184
+ ratioClass() {
2185
+ const map = {
2186
+ auto: '',
2187
+ '1/1': 'aspect-square',
2188
+ '3/4': 'aspect-[3/4]',
2189
+ '4/3': 'aspect-[4/3]',
2190
+ '3/2': 'aspect-[3/2]',
2191
+ '16/9': 'aspect-video',
2192
+ '21/9': 'aspect-[21/9]',
2193
+ };
2194
+ return map[this.ratio()];
2195
+ }
2196
+ fitClass() {
2197
+ const map = {
2198
+ cover: '[&>img]:object-cover [&>video]:object-cover [&>picture>img]:object-cover',
2199
+ contain: '[&>img]:object-contain [&>video]:object-contain [&>picture>img]:object-contain',
2200
+ fill: '[&>img]:object-fill [&>video]:object-fill [&>picture>img]:object-fill',
2201
+ };
2202
+ return map[this.fit()];
2203
+ }
2204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaFrame, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2205
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbMediaFrame, isStandalone: true, selector: "[nbMediaFrame]", inputs: { ratio: { classPropertyName: "ratio", publicName: "ratio", isSignal: true, isRequired: false, transformFunction: null }, fit: { classPropertyName: "fit", publicName: "fit", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-media-frame": "\"\"", "attr.data-ratio": "ratio()", "attr.data-fit": "fit()" } }, providers: [
2206
+ { provide: NB_STYLE_NAMESPACE, useValue: 'media-frame' },
2207
+ {
2208
+ provide: NB_STYLE_DEFAULTS,
2209
+ useValue: {
2210
+ tone: 'default',
2211
+ radius: 'lg',
2212
+ shadow: 'none',
2213
+ border: 'default',
2214
+ },
2215
+ },
2216
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0 });
2217
+ }
2218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaFrame, decorators: [{
2219
+ type: Directive,
2220
+ args: [{
2221
+ selector: '[nbMediaFrame]',
2222
+ providers: [
2223
+ { provide: NB_STYLE_NAMESPACE, useValue: 'media-frame' },
2224
+ {
2225
+ provide: NB_STYLE_DEFAULTS,
2226
+ useValue: {
2227
+ tone: 'default',
2228
+ radius: 'lg',
2229
+ shadow: 'none',
2230
+ border: 'default',
2231
+ },
2232
+ },
2233
+ ],
2234
+ hostDirectives: [
2235
+ { directive: NbToneCapability, inputs: ['tone'] },
2236
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2237
+ { directive: NbShadowCapability, inputs: ['shadow'] },
2238
+ { directive: NbBorderCapability, inputs: ['border'] },
2239
+ ],
2240
+ host: {
2241
+ '[class]': 'classes()',
2242
+ '[attr.data-nb-media-frame]': '""',
2243
+ '[attr.data-ratio]': 'ratio()',
2244
+ '[attr.data-fit]': 'fit()',
2245
+ },
2246
+ }]
2247
+ }], propDecorators: { ratio: [{ type: i0.Input, args: [{ isSignal: true, alias: "ratio", required: false }] }], fit: [{ type: i0.Input, args: [{ isSignal: true, alias: "fit", required: false }] }] } });
2248
+
2249
+ class NbStat {
2250
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2251
+ label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2252
+ direction = input('column', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
2253
+ classes = computed(() => nbClass('[--nb-stat-value-size:1.5rem]', '[--nb-stat-label-size:0.625rem]', '[--nb-stat-label-fg:var(--nb-foreground)]', 'inline-flex items-center gap-2', this.direction() === 'row' ? 'flex-row' : 'flex-col'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2254
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStat, deps: [], target: i0.ɵɵFactoryTarget.Component });
2255
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbStat, isStandalone: true, selector: "nb-stat", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-slot": "\"stat\"" } }, ngImport: i0, template: `
2256
+ <ng-content select="[slot=icon]" />
2257
+ <span class="flex flex-col gap-0.5">
2258
+ <span class="text-[length:var(--nb-stat-value-size)] font-black leading-none tracking-tight">
2259
+ {{ value() }}
2260
+ </span>
2261
+ <span class="text-[length:var(--nb-stat-label-size)] font-bold text-(--nb-stat-label-fg) uppercase tracking-wide">
2262
+ {{ label() }}
2263
+ </span>
2264
+ </span>
2265
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2266
+ }
2267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStat, decorators: [{
2268
+ type: Component,
2269
+ args: [{
2270
+ selector: 'nb-stat',
2271
+ template: `
2272
+ <ng-content select="[slot=icon]" />
2273
+ <span class="flex flex-col gap-0.5">
2274
+ <span class="text-[length:var(--nb-stat-value-size)] font-black leading-none tracking-tight">
2275
+ {{ value() }}
2276
+ </span>
2277
+ <span class="text-[length:var(--nb-stat-label-size)] font-bold text-(--nb-stat-label-fg) uppercase tracking-wide">
2278
+ {{ label() }}
2279
+ </span>
2280
+ </span>
2281
+ `,
2282
+ host: {
2283
+ '[class]': 'classes()',
2284
+ '[attr.data-slot]': '"stat"',
2285
+ },
2286
+ changeDetection: ChangeDetectionStrategy.OnPush,
2287
+ }]
2288
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }] } });
2289
+
2290
+ class NbRating {
2291
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2292
+ max = input(5, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
2293
+ count = input(undefined, ...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
2294
+ stars = computed(() => Array.from({ length: this.max() }, (_, i) => i + 1), ...(ngDevMode ? [{ debugName: "stars" }] : /* istanbul ignore next */ []));
2295
+ filled = computed(() => Math.round(Math.min(Math.max(this.value(), 0), this.max())), ...(ngDevMode ? [{ debugName: "filled" }] : /* istanbul ignore next */ []));
2296
+ ariaLabel = computed(() => `${this.value()} out of ${this.max()} stars`, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
2297
+ classes = nbClass('[--nb-rating-filled:#f59e0b]', '[--nb-rating-empty:var(--nb-border)]', '[--nb-rating-size:1.25rem]', 'inline-flex items-center gap-0.5');
2298
+ filledClass = nbClass('text-(--nb-rating-filled)', 'text-[length:var(--nb-rating-size)]', 'leading-none');
2299
+ emptyClass = nbClass('text-(--nb-rating-empty)', 'text-[length:var(--nb-rating-size)]', 'leading-none');
2300
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbRating, deps: [], target: i0.ɵɵFactoryTarget.Component });
2301
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbRating, isStandalone: true, selector: "nb-rating", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes", "attr.aria-label": "ariaLabel()", "attr.role": "\"img\"" } }, ngImport: i0, template: `
2302
+ @for (i of stars(); track i) {
2303
+ <span [class]="i <= filled() ? filledClass : emptyClass">{{ i <= filled() ? '★' : '☆' }}</span>
2304
+ }
2305
+ @if (count() !== undefined) {
2306
+ <span class="text-xs font-bold text-(--nb-rating-empty) ml-0.5">({{ count() }})</span>
2307
+ }
2308
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2309
+ }
2310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbRating, decorators: [{
2311
+ type: Component,
2312
+ args: [{
2313
+ selector: 'nb-rating',
2314
+ template: `
2315
+ @for (i of stars(); track i) {
2316
+ <span [class]="i <= filled() ? filledClass : emptyClass">{{ i <= filled() ? '★' : '☆' }}</span>
2317
+ }
2318
+ @if (count() !== undefined) {
2319
+ <span class="text-xs font-bold text-(--nb-rating-empty) ml-0.5">({{ count() }})</span>
2320
+ }
2321
+ `,
2322
+ host: {
2323
+ '[class]': 'classes',
2324
+ '[attr.aria-label]': 'ariaLabel()',
2325
+ '[attr.role]': '"img"',
2326
+ },
2327
+ changeDetection: ChangeDetectionStrategy.OnPush,
2328
+ }]
2329
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], count: [{ type: i0.Input, args: [{ isSignal: true, alias: "count", required: false }] }] } });
2330
+
1197
2331
  const NB_DIALOG = new InjectionToken('NB_DIALOG');
1198
2332
 
1199
2333
  class NbDialog {
1200
2334
  isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
1201
2335
  dialogEl = viewChild.required('dialogEl');
1202
- classes = nbClass('[--nb-dialog-bg:#fff]', '[--nb-dialog-fg:var(--nb-foreground)]', '[--nb-dialog-border:var(--nb-border)]', '[--nb-dialog-radius:0.5rem]', '[--nb-dialog-shadow:8px_8px_0_0_var(--nb-shadow)]', 'w-[calc(100vw-2rem)] max-w-2xl rounded-(--nb-dialog-radius)', 'border-2 border-(--nb-dialog-border)', 'bg-(--nb-dialog-bg) text-(--nb-dialog-fg)', 'shadow-[var(--nb-dialog-shadow)]', 'm-auto p-0 max-h-[90vh] overflow-x-hidden', 'open:flex open:flex-col');
2336
+ classes = nbClass('w-[calc(100vw-2rem)] max-w-2xl', 'nb-tone', 'm-auto p-0 max-h-[90vh] overflow-x-hidden', 'open:flex open:flex-col');
1203
2337
  open() {
1204
2338
  if (this.isBrowser) {
1205
2339
  this.dialogEl().nativeElement.showModal();
@@ -1216,7 +2350,19 @@ class NbDialog {
1216
2350
  }
1217
2351
  }
1218
2352
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
1219
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NbDialog, isStandalone: true, selector: "nb-dialog", host: { properties: { "attr.data-slot": "\"dialog\"" } }, providers: [{ provide: NB_DIALOG, useExisting: NbDialog }], viewQueries: [{ propertyName: "dialogEl", first: true, predicate: ["dialogEl"], descendants: true, isSignal: true }], ngImport: i0, template: `
2353
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NbDialog, isStandalone: true, selector: "nb-dialog", host: { properties: { "attr.data-slot": "\"dialog\"" } }, providers: [
2354
+ { provide: NB_STYLE_NAMESPACE, useValue: 'dialog' },
2355
+ {
2356
+ provide: NB_STYLE_DEFAULTS,
2357
+ useValue: {
2358
+ tone: 'white',
2359
+ radius: 'sm',
2360
+ shadow: 'hard',
2361
+ border: 'default',
2362
+ },
2363
+ },
2364
+ { provide: NB_DIALOG, useExisting: NbDialog },
2365
+ ], viewQueries: [{ propertyName: "dialogEl", first: true, predicate: ["dialogEl"], descendants: true, isSignal: true }], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `
1220
2366
  <dialog
1221
2367
  #dialogEl
1222
2368
  data-nb-dialog
@@ -1241,8 +2387,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1241
2387
  <ng-content />
1242
2388
  </dialog>
1243
2389
  `,
2390
+ providers: [
2391
+ { provide: NB_STYLE_NAMESPACE, useValue: 'dialog' },
2392
+ {
2393
+ provide: NB_STYLE_DEFAULTS,
2394
+ useValue: {
2395
+ tone: 'white',
2396
+ radius: 'sm',
2397
+ shadow: 'hard',
2398
+ border: 'default',
2399
+ },
2400
+ },
2401
+ { provide: NB_DIALOG, useExisting: NbDialog },
2402
+ ],
2403
+ hostDirectives: [
2404
+ { directive: NbToneCapability, inputs: ['tone'] },
2405
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2406
+ { directive: NbShadowCapability, inputs: ['shadow'] },
2407
+ { directive: NbBorderCapability, inputs: ['border'] },
2408
+ ],
1244
2409
  host: { '[attr.data-slot]': '"dialog"' },
1245
- providers: [{ provide: NB_DIALOG, useExisting: NbDialog }],
1246
2410
  changeDetection: ChangeDetectionStrategy.OnPush,
1247
2411
  }]
1248
2412
  }], propDecorators: { dialogEl: [{ type: i0.ViewChild, args: ['dialogEl', { isSignal: true }] }] } });
@@ -1326,11 +2490,1464 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1326
2490
  }]
1327
2491
  }] });
1328
2492
 
2493
+ const STATUS_DOT_SIZE_MAP = {
2494
+ xs: '8px',
2495
+ sm: '10px',
2496
+ md: '12px',
2497
+ lg: '16px',
2498
+ };
2499
+ class NbStatusDot {
2500
+ state = input('online', ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
2501
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2502
+ classes = computed(() => nbClass('inline-block shrink-0 rounded-full border-2 border-(--nb-border)', 'w-(--nb-status-dot-size) h-(--nb-status-dot-size)', this.stateClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2503
+ ariaLabel = computed(() => `Status: ${this.state()}`, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
2504
+ sizeVar = computed(() => STATUS_DOT_SIZE_MAP[this.size()], ...(ngDevMode ? [{ debugName: "sizeVar" }] : /* istanbul ignore next */ []));
2505
+ stateClass() {
2506
+ const map = {
2507
+ online: 'bg-(--nb-success)',
2508
+ offline: 'bg-(--nb-secondary-background)',
2509
+ live: 'bg-(--nb-danger) animate-pulse',
2510
+ };
2511
+ return map[this.state()];
2512
+ }
2513
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStatusDot, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2514
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbStatusDot, isStandalone: true, selector: "span[nbStatusDot]", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "style.--nb-status-dot-size": "sizeVar()", "attr.role": "\"img\"", "attr.aria-label": "ariaLabel()", "attr.data-state": "state()", "attr.data-size": "size()", "attr.data-nb-status-dot": "\"\"" } }, providers: [
2515
+ { provide: NB_STYLE_NAMESPACE, useValue: 'status-dot' },
2516
+ {
2517
+ provide: NB_STYLE_DEFAULTS,
2518
+ useValue: { radius: 'md' },
2519
+ },
2520
+ ], hostDirectives: [{ directive: NbRadiusCapability, inputs: ["radius", "radius"] }], ngImport: i0 });
2521
+ }
2522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStatusDot, decorators: [{
2523
+ type: Directive,
2524
+ args: [{
2525
+ selector: 'span[nbStatusDot]',
2526
+ providers: [
2527
+ { provide: NB_STYLE_NAMESPACE, useValue: 'status-dot' },
2528
+ {
2529
+ provide: NB_STYLE_DEFAULTS,
2530
+ useValue: { radius: 'md' },
2531
+ },
2532
+ ],
2533
+ hostDirectives: [
2534
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2535
+ ],
2536
+ host: {
2537
+ '[class]': 'classes()',
2538
+ '[style.--nb-status-dot-size]': 'sizeVar()',
2539
+ '[attr.role]': '"img"',
2540
+ '[attr.aria-label]': 'ariaLabel()',
2541
+ '[attr.data-state]': 'state()',
2542
+ '[attr.data-size]': 'size()',
2543
+ '[attr.data-nb-status-dot]': '""',
2544
+ },
2545
+ }]
2546
+ }], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
2547
+
2548
+ const paddingMap = {
2549
+ none: 'px-0 py-0',
2550
+ sm: 'px-2 py-0.5',
2551
+ md: 'px-2.5 py-0.5',
2552
+ lg: 'px-4 py-2',
2553
+ xl: 'px-5 py-2.5',
2554
+ };
2555
+ class NbChip {
2556
+ padding = input('md', ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
2557
+ // Optional leading icon, given as an SVG/image URL. Rendered through nbIcon
2558
+ // in mask mode so it tints to the chip's foreground color. For full-color
2559
+ // or labeled icons, compose an `nbIcon` (or any element) as projected
2560
+ // content instead — the leading slot is only used when `icon` is set.
2561
+ icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
2562
+ iconSize = input('sm', ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
2563
+ classes = computed(() => nbClass('inline-flex items-center gap-1.5', 'text-xs font-bold', paddingMap[this.padding()], '[&_svg]:size-[var(--nb-chip-icon-size,0.75rem)] [&_svg]:shrink-0'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2564
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbChip, deps: [], target: i0.ɵɵFactoryTarget.Component });
2565
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbChip, isStandalone: true, selector: "span[nbChip]", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-padding": "padding()", "attr.data-nb-chip": "\"\"" } }, providers: [
2566
+ { provide: NB_STYLE_NAMESPACE, useValue: 'chip' },
2567
+ {
2568
+ provide: NB_STYLE_DEFAULTS,
2569
+ useValue: {
2570
+ tone: 'default',
2571
+ radius: 'none',
2572
+ shadow: 'sm',
2573
+ border: 'default',
2574
+ },
2575
+ },
2576
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `
2577
+ @if (icon()) {
2578
+ <span nbIcon [src]="icon()!" [size]="iconSize()" decorative></span>
2579
+ }
2580
+ <ng-content />
2581
+ `, isInline: true, dependencies: [{ kind: "directive", type: NbIcon, selector: "[nbIcon]", inputs: ["src", "mode", "size", "tone", "decorative", "label"], exportAs: ["nbIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2582
+ }
2583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbChip, decorators: [{
2584
+ type: Component,
2585
+ args: [{
2586
+ selector: 'span[nbChip]',
2587
+ imports: [NbIcon],
2588
+ providers: [
2589
+ { provide: NB_STYLE_NAMESPACE, useValue: 'chip' },
2590
+ {
2591
+ provide: NB_STYLE_DEFAULTS,
2592
+ useValue: {
2593
+ tone: 'default',
2594
+ radius: 'none',
2595
+ shadow: 'sm',
2596
+ border: 'default',
2597
+ },
2598
+ },
2599
+ ],
2600
+ hostDirectives: [
2601
+ { directive: NbToneCapability, inputs: ['tone'] },
2602
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2603
+ { directive: NbShadowCapability, inputs: ['shadow'] },
2604
+ { directive: NbBorderCapability, inputs: ['border'] },
2605
+ ],
2606
+ template: `
2607
+ @if (icon()) {
2608
+ <span nbIcon [src]="icon()!" [size]="iconSize()" decorative></span>
2609
+ }
2610
+ <ng-content />
2611
+ `,
2612
+ host: {
2613
+ '[class]': 'classes()',
2614
+ '[attr.data-padding]': 'padding()',
2615
+ '[attr.data-nb-chip]': '""',
2616
+ },
2617
+ changeDetection: ChangeDetectionStrategy.OnPush,
2618
+ }]
2619
+ }], propDecorators: { padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSize", required: false }] }] } });
2620
+ const chipGroupAlignMap = {
2621
+ start: 'items-start',
2622
+ center: 'items-center',
2623
+ end: 'items-end',
2624
+ stretch: 'items-stretch',
2625
+ };
2626
+ const chipGroupTrackingMap = {
2627
+ tight: '-0.025em',
2628
+ normal: null,
2629
+ wide: '0.025em',
2630
+ wider: '0.05em',
2631
+ };
2632
+ /**
2633
+ * Layout + shared style context for a set of chips. Owns the row/column layout
2634
+ * (direction, gap, align) and broadcasts chip-level styling — radius, shadow,
2635
+ * text transform, tracking — to every child `nbChip` through CSS variables and
2636
+ * inherited text properties, so chips don't repeat the same inputs. Individual
2637
+ * `nbChip` inputs still override the group (explicit input beats context token).
2638
+ */
2639
+ class NbChipGroup {
2640
+ direction = input('horizontal', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
2641
+ gap = input('sm', ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
2642
+ align = input('stretch', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
2643
+ radius = input(undefined, ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
2644
+ shadow = input(undefined, ...(ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []));
2645
+ transform = input('none', ...(ngDevMode ? [{ debugName: "transform" }] : /* istanbul ignore next */ []));
2646
+ tracking = input('normal', ...(ngDevMode ? [{ debugName: "tracking" }] : /* istanbul ignore next */ []));
2647
+ classes = computed(() => nbClass('flex min-w-0', this.direction() === 'vertical' ? 'flex-col' : 'flex-wrap', chipGroupAlignMap[this.align()]), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2648
+ gapValue = computed(() => nbSpacingValue(this.gap()), ...(ngDevMode ? [{ debugName: "gapValue" }] : /* istanbul ignore next */ []));
2649
+ chipRadiusValue = computed(() => {
2650
+ const radius = this.radius();
2651
+ return radius ? nbRadiusValue(radius) : null;
2652
+ }, ...(ngDevMode ? [{ debugName: "chipRadiusValue" }] : /* istanbul ignore next */ []));
2653
+ chipShadowValue = computed(() => {
2654
+ const shadow = this.shadow();
2655
+ return shadow ? nbShadowValue(shadow) : null;
2656
+ }, ...(ngDevMode ? [{ debugName: "chipShadowValue" }] : /* istanbul ignore next */ []));
2657
+ transformValue = computed(() => {
2658
+ const transform = this.transform();
2659
+ return transform === 'none' ? null : transform;
2660
+ }, ...(ngDevMode ? [{ debugName: "transformValue" }] : /* istanbul ignore next */ []));
2661
+ trackingValue = computed(() => chipGroupTrackingMap[this.tracking()], ...(ngDevMode ? [{ debugName: "trackingValue" }] : /* istanbul ignore next */ []));
2662
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbChipGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2663
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbChipGroup, isStandalone: true, selector: "[nbChipGroup]", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, shadow: { classPropertyName: "shadow", publicName: "shadow", isSignal: true, isRequired: false, transformFunction: null }, transform: { classPropertyName: "transform", publicName: "transform", isSignal: true, isRequired: false, transformFunction: null }, tracking: { classPropertyName: "tracking", publicName: "tracking", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "style.gap": "gapValue()", "style.--nb-chip-radius": "chipRadiusValue()", "style.--nb-chip-shadow": "chipShadowValue()", "style.text-transform": "transformValue()", "style.letter-spacing": "trackingValue()", "attr.data-nb-chip-group": "\"\"" } }, ngImport: i0 });
2664
+ }
2665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbChipGroup, decorators: [{
2666
+ type: Directive,
2667
+ args: [{
2668
+ selector: '[nbChipGroup]',
2669
+ host: {
2670
+ '[class]': 'classes()',
2671
+ '[style.gap]': 'gapValue()',
2672
+ '[style.--nb-chip-radius]': 'chipRadiusValue()',
2673
+ '[style.--nb-chip-shadow]': 'chipShadowValue()',
2674
+ '[style.text-transform]': 'transformValue()',
2675
+ '[style.letter-spacing]': 'trackingValue()',
2676
+ '[attr.data-nb-chip-group]': '""',
2677
+ },
2678
+ }]
2679
+ }], propDecorators: { direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], shadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "shadow", required: false }] }], transform: [{ type: i0.Input, args: [{ isSignal: true, alias: "transform", required: false }] }], tracking: [{ type: i0.Input, args: [{ isSignal: true, alias: "tracking", required: false }] }] } });
2680
+
2681
+ // Each size sets the square touch target plus a matching glyph size. The glyph
2682
+ // size feeds both the projected `<svg>` (via `[&_svg]:size-*`) and the internal
2683
+ // `nbIcon` (via `iconSize`) so the two authoring styles render identically.
2684
+ const sizeMap$1 = {
2685
+ sm: 'size-8 [&_svg]:size-4',
2686
+ md: 'size-10 [&_svg]:size-5',
2687
+ lg: 'size-12 [&_svg]:size-6',
2688
+ xl: 'size-14 [&_svg]:size-8',
2689
+ };
2690
+ const iconSizeMap = {
2691
+ sm: 'sm',
2692
+ md: 'md',
2693
+ lg: 'lg',
2694
+ xl: 'xl',
2695
+ };
2696
+ class NbIconButton {
2697
+ shape = input('square', ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
2698
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2699
+ // Optional icon, given as an SVG/image URL. Rendered through nbIcon in mask
2700
+ // mode so it tints to the button's foreground color and sizes to match the
2701
+ // button. For full-color or custom icons, project an `<svg>`/`nbIcon` as
2702
+ // content instead — the internal slot is only used when `icon` is set.
2703
+ icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
2704
+ iconSize = computed(() => iconSizeMap[this.size()], ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
2705
+ classes = computed(() => nbClass('inline-flex items-center justify-center shrink-0 select-none', 'hover:translate-x-(--nb-shadow-offset-x) hover:translate-y-(--nb-shadow-offset-y) hover:shadow-none', 'transition-all duration-150 ease-out', '[&_svg]:pointer-events-none [&_svg]:shrink-0', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--nb-border) focus-visible:ring-offset-2', 'disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none', sizeMap$1[this.size()], this.shape() === 'circle' && 'rounded-full'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
2706
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbIconButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
2707
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbIconButton, isStandalone: true, selector: "button[nbIconButton]", inputs: { shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-shape": "shape()", "attr.data-nb-icon-button": "\"\"" } }, providers: [
2708
+ { provide: NB_STYLE_NAMESPACE, useValue: 'icon-button' },
2709
+ {
2710
+ provide: NB_STYLE_DEFAULTS,
2711
+ useValue: {
2712
+ tone: 'default',
2713
+ radius: 'none',
2714
+ shadow: 'default',
2715
+ border: 'default',
2716
+ },
2717
+ },
2718
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }], ngImport: i0, template: `
2719
+ @if (icon(); as iconSrc) {
2720
+ <span nbIcon [src]="iconSrc" [size]="iconSize()" decorative></span>
2721
+ }
2722
+ <ng-content />
2723
+ `, isInline: true, dependencies: [{ kind: "directive", type: NbIcon, selector: "[nbIcon]", inputs: ["src", "mode", "size", "tone", "decorative", "label"], exportAs: ["nbIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2724
+ }
2725
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbIconButton, decorators: [{
2726
+ type: Component,
2727
+ args: [{
2728
+ selector: 'button[nbIconButton]',
2729
+ imports: [NbIcon],
2730
+ providers: [
2731
+ { provide: NB_STYLE_NAMESPACE, useValue: 'icon-button' },
2732
+ {
2733
+ provide: NB_STYLE_DEFAULTS,
2734
+ useValue: {
2735
+ tone: 'default',
2736
+ radius: 'none',
2737
+ shadow: 'default',
2738
+ border: 'default',
2739
+ },
2740
+ },
2741
+ ],
2742
+ hostDirectives: [
2743
+ { directive: NbToneCapability, inputs: ['tone'] },
2744
+ { directive: NbRadiusCapability, inputs: ['radius'] },
2745
+ { directive: NbShadowCapability, inputs: ['shadow'] },
2746
+ { directive: NbBorderCapability, inputs: ['border'] },
2747
+ ],
2748
+ template: `
2749
+ @if (icon(); as iconSrc) {
2750
+ <span nbIcon [src]="iconSrc" [size]="iconSize()" decorative></span>
2751
+ }
2752
+ <ng-content />
2753
+ `,
2754
+ host: {
2755
+ '[class]': 'classes()',
2756
+ '[attr.data-shape]': 'shape()',
2757
+ '[attr.data-nb-icon-button]': '""',
2758
+ },
2759
+ changeDetection: ChangeDetectionStrategy.OnPush,
2760
+ }]
2761
+ }], propDecorators: { shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
2762
+
2763
+ class NbProgress {
2764
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2765
+ max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
2766
+ tone = input('default', ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
2767
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2768
+ clampedValue = computed(() => Math.min(Math.max(this.value(), 0), this.max()), ...(ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []));
2769
+ percentage = computed(() => (this.clampedValue() / this.max()) * 100, ...(ngDevMode ? [{ debugName: "percentage" }] : /* istanbul ignore next */ []));
2770
+ hostClass = computed(() => nbClass('block h-3 w-full overflow-hidden', 'border-2 border-(--nb-border)', 'bg-(--nb-secondary-background)', 'shadow-[var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_var(--nb-shadow)]'), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
2771
+ fillClass = computed(() => {
2772
+ const map = {
2773
+ default: 'bg-(--nb-main)',
2774
+ success: 'bg-(--nb-success)',
2775
+ warning: 'bg-(--nb-warning)',
2776
+ danger: 'bg-(--nb-danger)',
2777
+ accent: 'bg-(--nb-accent)',
2778
+ };
2779
+ return map[this.tone()];
2780
+ }, ...(ngDevMode ? [{ debugName: "fillClass" }] : /* istanbul ignore next */ []));
2781
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
2782
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbProgress, isStandalone: true, selector: "nb-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClass()", "attr.data-tone": "tone()", "attr.data-nb-progress": "\"\"" } }, ngImport: i0, template: `
2783
+ <div
2784
+ role="progressbar"
2785
+ [attr.aria-valuenow]="clampedValue()"
2786
+ [attr.aria-valuemin]="0"
2787
+ [attr.aria-valuemax]="max()"
2788
+ [attr.aria-label]="label() || 'Progress'"
2789
+ class="relative h-full w-full overflow-hidden"
2790
+ >
2791
+ <div
2792
+ class="h-full transition-all duration-300 ease-out"
2793
+ [class]="fillClass()"
2794
+ [style.width.%]="percentage()"
2795
+ ></div>
2796
+ </div>
2797
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2798
+ }
2799
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbProgress, decorators: [{
2800
+ type: Component,
2801
+ args: [{
2802
+ selector: 'nb-progress',
2803
+ template: `
2804
+ <div
2805
+ role="progressbar"
2806
+ [attr.aria-valuenow]="clampedValue()"
2807
+ [attr.aria-valuemin]="0"
2808
+ [attr.aria-valuemax]="max()"
2809
+ [attr.aria-label]="label() || 'Progress'"
2810
+ class="relative h-full w-full overflow-hidden"
2811
+ >
2812
+ <div
2813
+ class="h-full transition-all duration-300 ease-out"
2814
+ [class]="fillClass()"
2815
+ [style.width.%]="percentage()"
2816
+ ></div>
2817
+ </div>
2818
+ `,
2819
+ host: {
2820
+ '[class]': 'hostClass()',
2821
+ '[attr.data-tone]': 'tone()',
2822
+ '[attr.data-nb-progress]': '""',
2823
+ },
2824
+ changeDetection: ChangeDetectionStrategy.OnPush,
2825
+ }]
2826
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2827
+
2828
+ class NbAvatarGroup {
2829
+ overflow = input(0, ...(ngDevMode ? [{ debugName: "overflow" }] : /* istanbul ignore next */ []));
2830
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
2831
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbAvatarGroup, isStandalone: true, selector: "nb-avatar-group", inputs: { overflow: { classPropertyName: "overflow", publicName: "overflow", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "\"flex items-center [&>*]:-ml-3 [&>*:first-child]:ml-0\"", "attr.data-nb-avatar-group": "\"\"" } }, ngImport: i0, template: `
2832
+ <ng-content />
2833
+ @if (overflow() > 0) {
2834
+ <span
2835
+ class="relative inline-flex h-10 w-10 shrink-0 items-center justify-center
2836
+ rounded-full border-2 border-(--nb-border) bg-(--nb-surface)
2837
+ font-bold text-xs shadow-[2px_2px_0_0_var(--nb-shadow)]"
2838
+ [attr.aria-label]="overflow() + ' more'"
2839
+ >+{{ overflow() }}</span>
2840
+ }
2841
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2842
+ }
2843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbAvatarGroup, decorators: [{
2844
+ type: Component,
2845
+ args: [{
2846
+ selector: 'nb-avatar-group',
2847
+ template: `
2848
+ <ng-content />
2849
+ @if (overflow() > 0) {
2850
+ <span
2851
+ class="relative inline-flex h-10 w-10 shrink-0 items-center justify-center
2852
+ rounded-full border-2 border-(--nb-border) bg-(--nb-surface)
2853
+ font-bold text-xs shadow-[2px_2px_0_0_var(--nb-shadow)]"
2854
+ [attr.aria-label]="overflow() + ' more'"
2855
+ >+{{ overflow() }}</span>
2856
+ }
2857
+ `,
2858
+ host: {
2859
+ '[class]': '"flex items-center [&>*]:-ml-3 [&>*:first-child]:ml-0"',
2860
+ '[attr.data-nb-avatar-group]': '""',
2861
+ },
2862
+ changeDetection: ChangeDetectionStrategy.OnPush,
2863
+ }]
2864
+ }], propDecorators: { overflow: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflow", required: false }] }] } });
2865
+
2866
+ const NB_STICKER_PATHS = {
2867
+ burst: {
2868
+ viewBox: '0 0 160 160',
2869
+ shadowTransform: 'translate(7 7)',
2870
+ path: `
2871
+ M80 12
2872
+ L96 35
2873
+ L125 23
2874
+ L121 52
2875
+ L149 62
2876
+ L128 80
2877
+ L148 103
2878
+ L117 104
2879
+ L119 139
2880
+ L92 122
2881
+ L76 151
2882
+ L62 121
2883
+ L31 137
2884
+ L36 105
2885
+ L10 101
2886
+ L32 79
2887
+ L14 58
2888
+ L45 50
2889
+ L42 22
2890
+ L68 38
2891
+ Z
2892
+ `,
2893
+ },
2894
+ 'burst-wide': {
2895
+ viewBox: '0 0 220 160',
2896
+ shadowTransform: 'translate(8 8)',
2897
+ path: `
2898
+ M108 10
2899
+ L126 38
2900
+ L164 20
2901
+ L162 50
2902
+ L211 58
2903
+ L179 78
2904
+ L211 101
2905
+ L169 105
2906
+ L172 143
2907
+ L135 126
2908
+ L112 153
2909
+ L92 126
2910
+ L53 145
2911
+ L57 108
2912
+ L12 103
2913
+ L43 81
2914
+ L12 59
2915
+ L57 50
2916
+ L53 21
2917
+ L91 39
2918
+ Z
2919
+ `,
2920
+ },
2921
+ star: {
2922
+ viewBox: '65 105 858 780',
2923
+ shadowTransform: 'translate(34 38)',
2924
+ path: `
2925
+ M296 178
2926
+ L512 302
2927
+ L724 182
2928
+ L690 392
2929
+ L884 510
2930
+ L680 610
2931
+ L670 866
2932
+ L482 692
2933
+ L250 788
2934
+ L304 564
2935
+ L120 468
2936
+ L314 386
2937
+ Z
2938
+ `,
2939
+ },
2940
+ splat: {
2941
+ viewBox: '0 0 108 108',
2942
+ shadowTransform: 'translate(6 6)',
2943
+ path: 'M50 5 L61 25 L84 15 L77 39 L97 50 L77 61 L86 86 L61 75 L50 98 L39 76 L15 86 L23 62 L3 50 L24 39 L15 14 L39 25 Z',
2944
+ },
2945
+ };
2946
+
2947
+ class NbSticker {
2948
+ shape = input('burst', ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
2949
+ tone = input('mint', ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
2950
+ decorative = input(false, { ...(ngDevMode ? { debugName: "decorative" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
2951
+ rotate = input(0, { ...(ngDevMode ? { debugName: "rotate" } : /* istanbul ignore next */ {}), transform: numberAttribute });
2952
+ size = input(1, { ...(ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {}), transform: numberAttribute });
2953
+ config = computed(() => NB_STICKER_PATHS[this.shape()], ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
2954
+ toneTokens = computed(() => {
2955
+ const tokens = nbToneTokens(this.tone());
2956
+ return {
2957
+ fill: tokens.bg,
2958
+ ink: tokens.fg,
2959
+ shadow: 'var(--nb-shadow, #050505)',
2960
+ };
2961
+ }, ...(ngDevMode ? [{ debugName: "toneTokens" }] : /* istanbul ignore next */ []));
2962
+ rotateStyle = computed(() => `${this.rotate()}deg`, ...(ngDevMode ? [{ debugName: "rotateStyle" }] : /* istanbul ignore next */ []));
2963
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSticker, deps: [], target: i0.ɵɵFactoryTarget.Component });
2964
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: NbSticker, isStandalone: true, selector: "nb-sticker", inputs: { shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, decorative: { classPropertyName: "decorative", publicName: "decorative", isSignal: true, isRequired: false, transformFunction: null }, rotate: { classPropertyName: "rotate", publicName: "rotate", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-shape": "shape()", "attr.data-tone": "tone()", "attr.data-nb-sticker": "\"\"", "attr.aria-hidden": "decorative() ? \"true\" : null", "attr.role": "decorative() ? null : \"img\"", "style.--nb-sticker-fill": "toneTokens().fill", "style.--nb-sticker-ink": "toneTokens().ink", "style.--nb-sticker-shadow": "toneTokens().shadow", "style.--nb-sticker-rotate": "rotateStyle()", "style.--nb-sticker-scale": "size()" }, classAttribute: "nb-sticker" }, ngImport: i0, template: `
2965
+ <span class="nb-sticker__root">
2966
+ <svg
2967
+ class="nb-sticker__svg"
2968
+ [attr.viewBox]="config().viewBox"
2969
+ preserveAspectRatio="none"
2970
+ aria-hidden="true"
2971
+ focusable="false"
2972
+ >
2973
+ <path
2974
+ class="nb-sticker__shadow"
2975
+ [attr.d]="config().path"
2976
+ [attr.transform]="config().shadowTransform"
2977
+ />
2978
+ <path class="nb-sticker__shape" [attr.d]="config().path" />
2979
+ </svg>
2980
+
2981
+ <span class="nb-sticker__content">
2982
+ <ng-content />
2983
+ </span>
2984
+ </span>
2985
+ `, isInline: true, styles: [":host{--nb-sticker-min-block-size: 8.75rem;--nb-sticker-padding-inline: 3.5rem;--nb-sticker-padding-block: 3rem;--nb-sticker-fill: var(--nb-mint, #9af7b5);--nb-sticker-ink: var(--nb-black, #050505);--nb-sticker-shadow: var(--nb-shadow, var(--nb-black, #050505));--nb-sticker-stroke-width: 5px;--nb-sticker-rotate: -6deg;--nb-sticker-font-size: 1.5rem;display:inline-block;vertical-align:middle}:host([data-shape=\"burst-wide\"]){--nb-sticker-padding-inline: 4rem;--nb-sticker-padding-block: 3rem;--nb-sticker-font-size: 1.5rem}:host([data-shape=\"star\"]){--nb-sticker-min-block-size: 7.5rem;--nb-sticker-padding-inline: 2.5rem;--nb-sticker-padding-block: 2.5rem;--nb-sticker-face-size: 3.5rem;--nb-sticker-rotate: 0deg;--nb-sticker-stroke-width: 5px}:host([data-shape=\"splat\"]){--nb-sticker-size: 6rem;--nb-sticker-shadow-x: 6px;--nb-sticker-shadow-y: 6px;--nb-sticker-stroke-width: 4px;--nb-sticker-rotate: -10deg}.nb-sticker__root{position:relative;isolation:isolate;display:inline-grid;place-items:center;box-sizing:border-box;min-block-size:var(--nb-sticker-min-block-size);inline-size:max-content;block-size:max-content;transform:rotate(var(--nb-sticker-rotate)) scale(var(--nb-sticker-scale, 1));transform-origin:center}:host([data-shape=\"splat\"]) .nb-sticker__root{inline-size:var(--nb-sticker-size);block-size:var(--nb-sticker-size);min-block-size:var(--nb-sticker-size)}.nb-sticker__svg{position:absolute;inset:0;z-index:-1;inline-size:100%;block-size:100%;overflow:visible}.nb-sticker__shadow{fill:var(--nb-sticker-shadow)}:host([data-shape=\"splat\"]) .nb-sticker__shadow{transform:translate(var(--nb-sticker-shadow-x),var(--nb-sticker-shadow-y))}.nb-sticker__shape{fill:var(--nb-sticker-fill);stroke:var(--nb-sticker-ink);stroke-width:var(--nb-sticker-stroke-width);stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.nb-sticker__content{color:var(--nb-sticker-ink);display:block;max-width:300px;padding-inline:var(--nb-sticker-padding-inline);padding-block:var(--nb-sticker-padding-block);overflow-wrap:break-word;font-family:var(--nb-font-display, system-ui, sans-serif);font-size:var(--nb-sticker-font-size);font-weight:950;line-height:.9;letter-spacing:0;text-align:center;text-transform:uppercase;pointer-events:none;-webkit-user-select:none;user-select:none}:host([data-shape=\"splat\"]) .nb-sticker__content{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2986
+ }
2987
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSticker, decorators: [{
2988
+ type: Component,
2989
+ args: [{ selector: 'nb-sticker', template: `
2990
+ <span class="nb-sticker__root">
2991
+ <svg
2992
+ class="nb-sticker__svg"
2993
+ [attr.viewBox]="config().viewBox"
2994
+ preserveAspectRatio="none"
2995
+ aria-hidden="true"
2996
+ focusable="false"
2997
+ >
2998
+ <path
2999
+ class="nb-sticker__shadow"
3000
+ [attr.d]="config().path"
3001
+ [attr.transform]="config().shadowTransform"
3002
+ />
3003
+ <path class="nb-sticker__shape" [attr.d]="config().path" />
3004
+ </svg>
3005
+
3006
+ <span class="nb-sticker__content">
3007
+ <ng-content />
3008
+ </span>
3009
+ </span>
3010
+ `, host: {
3011
+ class: 'nb-sticker',
3012
+ '[attr.data-shape]': 'shape()',
3013
+ '[attr.data-tone]': 'tone()',
3014
+ '[attr.data-nb-sticker]': '""',
3015
+ '[attr.aria-hidden]': 'decorative() ? "true" : null',
3016
+ '[attr.role]': 'decorative() ? null : "img"',
3017
+ '[style.--nb-sticker-fill]': 'toneTokens().fill',
3018
+ '[style.--nb-sticker-ink]': 'toneTokens().ink',
3019
+ '[style.--nb-sticker-shadow]': 'toneTokens().shadow',
3020
+ '[style.--nb-sticker-rotate]': 'rotateStyle()',
3021
+ '[style.--nb-sticker-scale]': 'size()',
3022
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--nb-sticker-min-block-size: 8.75rem;--nb-sticker-padding-inline: 3.5rem;--nb-sticker-padding-block: 3rem;--nb-sticker-fill: var(--nb-mint, #9af7b5);--nb-sticker-ink: var(--nb-black, #050505);--nb-sticker-shadow: var(--nb-shadow, var(--nb-black, #050505));--nb-sticker-stroke-width: 5px;--nb-sticker-rotate: -6deg;--nb-sticker-font-size: 1.5rem;display:inline-block;vertical-align:middle}:host([data-shape=\"burst-wide\"]){--nb-sticker-padding-inline: 4rem;--nb-sticker-padding-block: 3rem;--nb-sticker-font-size: 1.5rem}:host([data-shape=\"star\"]){--nb-sticker-min-block-size: 7.5rem;--nb-sticker-padding-inline: 2.5rem;--nb-sticker-padding-block: 2.5rem;--nb-sticker-face-size: 3.5rem;--nb-sticker-rotate: 0deg;--nb-sticker-stroke-width: 5px}:host([data-shape=\"splat\"]){--nb-sticker-size: 6rem;--nb-sticker-shadow-x: 6px;--nb-sticker-shadow-y: 6px;--nb-sticker-stroke-width: 4px;--nb-sticker-rotate: -10deg}.nb-sticker__root{position:relative;isolation:isolate;display:inline-grid;place-items:center;box-sizing:border-box;min-block-size:var(--nb-sticker-min-block-size);inline-size:max-content;block-size:max-content;transform:rotate(var(--nb-sticker-rotate)) scale(var(--nb-sticker-scale, 1));transform-origin:center}:host([data-shape=\"splat\"]) .nb-sticker__root{inline-size:var(--nb-sticker-size);block-size:var(--nb-sticker-size);min-block-size:var(--nb-sticker-size)}.nb-sticker__svg{position:absolute;inset:0;z-index:-1;inline-size:100%;block-size:100%;overflow:visible}.nb-sticker__shadow{fill:var(--nb-sticker-shadow)}:host([data-shape=\"splat\"]) .nb-sticker__shadow{transform:translate(var(--nb-sticker-shadow-x),var(--nb-sticker-shadow-y))}.nb-sticker__shape{fill:var(--nb-sticker-fill);stroke:var(--nb-sticker-ink);stroke-width:var(--nb-sticker-stroke-width);stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.nb-sticker__content{color:var(--nb-sticker-ink);display:block;max-width:300px;padding-inline:var(--nb-sticker-padding-inline);padding-block:var(--nb-sticker-padding-block);overflow-wrap:break-word;font-family:var(--nb-font-display, system-ui, sans-serif);font-size:var(--nb-sticker-font-size);font-weight:950;line-height:.9;letter-spacing:0;text-align:center;text-transform:uppercase;pointer-events:none;-webkit-user-select:none;user-select:none}:host([data-shape=\"splat\"]) .nb-sticker__content{display:none}\n"] }]
3023
+ }], propDecorators: { shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], decorative: [{ type: i0.Input, args: [{ isSignal: true, alias: "decorative", required: false }] }], rotate: [{ type: i0.Input, args: [{ isSignal: true, alias: "rotate", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
3024
+
3025
+ class NbStickerFace {
3026
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStickerFace, deps: [], target: i0.ɵɵFactoryTarget.Component });
3027
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: NbStickerFace, isStandalone: true, selector: "nb-sticker-face", host: { attributes: { "aria-hidden": "true" }, properties: { "attr.data-nb-sticker-face": "\"\"" }, classAttribute: "nb-sticker-face" }, ngImport: i0, template: `
3028
+ <svg
3029
+ class="nb-sticker-face__svg"
3030
+ viewBox="13 5 320 220"
3031
+ aria-hidden="true"
3032
+ focusable="false"
3033
+ >
3034
+ <ellipse class="nb-sticker-face__eye" cx="126" cy="64" rx="20" ry="35" />
3035
+ <ellipse class="nb-sticker-face__eye" cx="214" cy="64" rx="20" ry="35" />
3036
+ <path
3037
+ class="nb-sticker-face__smile"
3038
+ d="M78 132 C116 202 226 206 268 150"
3039
+ />
3040
+ </svg>
3041
+ `, isInline: true, styles: [":host{--nb-sticker-face-ink: var(--nb-sticker-ink, #050505);display:block;width:var(--nb-sticker-face-size, 5.55rem);height:calc(var(--nb-sticker-face-size, 5.55rem) * .64)}.nb-sticker-face__svg{display:block;width:100%;height:100%;overflow:visible}.nb-sticker-face__eye{fill:var(--nb-sticker-face-ink)}.nb-sticker-face__smile{fill:none;stroke:var(--nb-sticker-face-ink);stroke-width:36;stroke-linecap:round}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3042
+ }
3043
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStickerFace, decorators: [{
3044
+ type: Component,
3045
+ args: [{ selector: 'nb-sticker-face', template: `
3046
+ <svg
3047
+ class="nb-sticker-face__svg"
3048
+ viewBox="13 5 320 220"
3049
+ aria-hidden="true"
3050
+ focusable="false"
3051
+ >
3052
+ <ellipse class="nb-sticker-face__eye" cx="126" cy="64" rx="20" ry="35" />
3053
+ <ellipse class="nb-sticker-face__eye" cx="214" cy="64" rx="20" ry="35" />
3054
+ <path
3055
+ class="nb-sticker-face__smile"
3056
+ d="M78 132 C116 202 226 206 268 150"
3057
+ />
3058
+ </svg>
3059
+ `, host: {
3060
+ class: 'nb-sticker-face',
3061
+ 'aria-hidden': 'true',
3062
+ '[attr.data-nb-sticker-face]': '""',
3063
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--nb-sticker-face-ink: var(--nb-sticker-ink, #050505);display:block;width:var(--nb-sticker-face-size, 5.55rem);height:calc(var(--nb-sticker-face-size, 5.55rem) * .64)}.nb-sticker-face__svg{display:block;width:100%;height:100%;overflow:visible}.nb-sticker-face__eye{fill:var(--nb-sticker-face-ink)}.nb-sticker-face__smile{fill:none;stroke:var(--nb-sticker-face-ink);stroke-width:36;stroke-linecap:round}\n"] }]
3064
+ }] });
3065
+
3066
+ const DEFAULT_SHAPE = 'square';
3067
+ const DEFAULT_ROWS = 7;
3068
+ const DEFAULT_COLUMNS = 7;
3069
+ const DEFAULT_DOT_SIZE = 6;
3070
+ const DEFAULT_DOT_GAP = 5;
3071
+ const RECTANGLE_DEFAULT_ROWS = 3;
3072
+ const RECTANGLE_DEFAULT_COLUMNS = 13;
3073
+ class NbHalftone {
3074
+ shape = input(DEFAULT_SHAPE, ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
3075
+ color = input(null, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
3076
+ size = input(null, { ...(ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {}), transform: numberAttribute });
3077
+ gap = input(null, { ...(ngDevMode ? { debugName: "gap" } : /* istanbul ignore next */ {}), transform: numberAttribute });
3078
+ gapX = input(null, { ...(ngDevMode ? { debugName: "gapX" } : /* istanbul ignore next */ {}), transform: numberAttribute });
3079
+ gapY = input(null, { ...(ngDevMode ? { debugName: "gapY" } : /* istanbul ignore next */ {}), transform: numberAttribute });
3080
+ rows = input(null, { ...(ngDevMode ? { debugName: "rows" } : /* istanbul ignore next */ {}), transform: numberAttribute });
3081
+ columns = input(null, { ...(ngDevMode ? { debugName: "columns" } : /* istanbul ignore next */ {}), transform: numberAttribute });
3082
+ resolvedColor = computed(() => this.color() ?? 'var(--nb-border)', ...(ngDevMode ? [{ debugName: "resolvedColor" }] : /* istanbul ignore next */ []));
3083
+ resolvedSize = computed(() => this.size() ?? DEFAULT_DOT_SIZE, ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
3084
+ resolvedGap = computed(() => this.gap() ?? DEFAULT_DOT_GAP, ...(ngDevMode ? [{ debugName: "resolvedGap" }] : /* istanbul ignore next */ []));
3085
+ resolvedGapXInput = computed(() => this.gapX() ?? this.gap(), ...(ngDevMode ? [{ debugName: "resolvedGapXInput" }] : /* istanbul ignore next */ []));
3086
+ resolvedGapYInput = computed(() => this.gapY() ?? this.gap(), ...(ngDevMode ? [{ debugName: "resolvedGapYInput" }] : /* istanbul ignore next */ []));
3087
+ resolvedRows = computed(() => this.rows() ??
3088
+ (this.shape() === 'rectangle' ? RECTANGLE_DEFAULT_ROWS : DEFAULT_ROWS), ...(ngDevMode ? [{ debugName: "resolvedRows" }] : /* istanbul ignore next */ []));
3089
+ resolvedColumns = computed(() => this.columns() ??
3090
+ (this.shape() === 'rectangle' ? RECTANGLE_DEFAULT_COLUMNS : DEFAULT_COLUMNS), ...(ngDevMode ? [{ debugName: "resolvedColumns" }] : /* istanbul ignore next */ []));
3091
+ svgW = computed(() => this.resolvedColumns() * (this.resolvedSize() + this.resolvedGap()) -
3092
+ this.resolvedGap(), ...(ngDevMode ? [{ debugName: "svgW" }] : /* istanbul ignore next */ []));
3093
+ svgH = computed(() => this.resolvedRows() * (this.resolvedSize() + this.resolvedGap()) -
3094
+ this.resolvedGap(), ...(ngDevMode ? [{ debugName: "svgH" }] : /* istanbul ignore next */ []));
3095
+ dotR = computed(() => this.resolvedSize() / 2, ...(ngDevMode ? [{ debugName: "dotR" }] : /* istanbul ignore next */ []));
3096
+ dots = computed(() => {
3097
+ const s = this.resolvedSize();
3098
+ const g = this.resolvedGap();
3099
+ const rows = this.resolvedRows();
3100
+ const cols = this.resolvedColumns();
3101
+ const total = s + g;
3102
+ const r = s / 2;
3103
+ const result = [];
3104
+ for (let row = 0; row < rows; row++) {
3105
+ for (let col = 0; col < cols; col++) {
3106
+ result.push({ cx: col * total + r, cy: row * total + r });
3107
+ }
3108
+ }
3109
+ return result;
3110
+ }, ...(ngDevMode ? [{ debugName: "dots" }] : /* istanbul ignore next */ []));
3111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbHalftone, deps: [], target: i0.ɵɵFactoryTarget.Component });
3112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbHalftone, isStandalone: true, selector: "nb-halftone, [nbHalftone]", inputs: { shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, gapX: { classPropertyName: "gapX", publicName: "gapX", isSignal: true, isRequired: false, transformFunction: null }, gapY: { classPropertyName: "gapY", publicName: "gapY", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.pointer-events-none": "true", "class.nb-halftone--square": "shape() === \"square\"", "class.nb-halftone--circle": "shape() === \"circle\"", "class.nb-halftone--rectangle": "shape() === \"rectangle\"", "attr.aria-hidden": "\"true\"", "attr.data-shape": "shape()", "attr.data-nb-halftone": "\"\"", "style.--nb-halftone-color": "color()", "style.--nb-halftone-dot-size.px": "size()", "style.--nb-halftone-gap-x.px": "resolvedGapXInput()", "style.--nb-halftone-gap-y.px": "resolvedGapYInput()", "style.--nb-halftone-rows": "resolvedRows()", "style.--nb-halftone-columns": "resolvedColumns()" }, classAttribute: "nb-halftone" }, ngImport: i0, template: `
3113
+ @if (shape() !== 'rectangle') {
3114
+ <svg [attr.width]="svgW()" [attr.height]="svgH()" aria-hidden="true">
3115
+ @for (dot of dots(); track $index) {
3116
+ <circle [attr.cx]="dot.cx" [attr.cy]="dot.cy" [attr.r]="dotR()" [attr.fill]="resolvedColor()" />
3117
+ }
3118
+ </svg>
3119
+ }
3120
+ `, isInline: true, styles: [":host{pointer-events:none}:host(.nb-halftone--rectangle){--nb-halftone-color: var(--nb-border);--nb-halftone-dot-size: 8px;--nb-halftone-gap-x: 28px;--nb-halftone-gap-y: 27px;display:block;overflow:hidden;width:calc(var(--nb-halftone-columns) * var(--nb-halftone-gap-x));height:calc(var(--nb-halftone-rows) * var(--nb-halftone-gap-y));background-image:radial-gradient(circle at center,var(--nb-halftone-color) 0 calc(var(--nb-halftone-dot-size) / 2),transparent calc((var(--nb-halftone-dot-size) / 2) + 1px));background-size:var(--nb-halftone-gap-x) var(--nb-halftone-gap-y);background-repeat:repeat;background-position:0 0}:host(.nb-halftone--circle){border-radius:9999px;overflow:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3121
+ }
3122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbHalftone, decorators: [{
3123
+ type: Component,
3124
+ args: [{ selector: 'nb-halftone, [nbHalftone]', template: `
3125
+ @if (shape() !== 'rectangle') {
3126
+ <svg [attr.width]="svgW()" [attr.height]="svgH()" aria-hidden="true">
3127
+ @for (dot of dots(); track $index) {
3128
+ <circle [attr.cx]="dot.cx" [attr.cy]="dot.cy" [attr.r]="dotR()" [attr.fill]="resolvedColor()" />
3129
+ }
3130
+ </svg>
3131
+ }
3132
+ `, host: {
3133
+ 'class': 'nb-halftone',
3134
+ '[class.pointer-events-none]': 'true',
3135
+ '[class.nb-halftone--square]': 'shape() === "square"',
3136
+ '[class.nb-halftone--circle]': 'shape() === "circle"',
3137
+ '[class.nb-halftone--rectangle]': 'shape() === "rectangle"',
3138
+ '[attr.aria-hidden]': '"true"',
3139
+ '[attr.data-shape]': 'shape()',
3140
+ '[attr.data-nb-halftone]': '""',
3141
+ '[style.--nb-halftone-color]': 'color()',
3142
+ '[style.--nb-halftone-dot-size.px]': 'size()',
3143
+ '[style.--nb-halftone-gap-x.px]': 'resolvedGapXInput()',
3144
+ '[style.--nb-halftone-gap-y.px]': 'resolvedGapYInput()',
3145
+ '[style.--nb-halftone-rows]': 'resolvedRows()',
3146
+ '[style.--nb-halftone-columns]': 'resolvedColumns()',
3147
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{pointer-events:none}:host(.nb-halftone--rectangle){--nb-halftone-color: var(--nb-border);--nb-halftone-dot-size: 8px;--nb-halftone-gap-x: 28px;--nb-halftone-gap-y: 27px;display:block;overflow:hidden;width:calc(var(--nb-halftone-columns) * var(--nb-halftone-gap-x));height:calc(var(--nb-halftone-rows) * var(--nb-halftone-gap-y));background-image:radial-gradient(circle at center,var(--nb-halftone-color) 0 calc(var(--nb-halftone-dot-size) / 2),transparent calc((var(--nb-halftone-dot-size) / 2) + 1px));background-size:var(--nb-halftone-gap-x) var(--nb-halftone-gap-y);background-repeat:repeat;background-position:0 0}:host(.nb-halftone--circle){border-radius:9999px;overflow:hidden}\n"] }]
3148
+ }], propDecorators: { shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], gapX: [{ type: i0.Input, args: [{ isSignal: true, alias: "gapX", required: false }] }], gapY: [{ type: i0.Input, args: [{ isSignal: true, alias: "gapY", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }] } });
3149
+
3150
+ class NbSurface {
3151
+ size = input('auto', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3152
+ layout = input('block', ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
3153
+ padding = input('none', ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
3154
+ edge = input('none', ...(ngDevMode ? [{ debugName: "edge" }] : /* istanbul ignore next */ []));
3155
+ clip = input(false, { ...(ngDevMode ? { debugName: "clip" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3156
+ // Tone, radius, shadow, and border-width are written as `--nb-surface-*`
3157
+ // variables by the composed capabilities; here we only *consume* them.
3158
+ classes = computed(() => nbClass('relative', this.clip() && 'overflow-hidden', this.sizeClass(), this.layoutClass(), this.edgeClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3159
+ sizeClass() {
3160
+ const map = {
3161
+ auto: '',
3162
+ sm: 'size-8 shrink-0',
3163
+ md: 'size-10 shrink-0',
3164
+ lg: 'size-11 shrink-0',
3165
+ xl: 'size-12 shrink-0',
3166
+ };
3167
+ return map[this.size()];
3168
+ }
3169
+ layoutClass() {
3170
+ const map = {
3171
+ block: '',
3172
+ center: 'inline-flex items-center justify-center',
3173
+ row: 'flex items-center',
3174
+ stack: 'flex flex-col',
3175
+ };
3176
+ return map[this.layout()];
3177
+ }
3178
+ edgeClass() {
3179
+ const map = {
3180
+ none: '',
3181
+ top: '[--nb-surface-edge-width:2px] [--nb-surface-edge-color:var(--nb-border)] border-t-(length:--nb-surface-edge-width) border-t-(--nb-surface-edge-color)',
3182
+ bottom: '[--nb-surface-edge-width:2px] [--nb-surface-edge-color:var(--nb-border)] border-b-(length:--nb-surface-edge-width) border-b-(--nb-surface-edge-color)',
3183
+ };
3184
+ return map[this.edge()];
3185
+ }
3186
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSurface, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3187
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbSurface, isStandalone: true, selector: "[nbSurface]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, edge: { classPropertyName: "edge", publicName: "edge", isSignal: true, isRequired: false, transformFunction: null }, clip: { classPropertyName: "clip", publicName: "clip", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-surface": "\"\"", "attr.data-size": "size()", "attr.data-layout": "layout()", "attr.data-padding": "padding()", "attr.data-edge": "edge()" } }, providers: [
3188
+ { provide: NB_STYLE_NAMESPACE, useValue: 'surface' },
3189
+ {
3190
+ provide: NB_STYLE_DEFAULTS,
3191
+ useValue: {
3192
+ tone: 'default',
3193
+ radius: 'md',
3194
+ shadow: 'default',
3195
+ border: 'default',
3196
+ padding: 'none',
3197
+ },
3198
+ },
3199
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbRadiusCapability, inputs: ["radius", "radius"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }, { directive: NbBorderCapability, inputs: ["border", "border"] }, { directive: NbPaddingCapability, inputs: ["padding", "padding"] }, { directive: NbTypography, inputs: ["font", "typography"] }], ngImport: i0 });
3200
+ }
3201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSurface, decorators: [{
3202
+ type: Directive,
3203
+ args: [{
3204
+ selector: '[nbSurface]',
3205
+ providers: [
3206
+ { provide: NB_STYLE_NAMESPACE, useValue: 'surface' },
3207
+ {
3208
+ provide: NB_STYLE_DEFAULTS,
3209
+ useValue: {
3210
+ tone: 'default',
3211
+ radius: 'md',
3212
+ shadow: 'default',
3213
+ border: 'default',
3214
+ padding: 'none',
3215
+ },
3216
+ },
3217
+ ],
3218
+ hostDirectives: [
3219
+ { directive: NbToneCapability, inputs: ['tone'] },
3220
+ { directive: NbRadiusCapability, inputs: ['radius'] },
3221
+ { directive: NbShadowCapability, inputs: ['shadow'] },
3222
+ { directive: NbBorderCapability, inputs: ['border'] },
3223
+ { directive: NbPaddingCapability, inputs: ['padding'] },
3224
+ // Typography context — exposes nbTypography's `font` input as `typography`.
3225
+ { directive: NbTypography, inputs: ['font: typography'] },
3226
+ ],
3227
+ host: {
3228
+ '[class]': 'classes()',
3229
+ '[attr.data-nb-surface]': '""',
3230
+ '[attr.data-size]': 'size()',
3231
+ '[attr.data-layout]': 'layout()',
3232
+ '[attr.data-padding]': 'padding()',
3233
+ '[attr.data-edge]': 'edge()',
3234
+ },
3235
+ }]
3236
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], edge: [{ type: i0.Input, args: [{ isSignal: true, alias: "edge", required: false }] }], clip: [{ type: i0.Input, args: [{ isSignal: true, alias: "clip", required: false }] }] } });
3237
+
3238
+ class NbStack {
3239
+ align = input('stretch', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3240
+ justify = input('start', ...(ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []));
3241
+ separator = input('none', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
3242
+ classes = computed(() => nbClass('flex min-w-0 flex-col', this.alignClass(), this.justifyClass(), this.separatorClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3243
+ alignClass() {
3244
+ const map = {
3245
+ stretch: 'items-stretch',
3246
+ start: 'items-start',
3247
+ center: 'items-center',
3248
+ end: 'items-end',
3249
+ };
3250
+ return map[this.align()];
3251
+ }
3252
+ justifyClass() {
3253
+ const map = {
3254
+ start: 'justify-start',
3255
+ center: 'justify-center',
3256
+ end: 'justify-end',
3257
+ between: 'justify-between',
3258
+ };
3259
+ return map[this.justify()];
3260
+ }
3261
+ separatorClass() {
3262
+ const map = {
3263
+ none: '',
3264
+ solid: nbClass('[&>*+*]:border-t-(length:--nb-border-width)', '[&>*+*]:border-solid', '[&>*+*]:[border-top-color:var(--nb-border)]', '[&>*+*]:pt-[var(--nb-stack-gap)]'),
3265
+ dashed: nbClass('[&>*+*]:border-t-(length:--nb-border-width)', '[&>*+*]:border-dashed', '[&>*+*]:[border-top-color:var(--nb-border)]', '[&>*+*]:pt-[var(--nb-stack-gap)]'),
3266
+ thick: nbClass('[&>*+*]:border-t-4', '[&>*+*]:border-solid', '[&>*+*]:[border-top-color:var(--nb-border)]', '[&>*+*]:pt-[var(--nb-stack-gap)]'),
3267
+ };
3268
+ return map[this.separator()];
3269
+ }
3270
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStack, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3271
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbStack, isStandalone: true, selector: "[nbStack]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-stack": "\"\"", "attr.data-align": "align()", "attr.data-justify": "justify()", "attr.data-separator": "separator()" } }, providers: [
3272
+ { provide: NB_STYLE_NAMESPACE, useValue: 'stack' },
3273
+ {
3274
+ provide: NB_STYLE_DEFAULTS,
3275
+ useValue: { gap: 'md' },
3276
+ },
3277
+ ], hostDirectives: [{ directive: NbGapCapability, inputs: ["gap", "gap"] }], ngImport: i0 });
3278
+ }
3279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbStack, decorators: [{
3280
+ type: Directive,
3281
+ args: [{
3282
+ selector: '[nbStack]',
3283
+ providers: [
3284
+ { provide: NB_STYLE_NAMESPACE, useValue: 'stack' },
3285
+ {
3286
+ provide: NB_STYLE_DEFAULTS,
3287
+ useValue: { gap: 'md' },
3288
+ },
3289
+ ],
3290
+ hostDirectives: [{ directive: NbGapCapability, inputs: ['gap'] }],
3291
+ host: {
3292
+ '[class]': 'classes()',
3293
+ '[attr.data-nb-stack]': '""',
3294
+ '[attr.data-align]': 'align()',
3295
+ '[attr.data-justify]': 'justify()',
3296
+ '[attr.data-separator]': 'separator()',
3297
+ },
3298
+ }]
3299
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], justify: [{ type: i0.Input, args: [{ isSignal: true, alias: "justify", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }] } });
3300
+
3301
+ class NbCluster {
3302
+ align = input('center', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3303
+ justify = input('start', ...(ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []));
3304
+ wrap = input('wrap', ...(ngDevMode ? [{ debugName: "wrap" }] : /* istanbul ignore next */ []));
3305
+ separator = input('none', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
3306
+ separatorColumnGapStyle = computed(() => this.separator() === 'none' ? null : '0px', ...(ngDevMode ? [{ debugName: "separatorColumnGapStyle" }] : /* istanbul ignore next */ []));
3307
+ classes = computed(() => nbClass('flex min-w-0', this.gapClass(), this.alignClass(), this.justifyClass(), this.wrapClass(), this.separatorClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3308
+ gapClass() {
3309
+ // With a separator, gap collapses on the inline axis (the separator owns
3310
+ // the inline spacing) and survives only on the block axis for wrapped rows.
3311
+ if (this.separator() !== 'none') {
3312
+ return 'gap-x-0';
3313
+ }
3314
+ return '';
3315
+ }
3316
+ alignClass() {
3317
+ const map = {
3318
+ start: 'items-start',
3319
+ center: 'items-center',
3320
+ end: 'items-end',
3321
+ baseline: 'items-baseline',
3322
+ stretch: 'items-stretch',
3323
+ };
3324
+ return map[this.align()];
3325
+ }
3326
+ justifyClass() {
3327
+ const map = {
3328
+ start: 'justify-start',
3329
+ center: 'justify-center',
3330
+ end: 'justify-end',
3331
+ between: 'justify-between',
3332
+ };
3333
+ return map[this.justify()];
3334
+ }
3335
+ wrapClass() {
3336
+ const map = {
3337
+ wrap: 'flex-wrap',
3338
+ nowrap: 'flex-nowrap',
3339
+ };
3340
+ return map[this.wrap()];
3341
+ }
3342
+ separatorClass() {
3343
+ const separator = this.separator();
3344
+ if (separator === 'none')
3345
+ return '';
3346
+ return nbClass(separatorBaseClass$1, separatorStyleClass$1[separator]);
3347
+ }
3348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbCluster, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3349
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbCluster, isStandalone: true, selector: "[nbCluster]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-cluster": "\"\"", "attr.data-align": "align()", "attr.data-justify": "justify()", "attr.data-wrap": "wrap()", "attr.data-separator": "separator()", "style.column-gap": "separatorColumnGapStyle()" } }, providers: [
3350
+ { provide: NB_STYLE_NAMESPACE, useValue: 'cluster' },
3351
+ {
3352
+ provide: NB_STYLE_DEFAULTS,
3353
+ useValue: { gap: 'md', padding: 'none' },
3354
+ },
3355
+ ], hostDirectives: [{ directive: NbGapCapability, inputs: ["gap", "gap"] }, { directive: NbPaddingCapability, inputs: ["padding", "padding"] }], ngImport: i0 });
3356
+ }
3357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbCluster, decorators: [{
3358
+ type: Directive,
3359
+ args: [{
3360
+ selector: '[nbCluster]',
3361
+ providers: [
3362
+ { provide: NB_STYLE_NAMESPACE, useValue: 'cluster' },
3363
+ {
3364
+ provide: NB_STYLE_DEFAULTS,
3365
+ useValue: { gap: 'md', padding: 'none' },
3366
+ },
3367
+ ],
3368
+ hostDirectives: [
3369
+ { directive: NbGapCapability, inputs: ['gap'] },
3370
+ { directive: NbPaddingCapability, inputs: ['padding'] },
3371
+ ],
3372
+ host: {
3373
+ '[class]': 'classes()',
3374
+ '[attr.data-nb-cluster]': '""',
3375
+ '[attr.data-align]': 'align()',
3376
+ '[attr.data-justify]': 'justify()',
3377
+ '[attr.data-wrap]': 'wrap()',
3378
+ '[attr.data-separator]': 'separator()',
3379
+ '[style.column-gap]': 'separatorColumnGapStyle()',
3380
+ },
3381
+ }]
3382
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], justify: [{ type: i0.Input, args: [{ isSignal: true, alias: "justify", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }] } });
3383
+ // Written as module-level constants so Tailwind's static scanner emits the classes.
3384
+ const separatorBaseClass$1 = nbClass('[--nb-cluster-separator-gap:calc(var(--_nb-gap-resolved)*0.5)]', '[--nb-cluster-separator-color:var(--nb-border)]', '[&>*+*]:[margin-inline-start:var(--nb-cluster-separator-gap)]', '[&>*+*]:[padding-inline-start:var(--nb-cluster-separator-gap)]', '[&>*+*]:[border-inline-start-color:var(--nb-cluster-separator-color)]');
3385
+ const separatorStyleClass$1 = {
3386
+ solid: nbClass('[--nb-cluster-separator-thickness:2px]', '[&>*+*]:[border-inline-start-width:var(--nb-cluster-separator-thickness)]', '[&>*+*]:[border-inline-start-style:solid]'),
3387
+ dashed: nbClass('[--nb-cluster-separator-thickness:2px]', '[&>*+*]:[border-inline-start-width:var(--nb-cluster-separator-thickness)]', '[&>*+*]:[border-inline-start-style:dashed]'),
3388
+ thick: nbClass('[--nb-cluster-separator-thickness:4px]', '[&>*+*]:[border-inline-start-width:var(--nb-cluster-separator-thickness)]', '[&>*+*]:[border-inline-start-style:solid]'),
3389
+ };
3390
+
3391
+ class NbSplit {
3392
+ ratio = input('1:1', ...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
3393
+ collapse = input('md', ...(ngDevMode ? [{ debugName: "collapse" }] : /* istanbul ignore next */ []));
3394
+ align = input('stretch', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3395
+ separator = input('none', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
3396
+ classes = computed(() => nbClass('grid min-w-0', this.alignClass(), this.ratioClass(), this.collapseClass(), this.separatorClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3397
+ alignClass() {
3398
+ const map = {
3399
+ start: 'items-start',
3400
+ center: 'items-center',
3401
+ end: 'items-end',
3402
+ stretch: 'items-stretch',
3403
+ };
3404
+ return map[this.align()];
3405
+ }
3406
+ ratioClass() {
3407
+ const map = {
3408
+ '1:1': '[--nb-split-columns:minmax(0,1fr)_minmax(0,1fr)]',
3409
+ '2:1': '[--nb-split-columns:minmax(0,2fr)_minmax(0,1fr)]',
3410
+ '3:1': '[--nb-split-columns:minmax(0,3fr)_minmax(0,1fr)]',
3411
+ '1:2': '[--nb-split-columns:minmax(0,1fr)_minmax(0,2fr)]',
3412
+ '1:3': '[--nb-split-columns:minmax(0,1fr)_minmax(0,3fr)]',
3413
+ 'fill:auto': '[--nb-split-columns:minmax(0,1fr)_auto]',
3414
+ 'auto:fill': '[--nb-split-columns:auto_minmax(0,1fr)]',
3415
+ };
3416
+ return map[this.ratio()];
3417
+ }
3418
+ collapseClass() {
3419
+ const map = {
3420
+ none: 'grid-cols-[var(--nb-split-columns)]',
3421
+ sm: 'grid-cols-1 sm:grid-cols-[var(--nb-split-columns)]',
3422
+ md: 'grid-cols-1 md:grid-cols-[var(--nb-split-columns)]',
3423
+ lg: 'grid-cols-1 lg:grid-cols-[var(--nb-split-columns)]',
3424
+ };
3425
+ return map[this.collapse()];
3426
+ }
3427
+ separatorClass() {
3428
+ const separator = this.separator();
3429
+ if (separator === 'none') {
3430
+ return '';
3431
+ }
3432
+ return nbClass(separatorBaseClass, separatorStyleClass[separator], separatorVisibilityClass[this.collapse()]);
3433
+ }
3434
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSplit, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3435
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbSplit, isStandalone: true, selector: "[nbSplit]", inputs: { ratio: { classPropertyName: "ratio", publicName: "ratio", isSignal: true, isRequired: false, transformFunction: null }, collapse: { classPropertyName: "collapse", publicName: "collapse", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-split": "\"\"", "attr.data-ratio": "ratio()", "attr.data-collapse": "collapse()", "attr.data-align": "align()", "attr.data-separator": "separator()" } }, providers: [
3436
+ { provide: NB_STYLE_NAMESPACE, useValue: 'split' },
3437
+ {
3438
+ provide: NB_STYLE_DEFAULTS,
3439
+ useValue: { gap: 'lg', padding: 'none' },
3440
+ },
3441
+ ], hostDirectives: [{ directive: NbGapCapability, inputs: ["gap", "gap"] }, { directive: NbPaddingCapability, inputs: ["padding", "padding"] }], ngImport: i0 });
3442
+ }
3443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSplit, decorators: [{
3444
+ type: Directive,
3445
+ args: [{
3446
+ selector: '[nbSplit]',
3447
+ providers: [
3448
+ { provide: NB_STYLE_NAMESPACE, useValue: 'split' },
3449
+ {
3450
+ provide: NB_STYLE_DEFAULTS,
3451
+ useValue: { gap: 'lg', padding: 'none' },
3452
+ },
3453
+ ],
3454
+ hostDirectives: [
3455
+ { directive: NbGapCapability, inputs: ['gap'] },
3456
+ { directive: NbPaddingCapability, inputs: ['padding'] },
3457
+ ],
3458
+ host: {
3459
+ '[class]': 'classes()',
3460
+ '[attr.data-nb-split]': '""',
3461
+ '[attr.data-ratio]': 'ratio()',
3462
+ '[attr.data-collapse]': 'collapse()',
3463
+ '[attr.data-align]': 'align()',
3464
+ '[attr.data-separator]': 'separator()',
3465
+ },
3466
+ }]
3467
+ }], propDecorators: { ratio: [{ type: i0.Input, args: [{ isSignal: true, alias: "ratio", required: false }] }], collapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapse", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }] } });
3468
+ // A `::after` pseudo-element on the first column draws the vertical line,
3469
+ // centered in the gap. These class strings are written out literally (rather
3470
+ // than assembled at runtime) so Tailwind's static scanner can emit them.
3471
+ const separatorBaseClass = nbClass('[&>*:first-child]:relative', '[&>*:first-child]:after:pointer-events-none', '[&>*:first-child]:after:absolute', '[&>*:first-child]:after:inset-y-0', '[&>*:first-child]:after:[inset-inline-end:calc(var(--_nb-gap-resolved)/-2)]', '[&>*:first-child]:after:[border-inline-end-color:var(--nb-border)]', '[&>*:first-child]:after:content-[""]');
3472
+ const separatorStyleClass = {
3473
+ solid: nbClass('[&>*:first-child]:after:[border-inline-end-width:var(--nb-border-width)]', '[&>*:first-child]:after:border-solid'),
3474
+ dashed: nbClass('[&>*:first-child]:after:[border-inline-end-width:var(--nb-border-width)]', '[&>*:first-child]:after:border-dashed'),
3475
+ thick: nbClass('[&>*:first-child]:after:[border-inline-end-width:4px]', '[&>*:first-child]:after:border-solid'),
3476
+ };
3477
+ // Hide the separator while the split is stacked into a single column, then
3478
+ // reveal it at the same breakpoint where the columns appear, so the line stays
3479
+ // in sync with `collapse` (and tracks Tailwind's breakpoint config).
3480
+ const separatorVisibilityClass = {
3481
+ none: '',
3482
+ sm: '[&>*:first-child]:after:hidden sm:[&>*:first-child]:after:block',
3483
+ md: '[&>*:first-child]:after:hidden md:[&>*:first-child]:after:block',
3484
+ lg: '[&>*:first-child]:after:hidden lg:[&>*:first-child]:after:block',
3485
+ };
3486
+
3487
+ class NbSection {
3488
+ divider = input('none', ...(ngDevMode ? [{ debugName: "divider" }] : /* istanbul ignore next */ []));
3489
+ dividerStyle = input('solid', ...(ngDevMode ? [{ debugName: "dividerStyle" }] : /* istanbul ignore next */ []));
3490
+ layout = input('default', ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
3491
+ align = input('stretch', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3492
+ flush = input(false, { ...(ngDevMode ? { debugName: "flush" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3493
+ classes = computed(() => nbClass('box-border min-w-0', this.layoutClass(), this.alignClass(), this.dividerClass(), this.flush() &&
3494
+ 'mx-[calc(var(--nb-padding-token,var(--_nb-padding-default))*-1)]'), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3495
+ layoutClass() {
3496
+ const map = {
3497
+ default: 'block',
3498
+ center: 'flex justify-center gap-[var(--nb-spacing-md,1rem)]',
3499
+ between: 'flex justify-between gap-[var(--nb-spacing-md,1rem)]',
3500
+ };
3501
+ return map[this.layout()];
3502
+ }
3503
+ alignClass() {
3504
+ if (this.layout() === 'default') {
3505
+ return '';
3506
+ }
3507
+ const map = {
3508
+ stretch: 'items-stretch',
3509
+ start: 'items-start',
3510
+ center: 'items-center',
3511
+ end: 'items-end',
3512
+ };
3513
+ return map[this.align()];
3514
+ }
3515
+ dividerClass() {
3516
+ const side = this.divider();
3517
+ if (side === 'none') {
3518
+ return '';
3519
+ }
3520
+ const style = this.dividerStyleClass();
3521
+ const widthMap = {
3522
+ top: 'border-t-(length:--nb-border-width)',
3523
+ right: 'border-r-(length:--nb-border-width)',
3524
+ bottom: 'border-b-(length:--nb-border-width)',
3525
+ left: 'border-l-(length:--nb-border-width)',
3526
+ block: 'border-y-(length:--nb-border-width)',
3527
+ inline: 'border-x-(length:--nb-border-width)',
3528
+ all: 'border-(length:--nb-border-width)',
3529
+ };
3530
+ return nbClass(widthMap[side], 'border-(--nb-border)', style);
3531
+ }
3532
+ dividerStyleClass() {
3533
+ const map = {
3534
+ solid: 'border-solid',
3535
+ dashed: 'border-dashed',
3536
+ dotted: 'border-dotted',
3537
+ };
3538
+ return map[this.dividerStyle()];
3539
+ }
3540
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSection, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3541
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbSection, isStandalone: true, selector: "[nbSection]", inputs: { divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null }, dividerStyle: { classPropertyName: "dividerStyle", publicName: "dividerStyle", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, flush: { classPropertyName: "flush", publicName: "flush", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-section": "\"\"", "attr.data-divider": "divider()", "attr.data-divider-style": "dividerStyle()", "attr.data-layout": "layout()", "attr.data-align": "align()", "attr.data-flush": "flush() ? \"\" : null" } }, providers: [
3542
+ { provide: NB_STYLE_NAMESPACE, useValue: 'section' },
3543
+ {
3544
+ provide: NB_STYLE_DEFAULTS,
3545
+ useValue: { padding: 'md' },
3546
+ },
3547
+ ], exportAs: ["nbSection"], hostDirectives: [{ directive: NbPaddingCapability, inputs: ["padding", "padding"] }], ngImport: i0 });
3548
+ }
3549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbSection, decorators: [{
3550
+ type: Directive,
3551
+ args: [{
3552
+ selector: '[nbSection]',
3553
+ exportAs: 'nbSection',
3554
+ providers: [
3555
+ { provide: NB_STYLE_NAMESPACE, useValue: 'section' },
3556
+ {
3557
+ provide: NB_STYLE_DEFAULTS,
3558
+ useValue: { padding: 'md' },
3559
+ },
3560
+ ],
3561
+ hostDirectives: [{ directive: NbPaddingCapability, inputs: ['padding'] }],
3562
+ host: {
3563
+ '[class]': 'classes()',
3564
+ '[attr.data-nb-section]': '""',
3565
+ '[attr.data-divider]': 'divider()',
3566
+ '[attr.data-divider-style]': 'dividerStyle()',
3567
+ '[attr.data-layout]': 'layout()',
3568
+ '[attr.data-align]': 'align()',
3569
+ '[attr.data-flush]': 'flush() ? "" : null',
3570
+ },
3571
+ }]
3572
+ }], propDecorators: { divider: [{ type: i0.Input, args: [{ isSignal: true, alias: "divider", required: false }] }], dividerStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividerStyle", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], flush: [{ type: i0.Input, args: [{ isSignal: true, alias: "flush", required: false }] }] } });
3573
+
3574
+ class NbCallout {
3575
+ size = input('lg', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3576
+ layout = input('inline', ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
3577
+ radius = input(undefined, ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
3578
+ classes = computed(() => nbClass('relative inline-flex items-center gap-3', 'border-(length:--nb-callout-border-width)', 'rounded-(--nb-callout-radius)', 'font-black uppercase leading-none', this.sizeClass(), this.layoutClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3579
+ // Inline style wins over the size-derived `--nb-callout-radius` class, so an
3580
+ // explicit `radius` always takes precedence; null leaves the size default.
3581
+ radiusStyle = computed(() => {
3582
+ const r = this.radius();
3583
+ return r !== undefined ? nbRadiusValue(r) : null;
3584
+ }, ...(ngDevMode ? [{ debugName: "radiusStyle" }] : /* istanbul ignore next */ []));
3585
+ sizeClass() {
3586
+ const map = {
3587
+ sm: 'min-h-9 px-3 py-2 text-sm [--nb-callout-radius:0.5rem] [--nb-callout-border-width:2px]',
3588
+ md: 'min-h-11 px-4 py-2 text-base [--nb-callout-radius:0.625rem] [--nb-callout-border-width:2px]',
3589
+ lg: 'min-h-14 px-5 py-3 text-2xl [--nb-callout-radius:0.75rem] [--nb-callout-border-width:3px]',
3590
+ xl: 'min-h-20 px-6 py-4 text-5xl [--nb-callout-radius:0.875rem] [--nb-callout-border-width:4px]',
3591
+ };
3592
+ return map[this.size()];
3593
+ }
3594
+ layoutClass() {
3595
+ const map = {
3596
+ inline: 'justify-start',
3597
+ between: 'w-full justify-between',
3598
+ center: 'justify-center text-center',
3599
+ };
3600
+ return map[this.layout()];
3601
+ }
3602
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbCallout, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3603
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbCallout, isStandalone: true, selector: "[nbCallout]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-callout": "\"\"", "attr.data-size": "size()", "attr.data-layout": "layout()", "attr.data-radius": "radius() ?? null", "style.--nb-callout-radius": "radiusStyle()" } }, providers: [
3604
+ { provide: NB_STYLE_NAMESPACE, useValue: 'callout' },
3605
+ {
3606
+ provide: NB_STYLE_DEFAULTS,
3607
+ useValue: { tone: 'yellow', shadow: 'hard' },
3608
+ },
3609
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }, { directive: NbShadowCapability, inputs: ["shadow", "shadow"] }], ngImport: i0 });
3610
+ }
3611
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbCallout, decorators: [{
3612
+ type: Directive,
3613
+ args: [{
3614
+ selector: '[nbCallout]',
3615
+ providers: [
3616
+ { provide: NB_STYLE_NAMESPACE, useValue: 'callout' },
3617
+ {
3618
+ provide: NB_STYLE_DEFAULTS,
3619
+ useValue: { tone: 'yellow', shadow: 'hard' },
3620
+ },
3621
+ ],
3622
+ hostDirectives: [
3623
+ { directive: NbToneCapability, inputs: ['tone'] },
3624
+ { directive: NbShadowCapability, inputs: ['shadow'] },
3625
+ ],
3626
+ host: {
3627
+ '[class]': 'classes()',
3628
+ '[attr.data-nb-callout]': '""',
3629
+ '[attr.data-size]': 'size()',
3630
+ '[attr.data-layout]': 'layout()',
3631
+ '[attr.data-radius]': 'radius() ?? null',
3632
+ '[style.--nb-callout-radius]': 'radiusStyle()',
3633
+ },
3634
+ }]
3635
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }] } });
3636
+
3637
+ class NbMediaItem {
3638
+ variant = input('plain', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
3639
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
3640
+ align = input('start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3641
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3642
+ icon = input(undefined, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
3643
+ iconAlt = input('', ...(ngDevMode ? [{ debugName: "iconAlt" }] : /* istanbul ignore next */ []));
3644
+ iconBackground = input(undefined, ...(ngDevMode ? [{ debugName: "iconBackground" }] : /* istanbul ignore next */ []));
3645
+ title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
3646
+ description = input(undefined, ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
3647
+ classes = computed(() => nbClass('relative min-w-0', 'inline-flex font-bold leading-tight', '[--nb-media-item-description-opacity:0.7]', '[&_svg]:shrink-0 [&_img]:shrink-0 [&_[data-nb-media-item-icon]]:shrink-0 [&_[nbSurface]]:shrink-0', '[&_svg]:rounded-[calc(var(--nb-media-item-radius)-0.25rem)]', '[&_img]:rounded-[calc(var(--nb-media-item-radius)-0.25rem)]', '[&_svg]:h-[var(--nb-media-item-icon-size)] [&_svg]:max-w-[var(--nb-media-item-icon-size)] [&_svg]:w-auto', '[&_img]:h-[var(--nb-media-item-icon-size)] [&_img]:max-w-[var(--nb-media-item-icon-size)] [&_img]:w-auto [&_img]:object-contain', '[&_[data-nb-media-item-title]]:block', '[&_[data-nb-media-item-title]]:[font-family:var(--nb-media-item-title-font-family,inherit)]', '[&_[data-nb-media-item-title]]:font-black', '[&_[data-nb-media-item-title]]:leading-none', '[&_[data-nb-media-item-title]]:text-[length:var(--nb-media-item-title-size,var(--nb-media-item-title-default-size))]', '[&_[data-nb-media-item-description]]:mt-1', '[&_[data-nb-media-item-description]]:block', '[&_[data-nb-media-item-description]]:text-[length:var(--nb-media-item-description-size,var(--nb-media-item-description-default-size))]', '[&_[data-nb-media-item-description]]:font-bold', '[&_[data-nb-media-item-description]]:leading-none', '[&_[data-nb-media-item-description]]:opacity-[var(--nb-media-item-description-opacity)]', this.variantClass(), this.orientationClass(), this.alignClass(), this.sizeClass()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3648
+ iconClasses = computed(() => mediaItemIconClasses(), ...(ngDevMode ? [{ debugName: "iconClasses" }] : /* istanbul ignore next */ []));
3649
+ variantClass() {
3650
+ const map = {
3651
+ plain: '[--nb-media-item-radius:var(--nb-radius)] bg-transparent',
3652
+ boxed: 'border-[var(--nb-border-width)] border-[var(--nb-media-item-border-color)] bg-[var(--nb-media-item-bg)] shadow-[var(--nb-shadow-offset-x)_var(--nb-shadow-offset-y)_0_0_var(--nb-shadow)] [--nb-media-item-radius:var(--nb-radius)] rounded-[var(--nb-media-item-radius)]',
3653
+ chip: 'border-[var(--nb-border-width)] border-[var(--nb-media-item-border-color)] bg-[var(--nb-media-item-bg)] [--nb-media-item-radius:9999px] rounded-[var(--nb-media-item-radius)]',
3654
+ };
3655
+ return map[this.variant()];
3656
+ }
3657
+ orientationClass() {
3658
+ const map = {
3659
+ horizontal: 'flex-row items-center',
3660
+ vertical: 'flex-col',
3661
+ };
3662
+ return map[this.orientation()];
3663
+ }
3664
+ alignClass() {
3665
+ const map = {
3666
+ start: 'justify-start text-left',
3667
+ center: 'justify-center text-center',
3668
+ between: 'w-full justify-between',
3669
+ };
3670
+ return map[this.align()];
3671
+ }
3672
+ sizeClass() {
3673
+ const map = {
3674
+ xs: nbClass('gap-[var(--nb-media-item-gap)] text-[0.6875rem]', '[--nb-media-item-gap:0.375rem]', '[--nb-media-item-icon-size:1rem]', '[--nb-media-item-surface-size:2rem]', '[--nb-media-item-title-default-size:0.75rem]', '[--nb-media-item-description-default-size:0.5625rem]', this.variant() === 'plain' ? '' : 'px-2 py-1'),
3675
+ sm: nbClass('gap-[var(--nb-media-item-gap)] text-xs', '[--nb-media-item-gap:0.5rem]', '[--nb-media-item-icon-size:1rem]', '[--nb-media-item-surface-size:2.25rem]', '[--nb-media-item-title-default-size:0.75rem]', '[--nb-media-item-description-default-size:0.625rem]', this.variant() === 'plain' ? '' : 'px-2.5 py-1.5'),
3676
+ md: nbClass('gap-[var(--nb-media-item-gap)] text-sm', '[--nb-media-item-gap:0.75rem]', '[--nb-media-item-icon-size:1.25rem]', '[--nb-media-item-surface-size:2.75rem]', '[--nb-media-item-title-default-size:0.875rem]', '[--nb-media-item-description-default-size:0.65625rem]', this.variant() === 'plain' ? '' : 'px-3 py-2'),
3677
+ lg: nbClass('gap-[var(--nb-media-item-gap)] text-base', '[--nb-media-item-gap:1rem]', '[--nb-media-item-icon-size:1.5rem]', '[--nb-media-item-surface-size:3.25rem]', '[--nb-media-item-title-default-size:1rem]', '[--nb-media-item-description-default-size:0.75rem]', this.variant() === 'plain' ? '' : 'px-4 py-3'),
3678
+ };
3679
+ return map[this.size()];
3680
+ }
3681
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
3682
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NbMediaItem, isStandalone: true, selector: "nb-media-item, [nbMediaItem]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconAlt: { classPropertyName: "iconAlt", publicName: "iconAlt", isSignal: true, isRequired: false, transformFunction: null }, iconBackground: { classPropertyName: "iconBackground", publicName: "iconBackground", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-media-item": "\"\"", "attr.data-variant": "variant()", "attr.data-orientation": "orientation()", "attr.data-align": "align()", "attr.data-size": "size()" } }, providers: [
3683
+ { provide: NB_STYLE_NAMESPACE, useValue: 'media-item' },
3684
+ {
3685
+ provide: NB_STYLE_DEFAULTS,
3686
+ useValue: { tone: 'default' },
3687
+ },
3688
+ ], hostDirectives: [{ directive: NbToneCapability, inputs: ["tone", "tone"] }], ngImport: i0, template: `
3689
+ @if (icon()) {
3690
+ @if (iconBackground()) {
3691
+ <span
3692
+ data-nb-media-item-icon
3693
+ data-surface="true"
3694
+ [attr.data-background]="iconBackground()"
3695
+ [class]="iconClasses()"
3696
+ [style.--nb-media-item-icon-bg]="iconBackground()"
3697
+ >
3698
+ <img [src]="icon()" [alt]="iconAlt()" />
3699
+ </span>
3700
+ } @else {
3701
+ <img [src]="icon()" [alt]="iconAlt()" />
3702
+ }
3703
+ } @else {
3704
+ <ng-content select="nb-media-item-icon, [nbMediaItemIcon], [nbSurface], img, svg" />
3705
+ }
3706
+
3707
+ <div data-nb-media-item-content class="min-w-0">
3708
+ @if (title()) {
3709
+ <span data-nb-media-item-title>{{ title() }}</span>
3710
+ } @else {
3711
+ <ng-content select="nb-media-item-title, [nbMediaItemTitle]" />
3712
+ }
3713
+ @if (description()) {
3714
+ <span data-nb-media-item-description>{{ description() }}</span>
3715
+ } @else {
3716
+ <ng-content select="nb-media-item-description, [nbMediaItemDescription]" />
3717
+ }
3718
+ @if (!title() && !description()) {
3719
+ <ng-content />
3720
+ }
3721
+ </div>
3722
+
3723
+ <ng-content select="nb-media-item-action, [nbMediaItemAction]" />
3724
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
3725
+ }
3726
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItem, decorators: [{
3727
+ type: Component,
3728
+ args: [{
3729
+ selector: 'nb-media-item, [nbMediaItem]',
3730
+ providers: [
3731
+ { provide: NB_STYLE_NAMESPACE, useValue: 'media-item' },
3732
+ {
3733
+ provide: NB_STYLE_DEFAULTS,
3734
+ useValue: { tone: 'default' },
3735
+ },
3736
+ ],
3737
+ hostDirectives: [{ directive: NbToneCapability, inputs: ['tone'] }],
3738
+ template: `
3739
+ @if (icon()) {
3740
+ @if (iconBackground()) {
3741
+ <span
3742
+ data-nb-media-item-icon
3743
+ data-surface="true"
3744
+ [attr.data-background]="iconBackground()"
3745
+ [class]="iconClasses()"
3746
+ [style.--nb-media-item-icon-bg]="iconBackground()"
3747
+ >
3748
+ <img [src]="icon()" [alt]="iconAlt()" />
3749
+ </span>
3750
+ } @else {
3751
+ <img [src]="icon()" [alt]="iconAlt()" />
3752
+ }
3753
+ } @else {
3754
+ <ng-content select="nb-media-item-icon, [nbMediaItemIcon], [nbSurface], img, svg" />
3755
+ }
3756
+
3757
+ <div data-nb-media-item-content class="min-w-0">
3758
+ @if (title()) {
3759
+ <span data-nb-media-item-title>{{ title() }}</span>
3760
+ } @else {
3761
+ <ng-content select="nb-media-item-title, [nbMediaItemTitle]" />
3762
+ }
3763
+ @if (description()) {
3764
+ <span data-nb-media-item-description>{{ description() }}</span>
3765
+ } @else {
3766
+ <ng-content select="nb-media-item-description, [nbMediaItemDescription]" />
3767
+ }
3768
+ @if (!title() && !description()) {
3769
+ <ng-content />
3770
+ }
3771
+ </div>
3772
+
3773
+ <ng-content select="nb-media-item-action, [nbMediaItemAction]" />
3774
+ `,
3775
+ host: {
3776
+ '[class]': 'classes()',
3777
+ '[attr.data-nb-media-item]': '""',
3778
+ '[attr.data-variant]': 'variant()',
3779
+ '[attr.data-orientation]': 'orientation()',
3780
+ '[attr.data-align]': 'align()',
3781
+ '[attr.data-size]': 'size()',
3782
+ },
3783
+ changeDetection: ChangeDetectionStrategy.OnPush,
3784
+ }]
3785
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconAlt", required: false }] }], iconBackground: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconBackground", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }] } });
3786
+ class NbMediaItemIcon {
3787
+ surface = input(false, { ...(ngDevMode ? { debugName: "surface" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3788
+ background = input('var(--nb-surface)', ...(ngDevMode ? [{ debugName: "background" }] : /* istanbul ignore next */ []));
3789
+ classes = computed(() => nbClass('shrink-0', this.surface() && mediaItemIconClasses()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
3790
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItemIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3791
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbMediaItemIcon, isStandalone: true, selector: "nb-media-item-icon, [nbMediaItemIcon]", inputs: { surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.data-nb-media-item-icon": "\"\"", "attr.data-surface": "surface()", "attr.data-background": "surface() ? background() : null", "style.--nb-media-item-icon-bg": "surface() ? background() : null" } }, ngImport: i0 });
3792
+ }
3793
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItemIcon, decorators: [{
3794
+ type: Directive,
3795
+ args: [{
3796
+ selector: 'nb-media-item-icon, [nbMediaItemIcon]',
3797
+ host: {
3798
+ '[class]': 'classes()',
3799
+ '[attr.data-nb-media-item-icon]': '""',
3800
+ '[attr.data-surface]': 'surface()',
3801
+ '[attr.data-background]': 'surface() ? background() : null',
3802
+ '[style.--nb-media-item-icon-bg]': 'surface() ? background() : null',
3803
+ },
3804
+ }]
3805
+ }], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], background: [{ type: i0.Input, args: [{ isSignal: true, alias: "background", required: false }] }] } });
3806
+ class NbMediaItemTitle {
3807
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItemTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3808
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: NbMediaItemTitle, isStandalone: true, selector: "nb-media-item-title, [nbMediaItemTitle]", host: { properties: { "attr.data-nb-media-item-title": "\"\"" } }, ngImport: i0 });
3809
+ }
3810
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItemTitle, decorators: [{
3811
+ type: Directive,
3812
+ args: [{
3813
+ selector: 'nb-media-item-title, [nbMediaItemTitle]',
3814
+ host: {
3815
+ '[attr.data-nb-media-item-title]': '""',
3816
+ },
3817
+ }]
3818
+ }] });
3819
+ class NbMediaItemDescription {
3820
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItemDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3821
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: NbMediaItemDescription, isStandalone: true, selector: "nb-media-item-description, [nbMediaItemDescription]", host: { properties: { "attr.data-nb-media-item-description": "\"\"" } }, ngImport: i0 });
3822
+ }
3823
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbMediaItemDescription, decorators: [{
3824
+ type: Directive,
3825
+ args: [{
3826
+ selector: 'nb-media-item-description, [nbMediaItemDescription]',
3827
+ host: {
3828
+ '[attr.data-nb-media-item-description]': '""',
3829
+ },
3830
+ }]
3831
+ }] });
3832
+ function mediaItemIconClasses() {
3833
+ return nbClass('relative inline-flex size-[var(--nb-media-item-surface-size)] items-center justify-center', 'rounded-lg border-[var(--nb-border-width)] border-[var(--nb-border)]', 'bg-(--nb-media-item-icon-bg) text-black');
3834
+ }
3835
+
3836
+ const sizeMap = {
3837
+ xs: '0.75rem',
3838
+ sm: '0.875rem',
3839
+ md: '1rem',
3840
+ lg: '1.125rem',
3841
+ xl: '1.25rem',
3842
+ '2xl': '1.5rem',
3843
+ '3xl': '1.875rem',
3844
+ };
3845
+ const defaultLineHeightMap = {
3846
+ xs: '1rem',
3847
+ sm: '1.25rem',
3848
+ md: '1.5rem',
3849
+ lg: '1.75rem',
3850
+ xl: '1.875rem',
3851
+ '2xl': '2rem',
3852
+ '3xl': '2.25rem',
3853
+ };
3854
+ const leadingMap = {
3855
+ none: '1',
3856
+ tight: '1.15',
3857
+ normal: null,
3858
+ relaxed: '1.65',
3859
+ };
3860
+ const toneMap = {
3861
+ default: 'var(--nb-foreground)',
3862
+ muted: 'color-mix(in srgb, var(--nb-foreground) 80%, transparent)',
3863
+ subtle: 'color-mix(in srgb, var(--nb-foreground) 65%, transparent)',
3864
+ inverse: 'var(--nb-background)',
3865
+ primary: 'var(--nb-primary)',
3866
+ secondary: 'var(--nb-secondary)',
3867
+ accent: 'var(--nb-accent)',
3868
+ danger: 'var(--nb-danger)',
3869
+ success: 'var(--nb-success)',
3870
+ warning: 'var(--nb-warning)',
3871
+ };
3872
+ const trackingMap = {
3873
+ tight: '-0.025em',
3874
+ // Explicit 'normal' resets any inherited letter-spacing; do not collapse to null.
3875
+ normal: 'normal',
3876
+ wide: '0.025em',
3877
+ wider: '0.05em',
3878
+ };
3879
+ const measureMap = {
3880
+ none: 'none',
3881
+ xs: '20rem',
3882
+ sm: '28rem',
3883
+ md: '36rem',
3884
+ lg: '44rem',
3885
+ };
3886
+ class NbText {
3887
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3888
+ weight = input('normal', ...(ngDevMode ? [{ debugName: "weight" }] : /* istanbul ignore next */ []));
3889
+ tone = input('default', ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
3890
+ transform = input('none', ...(ngDevMode ? [{ debugName: "transform" }] : /* istanbul ignore next */ []));
3891
+ tracking = input('normal', ...(ngDevMode ? [{ debugName: "tracking" }] : /* istanbul ignore next */ []));
3892
+ measure = input('none', ...(ngDevMode ? [{ debugName: "measure" }] : /* istanbul ignore next */ []));
3893
+ leading = input('normal', ...(ngDevMode ? [{ debugName: "leading" }] : /* istanbul ignore next */ []));
3894
+ // underline / underlineGap / underlineWidth / reset → composed capabilities
3895
+ sizeValue = computed(() => sizeMap[this.size()], ...(ngDevMode ? [{ debugName: "sizeValue" }] : /* istanbul ignore next */ []));
3896
+ lineHeightValue = computed(() => {
3897
+ const explicitLeading = leadingMap[this.leading()];
3898
+ return explicitLeading ?? defaultLineHeightMap[this.size()];
3899
+ }, ...(ngDevMode ? [{ debugName: "lineHeightValue" }] : /* istanbul ignore next */ []));
3900
+ weightValue = computed(() => nbFontWeightValue(this.weight()), ...(ngDevMode ? [{ debugName: "weightValue" }] : /* istanbul ignore next */ []));
3901
+ colorValue = computed(() => toneMap[this.tone()], ...(ngDevMode ? [{ debugName: "colorValue" }] : /* istanbul ignore next */ []));
3902
+ transformValue = computed(() => this.transform(), ...(ngDevMode ? [{ debugName: "transformValue" }] : /* istanbul ignore next */ []));
3903
+ trackingValue = computed(() => trackingMap[this.tracking()], ...(ngDevMode ? [{ debugName: "trackingValue" }] : /* istanbul ignore next */ []));
3904
+ measureValue = computed(() => {
3905
+ const val = measureMap[this.measure()];
3906
+ return val === 'none' ? null : val;
3907
+ }, ...(ngDevMode ? [{ debugName: "measureValue" }] : /* istanbul ignore next */ []));
3908
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbText, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3909
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NbText, isStandalone: true, selector: "[nbText]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, weight: { classPropertyName: "weight", publicName: "weight", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, transform: { classPropertyName: "transform", publicName: "transform", isSignal: true, isRequired: false, transformFunction: null }, tracking: { classPropertyName: "tracking", publicName: "tracking", isSignal: true, isRequired: false, transformFunction: null }, measure: { classPropertyName: "measure", publicName: "measure", isSignal: true, isRequired: false, transformFunction: null }, leading: { classPropertyName: "leading", publicName: "leading", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-nb-text": "\"\"", "attr.data-size": "size()", "attr.data-weight": "weight()", "attr.data-tone": "tone()", "attr.data-transform": "transform()", "attr.data-tracking": "tracking()", "attr.data-measure": "measure()", "attr.data-leading": "leading()", "style.color": "colorValue()", "style.font-size": "sizeValue()", "style.line-height": "lineHeightValue()", "style.font-weight": "weightValue()", "style.text-transform": "transformValue()", "style.letter-spacing": "trackingValue()", "style.max-width": "measureValue()" } }, exportAs: ["nbText"], hostDirectives: [{ directive: NbUnderlineCapability, inputs: ["underline", "underline", "underlineGap", "underlineGap", "underlineWidth", "underlineWidth"] }, { directive: NbResetMarginCapability, inputs: ["reset", "reset"] }], ngImport: i0 });
3910
+ }
3911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NbText, decorators: [{
3912
+ type: Directive,
3913
+ args: [{
3914
+ selector: '[nbText]',
3915
+ standalone: true,
3916
+ exportAs: 'nbText',
3917
+ hostDirectives: [
3918
+ // underline variant + optional gap/width overrides → data-underline + CSS vars
3919
+ {
3920
+ directive: NbUnderlineCapability,
3921
+ inputs: ['underline', 'underlineGap', 'underlineWidth'],
3922
+ },
3923
+ // reset input → margin: 0 (removes native paragraph/heading margin)
3924
+ { directive: NbResetMarginCapability, inputs: ['reset'] },
3925
+ ],
3926
+ host: {
3927
+ '[attr.data-nb-text]': '""',
3928
+ '[attr.data-size]': 'size()',
3929
+ '[attr.data-weight]': 'weight()',
3930
+ '[attr.data-tone]': 'tone()',
3931
+ '[attr.data-transform]': 'transform()',
3932
+ '[attr.data-tracking]': 'tracking()',
3933
+ '[attr.data-measure]': 'measure()',
3934
+ '[attr.data-leading]': 'leading()',
3935
+ '[style.color]': 'colorValue()',
3936
+ '[style.font-size]': 'sizeValue()',
3937
+ '[style.line-height]': 'lineHeightValue()',
3938
+ '[style.font-weight]': 'weightValue()',
3939
+ '[style.text-transform]': 'transformValue()',
3940
+ '[style.letter-spacing]': 'trackingValue()',
3941
+ '[style.max-width]': 'measureValue()',
3942
+ },
3943
+ }]
3944
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], weight: [{ type: i0.Input, args: [{ isSignal: true, alias: "weight", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], transform: [{ type: i0.Input, args: [{ isSignal: true, alias: "transform", required: false }] }], tracking: [{ type: i0.Input, args: [{ isSignal: true, alias: "tracking", required: false }] }], measure: [{ type: i0.Input, args: [{ isSignal: true, alias: "measure", required: false }] }], leading: [{ type: i0.Input, args: [{ isSignal: true, alias: "leading", required: false }] }] } });
3945
+
1329
3946
  // Foundation
1330
3947
 
1331
3948
  /**
1332
3949
  * Generated bundle index. Do not edit.
1333
3950
  */
1334
3951
 
1335
- export { NB_THEME_CONFIG, NbAccordion, NbAccordionContent, NbAccordionItem, NbAccordionTrigger, NbAvatar, NbBadge, NbButton, NbCard, NbCardActions, NbCardContent, NbCardDescription, NbCardFooter, NbCardHeader, NbCardTitle, NbCheckbox, NbDialog, NbDialogActions, NbDialogClose, NbDialogContent, NbDialogDescription, NbDialogTitle, NbImageCard, NbImageCardCaption, NbInput, NbInputGroup, NbInputPrefix, NbInputSuffix, NbLabel, NbMarquee, NbMarqueeItem, NbNativeSelect, NbSelect, NbSelectOption, NbTextarea, NbTitle, nbClass, provideNgBrutalism };
3952
+ export { NB_THEME_CONFIG, NbAccordion, NbAccordionContent, NbAccordionItem, NbAccordionTrigger, NbAvatar, NbAvatarGroup, NbBadge, NbButton, NbButtonTrailingIcon, NbCallout, NbCard, NbCardActions, NbCardContent, NbCardDescription, NbCardFooter, NbCardHeader, NbCardTitle, NbCheckbox, NbChip, NbChipGroup, NbCluster, NbDialog, NbDialogActions, NbDialogClose, NbDialogContent, NbDialogDescription, NbDialogTitle, NbDisplay, NbHalftone, NbIcon, NbIconButton, NbImageCard, NbImageCardCaption, NbInput, NbInputGroup, NbInputPrefix, NbInputSuffix, NbLabel, NbMarquee, NbMarqueeItem, NbMediaFrame, NbMediaItem, NbMediaItemDescription, NbMediaItemIcon, NbMediaItemTitle, NbNativeSelect, NbProgress, NbRating, NbSection, NbSelect, NbSelectOption, NbSeparator, NbSplit, NbStack, NbStat, NbStatusDot, NbSticker, NbStickerFace, NbSurface, NbText, NbTextarea, NbTitle, NbTypography, nbBorderWidthValue, nbClass, nbFontWeightValue, nbPaddingValue, nbRadiusValue, nbShadowValue, nbSpacingValue, nbToneTokens, nbToneVars, nbTypographyFontValue, nbUnderlineGapValue, nbUnderlineWidthValue, provideNgBrutalism, NB_STYLE_DEFAULTS as ɵNB_STYLE_DEFAULTS, NB_STYLE_NAMESPACE as ɵNB_STYLE_NAMESPACE, NbBorderCapability as ɵNbBorderCapability, NbGapCapability as ɵNbGapCapability, NbPaddingCapability as ɵNbPaddingCapability, NbRadiusCapability as ɵNbRadiusCapability, NbResetMarginCapability as ɵNbResetMarginCapability, NbShadowCapability as ɵNbShadowCapability, NbToneCapability as ɵNbToneCapability, NbUnderlineCapability as ɵNbUnderlineCapability };
1336
3953
  //# sourceMappingURL=ng-brutalism-ui.mjs.map