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.
Files changed (114) hide show
  1. package/README.md +137 -33
  2. package/fesm2022/ngx-com-components-alert.mjs +21 -11
  3. package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
  4. package/fesm2022/ngx-com-components-avatar.mjs +9 -7
  5. package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
  6. package/fesm2022/ngx-com-components-button.mjs +1 -1
  7. package/fesm2022/ngx-com-components-button.mjs.map +1 -1
  8. package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
  9. package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
  10. package/fesm2022/ngx-com-components-card.mjs +8 -8
  11. package/fesm2022/ngx-com-components-card.mjs.map +1 -1
  12. package/fesm2022/ngx-com-components-carousel.mjs +16 -4
  13. package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
  14. package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
  15. package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
  16. package/fesm2022/ngx-com-components-code-block.mjs +9 -9
  17. package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
  18. package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
  19. package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
  20. package/fesm2022/ngx-com-components-confirm.mjs +4 -4
  21. package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
  22. package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
  23. package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
  24. package/fesm2022/ngx-com-components-dialog.mjs +47 -45
  25. package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
  26. package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
  27. package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
  28. package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
  29. package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
  30. package/fesm2022/ngx-com-components-form-field.mjs +11 -6
  31. package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
  32. package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
  33. package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
  34. package/fesm2022/ngx-com-components-icon.mjs +89 -61
  35. package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
  36. package/fesm2022/ngx-com-components-item.mjs +14 -4
  37. package/fesm2022/ngx-com-components-item.mjs.map +1 -1
  38. package/fesm2022/ngx-com-components-menu.mjs +61 -69
  39. package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
  40. package/fesm2022/ngx-com-components-native-control.mjs +170 -0
  41. package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
  42. package/fesm2022/ngx-com-components-paginator.mjs +11 -3
  43. package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
  44. package/fesm2022/ngx-com-components-popover.mjs +58 -33
  45. package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
  46. package/fesm2022/ngx-com-components-radio.mjs +4 -4
  47. package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
  48. package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
  49. package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
  50. package/fesm2022/ngx-com-components-sort.mjs +63 -57
  51. package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
  52. package/fesm2022/ngx-com-components-spinner.mjs +6 -6
  53. package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
  54. package/fesm2022/ngx-com-components-switch.mjs +18 -9
  55. package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
  56. package/fesm2022/ngx-com-components-table.mjs +23 -9
  57. package/fesm2022/ngx-com-components-table.mjs.map +1 -1
  58. package/fesm2022/ngx-com-components-tabs.mjs +81 -58
  59. package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
  60. package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
  61. package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
  62. package/fesm2022/ngx-com-components-toast.mjs +18 -14
  63. package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
  64. package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
  65. package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
  66. package/fesm2022/ngx-com-components.mjs +0 -13
  67. package/fesm2022/ngx-com-components.mjs.map +1 -1
  68. package/fesm2022/ngx-com-tokens.mjs +0 -8
  69. package/fesm2022/ngx-com-tokens.mjs.map +1 -1
  70. package/fesm2022/ngx-com-utils.mjs +13 -1
  71. package/fesm2022/ngx-com-utils.mjs.map +1 -1
  72. package/fesm2022/ngx-com.mjs +1 -1
  73. package/fesm2022/ngx-com.mjs.map +1 -1
  74. package/package.json +51 -8
  75. package/styles/animations.css +38 -0
  76. package/styles/candy.css +121 -0
  77. package/styles/dark.css +159 -0
  78. package/styles/forest.css +117 -0
  79. package/styles/ocean.css +117 -0
  80. package/styles/themes.css +7 -0
  81. package/styles/tokens.css +277 -0
  82. package/styles/utilities.css +16 -0
  83. package/types/ngx-com-components-alert.d.ts +14 -4
  84. package/types/ngx-com-components-avatar.d.ts +2 -0
  85. package/types/ngx-com-components-calendar.d.ts +3 -747
  86. package/types/ngx-com-components-card.d.ts +2 -2
  87. package/types/ngx-com-components-carousel.d.ts +11 -1
  88. package/types/ngx-com-components-code-block.d.ts +4 -4
  89. package/types/ngx-com-components-collapsible.d.ts +10 -2
  90. package/types/ngx-com-components-confirm.d.ts +2 -2
  91. package/types/ngx-com-components-datepicker.d.ts +623 -0
  92. package/types/ngx-com-components-dialog.d.ts +5 -2
  93. package/types/ngx-com-components-dropdown.d.ts +22 -4
  94. package/types/ngx-com-components-empty-state.d.ts +2 -0
  95. package/types/ngx-com-components-form-field.d.ts +4 -1
  96. package/types/ngx-com-components-icon-lucide.d.ts +32 -0
  97. package/types/ngx-com-components-icon.d.ts +49 -35
  98. package/types/ngx-com-components-item.d.ts +12 -2
  99. package/types/ngx-com-components-menu.d.ts +38 -38
  100. package/types/ngx-com-components-native-control.d.ts +99 -0
  101. package/types/ngx-com-components-paginator.d.ts +2 -0
  102. package/types/ngx-com-components-popover.d.ts +19 -12
  103. package/types/ngx-com-components-segmented-control.d.ts +3 -1
  104. package/types/ngx-com-components-sort.d.ts +13 -10
  105. package/types/ngx-com-components-switch.d.ts +7 -2
  106. package/types/ngx-com-components-table.d.ts +16 -2
  107. package/types/ngx-com-components-tabs.d.ts +46 -34
  108. package/types/ngx-com-components-timepicker.d.ts +273 -0
  109. package/types/ngx-com-components-toast.d.ts +4 -2
  110. package/types/ngx-com-components-tooltip.d.ts +1 -1
  111. package/types/ngx-com-components.d.ts +6 -7
  112. package/types/ngx-com-tokens.d.ts +5 -3
  113. package/types/ngx-com-utils.d.ts +11 -1
  114. package/types/ngx-com.d.ts +1 -1
@@ -7,6 +7,8 @@ import { VariantProps } from 'class-variance-authority';
7
7
  *
8
8
  * Use with the star syntax inside a `comColumnDef` container.
9
9
  *
10
+ * @tokens none
11
+ *
10
12
  * @example
11
13
  * ```html
12
14
  * <ng-container comColumnDef="name">
@@ -32,6 +34,8 @@ interface CellDefContext<T> {
32
34
  *
33
35
  * Use with the star syntax inside a `comColumnDef` container.
34
36
  *
37
+ * @tokens none
38
+ *
35
39
  * @example
36
40
  * ```html
37
41
  * <ng-container comColumnDef="name">
@@ -51,6 +55,8 @@ declare class ComCellDef<T = unknown> {
51
55
  *
52
56
  * Use with the star syntax inside a `comColumnDef` container.
53
57
  *
58
+ * @tokens none
59
+ *
54
60
  * @example
55
61
  * ```html
56
62
  * <ng-container comColumnDef="amount">
@@ -71,6 +77,8 @@ declare class ComFooterCellDef {
71
77
  *
72
78
  * Contains a header cell template, a body cell template, and an optional footer cell template.
73
79
  *
80
+ * @tokens none
81
+ *
74
82
  * @example
75
83
  * ```html
76
84
  * <ng-container comColumnDef="name">
@@ -95,6 +103,8 @@ declare class ComColumnDef {
95
103
  /**
96
104
  * Defines which columns appear in the header row and their order.
97
105
  *
106
+ * @tokens none
107
+ *
98
108
  * @example
99
109
  * ```html
100
110
  * <tr comHeaderRowDef="['name', 'email', 'role']"></tr>
@@ -117,6 +127,8 @@ declare class ComHeaderRowDef {
117
127
  /**
118
128
  * Defines which columns appear in each body row and their order.
119
129
  *
130
+ * @tokens none
131
+ *
120
132
  * @example
121
133
  * ```html
122
134
  * <tr comRowDef [comRowDefColumns]="['name', 'email', 'role']"></tr>
@@ -132,6 +144,8 @@ declare class ComRowDef {
132
144
  /**
133
145
  * Defines which columns appear in the footer row and their order.
134
146
  *
147
+ * @tokens none
148
+ *
135
149
  * @example
136
150
  * ```html
137
151
  * <tr comFooterRowDef="['description', 'amount']"></tr>
@@ -149,6 +163,8 @@ declare class ComFooterRowDef {
149
163
  *
150
164
  * Place inside `com-table`. The template receives the column count for colspan.
151
165
  *
166
+ * @tokens none
167
+ *
152
168
  * @example
153
169
  * ```html
154
170
  * <com-table [dataSource]="data()">
@@ -350,8 +366,6 @@ declare class ComTable<T> {
350
366
  /** @internal Map of column name → column definition for O(1) lookup. */
351
367
  protected readonly columnDefMap: Signal<Map<string, ComColumnDef>>;
352
368
  /** @internal Resolved render data — handles both array and DataSource inputs. */
353
- private readonly dataSourceSignal;
354
- /** @internal The actual data array to render. */
355
369
  readonly renderData: Signal<readonly T[]>;
356
370
  /** @internal Header column names. */
357
371
  protected readonly headerColumns: Signal<string[]>;
@@ -6,7 +6,9 @@ import { VariantProps } from 'class-variance-authority';
6
6
  * Marker directive for custom tab label templates.
7
7
  *
8
8
  * Provides a custom label template for rich tab headers (icons, badges, counters).
9
- * Applied to an `<ng-template>` inside `<ui-tab>`.
9
+ * Applied to an `<ng-template>` inside `<com-tab>`.
10
+ *
11
+ * @tokens none
10
12
  *
11
13
  * @example
12
14
  * ```html
@@ -20,11 +22,11 @@ import { VariantProps } from 'class-variance-authority';
20
22
  * </com-tab>
21
23
  * ```
22
24
  */
23
- declare class TabLabelDirective {
25
+ declare class ComTabLabel {
24
26
  readonly templateRef: TemplateRef<void>;
25
- static ngTemplateContextGuard(_dir: TabLabelDirective, ctx: unknown): ctx is void;
26
- static ɵfac: i0.ɵɵFactoryDeclaration<TabLabelDirective, never>;
27
- static ɵdir: i0.ɵɵDirectiveDeclaration<TabLabelDirective, "ng-template[comTabLabel]", never, {}, {}, never, never, true, never>;
27
+ static ngTemplateContextGuard(_dir: ComTabLabel, ctx: unknown): ctx is void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTabLabel, never>;
29
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ComTabLabel, "ng-template[comTabLabel]", never, {}, {}, never, never, true, never>;
28
30
  }
29
31
 
30
32
  /**
@@ -33,6 +35,8 @@ declare class TabLabelDirective {
33
35
  * Content wrapped in `<ng-template comTabContent>` is only instantiated
34
36
  * when the tab becomes active for the first time.
35
37
  *
38
+ * @tokens none
39
+ *
36
40
  * @example Lazy loaded content
37
41
  * ```html
38
42
  * <com-tab label="Analytics">
@@ -55,18 +59,20 @@ declare class TabLabelDirective {
55
59
  * </com-tab>
56
60
  * ```
57
61
  */
58
- declare class TabContentDirective {
62
+ declare class ComTabContent {
59
63
  readonly templateRef: TemplateRef<void>;
60
- static ngTemplateContextGuard(_dir: TabContentDirective, ctx: unknown): ctx is void;
61
- static ɵfac: i0.ɵɵFactoryDeclaration<TabContentDirective, never>;
62
- static ɵdir: i0.ɵɵDirectiveDeclaration<TabContentDirective, "ng-template[comTabContent]", never, {}, {}, never, never, true, never>;
64
+ static ngTemplateContextGuard(_dir: ComTabContent, ctx: unknown): ctx is void;
65
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTabContent, never>;
66
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ComTabContent, "ng-template[comTabContent]", never, {}, {}, never, never, true, never>;
63
67
  }
64
68
 
65
69
  /**
66
70
  * Individual tab definition component.
67
71
  *
68
72
  * This is a **definition component** — it doesn't render anything itself.
69
- * It provides a label and content template to the parent `TabGroupComponent`.
73
+ * It provides a label and content template to the parent `ComTabGroup`.
74
+ *
75
+ * @tokens none
70
76
  *
71
77
  * @example Basic usage
72
78
  * ```html
@@ -102,7 +108,7 @@ declare class TabContentDirective {
102
108
  * </com-tab>
103
109
  * ```
104
110
  */
105
- declare class TabComponent {
111
+ declare class ComTab {
106
112
  /** Plain text label; ignored if `[comTabLabel]` template is provided. */
107
113
  readonly label: InputSignal<string>;
108
114
  /** Prevents selection when true. */
@@ -112,12 +118,12 @@ declare class TabComponent {
112
118
  /** Emitted when the close button is clicked. */
113
119
  readonly closed: OutputEmitterRef<void>;
114
120
  /** Custom label template (queried from content). */
115
- readonly customLabel: Signal<TabLabelDirective | undefined>;
121
+ readonly customLabel: Signal<ComTabLabel | undefined>;
116
122
  /** Lazy content template (queried from content). */
117
- readonly lazyContent: Signal<TabContentDirective | undefined>;
123
+ readonly lazyContent: Signal<ComTabContent | undefined>;
118
124
  /** Implicit content template from ng-content. */
119
125
  readonly implicitContent: Signal<TemplateRef<unknown> | undefined>;
120
- /** Whether this tab is currently active. Set by TabGroupComponent. */
126
+ /** Whether this tab is currently active. Set by ComTabGroup. */
121
127
  readonly isActive: WritableSignal<boolean>;
122
128
  /** Whether this tab content has been rendered at least once. */
123
129
  readonly hasBeenActivated: WritableSignal<boolean>;
@@ -134,8 +140,8 @@ declare class TabComponent {
134
140
  * Whether this tab uses lazy loading.
135
141
  */
136
142
  readonly isLazy: Signal<boolean>;
137
- static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
138
- static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "com-tab", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, ["customLabel", "lazyContent"], ["*"], true, never>;
143
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTab, never>;
144
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComTab, "com-tab", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, ["customLabel", "lazyContent"], ["*"], true, never>;
139
145
  }
140
146
 
141
147
  type TabVariant = 'underline' | 'pill' | 'outline' | 'solid';
@@ -174,7 +180,7 @@ type TabPanelVariants = VariantProps<typeof tabPanelVariants>;
174
180
  /** Event emitted when the selected tab changes. */
175
181
  interface TabChangeEvent {
176
182
  index: number;
177
- tab: TabComponent;
183
+ tab: ComTab;
178
184
  }
179
185
  /**
180
186
  * Tab group component — orchestrates tab state and renders header + panels.
@@ -223,7 +229,7 @@ interface TabChangeEvent {
223
229
  * </com-tab-group>
224
230
  * ```
225
231
  */
226
- declare class TabGroupComponent {
232
+ declare class ComTabGroup {
227
233
  /** Unique ID for this tab group instance. */
228
234
  readonly baseId: string;
229
235
  /** Visual treatment of tab buttons. */
@@ -244,10 +250,10 @@ declare class TabGroupComponent {
244
250
  readonly selectedTabChange: OutputEmitterRef<TabChangeEvent>;
245
251
  /** Emits the index of the focused (not yet selected) tab for keyboard navigation feedback. */
246
252
  readonly focusChange: OutputEmitterRef<number>;
247
- /** All TabComponent children. */
248
- readonly tabs: Signal<readonly TabComponent[]>;
253
+ /** All ComTab children. */
254
+ readonly tabs: Signal<readonly ComTab[]>;
249
255
  /** The currently active tab. */
250
- readonly activeTab: Signal<TabComponent | undefined>;
256
+ readonly activeTab: Signal<ComTab | undefined>;
251
257
  /** ID of the active tab button. */
252
258
  readonly activeTabId: Signal<string>;
253
259
  /** ID of the active panel. */
@@ -261,12 +267,12 @@ declare class TabGroupComponent {
261
267
  * Determines whether a tab's content should be rendered.
262
268
  * For lazy tabs, content is only rendered after first activation.
263
269
  */
264
- shouldRenderTab(tab: TabComponent, index: number): boolean;
270
+ shouldRenderTab(tab: ComTab, _index: number): boolean;
265
271
  protected onTabSelected(index: number): void;
266
272
  protected onTabFocused(index: number): void;
267
273
  protected onTabClosed(index: number): void;
268
- static ɵfac: i0.ɵɵFactoryDeclaration<TabGroupComponent, never>;
269
- static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "com-tab-group", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "animationEnabled": { "alias": "animationEnabled"; "required": false; "isSignal": true; }; "preserveContent": { "alias": "preserveContent"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "selectedTabChange": "selectedTabChange"; "focusChange": "focusChange"; }, ["tabs"], never, true, never>;
274
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTabGroup, never>;
275
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComTabGroup, "com-tab-group", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "animationEnabled": { "alias": "animationEnabled"; "required": false; "isSignal": true; }; "preserveContent": { "alias": "preserveContent"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "selectedTabChange": "selectedTabChange"; "focusChange": "focusChange"; }, ["tabs"], never, true, never>;
270
276
  }
271
277
 
272
278
  /**
@@ -275,6 +281,12 @@ declare class TabGroupComponent {
275
281
  * Applied to anchor or button elements inside `com-tab-nav-bar`.
276
282
  * Automatically detects active state from `routerLinkActive` if present.
277
283
  *
284
+ * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-subtle`,
285
+ * `--color-accent`, `--color-accent-foreground`, `--color-accent-subtle`,
286
+ * `--color-foreground`, `--color-muted-foreground`, `--color-muted`,
287
+ * `--color-border`, `--color-ring`,
288
+ * `--color-disabled`, `--color-disabled-foreground`
289
+ *
278
290
  * @example Basic usage with router
279
291
  * ```html
280
292
  * <nav com-tab-nav-bar>
@@ -293,7 +305,7 @@ declare class TabGroupComponent {
293
305
  * <a comTabLink [disabled]="true">Coming Soon</a>
294
306
  * ```
295
307
  */
296
- declare class TabLinkDirective {
308
+ declare class ComTabLink {
297
309
  private readonly routerLinkActive;
298
310
  private readonly elementRef;
299
311
  /** Manual active state control. */
@@ -321,8 +333,8 @@ declare class TabLinkDirective {
321
333
  readonly computedClass: Signal<string>;
322
334
  /** Focus this tab link element. */
323
335
  focus(): void;
324
- static ɵfac: i0.ɵɵFactoryDeclaration<TabLinkDirective, never>;
325
- static ɵdir: i0.ɵɵDirectiveDeclaration<TabLinkDirective, "a[comTabLink], button[comTabLink]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
336
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTabLink, never>;
337
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ComTabLink, "a[comTabLink], button[comTabLink]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
326
338
  }
327
339
 
328
340
  /**
@@ -351,7 +363,7 @@ declare class TabLinkDirective {
351
363
  * </nav>
352
364
  * ```
353
365
  */
354
- declare class TabNavBarComponent {
366
+ declare class ComTabNavBar {
355
367
  private readonly destroyRef;
356
368
  /** Unique ID for this nav bar instance. */
357
369
  readonly baseId: string;
@@ -363,8 +375,8 @@ declare class TabNavBarComponent {
363
375
  readonly color: InputSignal<TabColor>;
364
376
  /** Tab alignment within the bar. */
365
377
  readonly alignment: InputSignal<TabAlignment>;
366
- /** All TabLinkDirective children. */
367
- readonly tabLinks: Signal<readonly TabLinkDirective[]>;
378
+ /** All ComTabLink children. */
379
+ readonly tabLinks: Signal<readonly ComTabLink[]>;
368
380
  readonly scrollContainer: Signal<ElementRef<HTMLElement> | undefined>;
369
381
  private readonly scrollLeftValue;
370
382
  private readonly containerWidth;
@@ -374,7 +386,7 @@ declare class TabNavBarComponent {
374
386
  private keyManager;
375
387
  private resizeObserver;
376
388
  /** The currently active link. */
377
- readonly activeLink: Signal<TabLinkDirective | undefined>;
389
+ readonly activeLink: Signal<ComTabLink | undefined>;
378
390
  readonly hasOverflow: Signal<boolean>;
379
391
  readonly showScrollLeft: Signal<boolean>;
380
392
  readonly showScrollRight: Signal<boolean>;
@@ -391,9 +403,9 @@ declare class TabNavBarComponent {
391
403
  private updateScrollState;
392
404
  private setupKeyManager;
393
405
  private createKeyManagerItems;
394
- static ɵfac: i0.ɵɵFactoryDeclaration<TabNavBarComponent, never>;
395
- static ɵcmp: i0.ɵɵComponentDeclaration<TabNavBarComponent, "com-tab-nav-bar, nav[com-tab-nav-bar]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; }, {}, ["tabLinks"], ["*"], true, never>;
406
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTabNavBar, never>;
407
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComTabNavBar, "com-tab-nav-bar, nav[com-tab-nav-bar]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; }, {}, ["tabLinks"], ["*"], true, never>;
396
408
  }
397
409
 
398
- export { TabComponent, TabContentDirective, TabGroupComponent, TabLabelDirective, TabLinkDirective, TabNavBarComponent, tabCloseButtonVariants, tabHeaderVariants, tabItemVariants, tabPanelVariants, tabScrollButtonVariants };
410
+ export { ComTab, ComTabContent, ComTabGroup, ComTabLabel, ComTabLink, ComTabNavBar, tabCloseButtonVariants, tabHeaderVariants, tabItemVariants, tabPanelVariants, tabScrollButtonVariants };
399
411
  export type { TabAlignment, TabChangeEvent, TabCloseButtonVariants, TabColor, TabHeaderVariants, TabItemVariants, TabPanelVariants, TabScrollButtonVariants, TabSize, TabVariant };
@@ -0,0 +1,273 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as i0 from '@angular/core';
3
+ import { ModelSignal, InputSignal, OutputEmitterRef, WritableSignal, Signal } from '@angular/core';
4
+ import { ControlValueAccessor, Validator, NgControl, ValidationErrors } from '@angular/forms';
5
+ import { FormFieldControl, ErrorStateMatcher, FormFieldAppearance } from 'ngx-com/components/form-field';
6
+
7
+ /**
8
+ * Types and interfaces for the TimePicker component.
9
+ */
10
+ /** Value type for the standalone time picker */
11
+ interface ComTimeValue {
12
+ /** Hours (0-23, always stored in 24h format internally) */
13
+ hours: number;
14
+ /** Minutes (0-59) */
15
+ minutes: number;
16
+ /** Seconds (0-59) */
17
+ seconds: number;
18
+ }
19
+ /** Creates a ComTimeValue */
20
+ declare function createTimeValue(hours?: number, minutes?: number, seconds?: number): ComTimeValue;
21
+ /**
22
+ * Compares two ComTimeValue objects.
23
+ * @returns negative if a < b, 0 if equal, positive if a > b
24
+ */
25
+ declare function compareTime(a: ComTimeValue, b: ComTimeValue): number;
26
+ declare function generateTimePickerId(): string;
27
+ /** Size variants for time picker */
28
+ type TimePickerSize = 'sm' | 'default' | 'lg';
29
+ /** Visual variant */
30
+ type TimePickerVariant = 'standalone' | 'embedded' | 'naked';
31
+ /** Validation state */
32
+ type TimePickerState = 'default' | 'error' | 'success';
33
+ /** Period for 12-hour format */
34
+ type TimePeriod = 'AM' | 'PM';
35
+ /** Segment type */
36
+ type TimeSegment = 'hours' | 'minutes' | 'seconds';
37
+
38
+ /**
39
+ * CVA variants for the time picker container.
40
+ *
41
+ * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,
42
+ * `--color-ring`, `--color-warn`, `--color-success`, `--radius-input`
43
+ */
44
+ declare const timepickerContainerVariants: (props?: {
45
+ variant?: TimePickerVariant;
46
+ size?: TimePickerSize;
47
+ state?: TimePickerState;
48
+ }) => string;
49
+ type TimepickerContainerVariants = VariantProps<typeof timepickerContainerVariants>;
50
+ /**
51
+ * CVA variants for the disabled state of time picker.
52
+ *
53
+ * @tokens `--color-disabled`, `--color-disabled-foreground`
54
+ */
55
+ declare const timepickerDisabledVariants: () => string;
56
+ type TimepickerDisabledVariants = VariantProps<typeof timepickerDisabledVariants>;
57
+ /**
58
+ * CVA variants for each time segment input.
59
+ *
60
+ * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`, `--radius-interactive-sm`
61
+ */
62
+ declare const timepickerSegmentVariants: (props?: {
63
+ size?: TimePickerSize;
64
+ }) => string;
65
+ type TimepickerSegmentVariants = VariantProps<typeof timepickerSegmentVariants>;
66
+ /**
67
+ * CVA variants for the colon separator.
68
+ *
69
+ * @tokens `--color-muted-foreground`
70
+ */
71
+ declare const timepickerSeparatorVariants: (props?: {
72
+ size?: TimePickerSize;
73
+ }) => string;
74
+ type TimepickerSeparatorVariants = VariantProps<typeof timepickerSeparatorVariants>;
75
+ /**
76
+ * CVA variants for the AM/PM toggle button.
77
+ *
78
+ * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`, `--color-ring`,
79
+ * `--radius-control-sm`
80
+ */
81
+ declare const timepickerPeriodVariants: (props?: {
82
+ size?: TimePickerSize;
83
+ }) => string;
84
+ type TimepickerPeriodVariants = VariantProps<typeof timepickerPeriodVariants>;
85
+ /**
86
+ * CVA variants for the time section divider in datepicker panel.
87
+ *
88
+ * @tokens `--color-border-subtle`
89
+ */
90
+ declare const timepickerSectionVariants: (props?: {
91
+ size?: TimePickerSize;
92
+ }) => string;
93
+ type TimepickerSectionVariants = VariantProps<typeof timepickerSectionVariants>;
94
+ /**
95
+ * CVA variants for time labels in date range picker.
96
+ *
97
+ * @tokens `--color-muted-foreground`
98
+ */
99
+ declare const timepickerLabelVariants: (props?: {
100
+ size?: TimePickerSize;
101
+ }) => string;
102
+ type TimepickerLabelVariants = VariantProps<typeof timepickerLabelVariants>;
103
+
104
+ /**
105
+ * Time picker component with segmented numeric input fields.
106
+ * Supports standalone usage with ControlValueAccessor and embedded usage
107
+ * within datepicker/date-range-picker panels.
108
+ *
109
+ * Visual layout: `[HH] : [MM] : [SS] [AM|PM]`
110
+ *
111
+ * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,
112
+ * `--color-ring`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,
113
+ * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,
114
+ * `--color-disabled`, `--color-disabled-foreground`,
115
+ * `--color-warn`, `--color-success`, `--color-border`
116
+ *
117
+ * @example
118
+ * ```html
119
+ * <!-- Standalone with reactive forms -->
120
+ * <com-time-picker formControlName="startTime" />
121
+ *
122
+ * <!-- 12-hour format with seconds -->
123
+ * <com-time-picker formControlName="alarm" [use12HourFormat]="true" [showSeconds]="true" />
124
+ *
125
+ * <!-- 15-minute steps -->
126
+ * <com-time-picker formControlName="meeting" [minuteStep]="15" />
127
+ *
128
+ * <!-- Embedded inside datepicker panel -->
129
+ * <com-time-picker variant="embedded" [value]="time" (timeChange)="onTime($event)" />
130
+ * ```
131
+ */
132
+ declare class ComTimePicker implements ControlValueAccessor, FormFieldControl<ComTimeValue | null>, Validator {
133
+ private readonly localeId;
134
+ readonly ngControl: NgControl | null;
135
+ private readonly defaultErrorStateMatcher;
136
+ private readonly parentForm;
137
+ private readonly parentFormGroup;
138
+ private readonly timepickerId;
139
+ private readonly hoursInputRef;
140
+ private readonly minutesInputRef;
141
+ private readonly secondsInputRef;
142
+ private readonly periodButtonRef;
143
+ /** Current time value. */
144
+ readonly value: ModelSignal<ComTimeValue | null>;
145
+ /** Whether the time picker is disabled. */
146
+ readonly disabled: ModelSignal<boolean>;
147
+ /** Whether the time picker is required. */
148
+ readonly required: InputSignal<boolean>;
149
+ /** Whether to show the seconds segment. */
150
+ readonly showSeconds: InputSignal<boolean>;
151
+ /** 12h vs 24h format. `null` = auto-detect from locale. */
152
+ readonly use12HourFormat: InputSignal<boolean | null>;
153
+ /** Step interval for minutes. */
154
+ readonly minuteStep: InputSignal<number>;
155
+ /** Step interval for seconds. */
156
+ readonly secondStep: InputSignal<number>;
157
+ /** Minimum selectable time. */
158
+ readonly minTime: InputSignal<ComTimeValue | null>;
159
+ /** Maximum selectable time. */
160
+ readonly maxTime: InputSignal<ComTimeValue | null>;
161
+ /** Visual variant. */
162
+ readonly variant: InputSignal<TimePickerVariant>;
163
+ /** Size variant. */
164
+ readonly size: InputSignal<TimePickerSize>;
165
+ /** Validation state. */
166
+ readonly state: InputSignal<TimePickerState>;
167
+ /** Accessible label for the group. */
168
+ readonly ariaLabel: InputSignal<string | null>;
169
+ /** Additional CSS classes. */
170
+ readonly userClass: InputSignal<string>;
171
+ /** Placeholder text for empty segments. */
172
+ readonly placeholder: InputSignal<string>;
173
+ /** Custom error state matcher for determining when to show errors. */
174
+ readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined>;
175
+ readonly touched: ModelSignal<boolean>;
176
+ readonly invalid: InputSignal<boolean>;
177
+ readonly sfErrors: InputSignal<readonly unknown[]>;
178
+ /** Emitted when time value changes. */
179
+ readonly timeChange: OutputEmitterRef<ComTimeValue | null>;
180
+ /** Internal value state. */
181
+ readonly internalValue: WritableSignal<ComTimeValue | null>;
182
+ /** Which segment is currently focused. */
183
+ readonly activeSegment: WritableSignal<TimeSegment | 'period' | null>;
184
+ /** Pending typed digits for auto-advance. */
185
+ readonly pendingDigits: WritableSignal<string>;
186
+ /** Live announcements for screen readers. */
187
+ readonly liveAnnouncement: WritableSignal<string>;
188
+ /** IDs for aria-describedby (set by form-field). */
189
+ private readonly _describedByIds;
190
+ /** Form field appearance (set by form-field). */
191
+ private readonly _appearance;
192
+ /** Whether the time picker is focused. Implements FormFieldControl. */
193
+ readonly focused: Signal<boolean>;
194
+ /** Whether the label should float. */
195
+ readonly shouldLabelFloat: Signal<boolean>;
196
+ /** Whether the control is in an error state. Implements FormFieldControl. */
197
+ readonly errorState: Signal<boolean>;
198
+ /** Structured validation errors from Signal Forms. */
199
+ readonly errors: Signal<readonly unknown[] | null>;
200
+ /** Unique ID for the control (maps to hours input). Implements FormFieldControl. */
201
+ readonly id: Signal<string>;
202
+ /**
203
+ * Effective state combining manual state with automatic error detection.
204
+ */
205
+ readonly effectiveState: Signal<TimePickerState>;
206
+ /** Combined aria-describedby from form-field. */
207
+ readonly effectiveAriaDescribedBy: Signal<string | null>;
208
+ /** Whether to use 12-hour format. */
209
+ readonly is12Hour: Signal<boolean>;
210
+ /** Current period (AM/PM). */
211
+ readonly period: Signal<TimePeriod>;
212
+ /** Display hours (converted from 24h to 12h when needed). */
213
+ readonly displayHours: Signal<number | null>;
214
+ /** Formatted hours string. */
215
+ readonly formattedHours: Signal<string>;
216
+ /** Formatted minutes string. */
217
+ readonly formattedMinutes: Signal<string>;
218
+ /** Formatted seconds string. */
219
+ readonly formattedSeconds: Signal<string>;
220
+ /** Container classes. */
221
+ readonly containerClasses: Signal<string>;
222
+ /** Segment input classes. */
223
+ readonly segmentClasses: Signal<string>;
224
+ /** Separator classes. */
225
+ readonly separatorClasses: Signal<string>;
226
+ /** Period button classes. */
227
+ readonly periodClasses: Signal<string>;
228
+ private onChange;
229
+ private onTouched;
230
+ private onValidatorChange;
231
+ constructor();
232
+ writeValue(value: ComTimeValue | null): void;
233
+ registerOnChange(fn: (value: ComTimeValue | null) => void): void;
234
+ registerOnTouched(fn: () => void): void;
235
+ setDisabledState(isDisabled: boolean): void;
236
+ validate(): ValidationErrors | null;
237
+ registerOnValidatorChange(fn: () => void): void;
238
+ protected onSegmentFocus(segment: TimeSegment): void;
239
+ protected onSegmentBlur(segment: TimeSegment): void;
240
+ protected onSegmentInput(event: Event, segment: TimeSegment): void;
241
+ protected onSegmentKeydown(event: KeyboardEvent, segment: TimeSegment): void;
242
+ protected onPeriodKeydown(event: KeyboardEvent): void;
243
+ protected togglePeriod(): void;
244
+ /**
245
+ * Called when the form field container is clicked.
246
+ * Implements FormFieldControl.
247
+ */
248
+ onContainerClick(_event: MouseEvent): void;
249
+ /**
250
+ * Sets the describedBy IDs from the form field.
251
+ * Called by the parent form field component.
252
+ */
253
+ setDescribedByIds(ids: string): void;
254
+ /**
255
+ * Sets the appearance for styling.
256
+ * Called by the parent form field component.
257
+ */
258
+ setAppearance(appearance: FormFieldAppearance): void;
259
+ private setPeriod;
260
+ private incrementSegment;
261
+ private handleDigitInput;
262
+ private snapToStep;
263
+ private setSegmentToMin;
264
+ private setSegmentToMax;
265
+ private focusNextSegment;
266
+ private focusPrevSegment;
267
+ private updateValue;
268
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComTimePicker, never>;
269
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComTimePicker, "com-time-picker", ["comTimePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "use12HourFormat": { "alias": "use12HourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "secondStep": { "alias": "secondStep"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "sfErrors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; "timeChange": "timeChange"; }, never, never, true, never>;
270
+ }
271
+
272
+ export { ComTimePicker, compareTime, createTimeValue, generateTimePickerId, timepickerContainerVariants, timepickerDisabledVariants, timepickerLabelVariants, timepickerPeriodVariants, timepickerSectionVariants, timepickerSegmentVariants, timepickerSeparatorVariants };
273
+ export type { ComTimeValue, TimePeriod, TimePickerSize, TimePickerState, TimePickerVariant, TimeSegment, TimepickerContainerVariants, TimepickerDisabledVariants, TimepickerLabelVariants, TimepickerPeriodVariants, TimepickerSectionVariants, TimepickerSegmentVariants, TimepickerSeparatorVariants };
@@ -187,7 +187,7 @@ declare function provideComToastConfig(config: ComToastConfig): Provider;
187
187
  * `--color-warn`, `--color-warn-foreground`,
188
188
  * `--color-warn-subtle`, `--color-warn-subtle-foreground`,
189
189
  * `--color-primary-subtle`, `--color-primary-subtle-foreground`,
190
- * `--color-border`, `--shadow-lg`, `--radius-card`
190
+ * `--color-border`, `--shadow-overlay`, `--radius-card`
191
191
  */
192
192
  declare const toastVariants: (props?: {
193
193
  type?: ComToastType;
@@ -207,7 +207,9 @@ declare const toastProgressVariants: (props?: {
207
207
  /**
208
208
  * CVA variants for the toast close button.
209
209
  *
210
- * @tokens `--color-ring`, `--radius-card`
210
+ * @tokens `--color-ring`, `--radius-card`,
211
+ * `--color-success-foreground-muted`, `--color-warn-subtle-foreground-muted`,
212
+ * `--color-warn-foreground-muted`, `--color-primary-subtle-foreground-muted`
211
213
  */
212
214
  declare const toastCloseButtonVariants: (props?: {
213
215
  type?: ComToastType;
@@ -153,7 +153,7 @@ declare class ComTooltip {
153
153
  protected onFocusIn(): void;
154
154
  protected onFocusOut(): void;
155
155
  protected onEscapeKey(): void;
156
- protected onTouchStart(event: TouchEvent): void;
156
+ protected onTouchStart(_event: TouchEvent): void;
157
157
  /** Called when mouse enters the tooltip panel. */
158
158
  private onPanelMouseEnter;
159
159
  /** Called when mouse leaves the tooltip panel. */
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * ngx-com/components
3
- * Component exports for ngx-com library
4
3
  *
5
- * Note: Components are exposed as secondary entry points:
6
- * - ngx-com/components/calendar
7
- *
8
- * Import from the specific secondary entry points for tree-shaking.
4
+ * This secondary entry point is intentionally empty.
5
+ * Individual components are imported from their own entry points
6
+ * (e.g. `ngx-com/components/button`, `ngx-com/components/calendar`)
7
+ * to enable tree-shaking.
9
8
  */
10
- declare const COMPONENTS_PLACEHOLDER = true;
9
+ type ComComponentsEntryPoint = never;
11
10
 
12
- export { COMPONENTS_PLACEHOLDER };
11
+ export type { ComComponentsEntryPoint };
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * ngx-com/tokens
3
- * Injection token exports for ngx-com library
3
+ *
4
+ * Reserved secondary entry point for design token utilities.
5
+ * Tokens will be added here as needed.
4
6
  */
5
- declare const TOKENS_PLACEHOLDER: boolean;
7
+ type ComTokensEntryPoint = never;
6
8
 
7
- export { TOKENS_PLACEHOLDER };
9
+ export type { ComTokensEntryPoint };
@@ -15,6 +15,16 @@ import { ClassValue } from 'clsx';
15
15
  */
16
16
  declare function mergeClasses(...inputs: ClassValue[]): string;
17
17
 
18
+ /**
19
+ * Joins CSS class strings, filtering out null/undefined values.
20
+ * Unlike `mergeClasses` from utils, this does NOT resolve Tailwind conflicts -
21
+ * it simply concatenates class strings. Use when classes are guaranteed not to conflict.
22
+ *
23
+ * @param classes - Class strings (may include null/undefined)
24
+ * @returns Space-separated class string
25
+ */
26
+ declare function joinClasses(...classes: (string | undefined | null)[]): string;
27
+
18
28
  /**
19
29
  * A debounced function wrapper with cancel and flush capabilities.
20
30
  *
@@ -420,5 +430,5 @@ declare function partition<T>(array: T[], predicate: (item: T) => boolean): [T[]
420
430
  */
421
431
  declare function groupBy<K extends string | number | symbol, V>(collection: V[], predicate: (item: V) => K): Record<K, V[]>;
422
432
 
423
- export { chunk, debounce, deepClone, deepEqual, deepMerge, groupBy, isPlainObject, mergeClasses, omit, partition, pick, resolvePath, retry, throttle };
433
+ export { chunk, debounce, deepClone, deepEqual, deepMerge, groupBy, isPlainObject, joinClasses, mergeClasses, omit, partition, pick, resolvePath, retry, throttle };
424
434
  export type { DebounceOptions, DebouncedFn, ResolvePath, RetryOptions, ThrottledFn };