ngx-com 0.0.21 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -33
- package/fesm2022/ngx-com-components-alert.mjs +21 -11
- package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
- package/fesm2022/ngx-com-components-avatar.mjs +9 -7
- package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-button.mjs +1 -1
- package/fesm2022/ngx-com-components-button.mjs.map +1 -1
- package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-card.mjs +8 -8
- package/fesm2022/ngx-com-components-card.mjs.map +1 -1
- package/fesm2022/ngx-com-components-carousel.mjs +16 -4
- package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-com-components-code-block.mjs +9 -9
- package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
- package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
- package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
- package/fesm2022/ngx-com-components-confirm.mjs +4 -4
- package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
- package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
- package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-dialog.mjs +47 -45
- package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
- package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
- package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
- package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
- package/fesm2022/ngx-com-components-form-field.mjs +11 -6
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
- package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
- package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
- package/fesm2022/ngx-com-components-icon.mjs +89 -61
- package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
- package/fesm2022/ngx-com-components-item.mjs +14 -4
- package/fesm2022/ngx-com-components-item.mjs.map +1 -1
- package/fesm2022/ngx-com-components-menu.mjs +61 -69
- package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
- package/fesm2022/ngx-com-components-native-control.mjs +170 -0
- package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
- package/fesm2022/ngx-com-components-paginator.mjs +11 -3
- package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
- package/fesm2022/ngx-com-components-popover.mjs +58 -33
- package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
- package/fesm2022/ngx-com-components-radio.mjs +4 -4
- package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
- package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
- package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
- package/fesm2022/ngx-com-components-sort.mjs +63 -57
- package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
- package/fesm2022/ngx-com-components-spinner.mjs +6 -6
- package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
- package/fesm2022/ngx-com-components-switch.mjs +18 -9
- package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
- package/fesm2022/ngx-com-components-table.mjs +23 -9
- package/fesm2022/ngx-com-components-table.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tabs.mjs +81 -58
- package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
- package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
- package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-toast.mjs +18 -14
- package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
- package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-com-components.mjs +0 -13
- package/fesm2022/ngx-com-components.mjs.map +1 -1
- package/fesm2022/ngx-com-tokens.mjs +0 -8
- package/fesm2022/ngx-com-tokens.mjs.map +1 -1
- package/fesm2022/ngx-com-utils.mjs +13 -1
- package/fesm2022/ngx-com-utils.mjs.map +1 -1
- package/fesm2022/ngx-com.mjs +1 -1
- package/fesm2022/ngx-com.mjs.map +1 -1
- package/package.json +51 -8
- package/styles/animations.css +38 -0
- package/styles/candy.css +121 -0
- package/styles/dark.css +159 -0
- package/styles/forest.css +117 -0
- package/styles/ocean.css +117 -0
- package/styles/themes.css +7 -0
- package/styles/tokens.css +277 -0
- package/styles/utilities.css +16 -0
- package/types/ngx-com-components-alert.d.ts +14 -4
- package/types/ngx-com-components-avatar.d.ts +2 -0
- package/types/ngx-com-components-calendar.d.ts +3 -747
- package/types/ngx-com-components-card.d.ts +2 -2
- package/types/ngx-com-components-carousel.d.ts +11 -1
- package/types/ngx-com-components-code-block.d.ts +4 -4
- package/types/ngx-com-components-collapsible.d.ts +10 -2
- package/types/ngx-com-components-confirm.d.ts +2 -2
- package/types/ngx-com-components-datepicker.d.ts +623 -0
- package/types/ngx-com-components-dialog.d.ts +5 -2
- package/types/ngx-com-components-dropdown.d.ts +22 -4
- package/types/ngx-com-components-empty-state.d.ts +2 -0
- package/types/ngx-com-components-form-field.d.ts +4 -1
- package/types/ngx-com-components-icon-lucide.d.ts +32 -0
- package/types/ngx-com-components-icon.d.ts +49 -35
- package/types/ngx-com-components-item.d.ts +12 -2
- package/types/ngx-com-components-menu.d.ts +38 -38
- package/types/ngx-com-components-native-control.d.ts +99 -0
- package/types/ngx-com-components-paginator.d.ts +2 -0
- package/types/ngx-com-components-popover.d.ts +19 -12
- package/types/ngx-com-components-segmented-control.d.ts +3 -1
- package/types/ngx-com-components-sort.d.ts +13 -10
- package/types/ngx-com-components-switch.d.ts +7 -2
- package/types/ngx-com-components-table.d.ts +16 -2
- package/types/ngx-com-components-tabs.d.ts +46 -34
- package/types/ngx-com-components-timepicker.d.ts +273 -0
- package/types/ngx-com-components-toast.d.ts +4 -2
- package/types/ngx-com-components-tooltip.d.ts +1 -1
- package/types/ngx-com-components.d.ts +6 -7
- package/types/ngx-com-tokens.d.ts +5 -3
- package/types/ngx-com-utils.d.ts +11 -1
- package/types/ngx-com.d.ts +1 -1
|
@@ -12,7 +12,7 @@ import { startWith } from 'rxjs';
|
|
|
12
12
|
const tabItemVariants = cva([
|
|
13
13
|
'relative inline-flex items-center justify-center gap-2',
|
|
14
14
|
'whitespace-nowrap font-medium select-none',
|
|
15
|
-
'transition-colors duration-
|
|
15
|
+
'transition-colors duration-normal',
|
|
16
16
|
'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:pointer-events-none',
|
|
17
17
|
'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
|
|
18
18
|
], {
|
|
@@ -171,7 +171,7 @@ const tabScrollButtonVariants = cva([
|
|
|
171
171
|
'absolute top-0 z-10 flex items-center justify-center',
|
|
172
172
|
'h-full w-8',
|
|
173
173
|
'text-muted-foreground hover:text-foreground',
|
|
174
|
-
'transition-opacity duration-
|
|
174
|
+
'transition-opacity duration-normal',
|
|
175
175
|
'focus-visible:outline-none',
|
|
176
176
|
], {
|
|
177
177
|
variants: {
|
|
@@ -198,7 +198,7 @@ const tabScrollButtonVariants = cva([
|
|
|
198
198
|
const tabCloseButtonVariants = cva([
|
|
199
199
|
'inline-flex items-center justify-center rounded-interactive-sm',
|
|
200
200
|
'text-muted-foreground hover:text-foreground',
|
|
201
|
-
'transition-colors duration-
|
|
201
|
+
'transition-colors duration-fast',
|
|
202
202
|
'focus-visible:outline-[1px] focus-visible:outline-offset-1 focus-visible:outline-ring',
|
|
203
203
|
], {
|
|
204
204
|
variants: {
|
|
@@ -214,7 +214,7 @@ const tabCloseButtonVariants = cva([
|
|
|
214
214
|
const tabPanelVariants = cva('focus-visible:outline-none', {
|
|
215
215
|
variants: {
|
|
216
216
|
animated: {
|
|
217
|
-
true: 'animate-fade-in',
|
|
217
|
+
true: 'animate-fade-in motion-reduce:animate-none',
|
|
218
218
|
false: '',
|
|
219
219
|
},
|
|
220
220
|
},
|
|
@@ -227,7 +227,9 @@ const tabPanelVariants = cva('focus-visible:outline-none', {
|
|
|
227
227
|
* Marker directive for custom tab label templates.
|
|
228
228
|
*
|
|
229
229
|
* Provides a custom label template for rich tab headers (icons, badges, counters).
|
|
230
|
-
* Applied to an `<ng-template>` inside `<
|
|
230
|
+
* Applied to an `<ng-template>` inside `<com-tab>`.
|
|
231
|
+
*
|
|
232
|
+
* @tokens none
|
|
231
233
|
*
|
|
232
234
|
* @example
|
|
233
235
|
* ```html
|
|
@@ -241,15 +243,15 @@ const tabPanelVariants = cva('focus-visible:outline-none', {
|
|
|
241
243
|
* </com-tab>
|
|
242
244
|
* ```
|
|
243
245
|
*/
|
|
244
|
-
class
|
|
246
|
+
class ComTabLabel {
|
|
245
247
|
templateRef = inject(TemplateRef);
|
|
246
248
|
static ngTemplateContextGuard(_dir, ctx) {
|
|
247
249
|
return true;
|
|
248
250
|
}
|
|
249
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
250
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type:
|
|
251
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
252
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComTabLabel, isStandalone: true, selector: "ng-template[comTabLabel]", ngImport: i0 });
|
|
251
253
|
}
|
|
252
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabLabel, decorators: [{
|
|
253
255
|
type: Directive,
|
|
254
256
|
args: [{
|
|
255
257
|
selector: 'ng-template[comTabLabel]',
|
|
@@ -262,6 +264,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
262
264
|
* Content wrapped in `<ng-template comTabContent>` is only instantiated
|
|
263
265
|
* when the tab becomes active for the first time.
|
|
264
266
|
*
|
|
267
|
+
* @tokens none
|
|
268
|
+
*
|
|
265
269
|
* @example Lazy loaded content
|
|
266
270
|
* ```html
|
|
267
271
|
* <com-tab label="Analytics">
|
|
@@ -284,15 +288,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
284
288
|
* </com-tab>
|
|
285
289
|
* ```
|
|
286
290
|
*/
|
|
287
|
-
class
|
|
291
|
+
class ComTabContent {
|
|
288
292
|
templateRef = inject(TemplateRef);
|
|
289
293
|
static ngTemplateContextGuard(_dir, ctx) {
|
|
290
294
|
return true;
|
|
291
295
|
}
|
|
292
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
293
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type:
|
|
296
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
297
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComTabContent, isStandalone: true, selector: "ng-template[comTabContent]", ngImport: i0 });
|
|
294
298
|
}
|
|
295
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabContent, decorators: [{
|
|
296
300
|
type: Directive,
|
|
297
301
|
args: [{
|
|
298
302
|
selector: 'ng-template[comTabContent]',
|
|
@@ -303,7 +307,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
303
307
|
* Individual tab definition component.
|
|
304
308
|
*
|
|
305
309
|
* This is a **definition component** — it doesn't render anything itself.
|
|
306
|
-
* It provides a label and content template to the parent `
|
|
310
|
+
* It provides a label and content template to the parent `ComTabGroup`.
|
|
311
|
+
*
|
|
312
|
+
* @tokens none
|
|
307
313
|
*
|
|
308
314
|
* @example Basic usage
|
|
309
315
|
* ```html
|
|
@@ -339,7 +345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
339
345
|
* </com-tab>
|
|
340
346
|
* ```
|
|
341
347
|
*/
|
|
342
|
-
class
|
|
348
|
+
class ComTab {
|
|
343
349
|
// ─── Inputs ───
|
|
344
350
|
/** Plain text label; ignored if `[comTabLabel]` template is provided. */
|
|
345
351
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
@@ -352,13 +358,13 @@ class TabComponent {
|
|
|
352
358
|
closed = output();
|
|
353
359
|
// ─── Template References ───
|
|
354
360
|
/** Custom label template (queried from content). */
|
|
355
|
-
customLabel = contentChild(
|
|
361
|
+
customLabel = contentChild(ComTabLabel, ...(ngDevMode ? [{ debugName: "customLabel" }] : []));
|
|
356
362
|
/** Lazy content template (queried from content). */
|
|
357
|
-
lazyContent = contentChild(
|
|
363
|
+
lazyContent = contentChild(ComTabContent, ...(ngDevMode ? [{ debugName: "lazyContent" }] : []));
|
|
358
364
|
/** Implicit content template from ng-content. */
|
|
359
365
|
implicitContent = viewChild('implicitContent', ...(ngDevMode ? [{ debugName: "implicitContent" }] : []));
|
|
360
|
-
// ─── State (set by parent
|
|
361
|
-
/** Whether this tab is currently active. Set by
|
|
366
|
+
// ─── State (set by parent ComTabGroup) ───
|
|
367
|
+
/** Whether this tab is currently active. Set by ComTabGroup. */
|
|
362
368
|
isActive = signal(false, ...(ngDevMode ? [{ debugName: "isActive" }] : []));
|
|
363
369
|
/** Whether this tab content has been rendered at least once. */
|
|
364
370
|
hasBeenActivated = signal(false, ...(ngDevMode ? [{ debugName: "hasBeenActivated" }] : []));
|
|
@@ -376,14 +382,14 @@ class TabComponent {
|
|
|
376
382
|
* Whether this tab uses lazy loading.
|
|
377
383
|
*/
|
|
378
384
|
isLazy = computed(() => !!this.lazyContent(), ...(ngDevMode ? [{ debugName: "isLazy" }] : []));
|
|
379
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
380
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type:
|
|
385
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTab, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
386
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: ComTab, isStandalone: true, selector: "com-tab", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, queries: [{ propertyName: "customLabel", first: true, predicate: ComTabLabel, descendants: true, isSignal: true }, { propertyName: "lazyContent", first: true, predicate: ComTabContent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "implicitContent", first: true, predicate: ["implicitContent"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
381
387
|
<ng-template #implicitContent>
|
|
382
388
|
<ng-content />
|
|
383
389
|
</ng-template>
|
|
384
390
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
385
391
|
}
|
|
386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
392
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTab, decorators: [{
|
|
387
393
|
type: Component,
|
|
388
394
|
args: [{
|
|
389
395
|
selector: 'com-tab',
|
|
@@ -394,7 +400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
394
400
|
`,
|
|
395
401
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
396
402
|
}]
|
|
397
|
-
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], customLabel: [{ type: i0.ContentChild, args: [i0.forwardRef(() =>
|
|
403
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], customLabel: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComTabLabel), { isSignal: true }] }], lazyContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComTabContent), { isSignal: true }] }], implicitContent: [{ type: i0.ViewChild, args: ['implicitContent', { isSignal: true }] }] } });
|
|
398
404
|
|
|
399
405
|
let tabIdCounter = 0;
|
|
400
406
|
/**
|
|
@@ -410,9 +416,13 @@ function generateTabId() {
|
|
|
410
416
|
* Handles overflow detection, scroll buttons, keyboard navigation,
|
|
411
417
|
* and the active indicator (for underline variant).
|
|
412
418
|
*
|
|
419
|
+
* @tokens `--color-primary`, `--color-accent`, `--color-foreground`, `--color-muted-foreground`,
|
|
420
|
+
* `--color-muted`, `--color-border`, `--color-background`, `--color-ring`,
|
|
421
|
+
* `--color-disabled`, `--color-disabled-foreground`
|
|
422
|
+
*
|
|
413
423
|
* @internal Not exported in public API.
|
|
414
424
|
*/
|
|
415
|
-
class
|
|
425
|
+
class ComTabHeader {
|
|
416
426
|
destroyRef = inject(DestroyRef);
|
|
417
427
|
// ─── Inputs ───
|
|
418
428
|
tabs = input.required(...(ngDevMode ? [{ debugName: "tabs" }] : []));
|
|
@@ -559,13 +569,14 @@ class TabHeaderComponent {
|
|
|
559
569
|
event.preventDefault();
|
|
560
570
|
break;
|
|
561
571
|
case 'Enter':
|
|
562
|
-
case ' ':
|
|
572
|
+
case ' ': {
|
|
563
573
|
const activeIndex = this.keyManager.activeItemIndex;
|
|
564
574
|
if (activeIndex !== null && activeIndex >= 0) {
|
|
565
575
|
this.selectTab(activeIndex);
|
|
566
576
|
}
|
|
567
577
|
event.preventDefault();
|
|
568
578
|
break;
|
|
579
|
+
}
|
|
569
580
|
}
|
|
570
581
|
}
|
|
571
582
|
// ─── Private Methods ───
|
|
@@ -609,6 +620,8 @@ class TabHeaderComponent {
|
|
|
609
620
|
const button = buttons[index]?.nativeElement;
|
|
610
621
|
if (!button)
|
|
611
622
|
return;
|
|
623
|
+
if (!container.getBoundingClientRect || !button.getBoundingClientRect)
|
|
624
|
+
return;
|
|
612
625
|
const containerRect = container.getBoundingClientRect();
|
|
613
626
|
const buttonRect = button.getBoundingClientRect();
|
|
614
627
|
if (buttonRect.left < containerRect.left) {
|
|
@@ -640,8 +653,8 @@ class TabHeaderComponent {
|
|
|
640
653
|
disabled: tabs[index]?.disabled() ?? false,
|
|
641
654
|
}));
|
|
642
655
|
}
|
|
643
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
644
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
656
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
657
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComTabHeader, isStandalone: true, selector: "com-tab-header", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, baseId: { classPropertyName: "baseId", publicName: "baseId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { tabSelected: "tabSelected", tabFocused: "tabFocused", tabClosed: "tabClosed" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }, { propertyName: "tabButtons", predicate: ["tabButton"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
645
658
|
<!-- Scroll button left -->
|
|
646
659
|
@if (showScrollLeft()) {
|
|
647
660
|
<button
|
|
@@ -671,6 +684,7 @@ class TabHeaderComponent {
|
|
|
671
684
|
class="flex overflow-x-auto scrollbar-none"
|
|
672
685
|
[class]="headerClasses()"
|
|
673
686
|
role="tablist"
|
|
687
|
+
tabindex="-1"
|
|
674
688
|
[attr.aria-orientation]="'horizontal'"
|
|
675
689
|
(scroll)="onScroll()"
|
|
676
690
|
(keydown)="onKeydown($event)"
|
|
@@ -690,6 +704,7 @@ class TabHeaderComponent {
|
|
|
690
704
|
[tabindex]="selectedIndex() === i ? 0 : -1"
|
|
691
705
|
(click)="selectTab(i)"
|
|
692
706
|
(focus)="onTabFocus(i)"
|
|
707
|
+
(keydown.delete)="tab.closable() && closeTab($event, i)"
|
|
693
708
|
>
|
|
694
709
|
@if (tab.labelTemplate()) {
|
|
695
710
|
<ng-container [ngTemplateOutlet]="tab.labelTemplate()!" />
|
|
@@ -699,10 +714,9 @@ class TabHeaderComponent {
|
|
|
699
714
|
|
|
700
715
|
@if (tab.closable()) {
|
|
701
716
|
<span
|
|
702
|
-
|
|
717
|
+
aria-hidden="true"
|
|
703
718
|
[class]="closeButtonClasses()"
|
|
704
719
|
(click)="closeTab($event, i)"
|
|
705
|
-
[attr.aria-label]="'Close ' + tab.label()"
|
|
706
720
|
>
|
|
707
721
|
<svg
|
|
708
722
|
viewBox="0 0 24 24"
|
|
@@ -724,7 +738,7 @@ class TabHeaderComponent {
|
|
|
724
738
|
<!-- Active indicator (underline variant only) -->
|
|
725
739
|
@if (variant() === 'underline') {
|
|
726
740
|
<div
|
|
727
|
-
class="absolute bottom-0 h-0.5 bg-current transition-all duration-
|
|
741
|
+
class="absolute bottom-0 h-0.5 bg-current transition-all duration-slow ease-out"
|
|
728
742
|
[class]="indicatorColorClass()"
|
|
729
743
|
[style.left.px]="indicatorLeft()"
|
|
730
744
|
[style.width.px]="indicatorWidth()"
|
|
@@ -756,7 +770,7 @@ class TabHeaderComponent {
|
|
|
756
770
|
}
|
|
757
771
|
`, isInline: true, styles: [":host{display:block;position:relative}.scrollbar-none{scrollbar-width:none;-ms-overflow-style:none}.scrollbar-none::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
758
772
|
}
|
|
759
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabHeader, decorators: [{
|
|
760
774
|
type: Component,
|
|
761
775
|
args: [{ selector: 'com-tab-header', template: `
|
|
762
776
|
<!-- Scroll button left -->
|
|
@@ -788,6 +802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
788
802
|
class="flex overflow-x-auto scrollbar-none"
|
|
789
803
|
[class]="headerClasses()"
|
|
790
804
|
role="tablist"
|
|
805
|
+
tabindex="-1"
|
|
791
806
|
[attr.aria-orientation]="'horizontal'"
|
|
792
807
|
(scroll)="onScroll()"
|
|
793
808
|
(keydown)="onKeydown($event)"
|
|
@@ -807,6 +822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
807
822
|
[tabindex]="selectedIndex() === i ? 0 : -1"
|
|
808
823
|
(click)="selectTab(i)"
|
|
809
824
|
(focus)="onTabFocus(i)"
|
|
825
|
+
(keydown.delete)="tab.closable() && closeTab($event, i)"
|
|
810
826
|
>
|
|
811
827
|
@if (tab.labelTemplate()) {
|
|
812
828
|
<ng-container [ngTemplateOutlet]="tab.labelTemplate()!" />
|
|
@@ -816,10 +832,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
816
832
|
|
|
817
833
|
@if (tab.closable()) {
|
|
818
834
|
<span
|
|
819
|
-
|
|
835
|
+
aria-hidden="true"
|
|
820
836
|
[class]="closeButtonClasses()"
|
|
821
837
|
(click)="closeTab($event, i)"
|
|
822
|
-
[attr.aria-label]="'Close ' + tab.label()"
|
|
823
838
|
>
|
|
824
839
|
<svg
|
|
825
840
|
viewBox="0 0 24 24"
|
|
@@ -841,7 +856,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
841
856
|
<!-- Active indicator (underline variant only) -->
|
|
842
857
|
@if (variant() === 'underline') {
|
|
843
858
|
<div
|
|
844
|
-
class="absolute bottom-0 h-0.5 bg-current transition-all duration-
|
|
859
|
+
class="absolute bottom-0 h-0.5 bg-current transition-all duration-slow ease-out"
|
|
845
860
|
[class]="indicatorColorClass()"
|
|
846
861
|
[style.left.px]="indicatorLeft()"
|
|
847
862
|
[style.width.px]="indicatorWidth()"
|
|
@@ -921,7 +936,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
921
936
|
* </com-tab-group>
|
|
922
937
|
* ```
|
|
923
938
|
*/
|
|
924
|
-
class
|
|
939
|
+
class ComTabGroup {
|
|
925
940
|
/** Unique ID for this tab group instance. */
|
|
926
941
|
baseId = generateTabId();
|
|
927
942
|
// ─── Inputs ───
|
|
@@ -945,8 +960,8 @@ class TabGroupComponent {
|
|
|
945
960
|
/** Emits the index of the focused (not yet selected) tab for keyboard navigation feedback. */
|
|
946
961
|
focusChange = output();
|
|
947
962
|
// ─── Content Children ───
|
|
948
|
-
/** All
|
|
949
|
-
tabs = contentChildren(
|
|
963
|
+
/** All ComTab children. */
|
|
964
|
+
tabs = contentChildren(ComTab, ...(ngDevMode ? [{ debugName: "tabs" }] : []));
|
|
950
965
|
// ─── Computed ───
|
|
951
966
|
/** The currently active tab. */
|
|
952
967
|
activeTab = computed(() => this.tabs()[this.selectedIndex()], ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
|
|
@@ -982,7 +997,7 @@ class TabGroupComponent {
|
|
|
982
997
|
* Determines whether a tab's content should be rendered.
|
|
983
998
|
* For lazy tabs, content is only rendered after first activation.
|
|
984
999
|
*/
|
|
985
|
-
shouldRenderTab(tab,
|
|
1000
|
+
shouldRenderTab(tab, _index) {
|
|
986
1001
|
// Non-lazy tabs always render their content
|
|
987
1002
|
if (!tab.isLazy()) {
|
|
988
1003
|
return true;
|
|
@@ -1007,8 +1022,8 @@ class TabGroupComponent {
|
|
|
1007
1022
|
tab.closed.emit();
|
|
1008
1023
|
}
|
|
1009
1024
|
}
|
|
1010
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1011
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1025
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1026
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComTabGroup, isStandalone: true, selector: "com-tab-group", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, animationEnabled: { classPropertyName: "animationEnabled", publicName: "animationEnabled", isSignal: true, isRequired: false, transformFunction: null }, preserveContent: { classPropertyName: "preserveContent", publicName: "preserveContent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange", selectedTabChange: "selectedTabChange", focusChange: "focusChange" }, host: { classAttribute: "com-tab-group" }, queries: [{ propertyName: "tabs", predicate: ComTab, isSignal: true }], ngImport: i0, template: `
|
|
1012
1027
|
<com-tab-header
|
|
1013
1028
|
[tabs]="tabs()"
|
|
1014
1029
|
[selectedIndex]="selectedIndex()"
|
|
@@ -1053,9 +1068,9 @@ class TabGroupComponent {
|
|
|
1053
1068
|
}
|
|
1054
1069
|
}
|
|
1055
1070
|
</div>
|
|
1056
|
-
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type:
|
|
1071
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: ComTabHeader, selector: "com-tab-header", inputs: ["tabs", "selectedIndex", "variant", "size", "color", "alignment", "baseId"], outputs: ["tabSelected", "tabFocused", "tabClosed"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1057
1072
|
}
|
|
1058
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1073
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabGroup, decorators: [{
|
|
1059
1074
|
type: Component,
|
|
1060
1075
|
args: [{ selector: 'com-tab-group', template: `
|
|
1061
1076
|
<com-tab-header
|
|
@@ -1102,10 +1117,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1102
1117
|
}
|
|
1103
1118
|
}
|
|
1104
1119
|
</div>
|
|
1105
|
-
`, imports: [
|
|
1120
|
+
`, imports: [ComTabHeader, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1106
1121
|
class: 'com-tab-group',
|
|
1107
1122
|
}, styles: [":host{display:block}\n"] }]
|
|
1108
|
-
}], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], animationEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationEnabled", required: false }] }], preserveContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "preserveContent", required: false }] }], selectedTabChange: [{ type: i0.Output, args: ["selectedTabChange"] }], focusChange: [{ type: i0.Output, args: ["focusChange"] }], tabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
1123
|
+
}], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], animationEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationEnabled", required: false }] }], preserveContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "preserveContent", required: false }] }], selectedTabChange: [{ type: i0.Output, args: ["selectedTabChange"] }], focusChange: [{ type: i0.Output, args: ["focusChange"] }], tabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ComTab), { isSignal: true }] }] } });
|
|
1109
1124
|
|
|
1110
1125
|
/**
|
|
1111
1126
|
* Tab link directive for route-driven navigation tabs.
|
|
@@ -1113,6 +1128,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1113
1128
|
* Applied to anchor or button elements inside `com-tab-nav-bar`.
|
|
1114
1129
|
* Automatically detects active state from `routerLinkActive` if present.
|
|
1115
1130
|
*
|
|
1131
|
+
* @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-subtle`,
|
|
1132
|
+
* `--color-accent`, `--color-accent-foreground`, `--color-accent-subtle`,
|
|
1133
|
+
* `--color-foreground`, `--color-muted-foreground`, `--color-muted`,
|
|
1134
|
+
* `--color-border`, `--color-ring`,
|
|
1135
|
+
* `--color-disabled`, `--color-disabled-foreground`
|
|
1136
|
+
*
|
|
1116
1137
|
* @example Basic usage with router
|
|
1117
1138
|
* ```html
|
|
1118
1139
|
* <nav com-tab-nav-bar>
|
|
@@ -1131,7 +1152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1131
1152
|
* <a comTabLink [disabled]="true">Coming Soon</a>
|
|
1132
1153
|
* ```
|
|
1133
1154
|
*/
|
|
1134
|
-
class
|
|
1155
|
+
class ComTabLink {
|
|
1135
1156
|
routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });
|
|
1136
1157
|
elementRef = inject(ElementRef);
|
|
1137
1158
|
// ─── Inputs ───
|
|
@@ -1176,10 +1197,10 @@ class TabLinkDirective {
|
|
|
1176
1197
|
focus() {
|
|
1177
1198
|
this.elementRef.nativeElement.focus();
|
|
1178
1199
|
}
|
|
1179
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1180
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
1200
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabLink, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1201
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComTabLink, isStandalone: true, selector: "a[comTabLink], button[comTabLink]", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "tab" }, properties: { "class": "computedClass()", "attr.aria-selected": "isActive()", "attr.aria-disabled": "disabled() || null", "attr.data-state": "isActive() ? \"active\" : \"inactive\"", "tabindex": "isActive() ? 0 : -1" } }, ngImport: i0 });
|
|
1181
1202
|
}
|
|
1182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabLink, decorators: [{
|
|
1183
1204
|
type: Directive,
|
|
1184
1205
|
args: [{
|
|
1185
1206
|
selector: 'a[comTabLink], button[comTabLink]',
|
|
@@ -1220,7 +1241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1220
1241
|
* </nav>
|
|
1221
1242
|
* ```
|
|
1222
1243
|
*/
|
|
1223
|
-
class
|
|
1244
|
+
class ComTabNavBar {
|
|
1224
1245
|
destroyRef = inject(DestroyRef);
|
|
1225
1246
|
/** Unique ID for this nav bar instance. */
|
|
1226
1247
|
baseId = generateTabId();
|
|
@@ -1234,8 +1255,8 @@ class TabNavBarComponent {
|
|
|
1234
1255
|
/** Tab alignment within the bar. */
|
|
1235
1256
|
alignment = input('start', ...(ngDevMode ? [{ debugName: "alignment" }] : []));
|
|
1236
1257
|
// ─── Content Children ───
|
|
1237
|
-
/** All
|
|
1238
|
-
tabLinks = contentChildren(
|
|
1258
|
+
/** All ComTabLink children. */
|
|
1259
|
+
tabLinks = contentChildren(ComTabLink, ...(ngDevMode ? [{ debugName: "tabLinks" }] : []));
|
|
1239
1260
|
// ─── View Children ───
|
|
1240
1261
|
scrollContainer = viewChild('scrollContainer', ...(ngDevMode ? [{ debugName: "scrollContainer" }] : []));
|
|
1241
1262
|
// ─── State ───
|
|
@@ -1366,8 +1387,8 @@ class TabNavBarComponent {
|
|
|
1366
1387
|
disabled: link.disabled(),
|
|
1367
1388
|
}));
|
|
1368
1389
|
}
|
|
1369
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1370
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1390
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabNavBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1391
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComTabNavBar, isStandalone: true, selector: "com-tab-nav-bar, nav[com-tab-nav-bar]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "com-tab-nav-bar" }, queries: [{ propertyName: "tabLinks", predicate: ComTabLink, isSignal: true }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
1371
1392
|
<!-- Scroll button left -->
|
|
1372
1393
|
@if (showScrollLeft()) {
|
|
1373
1394
|
<button
|
|
@@ -1397,6 +1418,7 @@ class TabNavBarComponent {
|
|
|
1397
1418
|
class="flex overflow-x-auto scrollbar-none"
|
|
1398
1419
|
[class]="headerClasses()"
|
|
1399
1420
|
role="tablist"
|
|
1421
|
+
tabindex="-1"
|
|
1400
1422
|
[attr.aria-orientation]="'horizontal'"
|
|
1401
1423
|
(scroll)="onScroll()"
|
|
1402
1424
|
(keydown)="onKeydown($event)"
|
|
@@ -1406,7 +1428,7 @@ class TabNavBarComponent {
|
|
|
1406
1428
|
<!-- Active indicator (underline variant only) -->
|
|
1407
1429
|
@if (variant() === 'underline' && activeLink()) {
|
|
1408
1430
|
<div
|
|
1409
|
-
class="absolute bottom-0 h-0.5 bg-current transition-all duration-
|
|
1431
|
+
class="absolute bottom-0 h-0.5 bg-current transition-all duration-slow ease-out"
|
|
1410
1432
|
[class]="indicatorColorClass()"
|
|
1411
1433
|
[style.left.px]="indicatorLeft()"
|
|
1412
1434
|
[style.width.px]="indicatorWidth()"
|
|
@@ -1438,7 +1460,7 @@ class TabNavBarComponent {
|
|
|
1438
1460
|
}
|
|
1439
1461
|
`, isInline: true, styles: [":host{display:block;position:relative}.scrollbar-none{scrollbar-width:none;-ms-overflow-style:none}.scrollbar-none::-webkit-scrollbar{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1440
1462
|
}
|
|
1441
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1463
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTabNavBar, decorators: [{
|
|
1442
1464
|
type: Component,
|
|
1443
1465
|
args: [{ selector: 'com-tab-nav-bar, nav[com-tab-nav-bar]', template: `
|
|
1444
1466
|
<!-- Scroll button left -->
|
|
@@ -1470,6 +1492,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1470
1492
|
class="flex overflow-x-auto scrollbar-none"
|
|
1471
1493
|
[class]="headerClasses()"
|
|
1472
1494
|
role="tablist"
|
|
1495
|
+
tabindex="-1"
|
|
1473
1496
|
[attr.aria-orientation]="'horizontal'"
|
|
1474
1497
|
(scroll)="onScroll()"
|
|
1475
1498
|
(keydown)="onKeydown($event)"
|
|
@@ -1479,7 +1502,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1479
1502
|
<!-- Active indicator (underline variant only) -->
|
|
1480
1503
|
@if (variant() === 'underline' && activeLink()) {
|
|
1481
1504
|
<div
|
|
1482
|
-
class="absolute bottom-0 h-0.5 bg-current transition-all duration-
|
|
1505
|
+
class="absolute bottom-0 h-0.5 bg-current transition-all duration-slow ease-out"
|
|
1483
1506
|
[class]="indicatorColorClass()"
|
|
1484
1507
|
[style.left.px]="indicatorLeft()"
|
|
1485
1508
|
[style.width.px]="indicatorWidth()"
|
|
@@ -1512,7 +1535,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1512
1535
|
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1513
1536
|
class: 'com-tab-nav-bar',
|
|
1514
1537
|
}, styles: [":host{display:block;position:relative}.scrollbar-none{scrollbar-width:none;-ms-overflow-style:none}.scrollbar-none::-webkit-scrollbar{display:none}\n"] }]
|
|
1515
|
-
}], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], tabLinks: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
1538
|
+
}], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], tabLinks: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ComTabLink), { isSignal: true }] }], scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }] } });
|
|
1516
1539
|
|
|
1517
1540
|
// Public API for the tabs component
|
|
1518
1541
|
// Variants (for advanced customization)
|
|
@@ -1521,5 +1544,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1521
1544
|
* Generated bundle index. Do not edit.
|
|
1522
1545
|
*/
|
|
1523
1546
|
|
|
1524
|
-
export {
|
|
1547
|
+
export { ComTab, ComTabContent, ComTabGroup, ComTabLabel, ComTabLink, ComTabNavBar, tabCloseButtonVariants, tabHeaderVariants, tabItemVariants, tabPanelVariants, tabScrollButtonVariants };
|
|
1525
1548
|
//# sourceMappingURL=ngx-com-components-tabs.mjs.map
|