@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
@@ -0,0 +1,48 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import {
3
+ NgbSidenav,
4
+ NgbSidenavHeader,
5
+ NgbSidenavHeaderContent,
6
+ NgbSidenavHeaderTrack,
7
+ NgbSidenavOverlay,
8
+ provideSidenav,
9
+ slideAnimation,
10
+ SidenavType,
11
+ } from '@ngbase/adk/sidenav';
12
+
13
+ export type { SidenavType };
14
+
15
+ @Component({
16
+ selector: '<%= name %>-sidenav',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ providers: [provideSidenav(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,42 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import {
3
+ NgbSlider,
4
+ SliderRange,
5
+ SliderThumb,
6
+ SliderTrack,
7
+ provideSlider,
8
+ } from '@ngbase/adk/slider';
9
+ import { ɵFocusStyle as FocusStyle } from '<%= basepath %>/checkbox';
10
+
11
+ @Component({
12
+ selector: '<%= name %>-slider',
13
+ exportAs: '<%= name %>Slider',
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ providers: [provideSlider(Slider)],
16
+ imports: [FocusStyle, SliderTrack, SliderRange, SliderThumb],
17
+ template: `
18
+ <div
19
+ ngbSliderTrack
20
+ class="h-full overflow-hidden rounded-full bg-muted-background aria-[disabled=true]:bg-opacity-30"
21
+ >
22
+ <div ngbSliderRange class="bg-primary aria-[disabled=true]:bg-muted-background"></div>
23
+ </div>
24
+ @for (thumb of noOfThumbs(); track thumb) {
25
+ <button
26
+ ngbSliderThumb
27
+ <%= name %>FocusStyle
28
+ class="{{
29
+ '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 ' +
30
+ (orientation() === 'vertical'
31
+ ? '-left-1.5 -translate-y-1/2'
32
+ : '-top-1.5 -translate-x-1/2')
33
+ }}"
34
+ ></button>
35
+ }
36
+ `,
37
+ host: {
38
+ class: 'block relative my-1',
39
+ '[class]': 'orientation() === "vertical" ? "w-2" : "h-2"',
40
+ },
41
+ })
42
+ 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,58 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgbSonner, ngbSonnerPortal, 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
+ imports: [Icon, SonnerBase],
16
+ providers: [
17
+ provideIcons({ lucideCircleCheck, lucideInfo, lucideTriangleAlert, lucideCircleAlert }),
18
+ ],
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
+ })
45
+ export class Sonner extends NgbSonner {
46
+ readonly icons = {
47
+ success: 'lucideCircleCheck',
48
+ error: 'lucideCircleAlert',
49
+ info: 'lucideInfo',
50
+ warning: 'lucideTriangleAlert',
51
+ default: '',
52
+ };
53
+ }
54
+
55
+ export function sonnerPortal() {
56
+ const portal = ngbSonnerPortal(Sonner);
57
+ return portal;
58
+ }
@@ -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
+ NgbStep,
5
+ NgbStepHeader,
6
+ NgbStepper,
7
+ NgbStepperStep,
8
+ provideStep,
9
+ provideStepper,
10
+ slideAnimation,
11
+ } from '@ngbase/adk/stepper';
12
+
13
+ @Component({
14
+ selector: '<%= name %>-stepper',
15
+ exportAs: '<%= name %>Stepper',
16
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
+ providers: [provideStepper(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: [slideAnimation],
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-0.5 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,89 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';
3
+ import {
4
+ NgbTab,
5
+ NgbTabHeader,
6
+ NgbTabLazy,
7
+ NgbTabs,
8
+ provideTab,
9
+ provideTabs,
10
+ TabButton,
11
+ TabButtonsGroup,
12
+ TabScroll,
13
+ } from '@ngbase/adk/tabs';
14
+ import { Icon } from '<%= basepath %>/icon';
15
+ import { provideIcons } from '@ng-icons/core';
16
+ import { lucideChevronLeft, lucideChevronRight } from '@ng-icons/lucide';
17
+
18
+ @Component({
19
+ selector: '<%= name %>-tabs',
20
+ imports: [Icon, TabButton, TabButtonsGroup, TabScroll],
21
+ changeDetection: ChangeDetectionStrategy.OnPush,
22
+ providers: [provideTabs(Tabs)],
23
+ viewProviders: [provideIcons({ lucideChevronRight, lucideChevronLeft })],
24
+ template: `<div class="flex items-center border-b">
25
+ <ng-content select=".tab-start-header-content" />
26
+ <div class="relative flex overflow-hidden">
27
+ <button
28
+ ngbTabScroll="left"
29
+ class="absolute left-0 z-10 h-full place-items-center bg-foreground px-2"
30
+ >
31
+ <<%= name %>-icon name="lucideChevronLeft" />
32
+ </button>
33
+ <nav ngbTabButtonsGroup class="overflow-auto">
34
+ <div #tabListContainer class="flex h-full w-max">
35
+ @for (tab of tabs(); track tab.id) {
36
+ <button
37
+ [ngbTabButton]="tab"
38
+ class="whitespace-nowrap border-b-2 border-transparent 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"
39
+ ></button>
40
+ }
41
+ </div>
42
+ </nav>
43
+ <button
44
+ ngbTabScroll="right"
45
+ class="absolute right-0 z-10 h-full place-items-center bg-foreground px-2"
46
+ >
47
+ <<%= name %>-icon name="lucideChevronRight" />
48
+ </button>
49
+ </div>
50
+ <ng-content select=".tab-header-content" />
51
+ </div>
52
+ <ng-content /> `,
53
+ host: {
54
+ class: 'bg-foreground flex flex-col',
55
+ },
56
+ })
57
+ export class Tabs extends NgbTabs<Tab> {}
58
+
59
+ @Component({
60
+ selector: '<%= name %>-tab',
61
+ exportAs: '<%= name %>Tab',
62
+ changeDetection: ChangeDetectionStrategy.OnPush,
63
+ providers: [provideTab(Tab)],
64
+ imports: [NgTemplateOutlet],
65
+ template: `
66
+ @if (lazyTemplate(); as template) {
67
+ <ng-container *ngTemplateOutlet="template" />
68
+ } @else if (activeMode()) {
69
+ <ng-content />
70
+ }
71
+ `,
72
+ host: {
73
+ class: 'block overflow-auto',
74
+ '[class]': `active() ? 'flex-1 h-full pt-4' : 'hidden'`,
75
+ },
76
+ })
77
+ export class Tab extends NgbTab {}
78
+
79
+ @Directive({
80
+ selector: '[<%= name %>TabHeader]',
81
+ hostDirectives: [NgbTabHeader],
82
+ })
83
+ export class TabHeader {}
84
+
85
+ @Directive({
86
+ selector: '[<%= name %>TabLazy]',
87
+ hostDirectives: [NgbTabLazy],
88
+ })
89
+ export class TabLazy {}
@@ -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
+ }