@ngbase/adk 0.1.0 → 0.1.1

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 (156) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/ngbase-adk-autocomplete.mjs +2 -2
  3. package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -1
  4. package/fesm2022/ngbase-adk-datepicker.mjs +18 -18
  5. package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -1
  6. package/fesm2022/ngbase-adk-dialog.mjs +6 -6
  7. package/fesm2022/ngbase-adk-dialog.mjs.map +1 -1
  8. package/fesm2022/ngbase-adk-pagination.mjs +18 -18
  9. package/fesm2022/ngbase-adk-pagination.mjs.map +1 -1
  10. package/fesm2022/ngbase-adk-popover.mjs +2 -2
  11. package/fesm2022/ngbase-adk-popover.mjs.map +1 -1
  12. package/fesm2022/ngbase-adk-radio.mjs +2 -2
  13. package/fesm2022/ngbase-adk-radio.mjs.map +1 -1
  14. package/fesm2022/ngbase-adk-resizable.mjs +4 -4
  15. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
  16. package/fesm2022/ngbase-adk-select.mjs +4 -4
  17. package/fesm2022/ngbase-adk-select.mjs.map +1 -1
  18. package/fesm2022/ngbase-adk-sonner.mjs +4 -4
  19. package/fesm2022/ngbase-adk-sonner.mjs.map +1 -1
  20. package/fesm2022/ngbase-adk-stepper.mjs +2 -2
  21. package/fesm2022/ngbase-adk-stepper.mjs.map +1 -1
  22. package/package.json +26 -25
  23. package/schematics/collection.json +15 -0
  24. package/schematics/components/files/accordion/accordion.ts.template +55 -0
  25. package/schematics/components/files/accordion/index.ts.template +5 -0
  26. package/schematics/components/files/alert/alert.ts.template +62 -0
  27. package/schematics/components/files/alert/index.ts.template +1 -0
  28. package/schematics/components/files/autocomplete/autocomplete.ts.template +48 -0
  29. package/schematics/components/files/autocomplete/index.ts.template +5 -0
  30. package/schematics/components/files/avatar/avatar.ts.template +31 -0
  31. package/schematics/components/files/avatar/index.ts.template +1 -0
  32. package/schematics/components/files/badge/badge.ts.template +11 -0
  33. package/schematics/components/files/badge/index.ts.template +1 -0
  34. package/schematics/components/files/breadcrumb/breadcrumb.ts.template +49 -0
  35. package/schematics/components/files/breadcrumb/index.ts.template +1 -0
  36. package/schematics/components/files/button/button.ts.template +29 -0
  37. package/schematics/components/files/button/index.ts.template +5 -0
  38. package/schematics/components/files/card/card.ts.template +11 -0
  39. package/schematics/components/files/card/index.ts.template +5 -0
  40. package/schematics/components/files/carousel/carousel.ts.template +44 -0
  41. package/schematics/components/files/carousel/index.ts.template +1 -0
  42. package/schematics/components/files/checkbox/checkbox.ts.template +46 -0
  43. package/schematics/components/files/checkbox/focus-style.directive.ts.template +12 -0
  44. package/schematics/components/files/checkbox/index.ts.template +6 -0
  45. package/schematics/components/files/chip/chip.ts.template +36 -0
  46. package/schematics/components/files/chip/index.ts.template +1 -0
  47. package/schematics/components/files/color-picker/color-picker.ts.template +104 -0
  48. package/schematics/components/files/color-picker/index.ts.template +5 -0
  49. package/schematics/components/files/command/command.ts.template +82 -0
  50. package/schematics/components/files/command/index.ts.template +1 -0
  51. package/schematics/components/files/datepicker/calendar.ts.template +117 -0
  52. package/schematics/components/files/datepicker/datepicker-trigger.ts.template +27 -0
  53. package/schematics/components/files/datepicker/datepicker.ts.template +28 -0
  54. package/schematics/components/files/datepicker/index.ts.template +3 -0
  55. package/schematics/components/files/datepicker/time.ts.template +46 -0
  56. package/schematics/components/files/dialog/dialog.ts.template +89 -0
  57. package/schematics/components/files/dialog/index.ts.template +5 -0
  58. package/schematics/components/files/drawer/drawer.ts.template +104 -0
  59. package/schematics/components/files/drawer/index.ts.template +5 -0
  60. package/schematics/components/files/form-field/index.ts.template +7 -0
  61. package/schematics/components/files/form-field/input-style.directive.ts.template +11 -0
  62. package/schematics/components/files/form-field/input.ts.template +100 -0
  63. package/schematics/components/files/form-field/otp.ts.template +37 -0
  64. package/schematics/components/files/hover-card/hover-card.ts.template +13 -0
  65. package/schematics/components/files/hover-card/index.ts.template +5 -0
  66. package/schematics/components/files/icon/icon.ts.template +16 -0
  67. package/schematics/components/files/icon/index.ts.template +1 -0
  68. package/schematics/components/files/inline-edit/index.ts.template +1 -0
  69. package/schematics/components/files/inline-edit/inline-edit.ts.template +24 -0
  70. package/schematics/components/files/keys/index.ts.template +5 -0
  71. package/schematics/components/files/keys/key.ts.template +35 -0
  72. package/schematics/components/files/list/index.ts.template +5 -0
  73. package/schematics/components/files/list/list.ts.template +28 -0
  74. package/schematics/components/files/mask/index.ts.template +1 -0
  75. package/schematics/components/files/mask/mask.ts.template +8 -0
  76. package/schematics/components/files/menu/context-menu.ts.template +14 -0
  77. package/schematics/components/files/menu/index.ts.template +8 -0
  78. package/schematics/components/files/menu/mention.ts.template +14 -0
  79. package/schematics/components/files/menu/menu.ts.template +37 -0
  80. package/schematics/components/files/menu/navigation-menu.ts.template +8 -0
  81. package/schematics/components/files/pagination/index.ts.template +1 -0
  82. package/schematics/components/files/pagination/pagination.ts.template +71 -0
  83. package/schematics/components/files/picasa/index.ts.template +1 -0
  84. package/schematics/components/files/picasa/picasa-base.component.ts.template +80 -0
  85. package/schematics/components/files/picasa/picasa.component.ts.template +57 -0
  86. package/schematics/components/files/picasa/picasa.directive.ts.template +41 -0
  87. package/schematics/components/files/picasa/picase.service.ts.template +24 -0
  88. package/schematics/components/files/popover/index.ts.template +1 -0
  89. package/schematics/components/files/popover/popover.ts.template +87 -0
  90. package/schematics/components/files/progress/index.ts.template +5 -0
  91. package/schematics/components/files/progress/progress.ts.template +14 -0
  92. package/schematics/components/files/radio/index.ts.template +5 -0
  93. package/schematics/components/files/radio/radio.ts.template +40 -0
  94. package/schematics/components/files/resizable/index.ts.template +5 -0
  95. package/schematics/components/files/resizable/resizable.ts.template +56 -0
  96. package/schematics/components/files/scroll-area/index.ts.template +1 -0
  97. package/schematics/components/files/scroll-area/scroll-area.ts.template +40 -0
  98. package/schematics/components/files/select/index.ts.template +8 -0
  99. package/schematics/components/files/select/list-selection.ts.template +15 -0
  100. package/schematics/components/files/select/option.ts.template +34 -0
  101. package/schematics/components/files/select/select-input.ts.template +21 -0
  102. package/schematics/components/files/select/select.ts.template +96 -0
  103. package/schematics/components/files/selectable/index.ts.template +1 -0
  104. package/schematics/components/files/selectable/selectable.ts.template +34 -0
  105. package/schematics/components/files/separator/index.ts.template +5 -0
  106. package/schematics/components/files/separator/separator.ts.template +19 -0
  107. package/schematics/components/files/sheet/index.ts.template +5 -0
  108. package/schematics/components/files/sheet/sheet.ts.template +134 -0
  109. package/schematics/components/files/sidenav/index.ts.template +1 -0
  110. package/schematics/components/files/sidenav/sidenav.ts.template +48 -0
  111. package/schematics/components/files/skeleton/index.ts.template +1 -0
  112. package/schematics/components/files/skeleton/skeleton.ts.template +15 -0
  113. package/schematics/components/files/slider/index.ts.template +5 -0
  114. package/schematics/components/files/slider/slider.ts.template +42 -0
  115. package/schematics/components/files/sonner/index.ts.template +5 -0
  116. package/schematics/components/files/sonner/sonner.ts.template +58 -0
  117. package/schematics/components/files/spinner/index.ts.template +1 -0
  118. package/schematics/components/files/spinner/spinner.ts.template +79 -0
  119. package/schematics/components/files/stepper/index.ts.template +1 -0
  120. package/schematics/components/files/stepper/stepper.ts.template +88 -0
  121. package/schematics/components/files/switch/index.ts.template +5 -0
  122. package/schematics/components/files/switch/switch.ts.template +29 -0
  123. package/schematics/components/files/table/body-cell.ts.template +19 -0
  124. package/schematics/components/files/table/body-row.ts.template +21 -0
  125. package/schematics/components/files/table/column.ts.template +8 -0
  126. package/schematics/components/files/table/head-cell.ts.template +19 -0
  127. package/schematics/components/files/table/head-row.ts.template +27 -0
  128. package/schematics/components/files/table/index.ts.template +26 -0
  129. package/schematics/components/files/table/table.ts.template +20 -0
  130. package/schematics/components/files/tabs/index.ts.template +5 -0
  131. package/schematics/components/files/tabs/tab.ts.template +89 -0
  132. package/schematics/components/files/theme/index.ts.template +2 -0
  133. package/schematics/components/files/theme/theme-button.component.ts.template +26 -0
  134. package/schematics/components/files/theme/theme.component.ts.template +165 -0
  135. package/schematics/components/files/theme/theme.service.ts.template +44 -0
  136. package/schematics/components/files/toggle/index.ts.template +5 -0
  137. package/schematics/components/files/toggle/toggle.ts.template +13 -0
  138. package/schematics/components/files/toggle-group/index.ts.template +5 -0
  139. package/schematics/components/files/toggle-group/toggle-group.ts.template +25 -0
  140. package/schematics/components/files/tooltip/index.ts.template +5 -0
  141. package/schematics/components/files/tooltip/tooltip.ts.template +40 -0
  142. package/schematics/components/files/tour/index.ts.template +3 -0
  143. package/schematics/components/files/tour/tour-step.ts.template +8 -0
  144. package/schematics/components/files/tour/tour.service.ts.template +7 -0
  145. package/schematics/components/files/tour/tour.ts.template +8 -0
  146. package/schematics/components/files/tree/index.ts.template +1 -0
  147. package/schematics/components/files/tree/tree.ts.template +66 -0
  148. package/schematics/components/index.d.ts +3 -0
  149. package/schematics/components/index.js +17 -0
  150. package/schematics/components/index.js.map +1 -0
  151. package/schematics/components/index.ts +29 -0
  152. package/schematics/components/schema.d.ts +6 -0
  153. package/schematics/components/schema.js +3 -0
  154. package/schematics/components/schema.js.map +1 -0
  155. package/schematics/components/schema.json +137 -0
  156. package/schematics/components/schema.ts +6 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngbase/adk",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ng-base/ngbase.git"
@@ -20,6 +20,7 @@
20
20
  "dependencies": {
21
21
  "tslib": "^2.3.0"
22
22
  },
23
+ "schematics": "./schematics/collection.json",
23
24
  "sideEffects": false,
24
25
  "module": "fesm2022/ngbase-adk.mjs",
25
26
  "typings": "index.d.ts",
@@ -39,14 +40,14 @@
39
40
  "types": "./accordion/index.d.ts",
40
41
  "default": "./fesm2022/ngbase-adk-accordion.mjs"
41
42
  },
42
- "./autocomplete": {
43
- "types": "./autocomplete/index.d.ts",
44
- "default": "./fesm2022/ngbase-adk-autocomplete.mjs"
45
- },
46
43
  "./avatar": {
47
44
  "types": "./avatar/index.d.ts",
48
45
  "default": "./fesm2022/ngbase-adk-avatar.mjs"
49
46
  },
47
+ "./autocomplete": {
48
+ "types": "./autocomplete/index.d.ts",
49
+ "default": "./fesm2022/ngbase-adk-autocomplete.mjs"
50
+ },
50
51
  "./bidi": {
51
52
  "types": "./bidi/index.d.ts",
52
53
  "default": "./fesm2022/ngbase-adk-bidi.mjs"
@@ -55,14 +56,14 @@
55
56
  "types": "./breadcrumb/index.d.ts",
56
57
  "default": "./fesm2022/ngbase-adk-breadcrumb.mjs"
57
58
  },
58
- "./cache": {
59
- "types": "./cache/index.d.ts",
60
- "default": "./fesm2022/ngbase-adk-cache.mjs"
61
- },
62
59
  "./carousel": {
63
60
  "types": "./carousel/index.d.ts",
64
61
  "default": "./fesm2022/ngbase-adk-carousel.mjs"
65
62
  },
63
+ "./cache": {
64
+ "types": "./cache/index.d.ts",
65
+ "default": "./fesm2022/ngbase-adk-cache.mjs"
66
+ },
66
67
  "./checkbox": {
67
68
  "types": "./checkbox/index.d.ts",
68
69
  "default": "./fesm2022/ngbase-adk-checkbox.mjs"
@@ -99,14 +100,14 @@
99
100
  "types": "./drag/index.d.ts",
100
101
  "default": "./fesm2022/ngbase-adk-drag.mjs"
101
102
  },
102
- "./form-field": {
103
- "types": "./form-field/index.d.ts",
104
- "default": "./fesm2022/ngbase-adk-form-field.mjs"
105
- },
106
103
  "./hover-card": {
107
104
  "types": "./hover-card/index.d.ts",
108
105
  "default": "./fesm2022/ngbase-adk-hover-card.mjs"
109
106
  },
107
+ "./form-field": {
108
+ "types": "./form-field/index.d.ts",
109
+ "default": "./fesm2022/ngbase-adk-form-field.mjs"
110
+ },
110
111
  "./icon": {
111
112
  "types": "./icon/index.d.ts",
112
113
  "default": "./fesm2022/ngbase-adk-icon.mjs"
@@ -191,26 +192,26 @@
191
192
  "types": "./sonner/index.d.ts",
192
193
  "default": "./fesm2022/ngbase-adk-sonner.mjs"
193
194
  },
194
- "./switch": {
195
- "types": "./switch/index.d.ts",
196
- "default": "./fesm2022/ngbase-adk-switch.mjs"
197
- },
198
195
  "./stepper": {
199
196
  "types": "./stepper/index.d.ts",
200
197
  "default": "./fesm2022/ngbase-adk-stepper.mjs"
201
198
  },
199
+ "./switch": {
200
+ "types": "./switch/index.d.ts",
201
+ "default": "./fesm2022/ngbase-adk-switch.mjs"
202
+ },
202
203
  "./table": {
203
204
  "types": "./table/index.d.ts",
204
205
  "default": "./fesm2022/ngbase-adk-table.mjs"
205
206
  },
206
- "./tabs": {
207
- "types": "./tabs/index.d.ts",
208
- "default": "./fesm2022/ngbase-adk-tabs.mjs"
209
- },
210
207
  "./test": {
211
208
  "types": "./test/index.d.ts",
212
209
  "default": "./fesm2022/ngbase-adk-test.mjs"
213
210
  },
211
+ "./tabs": {
212
+ "types": "./tabs/index.d.ts",
213
+ "default": "./fesm2022/ngbase-adk-tabs.mjs"
214
+ },
214
215
  "./toggle": {
215
216
  "types": "./toggle/index.d.ts",
216
217
  "default": "./fesm2022/ngbase-adk-toggle.mjs"
@@ -227,14 +228,14 @@
227
228
  "types": "./tour/index.d.ts",
228
229
  "default": "./fesm2022/ngbase-adk-tour.mjs"
229
230
  },
230
- "./translate": {
231
- "types": "./translate/index.d.ts",
232
- "default": "./fesm2022/ngbase-adk-translate.mjs"
233
- },
234
231
  "./tree": {
235
232
  "types": "./tree/index.d.ts",
236
233
  "default": "./fesm2022/ngbase-adk-tree.mjs"
237
234
  },
235
+ "./translate": {
236
+ "types": "./translate/index.d.ts",
237
+ "default": "./fesm2022/ngbase-adk-translate.mjs"
238
+ },
238
239
  "./utils": {
239
240
  "types": "./utils/index.d.ts",
240
241
  "default": "./fesm2022/ngbase-adk-utils.mjs"
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
3
+ "schematics": {
4
+ "ng-add": {
5
+ "description": "Add my library to the project.",
6
+ "factory": "./ng-add/index#ngAdd",
7
+ "schema": "./ng-add/schema.json"
8
+ },
9
+ "ui": {
10
+ "description": "Add an component to the project.",
11
+ "factory": "./components/index#myGenerator",
12
+ "schema": "./components/schema.json"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,55 @@
1
+ import { ChangeDetectionStrategy, Component, Directive, inject } from '@angular/core';
2
+ import {
3
+ NgbAccordion,
4
+ NgbAccordionContent,
5
+ NgbAccordionGroup,
6
+ NgbAccordionHeader,
7
+ slideAnimation,
8
+ } from '@ngbase/adk/accordion';
9
+
10
+ @Component({
11
+ selector: '<%= name %>-accordion-group',
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ hostDirectives: [{ directive: NgbAccordionGroup, inputs: ['multiple'] }],
14
+ template: `<ng-content />`,
15
+ host: {
16
+ class: 'block rounded-lg border bg-foreground',
17
+ },
18
+ })
19
+ export class AccordionGroup {}
20
+
21
+ @Component({
22
+ selector: '<%= name %>-accordion',
23
+ changeDetection: ChangeDetectionStrategy.OnPush,
24
+ hostDirectives: [
25
+ { directive: NgbAccordion, inputs: ['expanded', 'disabled'], outputs: ['expandedChange'] },
26
+ ],
27
+ imports: [NgbAccordionContent],
28
+ template: `
29
+ <ng-content select="[<%= name %>AccordionHeader]" />
30
+ @if (accordion.expanded()) {
31
+ <div ngbAccordionContent [@slide] class="overflow-hidden">
32
+ <div class="px-3 pb-4 text-muted">
33
+ <ng-content />
34
+ </div>
35
+ </div>
36
+ }
37
+ `,
38
+ host: {
39
+ class: 'block will-change-auto [&:not(:last-child)]:border-b',
40
+ },
41
+ animations: [slideAnimation],
42
+ })
43
+ export class Accordion {
44
+ readonly accordion = inject(NgbAccordion);
45
+ }
46
+
47
+ @Directive({
48
+ selector: '[<%= name %>AccordionHeader]',
49
+ hostDirectives: [NgbAccordionHeader],
50
+ host: {
51
+ class:
52
+ 'flex items-center w-full py-3 px-3 aria-disabled:cursor-not-allowed aria-disabled:opacity-50',
53
+ },
54
+ })
55
+ export class AccordionHeader {}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of accordion
3
+ */
4
+
5
+ export * from './accordion';
@@ -0,0 +1,62 @@
1
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
+ import { DialogInput, DialogOptions, DialogRef } from '@ngbase/adk/portal';
3
+ import { Button, ButtonVariant } from '<%= basepath %>/button';
4
+ import { dialogPortal } from '<%= basepath %>/dialog';
5
+
6
+ export interface AlertOptions {
7
+ title?: string;
8
+ description?: string;
9
+ actions?: {
10
+ text: string;
11
+ type?: ButtonVariant;
12
+ handler: (fn: VoidFunction) => any;
13
+ }[];
14
+ }
15
+
16
+ export function alertPortal() {
17
+ const base = dialogPortal();
18
+
19
+ function open<T>(opt: AlertOptions, comp?: DialogInput<T>) {
20
+ const options: DialogOptions = {
21
+ ...new DialogOptions(),
22
+ data: opt,
23
+ title: opt.title,
24
+ width: '32rem',
25
+ maxWidth: '95vw',
26
+ disableClose: true,
27
+ header: true,
28
+ focusTrap: true,
29
+ };
30
+
31
+ const diaRef = base.open(comp || Alert, options);
32
+
33
+ return diaRef;
34
+ }
35
+
36
+ function closeAll() {
37
+ base.closeAll();
38
+ }
39
+ return { open, closeAll };
40
+ }
41
+
42
+ @Component({
43
+ selector: '<%= name %>-alert',
44
+ changeDetection: ChangeDetectionStrategy.OnPush,
45
+ imports: [Button],
46
+ template: `
47
+ <h4 class="mb-2 text-base font-bold">{{ data?.title }}</h4>
48
+ <p class="text-muted-foreground pb-3">{{ data?.description }}</p>
49
+ <div class="flex justify-end gap-4 pt-1">
50
+ @for (action of data?.actions; track action) {
51
+ <button [<%= name %>Button]="action.type || 'primary'" (click)="action.handler(diaRef.close)">
52
+ {{ action.text }}
53
+ </button>
54
+ }
55
+ </div>
56
+ `,
57
+ })
58
+ export class Alert {
59
+ diaRef = inject<DialogRef<AlertOptions>>(DialogRef);
60
+
61
+ data = this.diaRef.options?.data;
62
+ }
@@ -0,0 +1 @@
1
+ export * from './alert';
@@ -0,0 +1,48 @@
1
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
2
+ import {
3
+ NgbAutocomplete,
4
+ NgbAutocompleteInput,
5
+ provideAutocomplete,
6
+ } from '@ngbase/adk/autocomplete';
7
+ import { NgbSelectOptionGroup } from '@ngbase/adk/select';
8
+
9
+ @Component({
10
+ selector: '<%= name %>-autocomplete',
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ providers: [provideAutocomplete(Autocomplete)],
13
+ imports: [NgbSelectOptionGroup],
14
+ template: `
15
+ <ul #container class="readonly !flex w-full flex-wrap gap-2" (click)="prevent($event)">
16
+ <ng-content select="<%= name %>-chip, <%= name %>-chip-group" />
17
+
18
+ <li class="flex min-w-8 flex-1 items-center" (click)="open()">
19
+ <ng-content select="input" />
20
+ </li>
21
+ </ul>
22
+ <ng-template #optionsTemplate>
23
+ <div #optionsGroup ngbSelectOptionGroup class="p-1">
24
+ <ng-content />
25
+ </div>
26
+ </ng-template>
27
+ `,
28
+ host: {
29
+ class: 'inline-flex',
30
+ },
31
+ })
32
+ export class Autocomplete<T> extends NgbAutocomplete<T> {}
33
+
34
+ @Directive({
35
+ selector: '[<%= name %>AutocompleteInput]',
36
+ exportAs: '<%= name %>AutocompleteInput',
37
+ hostDirectives: [
38
+ {
39
+ directive: NgbAutocompleteInput,
40
+ inputs: ['options', 'filterFn'],
41
+ outputs: ['ngbAutocompleteInput: <%= name %>AutocompleteInput'],
42
+ },
43
+ ],
44
+ host: {
45
+ class: 'w-full bg-transparent shadow-none outline-none',
46
+ },
47
+ })
48
+ export class AutocompleteInput<T> {}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of autocomplete
3
+ */
4
+
5
+ export * from './autocomplete';
@@ -0,0 +1,31 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbAvatar, NgbAvatarGroup, provideAvatar } from '@ngbase/adk/avatar';
3
+
4
+ @Component({
5
+ selector: '<%= name %>-avatar-group',
6
+ changeDetection: ChangeDetectionStrategy.OnPush,
7
+ hostDirectives: [{ directive: NgbAvatarGroup, inputs: ['reverse', 'left'] }],
8
+ template: `<ng-content select="<%= name %>-avatar,[<%= name %>Avatar]" />`,
9
+ host: {
10
+ class: 'flex flex-row',
11
+ },
12
+ })
13
+ export class AvatarGroup {}
14
+
15
+ @Component({
16
+ selector: '<%= name %>-avatar, [<%= name %>Avatar]',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ providers: [provideAvatar(Avatar)],
19
+ template: `
20
+ @if (src(); as img) {
21
+ <img [src]="img" alt="avatar" class="h-full max-h-full max-w-full" />
22
+ } @else {
23
+ <ng-content>{{ nameChar() }}</ng-content>
24
+ }
25
+ `,
26
+ host: {
27
+ class:
28
+ 'inline-flex aspect-square rounded-full overflow-hidden border-2 border-foreground relative bg-background text-muted items-center justify-center',
29
+ },
30
+ })
31
+ export class Avatar extends NgbAvatar {}
@@ -0,0 +1 @@
1
+ export * from './avatar';
@@ -0,0 +1,11 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: '<%= name %>-badge, [<%= name %>Badge]',
5
+ changeDetection: ChangeDetectionStrategy.OnPush,
6
+ template: `<ng-content />`,
7
+ host: {
8
+ class: 'inline-block bg-muted-background rounded-full px-2 py-1 text-xs font-semibold',
9
+ },
10
+ })
11
+ export class Badge {}
@@ -0,0 +1 @@
1
+ export * from './badge';
@@ -0,0 +1,49 @@
1
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
2
+ import {
3
+ NgbBreadcrumb,
4
+ NgbBreadcrumbLink,
5
+ NgbBreadcrumbs,
6
+ NgbBreadcrumbSeparator,
7
+ NgbBreadcrumbSeparatorAria,
8
+ provideBreadcrumb,
9
+ } from '@ngbase/adk/breadcrumb';
10
+ import { Icon } from '<%= basepath %>/icon';
11
+ import { provideIcons } from '@ng-icons/core';
12
+ import { lucideChevronRight } from '@ng-icons/lucide';
13
+
14
+ @Component({
15
+ selector: '<%= name %>-breadcrumbs',
16
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
+ hostDirectives: [NgbBreadcrumbs],
18
+ template: `<ng-content />`,
19
+ host: {
20
+ class: 'flex items-center gap-2',
21
+ },
22
+ })
23
+ export class Breadcrumbs {}
24
+
25
+ @Component({
26
+ selector: '<%= name %>-breadcrumb',
27
+ changeDetection: ChangeDetectionStrategy.OnPush,
28
+ providers: [provideBreadcrumb(Breadcrumb)],
29
+ viewProviders: [provideIcons({ lucideChevronRight })],
30
+ imports: [Icon, NgbBreadcrumbLink, NgbBreadcrumbSeparatorAria],
31
+ template: `
32
+ <a class='hover:text-primary aria-[current="page"]:text-primary' ngbBreadcrumbLink>
33
+ <ng-content />
34
+ </a>
35
+ @if (!active()) {
36
+ <<%= name %>-icon ngbBreadcrumbSeparatorAria name="lucideChevronRight" class="text-muted" />
37
+ }
38
+ `,
39
+ host: {
40
+ class: 'flex items-center gap-2 text-muted',
41
+ },
42
+ })
43
+ export class Breadcrumb extends NgbBreadcrumb {}
44
+
45
+ @Directive({
46
+ selector: '[<%= name %>BreadcrumbsSeparator]',
47
+ hostDirectives: [NgbBreadcrumbSeparator],
48
+ })
49
+ export class BreadcrumbsSeparator {}
@@ -0,0 +1 @@
1
+ export { Breadcrumbs, BreadcrumbsSeparator, Breadcrumb } from './breadcrumb';
@@ -0,0 +1,29 @@
1
+ import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
+ import { ɵFocusStyle as FocusStyle } from '<%= basepath %>/checkbox';
3
+
4
+ export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline' | 'icon';
5
+
6
+ @Component({
7
+ selector: '[<%= name %>Button]',
8
+ changeDetection: ChangeDetectionStrategy.OnPush,
9
+ hostDirectives: [FocusStyle],
10
+ template: `<ng-content />`,
11
+ host: {
12
+ type: 'button',
13
+ class:
14
+ 'inline-flex items-center justify-center rounded-lg px-4 py-2 border disabled:text-muted disabled:cursor-not-allowed',
15
+ '[class]': `variant() === 'primary'
16
+ ? 'bg-primary text-foreground disabled:bg-background disabled:border-background border-primary'
17
+ : variant() === 'secondary'
18
+ ? 'bg-muted-background disabled:bg-muted-background border-muted-background'
19
+ : variant() === 'ghost' || variant() === 'icon'
20
+ ? '[&:not(:disabled)]:hover:bg-muted-background [&:not(:disabled)]:active:bg-muted-background/50 border-transparent'
21
+ : ' text-primary [&:not(:disabled)]:hover:bg-background [&:not(:disabled)]:active:bg-background/50'`,
22
+ },
23
+ })
24
+ export class Button {
25
+ variant = input('primary', {
26
+ alias: '<%= name %>Button',
27
+ transform: (value: ButtonVariant | '') => value || 'primary',
28
+ });
29
+ }
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of button
3
+ */
4
+
5
+ export * from './button';
@@ -0,0 +1,11 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: '<%= name %>-card, [<%= name %>Card]',
5
+ changeDetection: ChangeDetectionStrategy.OnPush,
6
+ template: `<ng-content />`,
7
+ host: {
8
+ class: 'block rounded-lg border bg-foreground p-4',
9
+ },
10
+ })
11
+ export class Card {}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of card
3
+ */
4
+
5
+ export * from './card';
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
2
+ import {
3
+ NgbCarousel,
4
+ NgbCarouselButton,
5
+ NgbCarouselContainer,
6
+ NgbCarouselItem,
7
+ NgbCarouselSubContainer,
8
+ provideCarousel,
9
+ } from '@ngbase/adk/carousel';
10
+
11
+ @Component({
12
+ selector: '<%= name %>-carousel',
13
+ changeDetection: ChangeDetectionStrategy.OnPush,
14
+ providers: [provideCarousel(Carousel)],
15
+ imports: [NgbCarouselContainer, NgbCarouselSubContainer],
16
+ template: `
17
+ <div class="touch-none overflow-hidden" ngbCarouselContainer>
18
+ <div ngbCarouselSubContainer class="relative -ml-4 flex">
19
+ <ng-content select="[<%= name %>CarouselItem]" />
20
+ </div>
21
+ </div>
22
+ <div>
23
+ <ng-content />
24
+ </div>
25
+ `,
26
+ host: {
27
+ class: 'flex flex-col gap-4 relative',
28
+ },
29
+ })
30
+ export class Carousel extends NgbCarousel {}
31
+
32
+ @Directive({
33
+ selector: '[<%= name %>CarouselItem]',
34
+ hostDirectives: [NgbCarouselItem],
35
+ })
36
+ export class CarouselItem {}
37
+
38
+ @Directive({
39
+ selector: '[<%= name %>CarouselButton]',
40
+ hostDirectives: [
41
+ { directive: NgbCarouselButton, inputs: ['ngbCarouselButton: <%= name %>CarouselButton'] },
42
+ ],
43
+ })
44
+ export class CarouselButton {}
@@ -0,0 +1 @@
1
+ export * from './carousel';
@@ -0,0 +1,46 @@
1
+ import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { FocusStyle } from './focus-style.directive';
4
+ import { CheckboxButton, NgbCheckbox } from '@ngbase/adk/checkbox';
5
+
6
+ @Component({
7
+ selector: '<%= name %>-checkbox',
8
+ changeDetection: ChangeDetectionStrategy.OnPush,
9
+ hostDirectives: [
10
+ {
11
+ directive: NgbCheckbox,
12
+ inputs: ['disabled', 'checked', 'indeterminate'],
13
+ outputs: ['checkedChange', 'change'],
14
+ },
15
+ ],
16
+ imports: [FormsModule, FocusStyle, CheckboxButton],
17
+ template: `
18
+ <button
19
+ <%= name %>FocusStyle
20
+ ngbCheckboxButton
21
+ class="custom-checkbox relative flex h-4 w-4 flex-none items-center justify-center rounded border border-primary transition-colors"
22
+ [class]="checkbox.disabled() ? '!border-muted bg-muted' : path() ? 'bg-primary' : ''"
23
+ >
24
+ @if (path(); as d) {
25
+ <svg class="h-full w-full text-foreground" viewBox="0 0 24 24" aria-hidden="true">
26
+ <path [attr.d]="d" stroke="currentColor" stroke-width="2" fill="none" />
27
+ </svg>
28
+ }
29
+ </button>
30
+ <ng-content />
31
+ `,
32
+ host: {
33
+ class: 'inline-flex items-center gap-2 py-1 disabled:opacity-60 disabled:cursor-not-allowed',
34
+ },
35
+ })
36
+ export class Checkbox {
37
+ readonly checkbox = inject(NgbCheckbox);
38
+
39
+ readonly path = computed(() =>
40
+ this.checkbox.indeterminate()
41
+ ? 'M6 12L18 12'
42
+ : this.checkbox.checked()
43
+ ? 'M20 6L9 17L4 12'
44
+ : '',
45
+ );
46
+ }
@@ -0,0 +1,12 @@
1
+ import { booleanAttribute, Directive, input } from '@angular/core';
2
+
3
+ @Directive({
4
+ selector: '[<%= name %>FocusStyle]',
5
+ host: {
6
+ class: 'outline-none',
7
+ '[class]': `!unfocus() ? 'focus-visible:ring-2 focus:ring-2 focus:ring-offset-2 ring-primary focus-visible:ring-offset-2 ring-offset-background data-[focus]:ring-2 data-[focus]:ring-offset-2 data-[focus]:ring-offset-background data-[focus]:ring-primary' : ''`,
8
+ },
9
+ })
10
+ export class FocusStyle {
11
+ unfocus = input(false, { transform: booleanAttribute });
12
+ }
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of checkbox
3
+ */
4
+
5
+ export * from './checkbox';
6
+ export { FocusStyle as ɵFocusStyle } from './focus-style.directive';
@@ -0,0 +1,36 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbChip, NgbChipGroup, NgbChipRemove, provideChip } from '@ngbase/adk/chip';
3
+ import { Button } from '<%= basepath %>/button';
4
+ import { Icon } from '<%= basepath %>/icon';
5
+ import { provideIcons } from '@ng-icons/core';
6
+ import { lucideX } from '@ng-icons/lucide';
7
+
8
+ @Component({
9
+ selector: '<%= name %>-chip-group',
10
+ hostDirectives: [NgbChipGroup],
11
+ template: `<ng-content />`,
12
+ })
13
+ export class ChipGroup<T> {}
14
+
15
+ @Component({
16
+ selector: '<%= name %>-chip, [<%= name %>Chip]',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ providers: [provideChip(Chip)],
19
+ viewProviders: [provideIcons({ lucideX })],
20
+ imports: [Button, Icon, NgbChipRemove],
21
+ template: `<ng-content />
22
+ @if (removable()) {
23
+ <button
24
+ <%= name %>Button="ghost"
25
+ ngbChipRemove
26
+ class="small -my-2 data-[dir=ltr]:-mr-4 data-[dir=rtl]:-ml-4"
27
+ >
28
+ <<%= name %>-icon name="lucideX" />
29
+ </button>
30
+ }`,
31
+ host: {
32
+ class:
33
+ 'inline-flex items-center bg-muted-background rounded-lg px-2 py-1 text-xs font-medium',
34
+ },
35
+ })
36
+ export class Chip<T = any> extends NgbChip<T> {}
@@ -0,0 +1 @@
1
+ export * from './chip';