@ngbase/adk 0.1.0 → 0.1.2

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 (244) hide show
  1. package/README.md +1 -1
  2. package/accordion/accordion-item.d.ts +4 -0
  3. package/accordion/public-api.d.ts +1 -1
  4. package/autocomplete/autocomplete.d.ts +2 -2
  5. package/avatar/avatar.d.ts +1 -1
  6. package/breadcrumb/breadcrumb.d.ts +2 -3
  7. package/breadcrumb/public-api.d.ts +1 -1
  8. package/carousel/carousel.d.ts +1 -1
  9. package/chip/chip.d.ts +2 -2
  10. package/datepicker/calendar.d.ts +3 -3
  11. package/datepicker/datepicker.d.ts +2 -2
  12. package/datepicker/time.d.ts +2 -2
  13. package/dialog/dialog.d.ts +1 -1
  14. package/fesm2022/ngbase-adk-accordion.mjs +4 -1
  15. package/fesm2022/ngbase-adk-accordion.mjs.map +1 -1
  16. package/fesm2022/ngbase-adk-autocomplete.mjs +7 -36
  17. package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -1
  18. package/fesm2022/ngbase-adk-avatar.mjs +2 -2
  19. package/fesm2022/ngbase-adk-avatar.mjs.map +1 -1
  20. package/fesm2022/ngbase-adk-breadcrumb.mjs +2 -2
  21. package/fesm2022/ngbase-adk-breadcrumb.mjs.map +1 -1
  22. package/fesm2022/ngbase-adk-carousel.mjs +2 -2
  23. package/fesm2022/ngbase-adk-carousel.mjs.map +1 -1
  24. package/fesm2022/ngbase-adk-chip.mjs +4 -2
  25. package/fesm2022/ngbase-adk-chip.mjs.map +1 -1
  26. package/fesm2022/ngbase-adk-datepicker.mjs +114 -328
  27. package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -1
  28. package/fesm2022/ngbase-adk-dialog.mjs +18 -19
  29. package/fesm2022/ngbase-adk-dialog.mjs.map +1 -1
  30. package/fesm2022/ngbase-adk-form-field.mjs +2 -156
  31. package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
  32. package/fesm2022/ngbase-adk-menu.mjs +15 -30
  33. package/fesm2022/ngbase-adk-menu.mjs.map +1 -1
  34. package/fesm2022/ngbase-adk-otp.mjs +164 -0
  35. package/fesm2022/ngbase-adk-otp.mjs.map +1 -0
  36. package/fesm2022/ngbase-adk-pagination.mjs +8 -65
  37. package/fesm2022/ngbase-adk-pagination.mjs.map +1 -1
  38. package/fesm2022/ngbase-adk-popover.mjs +423 -548
  39. package/fesm2022/ngbase-adk-popover.mjs.map +1 -1
  40. package/fesm2022/ngbase-adk-portal.mjs +0 -1
  41. package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
  42. package/fesm2022/ngbase-adk-radio.mjs +2 -16
  43. package/fesm2022/ngbase-adk-radio.mjs.map +1 -1
  44. package/fesm2022/ngbase-adk-resizable.mjs +10 -43
  45. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
  46. package/fesm2022/ngbase-adk-select.mjs +67 -173
  47. package/fesm2022/ngbase-adk-select.mjs.map +1 -1
  48. package/fesm2022/ngbase-adk-sheet.mjs +95 -0
  49. package/fesm2022/ngbase-adk-sheet.mjs.map +1 -0
  50. package/fesm2022/ngbase-adk-sidenav.mjs +2 -2
  51. package/fesm2022/ngbase-adk-sidenav.mjs.map +1 -1
  52. package/fesm2022/ngbase-adk-slider.mjs +9 -23
  53. package/fesm2022/ngbase-adk-slider.mjs.map +1 -1
  54. package/fesm2022/ngbase-adk-sonner.mjs +13 -63
  55. package/fesm2022/ngbase-adk-sonner.mjs.map +1 -1
  56. package/fesm2022/ngbase-adk-stepper.mjs +16 -114
  57. package/fesm2022/ngbase-adk-stepper.mjs.map +1 -1
  58. package/fesm2022/ngbase-adk-switch.mjs +2 -2
  59. package/fesm2022/ngbase-adk-switch.mjs.map +1 -1
  60. package/fesm2022/ngbase-adk-table.mjs +10 -30
  61. package/fesm2022/ngbase-adk-table.mjs.map +1 -1
  62. package/fesm2022/ngbase-adk-tabs.mjs +14 -94
  63. package/fesm2022/ngbase-adk-tabs.mjs.map +1 -1
  64. package/fesm2022/ngbase-adk-tooltip.mjs +49 -39
  65. package/fesm2022/ngbase-adk-tooltip.mjs.map +1 -1
  66. package/fesm2022/ngbase-adk-tour.mjs +1 -1
  67. package/fesm2022/ngbase-adk-tour.mjs.map +1 -1
  68. package/fesm2022/ngbase-adk-tree.mjs +11 -43
  69. package/fesm2022/ngbase-adk-tree.mjs.map +1 -1
  70. package/form-field/public-api.d.ts +0 -1
  71. package/menu/menu-trigger.d.ts +2 -2
  72. package/menu/menu.d.ts +6 -6
  73. package/otp/index.d.ts +5 -0
  74. package/{form-field → otp}/otp.d.ts +1 -1
  75. package/otp/public-api.d.ts +1 -0
  76. package/package.json +22 -13
  77. package/pagination/pagination.d.ts +5 -1
  78. package/popover/popover-arrow.ng.d.ts +34 -0
  79. package/popover/popover.d.ts +12 -3
  80. package/popover/popover.service.d.ts +5 -4
  81. package/popover/public-api.d.ts +1 -0
  82. package/popover/utils.d.ts +32 -48
  83. package/portal/dialog-ref.d.ts +0 -1
  84. package/resizable/resizable-group.d.ts +2 -2
  85. package/resizable/resizable.d.ts +2 -2
  86. package/schematics/collection.json +15 -0
  87. package/schematics/components/files/accordion/accordion.ts.template +53 -0
  88. package/schematics/components/files/accordion/index.ts.template +5 -0
  89. package/schematics/components/files/alert/alert.ts.template +62 -0
  90. package/schematics/components/files/alert/index.ts.template +1 -0
  91. package/schematics/components/files/autocomplete/autocomplete.ts.template +44 -0
  92. package/schematics/components/files/autocomplete/index.ts.template +5 -0
  93. package/schematics/components/files/avatar/avatar.ts.template +31 -0
  94. package/schematics/components/files/avatar/index.ts.template +1 -0
  95. package/schematics/components/files/badge/badge.ts.template +11 -0
  96. package/schematics/components/files/badge/index.ts.template +1 -0
  97. package/schematics/components/files/breadcrumb/breadcrumb.ts.template +49 -0
  98. package/schematics/components/files/breadcrumb/index.ts.template +1 -0
  99. package/schematics/components/files/button/button.ts.template +29 -0
  100. package/schematics/components/files/button/index.ts.template +5 -0
  101. package/schematics/components/files/card/card.ts.template +11 -0
  102. package/schematics/components/files/card/index.ts.template +5 -0
  103. package/schematics/components/files/carousel/carousel.ts.template +44 -0
  104. package/schematics/components/files/carousel/index.ts.template +1 -0
  105. package/schematics/components/files/checkbox/checkbox.ts.template +46 -0
  106. package/schematics/components/files/checkbox/focus-style.directive.ts.template +12 -0
  107. package/schematics/components/files/checkbox/index.ts.template +6 -0
  108. package/schematics/components/files/chip/chip.ts.template +36 -0
  109. package/schematics/components/files/chip/index.ts.template +1 -0
  110. package/schematics/components/files/color-picker/color-picker.ts.template +104 -0
  111. package/schematics/components/files/color-picker/index.ts.template +5 -0
  112. package/schematics/components/files/command/command.ts.template +82 -0
  113. package/schematics/components/files/command/index.ts.template +1 -0
  114. package/schematics/components/files/datepicker/calendar.ts.template +117 -0
  115. package/schematics/components/files/datepicker/datepicker.ts.template +58 -0
  116. package/schematics/components/files/datepicker/index.ts.template +2 -0
  117. package/schematics/components/files/datepicker/time.ts.template +54 -0
  118. package/schematics/components/files/dialog/dialog.ts.template +89 -0
  119. package/schematics/components/files/dialog/index.ts.template +5 -0
  120. package/schematics/components/files/drawer/drawer.ts.template +104 -0
  121. package/schematics/components/files/drawer/index.ts.template +5 -0
  122. package/schematics/components/files/form-field/form-field.ts.template +111 -0
  123. package/schematics/components/files/form-field/index.ts.template +6 -0
  124. package/schematics/components/files/form-field/input-style.directive.ts.template +11 -0
  125. package/schematics/components/files/hover-card/hover-card.ts.template +13 -0
  126. package/schematics/components/files/hover-card/index.ts.template +5 -0
  127. package/schematics/components/files/icon/icon.ts.template +16 -0
  128. package/schematics/components/files/icon/index.ts.template +1 -0
  129. package/schematics/components/files/inline-edit/index.ts.template +1 -0
  130. package/schematics/components/files/inline-edit/inline-edit.ts.template +24 -0
  131. package/schematics/components/files/keys/index.ts.template +5 -0
  132. package/schematics/components/files/keys/key.ts.template +35 -0
  133. package/schematics/components/files/list/index.ts.template +5 -0
  134. package/schematics/components/files/list/list.ts.template +28 -0
  135. package/schematics/components/files/mask/index.ts.template +1 -0
  136. package/schematics/components/files/mask/mask.ts.template +8 -0
  137. package/schematics/components/files/menu/context-menu.ts.template +14 -0
  138. package/schematics/components/files/menu/index.ts.template +8 -0
  139. package/schematics/components/files/menu/mention.ts.template +14 -0
  140. package/schematics/components/files/menu/menu.ts.template +37 -0
  141. package/schematics/components/files/menu/navigation-menu.ts.template +8 -0
  142. package/schematics/components/files/otp/index.ts.template +5 -0
  143. package/schematics/components/files/otp/otp.ts.template +37 -0
  144. package/schematics/components/files/pagination/index.ts.template +1 -0
  145. package/schematics/components/files/pagination/pagination.ts.template +71 -0
  146. package/schematics/components/files/picasa/index.ts.template +1 -0
  147. package/schematics/components/files/picasa/picasa-base.component.ts.template +80 -0
  148. package/schematics/components/files/picasa/picasa.component.ts.template +57 -0
  149. package/schematics/components/files/picasa/picasa.directive.ts.template +41 -0
  150. package/schematics/components/files/picasa/picase.service.ts.template +24 -0
  151. package/schematics/components/files/popover/index.ts.template +1 -0
  152. package/schematics/components/files/popover/popover.ts.template +64 -0
  153. package/schematics/components/files/progress/index.ts.template +5 -0
  154. package/schematics/components/files/progress/progress.ts.template +14 -0
  155. package/schematics/components/files/radio/index.ts.template +5 -0
  156. package/schematics/components/files/radio/radio.ts.template +35 -0
  157. package/schematics/components/files/resizable/index.ts.template +5 -0
  158. package/schematics/components/files/resizable/resizable.ts.template +56 -0
  159. package/schematics/components/files/scroll-area/index.ts.template +1 -0
  160. package/schematics/components/files/scroll-area/scroll-area.ts.template +40 -0
  161. package/schematics/components/files/select/index.ts.template +8 -0
  162. package/schematics/components/files/select/list-selection.ts.template +15 -0
  163. package/schematics/components/files/select/option.ts.template +35 -0
  164. package/schematics/components/files/select/select-input.ts.template +21 -0
  165. package/schematics/components/files/select/select.ts.template +96 -0
  166. package/schematics/components/files/selectable/index.ts.template +1 -0
  167. package/schematics/components/files/selectable/selectable.ts.template +34 -0
  168. package/schematics/components/files/separator/index.ts.template +5 -0
  169. package/schematics/components/files/separator/separator.ts.template +19 -0
  170. package/schematics/components/files/sheet/index.ts.template +5 -0
  171. package/schematics/components/files/sheet/sheet.ts.template +69 -0
  172. package/schematics/components/files/sidenav/index.ts.template +1 -0
  173. package/schematics/components/files/sidenav/sidenav.ts.template +48 -0
  174. package/schematics/components/files/skeleton/index.ts.template +1 -0
  175. package/schematics/components/files/skeleton/skeleton.ts.template +15 -0
  176. package/schematics/components/files/slider/index.ts.template +5 -0
  177. package/schematics/components/files/slider/slider.ts.template +35 -0
  178. package/schematics/components/files/sonner/index.ts.template +5 -0
  179. package/schematics/components/files/sonner/sonner.ts.template +59 -0
  180. package/schematics/components/files/spinner/index.ts.template +1 -0
  181. package/schematics/components/files/spinner/spinner.ts.template +79 -0
  182. package/schematics/components/files/stepper/index.ts.template +1 -0
  183. package/schematics/components/files/stepper/stepper.ts.template +88 -0
  184. package/schematics/components/files/switch/index.ts.template +5 -0
  185. package/schematics/components/files/switch/switch.ts.template +29 -0
  186. package/schematics/components/files/table/body-cell.ts.template +19 -0
  187. package/schematics/components/files/table/body-row.ts.template +21 -0
  188. package/schematics/components/files/table/column.ts.template +8 -0
  189. package/schematics/components/files/table/head-cell.ts.template +19 -0
  190. package/schematics/components/files/table/head-row.ts.template +27 -0
  191. package/schematics/components/files/table/index.ts.template +26 -0
  192. package/schematics/components/files/table/table.ts.template +20 -0
  193. package/schematics/components/files/tabs/index.ts.template +5 -0
  194. package/schematics/components/files/tabs/tab.ts.template +92 -0
  195. package/schematics/components/files/theme/index.ts.template +2 -0
  196. package/schematics/components/files/theme/theme-button.component.ts.template +26 -0
  197. package/schematics/components/files/theme/theme.service.ts.template +33 -0
  198. package/schematics/components/files/toggle/index.ts.template +5 -0
  199. package/schematics/components/files/toggle/toggle.ts.template +13 -0
  200. package/schematics/components/files/toggle-group/index.ts.template +5 -0
  201. package/schematics/components/files/toggle-group/toggle-group.ts.template +25 -0
  202. package/schematics/components/files/tooltip/index.ts.template +5 -0
  203. package/schematics/components/files/tooltip/tooltip.ts.template +45 -0
  204. package/schematics/components/files/tour/index.ts.template +1 -0
  205. package/schematics/components/files/tour/tour.ts.template +19 -0
  206. package/schematics/components/files/tree/index.ts.template +1 -0
  207. package/schematics/components/files/tree/tree.ts.template +66 -0
  208. package/schematics/components/index.d.ts +3 -0
  209. package/schematics/components/index.js +17 -0
  210. package/schematics/components/index.js.map +1 -0
  211. package/schematics/components/index.ts +29 -0
  212. package/schematics/components/schema.d.ts +6 -0
  213. package/schematics/components/schema.js +3 -0
  214. package/schematics/components/schema.js.map +1 -0
  215. package/schematics/components/schema.json +145 -0
  216. package/schematics/components/schema.ts +6 -0
  217. package/select/option-group.d.ts +3 -3
  218. package/select/select.d.ts +2 -2
  219. package/sheet/index.d.ts +5 -0
  220. package/sheet/public-api.d.ts +2 -0
  221. package/sheet/sheet.d.ts +26 -0
  222. package/sheet/sheet.service.d.ts +13 -0
  223. package/sidenav/public-api.d.ts +1 -1
  224. package/sidenav/sidenav.d.ts +1 -1
  225. package/slider/public-api.d.ts +1 -1
  226. package/slider/slider.d.ts +5 -5
  227. package/sonner/sonner.d.ts +2 -1
  228. package/stepper/animation.d.ts +1 -1
  229. package/stepper/step.d.ts +1 -1
  230. package/stepper/stepper.d.ts +2 -2
  231. package/switch/switch.d.ts +1 -1
  232. package/table/body-row.d.ts +3 -3
  233. package/table/head-row.d.ts +3 -3
  234. package/table/table.d.ts +1 -1
  235. package/tabs/tab-group.d.ts +4 -4
  236. package/tabs/tab.d.ts +2 -2
  237. package/tooltip/public-api.d.ts +1 -1
  238. package/tooltip/tooltip.d.ts +5 -1
  239. package/tooltip/tooltip.directive.d.ts +1 -1
  240. package/tooltip/tooltip.service.d.ts +4 -2
  241. package/tour/tour.service.d.ts +3 -4
  242. package/tree/public-api.d.ts +2 -2
  243. package/tree/tree-node.d.ts +2 -2
  244. package/tree/tree.d.ts +2 -2
@@ -0,0 +1,48 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import {
3
+ NgbSidenav,
4
+ NgbSidenavHeader,
5
+ NgbSidenavHeaderContent,
6
+ NgbSidenavHeaderTrack,
7
+ NgbSidenavOverlay,
8
+ SidenavType,
9
+ aliasSidenav,
10
+ slideAnimation,
11
+ } from '@ngbase/adk/sidenav';
12
+
13
+ export type { SidenavType };
14
+
15
+ @Component({
16
+ selector: '<%= name %>-sidenav',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ providers: [aliasSidenav(Sidenav)],
19
+ imports: [NgbSidenavOverlay, NgbSidenavHeaderTrack],
20
+ template: `
21
+ @if (showOverlay()) {
22
+ <div ngbSidenavOverlay class="z-p bg-black/70"></div>
23
+ }
24
+ <div ngbSidenavHeaderTrack class="transition-[width] duration-500"></div>
25
+ <ng-content select="<%= name %>-sidenav-header" />
26
+ <ng-content />
27
+ `,
28
+ host: {
29
+ class: 'flex w-full overflow-hidden relative top-0 left-0 h-full',
30
+ },
31
+ })
32
+ export class Sidenav extends NgbSidenav {}
33
+
34
+ @Component({
35
+ selector: '<%= name %>-sidenav-header',
36
+ changeDetection: ChangeDetectionStrategy.OnPush,
37
+ imports: [NgbSidenavHeaderContent],
38
+ template: `
39
+ <div ngbSidenavHeaderContent class="h-full overflow-auto">
40
+ <ng-content />
41
+ </div>
42
+ `,
43
+ host: {
44
+ class: 'block h-full bg-foreground z-p transition-[width] duration-500',
45
+ },
46
+ animations: [slideAnimation('500ms cubic-bezier(0.4, 0, 0.2, 1)')],
47
+ })
48
+ export class SidenavHeader extends NgbSidenavHeader {}
@@ -0,0 +1 @@
1
+ export * from './skeleton';
@@ -0,0 +1,15 @@
1
+ import { Component, input } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: '<%= name %>-skeleton',
5
+ template: ``,
6
+ host: {
7
+ class: 'block animate-pulse bg-muted-background',
8
+ '[class]': `shape() === 'circle' ? 'rounded-full' : 'rounded-md'`,
9
+ },
10
+ })
11
+ export class Skeleton {
12
+ readonly shape = input<'circle' | 'rectangle'>('rectangle');
13
+ readonly width = input<string>('100%');
14
+ readonly height = input<string>('20px');
15
+ }
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of slider
3
+ */
4
+
5
+ export * from './slider';
@@ -0,0 +1,35 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbSlider, SliderRange, SliderThumb, SliderTrack, aliasSlider } from '@ngbase/adk/slider';
3
+ import { ɵFocusStyle as FocusStyle } from '<%= basepath %>/checkbox';
4
+
5
+ @Component({
6
+ selector: '<%= name %>-slider',
7
+ exportAs: '<%= name %>Slider',
8
+ changeDetection: ChangeDetectionStrategy.OnPush,
9
+ providers: [aliasSlider(Slider)],
10
+ imports: [FocusStyle, SliderTrack, SliderRange, SliderThumb],
11
+ template: `
12
+ <div
13
+ ngbSliderTrack
14
+ class="h-full overflow-hidden rounded-full bg-muted-background aria-[disabled=true]:bg-opacity-30"
15
+ >
16
+ <div ngbSliderRange class="bg-primary aria-[disabled=true]:bg-muted-background"></div>
17
+ </div>
18
+ @for (thumb of noOfThumbs(); track thumb) {
19
+ <button
20
+ ngbSliderThumb
21
+ <%= name %>FocusStyle
22
+ class="{{
23
+ 'inline-block h-5 w-5 rounded-full border-2 bg-foreground shadow-md aria-[disabled=false]:border-primary aria-[disabled=true]:bg-muted-background ' +
24
+ (orientation() === 'vertical'
25
+ ? '-left-1.5 -translate-y-1/2'
26
+ : '-top-1.5 -translate-x-1/2')
27
+ }}"
28
+ ></button>
29
+ }
30
+ `,
31
+ host: {
32
+ class: 'block relative my-2 aria-[orientation=vertical]:w-2 aria-[orientation=horizontal]:h-2',
33
+ },
34
+ })
35
+ export class Slider extends NgbSlider {}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of sonner
3
+ */
4
+
5
+ export { sonnerPortal } from './sonner';
@@ -0,0 +1,59 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbSonner, ngbSonnerPortal, sonnerAnimation, SonnerBase } from '@ngbase/adk/sonner';
3
+ import { Icon } from '<%= basepath %>/icon';
4
+ import { provideIcons } from '@ng-icons/core';
5
+ import {
6
+ lucideCircleAlert,
7
+ lucideCircleCheck,
8
+ lucideInfo,
9
+ lucideTriangleAlert,
10
+ } from '@ng-icons/lucide';
11
+
12
+ @Component({
13
+ selector: '<%= name %>-sonner',
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ providers: [
16
+ provideIcons({ lucideCircleCheck, lucideInfo, lucideTriangleAlert, lucideCircleAlert }),
17
+ ],
18
+ imports: [Icon, SonnerBase],
19
+ template: `
20
+ <ul class="fixed bottom-0 right-0 flex flex-col gap-1">
21
+ @for (msg of messages(); track msg.id) {
22
+ <li
23
+ [ngbSonnerBase]="$index"
24
+ class="{{
25
+ 'm-4 w-96 rounded-lg border bg-foreground p-4 shadow-lg transition-all duration-300' +
26
+ (msg.type === 'success' ? ' bg-green-50 text-green-600' : '') +
27
+ (msg.type === 'error' ? ' bg-red-50 text-red-600' : '') +
28
+ (msg.type === 'warning' ? ' bg-yellow-50 text-yellow-600' : '')
29
+ }}"
30
+ >
31
+ <h4 class="flex items-center gap-2 font-semibold">
32
+ @if (msg.type && icons[msg.type]; as iconName) {
33
+ <<%= name %>-icon [name]="iconName" />
34
+ }
35
+ {{ msg.message }}
36
+ </h4>
37
+ @if (msg.data?.description) {
38
+ <p class="text-muted">{{ msg.data?.description }}</p>
39
+ }
40
+ </li>
41
+ }
42
+ </ul>
43
+ `,
44
+ animations: [sonnerAnimation],
45
+ })
46
+ export class Sonner extends NgbSonner {
47
+ readonly icons = {
48
+ success: 'lucideCircleCheck',
49
+ error: 'lucideCircleAlert',
50
+ info: 'lucideInfo',
51
+ warning: 'lucideTriangleAlert',
52
+ default: '',
53
+ };
54
+ }
55
+
56
+ export function sonnerPortal() {
57
+ const portal = ngbSonnerPortal(Sonner);
58
+ return portal;
59
+ }
@@ -0,0 +1 @@
1
+ export * from './spinner';
@@ -0,0 +1,79 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { animate, keyframes, style, transition, trigger } from '@angular/animations';
3
+
4
+ const spinnerAnimation = trigger('enterLeave', [
5
+ transition(':enter', [
6
+ animate(
7
+ '500ms cubic-bezier(0.68, -0.55, 0.265, 1.55)',
8
+ keyframes([
9
+ style({ opacity: 0, transform: 'scale(0)', offset: 0 }),
10
+ style({ opacity: 1, transform: 'scale(1.5)', offset: 0.7 }),
11
+ style({ opacity: 1, transform: 'scale(1)', offset: 1 }),
12
+ ]),
13
+ ),
14
+ ]),
15
+ transition(':leave', [
16
+ animate(
17
+ '500ms cubic-bezier(0.68, -0.55, 0.265, 1.55)',
18
+ keyframes([
19
+ style({ opacity: 1, transform: 'scale(1)', offset: 0 }),
20
+ style({ opacity: 1, transform: 'scale(1.5)', offset: 0.3 }),
21
+ style({ opacity: 0, transform: 'scale(0)', offset: 1 }),
22
+ ]),
23
+ ),
24
+ ]),
25
+ ]);
26
+
27
+ @Component({
28
+ selector: '<%= name %>-spinner',
29
+ template: `
30
+ <ng-content />
31
+ <!-- <div
32
+ class="aspect-square w-full animate-spin rounded-full border-primary border-l-transparent"
33
+ [class]="mode()"
34
+ [style.border-width.px]="strokeWidth()"
35
+ [style.width.px]="diameter()"
36
+ ></div> -->
37
+ <div
38
+ class="spinner"
39
+ [style]="{
40
+ width: diameter() + 'px',
41
+ height: diameter() + 'px',
42
+ }"
43
+ >
44
+ <svg viewBox="0 0 50 50">
45
+ <circle
46
+ cx="25"
47
+ cy="25"
48
+ r="20"
49
+ [style.strokeWidth.px]="strokeWidth()"
50
+ stroke-dasharray="88 38"
51
+ stroke-linecap="round"
52
+ class="fill-none stroke-current"
53
+ >
54
+ <animateTransform
55
+ attributeName="transform"
56
+ type="rotate"
57
+ repeatCount="indefinite"
58
+ dur="1s"
59
+ values="0 25 25;360 25 25"
60
+ />
61
+ </circle>
62
+ </svg>
63
+ </div>
64
+ `,
65
+ host: {
66
+ class: 'inline-flex items-center justify-center transition-all duration-300 text-primary',
67
+ '[class]': `root() ? 'fixed inset-0 z-p bg-foreground bg-opacity-60 backdrop-blur-sm' : 'relative'`,
68
+ },
69
+ animations: [
70
+ // animation for entering and exiting, with a bouncy effect
71
+ spinnerAnimation,
72
+ ],
73
+ })
74
+ export class Spinner {
75
+ readonly mode = input<'light' | 'dark' | ''>('light');
76
+ readonly diameter = input<number>(35);
77
+ readonly strokeWidth = input<any>(3);
78
+ readonly root = input<boolean>(false);
79
+ }
@@ -0,0 +1 @@
1
+ export * from './stepper';
@@ -0,0 +1,88 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
3
+ import {
4
+ aliasStepper,
5
+ NgbStep,
6
+ NgbStepHeader,
7
+ NgbStepper,
8
+ NgbStepperStep,
9
+ provideStep,
10
+ stepperAnimation,
11
+ } from '@ngbase/adk/stepper';
12
+
13
+ @Component({
14
+ selector: '<%= name %>-stepper',
15
+ exportAs: '<%= name %>Stepper',
16
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
+ providers: [aliasStepper(Stepper)],
18
+ imports: [NgTemplateOutlet, NgbStepperStep],
19
+ template: `
20
+ <div class="flex justify-between" [class.flex-col]="direction() === 'vertical'">
21
+ @for (step of steps(); track step) {
22
+ <div
23
+ [ngbStepperStep]="$index"
24
+ class="{{
25
+ 'relative flex pb-4 data-[index]:flex-1 data-[index]:after:mx-2 data-[index]:after:block data-[index]:after:flex-1 data-[index]:after:bg-background data-[index]:after:transition-colors' +
26
+ (activeIndex() > $index ? ' data-[index]:after:bg-primary' : '') +
27
+ (direction() === 'vertical'
28
+ ? ' flex-col data-[index]:after:absolute data-[index]:after:bottom-0 data-[index]:after:left-3 data-[index]:after:top-10 data-[index]:after:w-0.5'
29
+ : ' items-center data-[index]:after:h-0.5')
30
+ }}"
31
+ >
32
+ <div class="flex items-center">
33
+ <div
34
+ class="{{
35
+ 'mr-2 grid aspect-square w-10 place-content-center rounded-full border-2 transition-colors' +
36
+ (activeIndex() > $index ? ' bg-primary' : '') +
37
+ (activeIndex() >= $index ? ' border-primary' : '')
38
+ }}"
39
+ >
40
+ {{ $index + 1 }}
41
+ </div>
42
+ @if (step.header(); as header) {
43
+ <ng-container *ngTemplateOutlet="header" />
44
+ } @else {
45
+ {{ step.title() }}
46
+ }
47
+ </div>
48
+ @if (step.verticalTemplate(); as template) {
49
+ <div class="ml-12" [@slide]>
50
+ <div class="pt-4">
51
+ <ng-container *ngTemplateOutlet="template" />
52
+ </div>
53
+ </div>
54
+ }
55
+ </div>
56
+ }
57
+ </div>
58
+ <ng-content />
59
+ `,
60
+ animations: [stepperAnimation],
61
+ })
62
+ export class Stepper extends NgbStepper {}
63
+
64
+ @Component({
65
+ selector: '<%= name %>-step',
66
+ exportAs: '<%= name %>Step',
67
+ changeDetection: ChangeDetectionStrategy.OnPush,
68
+ providers: [provideStep(Step)],
69
+ imports: [NgTemplateOutlet],
70
+ template: `
71
+ <ng-template #stepContainer>
72
+ <ng-content />
73
+ </ng-template>
74
+
75
+ @if (horizontalTemplate(); as template) {
76
+ <div class="pb-4">
77
+ <ng-container *ngTemplateOutlet="template" />
78
+ </div>
79
+ }
80
+ `,
81
+ })
82
+ export class Step extends NgbStep {}
83
+
84
+ @Directive({
85
+ selector: '[<%= name %>StepHeader]',
86
+ hostDirectives: [NgbStepHeader],
87
+ })
88
+ export class StepHeader {}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of switch
3
+ */
4
+
5
+ export * from './switch';
@@ -0,0 +1,29 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbSwitch, NgbSwitchLabel, NgbSwitchThumb, NgbSwitchTrack } from '@ngbase/adk/switch';
3
+
4
+ @Component({
5
+ selector: '<%= name %>-switch',
6
+ changeDetection: ChangeDetectionStrategy.OnPush,
7
+ hostDirectives: [
8
+ { directive: NgbSwitch, inputs: ['checked', 'disabled'], outputs: ['checkedChange', 'change'] },
9
+ ],
10
+ imports: [NgbSwitchTrack, NgbSwitchLabel, NgbSwitchThumb],
11
+ template: `
12
+ <button
13
+ ngbSwitchTrack
14
+ class="relative w-9 rounded-full border-2 border-transparent bg-muted-background transition-colors aria-[checked=true]:bg-primary"
15
+ >
16
+ <span
17
+ #thumb="ngbSwitchThumb"
18
+ ngbSwitchThumb
19
+ [class]="thumb.checked() ? (thumb.rtl() ? '-translate-x-full' : 'translate-x-full') : ''"
20
+ class="block h-4 w-4 rounded-full bg-foreground shadow-sm transition-transform"
21
+ ></span>
22
+ </button>
23
+ <label ngbSwitchLabel><ng-content /></label>
24
+ `,
25
+ host: {
26
+ class: 'inline-flex items-center gap-2 py-1',
27
+ },
28
+ })
29
+ export class Switch {}
@@ -0,0 +1,19 @@
1
+ import { Component, Directive, ChangeDetectionStrategy } from '@angular/core';
2
+ import { NgbCell, NgbCellDef } from '@ngbase/adk/table';
3
+
4
+ @Component({
5
+ selector: '[<%= name %>Cell]',
6
+ changeDetection: ChangeDetectionStrategy.OnPush,
7
+ hostDirectives: [NgbCell],
8
+ host: {
9
+ class: 'px-4 py-2 align-middle bg-foreground',
10
+ },
11
+ template: `<ng-content />`,
12
+ })
13
+ export class Cell {}
14
+
15
+ @Directive({
16
+ selector: '[<%= name %>CellDef]',
17
+ hostDirectives: [NgbCellDef],
18
+ })
19
+ export class CellDef {}
@@ -0,0 +1,21 @@
1
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
2
+ import { NgbBodyRow, NgbBodyRowDef } from '@ngbase/adk/table';
3
+
4
+ @Directive({
5
+ selector: '[<%= name %>BodyRowDef]',
6
+ hostDirectives: [
7
+ { directive: NgbBodyRowDef, inputs: ['ngbBodyRowDefColumns: <%= name %>BodyRowDefColumns'] },
8
+ ],
9
+ })
10
+ export class BodyRowDef {}
11
+
12
+ @Component({
13
+ selector: '[<%= name %>BodyRow]',
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ providers: [{ provide: NgbBodyRow, useExisting: BodyRow }],
16
+ template: `<ng-container #container />`,
17
+ host: {
18
+ class: '[&:not(:last-child)]:border-b hover:bg-muted-background h-12',
19
+ },
20
+ })
21
+ export class BodyRow extends NgbBodyRow {}
@@ -0,0 +1,8 @@
1
+ import { Directive } from '@angular/core';
2
+ import { NgbColumn } from '@ngbase/adk/table';
3
+
4
+ @Directive({
5
+ selector: '[<%= name %>Column]',
6
+ hostDirectives: [{ directive: NgbColumn, inputs: ['ngbColumn: <%= name %>Column', 'sticky'] }],
7
+ })
8
+ export class Column {}
@@ -0,0 +1,19 @@
1
+ import { Component, Directive, ChangeDetectionStrategy } from '@angular/core';
2
+ import { NgbHead, NgbHeadDef } from '@ngbase/adk/table';
3
+
4
+ @Component({
5
+ selector: '[<%= name %>Head]',
6
+ changeDetection: ChangeDetectionStrategy.OnPush,
7
+ host: {
8
+ class: 'px-4 py-2 text-left align-middle font-medium text-muted border-b bg-foreground',
9
+ },
10
+ hostDirectives: [NgbHead],
11
+ template: `<ng-content />`,
12
+ })
13
+ export class Head {}
14
+
15
+ @Directive({
16
+ selector: '[<%= name %>HeadDef]',
17
+ hostDirectives: [NgbHeadDef],
18
+ })
19
+ export class HeadDef {}
@@ -0,0 +1,27 @@
1
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
2
+ import { NgbHeadRow, NgbHeadRowDef } from '@ngbase/adk/table';
3
+
4
+ @Component({
5
+ selector: '[<%= name %>HeadRow]',
6
+ changeDetection: ChangeDetectionStrategy.OnPush,
7
+ host: {
8
+ class: `h-10 [&[data-sticky=true]]:sticky [&[data-sticky=true]]:top-0 [&[data-sticky=true]]:bg-foreground`,
9
+ },
10
+ providers: [{ provide: NgbHeadRow, useExisting: HeadRow }],
11
+ template: `<ng-container #container />`,
12
+ })
13
+ export class HeadRow extends NgbHeadRow {}
14
+
15
+ @Directive({
16
+ selector: '[<%= name %>HeadRowDef]',
17
+ hostDirectives: [
18
+ {
19
+ directive: NgbHeadRowDef,
20
+ inputs: [
21
+ 'ngbHeadRowDef: <%= name %>HeadRowDef',
22
+ 'ngbHeadRowDefSticky: <%= name %>HeadRowDefSticky',
23
+ ],
24
+ },
25
+ ],
26
+ })
27
+ export class HeadRowDef {}
@@ -0,0 +1,26 @@
1
+ import { Cell, CellDef } from './body-cell';
2
+ import { BodyRow, BodyRowDef } from './body-row';
3
+ import { Column } from './column';
4
+ import { Head, HeadDef } from './head-cell';
5
+ import { HeadRow, HeadRowDef } from './head-row';
6
+ import { Table } from './table';
7
+
8
+ export * from './table';
9
+ export * from './column';
10
+ export * from './body-cell';
11
+ export * from './head-cell';
12
+ export * from './body-row';
13
+ export * from './head-row';
14
+
15
+ export const TableComponents = [
16
+ BodyRow,
17
+ BodyRowDef,
18
+ Cell,
19
+ CellDef,
20
+ Head,
21
+ HeadDef,
22
+ HeadRow,
23
+ HeadRowDef,
24
+ Column,
25
+ Table,
26
+ ];
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbTable } from '@ngbase/adk/table';
3
+
4
+ @Component({
5
+ selector: 'table[<%= name %>Table]',
6
+ changeDetection: ChangeDetectionStrategy.OnPush,
7
+ host: {
8
+ class: 'w-full text-sm',
9
+ },
10
+ providers: [{ provide: NgbTable, useExisting: Table }],
11
+ template: `
12
+ <thead>
13
+ <ng-container #thead />
14
+ </thead>
15
+ <tbody>
16
+ <ng-container #tbody />
17
+ </tbody>
18
+ `,
19
+ })
20
+ export class Table<T> extends NgbTable<T> {}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of tab
3
+ */
4
+
5
+ export * from './tab';
@@ -0,0 +1,92 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
3
+ import { Icon } from '<%= basepath %>/icon';
4
+ import { provideIcons } from '@ng-icons/core';
5
+ import { lucideChevronLeft, lucideChevronRight } from '@ng-icons/lucide';
6
+ import {
7
+ aliasTab,
8
+ aliasTabs,
9
+ NgbTab,
10
+ NgbTabChangeEvent,
11
+ NgbTabHeader,
12
+ NgbTabLazy,
13
+ NgbTabs,
14
+ TabButton,
15
+ TabButtonsGroup,
16
+ TabScroll,
17
+ } from '@ngbase/adk/tabs';
18
+
19
+ @Component({
20
+ selector: '<%= name %>-tabs',
21
+ imports: [Icon, TabButton, TabButtonsGroup, TabScroll],
22
+ changeDetection: ChangeDetectionStrategy.OnPush,
23
+ providers: [aliasTabs(Tabs)],
24
+ viewProviders: [provideIcons({ lucideChevronRight, lucideChevronLeft })],
25
+ template: `<div class="flex items-center border-b">
26
+ <ng-content select=".tab-start-header-content" />
27
+ <div class="relative flex overflow-hidden">
28
+ <button
29
+ ngbTabScroll="left"
30
+ class="absolute left-0 z-10 h-full place-items-center bg-foreground px-2"
31
+ >
32
+ <<%= name %>-icon name="lucideChevronLeft" />
33
+ </button>
34
+ <nav ngbTabButtonsGroup class="overflow-auto">
35
+ <div #tabListContainer class="flex h-full w-max">
36
+ @for (tab of tabs(); track tab.id) {
37
+ <button
38
+ [ngbTabButton]="tab"
39
+ class="whitespace-nowrap border-b-2 border-transparent px-4 py-3 font-medium text-muted aria-[disabled=true]:cursor-not-allowed aria-[selected=true]:!border-primary aria-[disabled=true]:text-muted aria-[selected=true]:!text-primary aria-[disabled=true]:opacity-50"
40
+ ></button>
41
+ }
42
+ </div>
43
+ </nav>
44
+ <button
45
+ ngbTabScroll="right"
46
+ class="absolute right-0 z-10 h-full place-items-center bg-foreground px-2"
47
+ >
48
+ <<%= name %>-icon name="lucideChevronRight" />
49
+ </button>
50
+ </div>
51
+ <ng-content select=".tab-header-content" />
52
+ </div>
53
+ <ng-content /> `,
54
+ host: {
55
+ class: 'bg-foreground flex flex-col',
56
+ },
57
+ })
58
+ export class Tabs extends NgbTabs<Tab> {}
59
+
60
+ @Component({
61
+ selector: '<%= name %>-tab',
62
+ exportAs: '<%= name %>Tab',
63
+ changeDetection: ChangeDetectionStrategy.OnPush,
64
+ providers: [aliasTab(Tab)],
65
+ imports: [NgTemplateOutlet],
66
+ template: `
67
+ @if (lazyTemplate(); as template) {
68
+ <ng-container *ngTemplateOutlet="template" />
69
+ } @else if (activeMode()) {
70
+ <ng-content />
71
+ }
72
+ `,
73
+ host: {
74
+ class: 'block overflow-auto',
75
+ '[class]': `active() ? 'flex-1 h-full pt-4' : 'hidden'`,
76
+ },
77
+ })
78
+ export class Tab extends NgbTab {}
79
+
80
+ @Directive({
81
+ selector: '[<%= name %>TabHeader]',
82
+ hostDirectives: [NgbTabHeader],
83
+ })
84
+ export class TabHeader {}
85
+
86
+ @Directive({
87
+ selector: '[<%= name %>TabLazy]',
88
+ hostDirectives: [NgbTabLazy],
89
+ })
90
+ export class TabLazy {}
91
+
92
+ export type TabChangeEvent = NgbTabChangeEvent;
@@ -0,0 +1,2 @@
1
+ export { injectTheme } from './theme.service';
2
+ export { ThemeButton } from './theme-button.component';
@@ -0,0 +1,26 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { Button } from '<%= basepath %>/button';
3
+ import { Icon } from '<%= basepath %>/icon';
4
+ import { provideIcons } from '@ng-icons/core';
5
+ import { lucideMoon, lucideSun } from '@ng-icons/lucide';
6
+ import { injectTheme } from './theme.service';
7
+
8
+ @Component({
9
+ selector: '<%= name %>-theme-button',
10
+ imports: [Icon, Button],
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ viewProviders: [provideIcons({ lucideMoon, lucideSun })],
13
+ template: `
14
+ <button <%= name %>Button="icon" class="tour-mode h-9 w-9" (click)="themeService.toggle()">
15
+ <<%= name %>-icon [name]="themeService.mode() === 'dark' ? 'lucideSun' : 'lucideMoon'" />
16
+ <span class="sr-only">Toggle theme</span>
17
+ </button>
18
+ `,
19
+ })
20
+ export class ThemeButton {
21
+ readonly themeService = injectTheme();
22
+
23
+ constructor() {
24
+ // shortcutListener('ctrl+d', () => this.themeService.toggle());
25
+ }
26
+ }