@spartan-ng/cli 1.3.4-beta.2 → 1.4.0-beta.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 (30) hide show
  1. package/package.json +1 -1
  2. package/src/generators/ui/libs/questionnaire/files/index.ts.template +49 -0
  3. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-actions.ts.template +17 -0
  4. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-choice-description.ts.template +15 -0
  5. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-choice.ts.template +74 -0
  6. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-choices.ts.template +17 -0
  7. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-description.ts.template +22 -0
  8. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-error.ts.template +32 -0
  9. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-input.ts.template +25 -0
  10. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-item.ts.template +23 -0
  11. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-next.ts.template +31 -0
  12. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-previous.ts.template +31 -0
  13. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-progress.ts.template +42 -0
  14. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-skip.ts.template +31 -0
  15. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-submit.ts.template +31 -0
  16. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire-title.ts.template +17 -0
  17. package/src/generators/ui/libs/questionnaire/files/lib/hlm-questionnaire.ts.template +23 -0
  18. package/src/generators/ui/libs/questionnaire/generator.d.ts +3 -0
  19. package/src/generators/ui/libs/questionnaire/generator.js +9 -0
  20. package/src/generators/ui/libs/questionnaire/generator.js.map +1 -0
  21. package/src/generators/ui/primitive-deps.js +1 -0
  22. package/src/generators/ui/primitive-deps.js.map +1 -1
  23. package/src/generators/ui/primitives.d.ts +1 -1
  24. package/src/generators/ui/style-luma.css +65 -0
  25. package/src/generators/ui/style-lyra.css +65 -0
  26. package/src/generators/ui/style-maia.css +65 -0
  27. package/src/generators/ui/style-mira.css +65 -0
  28. package/src/generators/ui/style-nova.css +65 -0
  29. package/src/generators/ui/style-vega.css +65 -0
  30. package/src/generators/ui/supported-ui-libraries.json +50 -41
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spartan-ng/cli",
3
- "version": "1.3.4-beta.2",
3
+ "version": "1.4.0-beta.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/spartan-ng/spartan.git"
@@ -0,0 +1,49 @@
1
+ import { HlmQuestionnaire } from './lib/hlm-questionnaire';
2
+ import { HlmQuestionnaireActions } from './lib/hlm-questionnaire-actions';
3
+ import { HlmQuestionnaireChoice } from './lib/hlm-questionnaire-choice';
4
+ import { HlmQuestionnaireChoiceDescription } from './lib/hlm-questionnaire-choice-description';
5
+ import { HlmQuestionnaireChoices } from './lib/hlm-questionnaire-choices';
6
+ import { HlmQuestionnaireDescription } from './lib/hlm-questionnaire-description';
7
+ import { HlmQuestionnaireError } from './lib/hlm-questionnaire-error';
8
+ import { HlmQuestionnaireInput } from './lib/hlm-questionnaire-input';
9
+ import { HlmQuestionnaireItem } from './lib/hlm-questionnaire-item';
10
+ import { HlmQuestionnaireNext } from './lib/hlm-questionnaire-next';
11
+ import { HlmQuestionnairePrevious } from './lib/hlm-questionnaire-previous';
12
+ import { HlmQuestionnaireProgress } from './lib/hlm-questionnaire-progress';
13
+ import { HlmQuestionnaireSkip } from './lib/hlm-questionnaire-skip';
14
+ import { HlmQuestionnaireSubmit } from './lib/hlm-questionnaire-submit';
15
+ import { HlmQuestionnaireTitle } from './lib/hlm-questionnaire-title';
16
+
17
+ export * from './lib/hlm-questionnaire';
18
+ export * from './lib/hlm-questionnaire-actions';
19
+ export * from './lib/hlm-questionnaire-choice';
20
+ export * from './lib/hlm-questionnaire-choice-description';
21
+ export * from './lib/hlm-questionnaire-choices';
22
+ export * from './lib/hlm-questionnaire-description';
23
+ export * from './lib/hlm-questionnaire-error';
24
+ export * from './lib/hlm-questionnaire-input';
25
+ export * from './lib/hlm-questionnaire-item';
26
+ export * from './lib/hlm-questionnaire-next';
27
+ export * from './lib/hlm-questionnaire-previous';
28
+ export * from './lib/hlm-questionnaire-progress';
29
+ export * from './lib/hlm-questionnaire-skip';
30
+ export * from './lib/hlm-questionnaire-submit';
31
+ export * from './lib/hlm-questionnaire-title';
32
+
33
+ export const HlmQuestionnaireImports = [
34
+ HlmQuestionnaire,
35
+ HlmQuestionnaireProgress,
36
+ HlmQuestionnaireItem,
37
+ HlmQuestionnaireTitle,
38
+ HlmQuestionnaireDescription,
39
+ HlmQuestionnaireChoices,
40
+ HlmQuestionnaireChoice,
41
+ HlmQuestionnaireChoiceDescription,
42
+ HlmQuestionnaireInput,
43
+ HlmQuestionnaireError,
44
+ HlmQuestionnaireActions,
45
+ HlmQuestionnairePrevious,
46
+ HlmQuestionnaireSkip,
47
+ HlmQuestionnaireNext,
48
+ HlmQuestionnaireSubmit,
49
+ ] as const;
@@ -0,0 +1,17 @@
1
+ import { Directive } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmQuestionnaireActions],hlm-questionnaire-actions',
6
+ exportAs: 'hlmQuestionnaireActions',
7
+ host: {
8
+ 'data-slot': 'questionnaire-actions',
9
+ },
10
+ })
11
+ export class HlmQuestionnaireActions {
12
+ constructor() {
13
+ classes(
14
+ () => 'spartan-questionnaire-actions grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center',
15
+ );
16
+ }
17
+ }
@@ -0,0 +1,15 @@
1
+ import { Directive } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmQuestionnaireChoiceDescription]',
6
+ exportAs: 'hlmQuestionnaireChoiceDescription',
7
+ host: {
8
+ 'data-slot': 'questionnaire-choice-description',
9
+ },
10
+ })
11
+ export class HlmQuestionnaireChoiceDescription {
12
+ constructor() {
13
+ classes(() => 'spartan-questionnaire-choice-description');
14
+ }
15
+ }
@@ -0,0 +1,74 @@
1
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
+ import { NgIcon, provideIcons } from '@ng-icons/core';
3
+ import { lucideCheck } from '@ng-icons/lucide';
4
+ import {
5
+ BrnQuestionnaireChoice,
6
+ BrnQuestionnaireChoiceInput,
7
+ BrnQuestionnaireChoiceLabel,
8
+ BrnQuestionnaireChoiceShortcut,
9
+ } from '@spartan-ng/brain/questionnaire';
10
+ import { classes } from '<%- importAlias %>/utils';
11
+
12
+ @Component({
13
+ // eslint-disable-next-line @angular-eslint/component-selector -- attribute selector on native label
14
+ selector: 'label[hlmQuestionnaireChoice]',
15
+ exportAs: 'hlmQuestionnaireChoice',
16
+ imports: [BrnQuestionnaireChoiceInput, BrnQuestionnaireChoiceLabel, BrnQuestionnaireChoiceShortcut, NgIcon],
17
+ viewProviders: [provideIcons({ lucideCheck })],
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ hostDirectives: [
20
+ {
21
+ directive: BrnQuestionnaireChoice,
22
+ inputs: ['value', 'disabled', 'defaultChecked', 'checked'],
23
+ outputs: ['checkedChange'],
24
+ },
25
+ ],
26
+ host: {
27
+ 'data-slot': 'questionnaire-choice',
28
+ },
29
+ template: `
30
+ <input
31
+ brnQuestionnaireChoiceInput
32
+ data-slot="questionnaire-choice-input"
33
+ class="spartan-questionnaire-choice-input absolute inset-0 z-10 size-full cursor-pointer opacity-0"
34
+ />
35
+ <span aria-hidden="true" data-slot="questionnaire-choice-indicator" class="spartan-questionnaire-choice-indicator">
36
+ @if (_choice.checked() && _choice.type() === 'radio') {
37
+ <span data-slot="questionnaire-choice-indicator-dot" class="spartan-questionnaire-choice-indicator-dot"></span>
38
+ }
39
+ @if (_choice.checked() && _choice.type() === 'checkbox') {
40
+ <ng-icon
41
+ name="lucideCheck"
42
+ data-slot="questionnaire-choice-indicator-check"
43
+ class="spartan-questionnaire-choice-indicator-check"
44
+ />
45
+ }
46
+ </span>
47
+ <span
48
+ brnQuestionnaireChoiceLabel
49
+ data-slot="questionnaire-choice-label"
50
+ class="spartan-questionnaire-choice-content flex min-w-0 flex-1 flex-col leading-snug"
51
+ >
52
+ <ng-content />
53
+ </span>
54
+ @if (_choice.shortcut(); as shortcut) {
55
+ <span
56
+ brnQuestionnaireChoiceShortcut
57
+ data-slot="questionnaire-choice-shortcut"
58
+ class="spartan-questionnaire-shortcut"
59
+ >
60
+ {{ shortcut }}
61
+ </span>
62
+ }
63
+ `,
64
+ })
65
+ export class HlmQuestionnaireChoice {
66
+ protected readonly _choice = inject(BrnQuestionnaireChoice);
67
+
68
+ constructor() {
69
+ classes(
70
+ () =>
71
+ 'spartan-questionnaire-choice group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start text-start outline-none select-none',
72
+ );
73
+ }
74
+ }
@@ -0,0 +1,17 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnQuestionnaireChoices } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmQuestionnaireChoices]',
7
+ exportAs: 'hlmQuestionnaireChoices',
8
+ hostDirectives: [{ directive: BrnQuestionnaireChoices }],
9
+ host: {
10
+ 'data-slot': 'questionnaire-choices',
11
+ },
12
+ })
13
+ export class HlmQuestionnaireChoices {
14
+ constructor() {
15
+ classes(() => 'spartan-questionnaire-choices group/questionnaire-choices grid min-w-0');
16
+ }
17
+ }
@@ -0,0 +1,22 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnQuestionnaireDescription } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmQuestionnaireDescription]',
7
+ exportAs: 'hlmQuestionnaireDescription',
8
+ hostDirectives: [
9
+ {
10
+ directive: BrnQuestionnaireDescription,
11
+ inputs: ['id'],
12
+ },
13
+ ],
14
+ host: {
15
+ 'data-slot': 'questionnaire-description',
16
+ },
17
+ })
18
+ export class HlmQuestionnaireDescription {
19
+ constructor() {
20
+ classes(() => 'spartan-questionnaire-description text-muted-foreground text-pretty');
21
+ }
22
+ }
@@ -0,0 +1,32 @@
1
+ import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
2
+ import { BrnQuestionnaireError } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Component({
6
+ // eslint-disable-next-line @angular-eslint/component-selector -- attribute selector matching brain API
7
+ selector: '[hlmQuestionnaireError]',
8
+ exportAs: 'hlmQuestionnaireError',
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ hostDirectives: [
11
+ {
12
+ directive: BrnQuestionnaireError,
13
+ inputs: ['id', 'requiredMessage', 'optionalMessage'],
14
+ },
15
+ ],
16
+ host: {
17
+ 'data-slot': 'questionnaire-error',
18
+ },
19
+ template: `
20
+ {{ message() ?? _error.defaultMessage() }}
21
+ `,
22
+ })
23
+ export class HlmQuestionnaireError {
24
+ protected readonly _error = inject(BrnQuestionnaireError);
25
+
26
+ /** Custom error copy; falls back to the built-in required/optional message when unset. */
27
+ public readonly message = input<string | undefined>(undefined);
28
+
29
+ constructor() {
30
+ classes(() => 'spartan-questionnaire-error text-destructive');
31
+ }
32
+ }
@@ -0,0 +1,25 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnQuestionnaireInput } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: 'input[hlmQuestionnaireInput]',
7
+ exportAs: 'hlmQuestionnaireInput',
8
+ hostDirectives: [
9
+ {
10
+ directive: BrnQuestionnaireInput,
11
+ inputs: ['type', 'disabled', 'value', 'defaultValue'],
12
+ },
13
+ ],
14
+ host: {
15
+ 'data-slot': 'questionnaire-input',
16
+ },
17
+ })
18
+ export class HlmQuestionnaireInput {
19
+ constructor() {
20
+ classes(() => [
21
+ 'spartan-questionnaire-input min-h-11 w-full min-w-0 transition-[color,box-shadow,background-color] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 sm:min-h-0',
22
+ 'selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground',
23
+ ]);
24
+ }
25
+ }
@@ -0,0 +1,23 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnQuestionnaireItem } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: 'fieldset[hlmQuestionnaireItem]',
7
+ exportAs: 'hlmQuestionnaireItem',
8
+ hostDirectives: [
9
+ {
10
+ directive: BrnQuestionnaireItem,
11
+ inputs: ['name', 'multiple', 'required', 'disabled', 'itemInvalid', 'aria-describedby', 'aria-keyshortcuts'],
12
+ outputs: ['statusChange'],
13
+ },
14
+ ],
15
+ host: {
16
+ 'data-slot': 'questionnaire-item',
17
+ },
18
+ })
19
+ export class HlmQuestionnaireItem {
20
+ constructor() {
21
+ classes(() => 'spartan-questionnaire-item flex min-w-0 flex-col border-0 p-0 outline-none');
22
+ }
23
+ }
@@ -0,0 +1,31 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import { BrnQuestionnaireNext } from '@spartan-ng/brain/questionnaire';
3
+ import { type ButtonVariants, buttonVariants } from '<%- importAlias %>/button';
4
+ import { classes } from '<%- importAlias %>/utils';
5
+
6
+ @Directive({
7
+ selector: 'button[hlmQuestionnaireNext]',
8
+ exportAs: 'hlmQuestionnaireNext',
9
+ hostDirectives: [
10
+ {
11
+ directive: BrnQuestionnaireNext,
12
+ inputs: ['disabled'],
13
+ },
14
+ ],
15
+ host: {
16
+ 'data-slot': 'questionnaire-next',
17
+ '[attr.data-size]': 'size()',
18
+ '[attr.data-variant]': 'variant()',
19
+ },
20
+ })
21
+ export class HlmQuestionnaireNext {
22
+ public readonly variant = input<ButtonVariants['variant']>('default');
23
+ public readonly size = input<ButtonVariants['size']>('default');
24
+
25
+ constructor() {
26
+ classes(() => [
27
+ buttonVariants({ variant: this.variant(), size: this.size() }),
28
+ 'col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0',
29
+ ]);
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import { BrnQuestionnairePrevious } from '@spartan-ng/brain/questionnaire';
3
+ import { type ButtonVariants, buttonVariants } from '<%- importAlias %>/button';
4
+ import { classes } from '<%- importAlias %>/utils';
5
+
6
+ @Directive({
7
+ selector: 'button[hlmQuestionnairePrevious]',
8
+ exportAs: 'hlmQuestionnairePrevious',
9
+ hostDirectives: [
10
+ {
11
+ directive: BrnQuestionnairePrevious,
12
+ inputs: ['disabled'],
13
+ },
14
+ ],
15
+ host: {
16
+ 'data-slot': 'questionnaire-previous',
17
+ '[attr.data-size]': 'size()',
18
+ '[attr.data-variant]': 'variant()',
19
+ },
20
+ })
21
+ export class HlmQuestionnairePrevious {
22
+ public readonly variant = input<ButtonVariants['variant']>('outline');
23
+ public readonly size = input<ButtonVariants['size']>('default');
24
+
25
+ constructor() {
26
+ classes(() => [
27
+ buttonVariants({ variant: this.variant(), size: this.size() }),
28
+ 'col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0',
29
+ ]);
30
+ }
31
+ }
@@ -0,0 +1,42 @@
1
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
+ import { BrnQuestionnaireProgress } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Component({
6
+ // eslint-disable-next-line @angular-eslint/component-selector -- attribute selector matching brain API
7
+ selector: '[hlmQuestionnaireProgress]',
8
+ exportAs: 'hlmQuestionnaireProgress',
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ hostDirectives: [{ directive: BrnQuestionnaireProgress, inputs: ['aria-label', 'valueText'] }],
11
+ host: {
12
+ 'data-slot': 'questionnaire-progress',
13
+ },
14
+ template: `
15
+ <ng-content>
16
+ {{ _progress.label() }}
17
+ </ng-content>
18
+ `,
19
+ })
20
+ export class HlmQuestionnaireProgress {
21
+ protected readonly _progress = inject(BrnQuestionnaireProgress);
22
+
23
+ /** The current step index (1-based within the active collection). */
24
+ public readonly current = this._progress.current;
25
+ /** The total number of enabled steps. */
26
+ public readonly total = this._progress.total;
27
+ /** Whether the current step is the first one. */
28
+ public readonly first = this._progress.first;
29
+ /** Whether the current step is the last one. */
30
+ public readonly last = this._progress.last;
31
+ /** The computed progression label, e.g. "Question 2 of 5". */
32
+ public readonly label = this._progress.label;
33
+
34
+ /** Boolean flags marking which segments of the progress bar are filled. */
35
+ public readonly segments = this._progress.segments;
36
+
37
+ constructor() {
38
+ classes(
39
+ () => 'spartan-questionnaire-progress text-muted-foreground min-h-lh w-fit min-w-[14ch] font-medium tabular-nums',
40
+ );
41
+ }
42
+ }
@@ -0,0 +1,31 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import { BrnQuestionnaireSkip } from '@spartan-ng/brain/questionnaire';
3
+ import { type ButtonVariants, buttonVariants } from '<%- importAlias %>/button';
4
+ import { classes } from '<%- importAlias %>/utils';
5
+
6
+ @Directive({
7
+ selector: 'button[hlmQuestionnaireSkip]',
8
+ exportAs: 'hlmQuestionnaireSkip',
9
+ hostDirectives: [
10
+ {
11
+ directive: BrnQuestionnaireSkip,
12
+ inputs: ['disabled'],
13
+ },
14
+ ],
15
+ host: {
16
+ 'data-slot': 'questionnaire-skip',
17
+ '[attr.data-size]': 'size()',
18
+ '[attr.data-variant]': 'variant()',
19
+ },
20
+ })
21
+ export class HlmQuestionnaireSkip {
22
+ public readonly variant = input<ButtonVariants['variant']>('outline');
23
+ public readonly size = input<ButtonVariants['size']>('default');
24
+
25
+ constructor() {
26
+ classes(() => [
27
+ buttonVariants({ variant: this.variant(), size: this.size() }),
28
+ 'col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0',
29
+ ]);
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import { BrnQuestionnaireSubmit } from '@spartan-ng/brain/questionnaire';
3
+ import { type ButtonVariants, buttonVariants } from '<%- importAlias %>/button';
4
+ import { classes } from '<%- importAlias %>/utils';
5
+
6
+ @Directive({
7
+ selector: 'button[hlmQuestionnaireSubmit]',
8
+ exportAs: 'hlmQuestionnaireSubmit',
9
+ hostDirectives: [
10
+ {
11
+ directive: BrnQuestionnaireSubmit,
12
+ inputs: ['disabled'],
13
+ },
14
+ ],
15
+ host: {
16
+ 'data-slot': 'questionnaire-submit',
17
+ '[attr.data-size]': 'size()',
18
+ '[attr.data-variant]': 'variant()',
19
+ },
20
+ })
21
+ export class HlmQuestionnaireSubmit {
22
+ public readonly variant = input<ButtonVariants['variant']>('default');
23
+ public readonly size = input<ButtonVariants['size']>('default');
24
+
25
+ constructor() {
26
+ classes(() => [
27
+ buttonVariants({ variant: this.variant(), size: this.size() }),
28
+ 'col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0',
29
+ ]);
30
+ }
31
+ }
@@ -0,0 +1,17 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnQuestionnaireTitle } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: 'legend[hlmQuestionnaireTitle]',
7
+ exportAs: 'hlmQuestionnaireTitle',
8
+ hostDirectives: [{ directive: BrnQuestionnaireTitle }],
9
+ host: {
10
+ 'data-slot': 'questionnaire-title',
11
+ },
12
+ })
13
+ export class HlmQuestionnaireTitle {
14
+ constructor() {
15
+ classes(() => 'spartan-questionnaire-title text-pretty');
16
+ }
17
+ }
@@ -0,0 +1,23 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnQuestionnaire } from '@spartan-ng/brain/questionnaire';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: 'form[hlmQuestionnaire]',
7
+ exportAs: 'hlmQuestionnaire',
8
+ hostDirectives: [
9
+ {
10
+ directive: BrnQuestionnaire,
11
+ inputs: ['items', 'defaultItem', 'item', 'shortcuts', 'noValidate'],
12
+ outputs: ['itemChange'],
13
+ },
14
+ ],
15
+ host: {
16
+ 'data-slot': 'questionnaire',
17
+ },
18
+ })
19
+ export class HlmQuestionnaire {
20
+ constructor() {
21
+ classes(() => 'spartan-questionnaire flex w-full min-w-0 flex-col');
22
+ }
23
+ }
@@ -0,0 +1,3 @@
1
+ import type { Tree } from '@nx/devkit';
2
+ import type { HlmBaseGeneratorSchema } from '../../../base/schema';
3
+ export declare function generator(tree: Tree, options: HlmBaseGeneratorSchema): Promise<import("@nx/devkit").GeneratorCallback>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generator = generator;
4
+ const tslib_1 = require("tslib");
5
+ const generator_1 = tslib_1.__importDefault(require("../../../base/generator"));
6
+ async function generator(tree, options) {
7
+ return await (0, generator_1.default)(tree, { ...options, name: 'questionnaire' });
8
+ }
9
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/questionnaire/generator.ts"],"names":[],"mappings":";;AAIA,8BAEC;;AALD,gFAAuD;AAGhD,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,OAA+B;IAC1E,OAAO,MAAM,IAAA,mBAAgB,EAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -43,6 +43,7 @@ exports.primitiveDependencies = {
43
43
  pagination: ['utils', 'button', 'select'],
44
44
  popover: ['utils'],
45
45
  progress: ['utils'],
46
+ questionnaire: ['utils', 'button'],
46
47
  'radio-group': ['utils'],
47
48
  resizable: ['utils'],
48
49
  'scroll-area': ['utils'],
@@ -1 +1 @@
1
- {"version":3,"file":"primitive-deps.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/generators/ui/primitive-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"primitive-deps.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/generators/ui/primitive-deps.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export type Primitive = 'accordion' | 'alert' | 'alert-dialog' | 'aspect-ratio' | 'attachment' | 'autocomplete' | 'avatar' | 'badge' | 'breadcrumb' | 'bubble' | 'button' | 'button-group' | 'calendar' | 'card' | 'carousel' | 'checkbox' | 'collapsible' | 'combobox' | 'command' | 'context-menu' | 'date-picker' | 'dialog' | 'drawer' | 'dropdown-menu' | 'empty' | 'field' | 'hover-card' | 'input' | 'input-group' | 'input-otp' | 'item' | 'kbd' | 'label' | 'marker' | 'menubar' | 'message' | 'native-select' | 'navigation-menu' | 'pagination' | 'popover' | 'progress' | 'radio-group' | 'resizable' | 'scroll-area' | 'select' | 'separator' | 'sheet' | 'sidebar' | 'skeleton' | 'slider' | 'sonner' | 'spinner' | 'switch' | 'table' | 'tabs' | 'textarea' | 'toggle' | 'toggle-group' | 'tooltip' | 'typography' | 'utils';
1
+ export type Primitive = 'accordion' | 'alert' | 'alert-dialog' | 'aspect-ratio' | 'attachment' | 'autocomplete' | 'avatar' | 'badge' | 'breadcrumb' | 'bubble' | 'button' | 'button-group' | 'calendar' | 'card' | 'carousel' | 'checkbox' | 'collapsible' | 'combobox' | 'command' | 'context-menu' | 'date-picker' | 'dialog' | 'drawer' | 'dropdown-menu' | 'empty' | 'field' | 'hover-card' | 'input' | 'input-group' | 'input-otp' | 'item' | 'kbd' | 'label' | 'marker' | 'menubar' | 'message' | 'native-select' | 'navigation-menu' | 'pagination' | 'popover' | 'progress' | 'questionnaire' | 'radio-group' | 'resizable' | 'scroll-area' | 'select' | 'separator' | 'sheet' | 'sidebar' | 'skeleton' | 'slider' | 'sonner' | 'spinner' | 'switch' | 'table' | 'tabs' | 'textarea' | 'toggle' | 'toggle-group' | 'tooltip' | 'typography' | 'utils';
@@ -1048,6 +1048,71 @@
1048
1048
  @apply text-muted-foreground ms-auto text-sm tabular-nums;
1049
1049
  }
1050
1050
 
1051
+ /* MARK: Questionnaire */
1052
+ .spartan-questionnaire {
1053
+ @apply gap-6;
1054
+ }
1055
+
1056
+ .spartan-questionnaire-progress {
1057
+ @apply text-xs;
1058
+ }
1059
+
1060
+ .spartan-questionnaire-item {
1061
+ @apply gap-5;
1062
+ }
1063
+
1064
+ .spartan-questionnaire-title {
1065
+ @apply text-base font-semibold [&:not(:has(~[data-slot=questionnaire-description]))]:mb-5;
1066
+ }
1067
+
1068
+ .spartan-questionnaire-description {
1069
+ @apply text-sm;
1070
+ }
1071
+
1072
+ .spartan-questionnaire-choices {
1073
+ @apply gap-3;
1074
+ }
1075
+
1076
+ .spartan-questionnaire-choice {
1077
+ @apply border-input bg-input/20 hover:bg-input/40 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive data-checked:border-primary/40 data-checked:bg-primary/10 gap-2.5 rounded-3xl border px-4 py-3 text-sm transition-colors has-[>input:focus-visible]:ring-3 data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50;
1078
+ }
1079
+
1080
+ .spartan-questionnaire-choice-indicator {
1081
+ @apply bg-input/90 group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:group-data-checked/questionnaire-choice:bg-primary pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[5px] border border-transparent group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full;
1082
+ }
1083
+
1084
+ .spartan-questionnaire-choice-indicator-dot {
1085
+ @apply bg-primary-foreground size-2 rounded-full dark:size-2.5;
1086
+ }
1087
+
1088
+ .spartan-questionnaire-choice-indicator-check {
1089
+ @apply text-[length:--spacing(3.5)];
1090
+ }
1091
+
1092
+ .spartan-questionnaire-choice-content {
1093
+ @apply gap-1;
1094
+ }
1095
+
1096
+ .spartan-questionnaire-choice-description {
1097
+ @apply text-muted-foreground;
1098
+ }
1099
+
1100
+ .spartan-questionnaire-shortcut {
1101
+ @apply border-primary/10 bg-background/80 text-muted-foreground pointer-events-none ms-auto inline-flex size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-full border font-mono text-[0.625rem] leading-none font-medium group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5;
1102
+ }
1103
+
1104
+ .spartan-questionnaire-input {
1105
+ @apply bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-3xl border border-transparent px-3 py-1 text-base focus-visible:ring-3 aria-invalid:ring-3 md:text-sm;
1106
+ }
1107
+
1108
+ .spartan-questionnaire-error {
1109
+ @apply mt-2 text-sm;
1110
+ }
1111
+
1112
+ .spartan-questionnaire-actions {
1113
+ @apply gap-2 sm:min-h-9;
1114
+ }
1115
+
1051
1116
  /* MARK: Resizable */
1052
1117
  .spartan-resizable-handle-icon {
1053
1118
  @apply bg-border h-6 w-1 rounded-lg;