@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.
- package/README.md +1 -1
- package/accordion/accordion-item.d.ts +4 -0
- package/accordion/public-api.d.ts +1 -1
- package/autocomplete/autocomplete.d.ts +2 -2
- package/avatar/avatar.d.ts +1 -1
- package/breadcrumb/breadcrumb.d.ts +2 -3
- package/breadcrumb/public-api.d.ts +1 -1
- package/carousel/carousel.d.ts +1 -1
- package/chip/chip.d.ts +2 -2
- package/datepicker/calendar.d.ts +3 -3
- package/datepicker/datepicker.d.ts +2 -2
- package/datepicker/time.d.ts +2 -2
- package/dialog/dialog.d.ts +1 -1
- package/fesm2022/ngbase-adk-accordion.mjs +4 -1
- package/fesm2022/ngbase-adk-accordion.mjs.map +1 -1
- package/fesm2022/ngbase-adk-autocomplete.mjs +7 -36
- package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -1
- package/fesm2022/ngbase-adk-avatar.mjs +2 -2
- package/fesm2022/ngbase-adk-avatar.mjs.map +1 -1
- package/fesm2022/ngbase-adk-breadcrumb.mjs +2 -2
- package/fesm2022/ngbase-adk-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngbase-adk-carousel.mjs +2 -2
- package/fesm2022/ngbase-adk-carousel.mjs.map +1 -1
- package/fesm2022/ngbase-adk-chip.mjs +4 -2
- package/fesm2022/ngbase-adk-chip.mjs.map +1 -1
- package/fesm2022/ngbase-adk-datepicker.mjs +114 -328
- package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -1
- package/fesm2022/ngbase-adk-dialog.mjs +18 -19
- package/fesm2022/ngbase-adk-dialog.mjs.map +1 -1
- package/fesm2022/ngbase-adk-form-field.mjs +2 -156
- package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
- package/fesm2022/ngbase-adk-menu.mjs +15 -30
- package/fesm2022/ngbase-adk-menu.mjs.map +1 -1
- package/fesm2022/ngbase-adk-otp.mjs +164 -0
- package/fesm2022/ngbase-adk-otp.mjs.map +1 -0
- package/fesm2022/ngbase-adk-pagination.mjs +8 -65
- package/fesm2022/ngbase-adk-pagination.mjs.map +1 -1
- package/fesm2022/ngbase-adk-popover.mjs +423 -548
- package/fesm2022/ngbase-adk-popover.mjs.map +1 -1
- package/fesm2022/ngbase-adk-portal.mjs +0 -1
- package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
- package/fesm2022/ngbase-adk-radio.mjs +2 -16
- package/fesm2022/ngbase-adk-radio.mjs.map +1 -1
- package/fesm2022/ngbase-adk-resizable.mjs +10 -43
- package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
- package/fesm2022/ngbase-adk-select.mjs +67 -173
- package/fesm2022/ngbase-adk-select.mjs.map +1 -1
- package/fesm2022/ngbase-adk-sheet.mjs +95 -0
- package/fesm2022/ngbase-adk-sheet.mjs.map +1 -0
- package/fesm2022/ngbase-adk-sidenav.mjs +2 -2
- package/fesm2022/ngbase-adk-sidenav.mjs.map +1 -1
- package/fesm2022/ngbase-adk-slider.mjs +9 -23
- package/fesm2022/ngbase-adk-slider.mjs.map +1 -1
- package/fesm2022/ngbase-adk-sonner.mjs +13 -63
- package/fesm2022/ngbase-adk-sonner.mjs.map +1 -1
- package/fesm2022/ngbase-adk-stepper.mjs +16 -114
- package/fesm2022/ngbase-adk-stepper.mjs.map +1 -1
- package/fesm2022/ngbase-adk-switch.mjs +2 -2
- package/fesm2022/ngbase-adk-switch.mjs.map +1 -1
- package/fesm2022/ngbase-adk-table.mjs +10 -30
- package/fesm2022/ngbase-adk-table.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tabs.mjs +14 -94
- package/fesm2022/ngbase-adk-tabs.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tooltip.mjs +49 -39
- package/fesm2022/ngbase-adk-tooltip.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tour.mjs +1 -1
- package/fesm2022/ngbase-adk-tour.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tree.mjs +11 -43
- package/fesm2022/ngbase-adk-tree.mjs.map +1 -1
- package/form-field/public-api.d.ts +0 -1
- package/menu/menu-trigger.d.ts +2 -2
- package/menu/menu.d.ts +6 -6
- package/otp/index.d.ts +5 -0
- package/{form-field → otp}/otp.d.ts +1 -1
- package/otp/public-api.d.ts +1 -0
- package/package.json +22 -13
- package/pagination/pagination.d.ts +5 -1
- package/popover/popover-arrow.ng.d.ts +34 -0
- package/popover/popover.d.ts +12 -3
- package/popover/popover.service.d.ts +5 -4
- package/popover/public-api.d.ts +1 -0
- package/popover/utils.d.ts +32 -48
- package/portal/dialog-ref.d.ts +0 -1
- package/resizable/resizable-group.d.ts +2 -2
- package/resizable/resizable.d.ts +2 -2
- package/schematics/collection.json +15 -0
- package/schematics/components/files/accordion/accordion.ts.template +53 -0
- package/schematics/components/files/accordion/index.ts.template +5 -0
- package/schematics/components/files/alert/alert.ts.template +62 -0
- package/schematics/components/files/alert/index.ts.template +1 -0
- package/schematics/components/files/autocomplete/autocomplete.ts.template +44 -0
- package/schematics/components/files/autocomplete/index.ts.template +5 -0
- package/schematics/components/files/avatar/avatar.ts.template +31 -0
- package/schematics/components/files/avatar/index.ts.template +1 -0
- package/schematics/components/files/badge/badge.ts.template +11 -0
- package/schematics/components/files/badge/index.ts.template +1 -0
- package/schematics/components/files/breadcrumb/breadcrumb.ts.template +49 -0
- package/schematics/components/files/breadcrumb/index.ts.template +1 -0
- package/schematics/components/files/button/button.ts.template +29 -0
- package/schematics/components/files/button/index.ts.template +5 -0
- package/schematics/components/files/card/card.ts.template +11 -0
- package/schematics/components/files/card/index.ts.template +5 -0
- package/schematics/components/files/carousel/carousel.ts.template +44 -0
- package/schematics/components/files/carousel/index.ts.template +1 -0
- package/schematics/components/files/checkbox/checkbox.ts.template +46 -0
- package/schematics/components/files/checkbox/focus-style.directive.ts.template +12 -0
- package/schematics/components/files/checkbox/index.ts.template +6 -0
- package/schematics/components/files/chip/chip.ts.template +36 -0
- package/schematics/components/files/chip/index.ts.template +1 -0
- package/schematics/components/files/color-picker/color-picker.ts.template +104 -0
- package/schematics/components/files/color-picker/index.ts.template +5 -0
- package/schematics/components/files/command/command.ts.template +82 -0
- package/schematics/components/files/command/index.ts.template +1 -0
- package/schematics/components/files/datepicker/calendar.ts.template +117 -0
- package/schematics/components/files/datepicker/datepicker.ts.template +58 -0
- package/schematics/components/files/datepicker/index.ts.template +2 -0
- package/schematics/components/files/datepicker/time.ts.template +54 -0
- package/schematics/components/files/dialog/dialog.ts.template +89 -0
- package/schematics/components/files/dialog/index.ts.template +5 -0
- package/schematics/components/files/drawer/drawer.ts.template +104 -0
- package/schematics/components/files/drawer/index.ts.template +5 -0
- package/schematics/components/files/form-field/form-field.ts.template +111 -0
- package/schematics/components/files/form-field/index.ts.template +6 -0
- package/schematics/components/files/form-field/input-style.directive.ts.template +11 -0
- package/schematics/components/files/hover-card/hover-card.ts.template +13 -0
- package/schematics/components/files/hover-card/index.ts.template +5 -0
- package/schematics/components/files/icon/icon.ts.template +16 -0
- package/schematics/components/files/icon/index.ts.template +1 -0
- package/schematics/components/files/inline-edit/index.ts.template +1 -0
- package/schematics/components/files/inline-edit/inline-edit.ts.template +24 -0
- package/schematics/components/files/keys/index.ts.template +5 -0
- package/schematics/components/files/keys/key.ts.template +35 -0
- package/schematics/components/files/list/index.ts.template +5 -0
- package/schematics/components/files/list/list.ts.template +28 -0
- package/schematics/components/files/mask/index.ts.template +1 -0
- package/schematics/components/files/mask/mask.ts.template +8 -0
- package/schematics/components/files/menu/context-menu.ts.template +14 -0
- package/schematics/components/files/menu/index.ts.template +8 -0
- package/schematics/components/files/menu/mention.ts.template +14 -0
- package/schematics/components/files/menu/menu.ts.template +37 -0
- package/schematics/components/files/menu/navigation-menu.ts.template +8 -0
- package/schematics/components/files/otp/index.ts.template +5 -0
- package/schematics/components/files/otp/otp.ts.template +37 -0
- package/schematics/components/files/pagination/index.ts.template +1 -0
- package/schematics/components/files/pagination/pagination.ts.template +71 -0
- package/schematics/components/files/picasa/index.ts.template +1 -0
- package/schematics/components/files/picasa/picasa-base.component.ts.template +80 -0
- package/schematics/components/files/picasa/picasa.component.ts.template +57 -0
- package/schematics/components/files/picasa/picasa.directive.ts.template +41 -0
- package/schematics/components/files/picasa/picase.service.ts.template +24 -0
- package/schematics/components/files/popover/index.ts.template +1 -0
- package/schematics/components/files/popover/popover.ts.template +64 -0
- package/schematics/components/files/progress/index.ts.template +5 -0
- package/schematics/components/files/progress/progress.ts.template +14 -0
- package/schematics/components/files/radio/index.ts.template +5 -0
- package/schematics/components/files/radio/radio.ts.template +35 -0
- package/schematics/components/files/resizable/index.ts.template +5 -0
- package/schematics/components/files/resizable/resizable.ts.template +56 -0
- package/schematics/components/files/scroll-area/index.ts.template +1 -0
- package/schematics/components/files/scroll-area/scroll-area.ts.template +40 -0
- package/schematics/components/files/select/index.ts.template +8 -0
- package/schematics/components/files/select/list-selection.ts.template +15 -0
- package/schematics/components/files/select/option.ts.template +35 -0
- package/schematics/components/files/select/select-input.ts.template +21 -0
- package/schematics/components/files/select/select.ts.template +96 -0
- package/schematics/components/files/selectable/index.ts.template +1 -0
- package/schematics/components/files/selectable/selectable.ts.template +34 -0
- package/schematics/components/files/separator/index.ts.template +5 -0
- package/schematics/components/files/separator/separator.ts.template +19 -0
- package/schematics/components/files/sheet/index.ts.template +5 -0
- package/schematics/components/files/sheet/sheet.ts.template +69 -0
- package/schematics/components/files/sidenav/index.ts.template +1 -0
- package/schematics/components/files/sidenav/sidenav.ts.template +48 -0
- package/schematics/components/files/skeleton/index.ts.template +1 -0
- package/schematics/components/files/skeleton/skeleton.ts.template +15 -0
- package/schematics/components/files/slider/index.ts.template +5 -0
- package/schematics/components/files/slider/slider.ts.template +35 -0
- package/schematics/components/files/sonner/index.ts.template +5 -0
- package/schematics/components/files/sonner/sonner.ts.template +59 -0
- package/schematics/components/files/spinner/index.ts.template +1 -0
- package/schematics/components/files/spinner/spinner.ts.template +79 -0
- package/schematics/components/files/stepper/index.ts.template +1 -0
- package/schematics/components/files/stepper/stepper.ts.template +88 -0
- package/schematics/components/files/switch/index.ts.template +5 -0
- package/schematics/components/files/switch/switch.ts.template +29 -0
- package/schematics/components/files/table/body-cell.ts.template +19 -0
- package/schematics/components/files/table/body-row.ts.template +21 -0
- package/schematics/components/files/table/column.ts.template +8 -0
- package/schematics/components/files/table/head-cell.ts.template +19 -0
- package/schematics/components/files/table/head-row.ts.template +27 -0
- package/schematics/components/files/table/index.ts.template +26 -0
- package/schematics/components/files/table/table.ts.template +20 -0
- package/schematics/components/files/tabs/index.ts.template +5 -0
- package/schematics/components/files/tabs/tab.ts.template +92 -0
- package/schematics/components/files/theme/index.ts.template +2 -0
- package/schematics/components/files/theme/theme-button.component.ts.template +26 -0
- package/schematics/components/files/theme/theme.service.ts.template +33 -0
- package/schematics/components/files/toggle/index.ts.template +5 -0
- package/schematics/components/files/toggle/toggle.ts.template +13 -0
- package/schematics/components/files/toggle-group/index.ts.template +5 -0
- package/schematics/components/files/toggle-group/toggle-group.ts.template +25 -0
- package/schematics/components/files/tooltip/index.ts.template +5 -0
- package/schematics/components/files/tooltip/tooltip.ts.template +45 -0
- package/schematics/components/files/tour/index.ts.template +1 -0
- package/schematics/components/files/tour/tour.ts.template +19 -0
- package/schematics/components/files/tree/index.ts.template +1 -0
- package/schematics/components/files/tree/tree.ts.template +66 -0
- package/schematics/components/index.d.ts +3 -0
- package/schematics/components/index.js +17 -0
- package/schematics/components/index.js.map +1 -0
- package/schematics/components/index.ts +29 -0
- package/schematics/components/schema.d.ts +6 -0
- package/schematics/components/schema.js +3 -0
- package/schematics/components/schema.js.map +1 -0
- package/schematics/components/schema.json +145 -0
- package/schematics/components/schema.ts +6 -0
- package/select/option-group.d.ts +3 -3
- package/select/select.d.ts +2 -2
- package/sheet/index.d.ts +5 -0
- package/sheet/public-api.d.ts +2 -0
- package/sheet/sheet.d.ts +26 -0
- package/sheet/sheet.service.d.ts +13 -0
- package/sidenav/public-api.d.ts +1 -1
- package/sidenav/sidenav.d.ts +1 -1
- package/slider/public-api.d.ts +1 -1
- package/slider/slider.d.ts +5 -5
- package/sonner/sonner.d.ts +2 -1
- package/stepper/animation.d.ts +1 -1
- package/stepper/step.d.ts +1 -1
- package/stepper/stepper.d.ts +2 -2
- package/switch/switch.d.ts +1 -1
- package/table/body-row.d.ts +3 -3
- package/table/head-row.d.ts +3 -3
- package/table/table.d.ts +1 -1
- package/tabs/tab-group.d.ts +4 -4
- package/tabs/tab.d.ts +2 -2
- package/tooltip/public-api.d.ts +1 -1
- package/tooltip/tooltip.d.ts +5 -1
- package/tooltip/tooltip.directive.d.ts +1 -1
- package/tooltip/tooltip.service.d.ts +4 -2
- package/tour/tour.service.d.ts +3 -4
- package/tree/public-api.d.ts +2 -2
- package/tree/tree-node.d.ts +2 -2
- 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,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,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,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,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,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
|
+
}
|