@spartan-ng/cli 0.0.1-alpha.603 → 0.0.1-alpha.605

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 (27) hide show
  1. package/package.json +1 -1
  2. package/src/generators/ui/libs/button/files/lib/hlm-button.ts.template +1 -0
  3. package/src/generators/ui/libs/combobox/files/index.ts.template +52 -0
  4. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-chip-input.ts.template +16 -0
  5. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-chip-remove.ts.template +17 -0
  6. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-chip.ts.template +37 -0
  7. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-chips.ts.template +19 -0
  8. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-content.ts.template +17 -0
  9. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-empty.ts.template +19 -0
  10. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-group.ts.template +16 -0
  11. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-input.ts.template +69 -0
  12. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-item.ts.template +38 -0
  13. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-label.ts.template +16 -0
  14. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-list.ts.template +19 -0
  15. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-multiple.ts.template +38 -0
  16. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-separator.ts.template +16 -0
  17. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-trigger.ts.template +42 -0
  18. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-value.ts.template +5 -0
  19. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-values.ts.template +5 -0
  20. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox.ts.template +38 -0
  21. package/src/generators/ui/libs/combobox/generator.d.ts +3 -0
  22. package/src/generators/ui/libs/combobox/generator.js +9 -0
  23. package/src/generators/ui/libs/combobox/generator.js.map +1 -0
  24. package/src/generators/ui/primitive-deps.js +1 -0
  25. package/src/generators/ui/primitive-deps.js.map +1 -1
  26. package/src/generators/ui/primitives.d.ts +1 -1
  27. package/src/generators/ui/supported-ui-libraries.json +49 -38
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spartan-ng/cli",
3
- "version": "0.0.1-alpha.603",
3
+ "version": "0.0.1-alpha.605",
4
4
  "type": "commonjs",
5
5
  "dependencies": {
6
6
  "@angular/core": ">=19.0.0",
@@ -24,6 +24,7 @@ export const buttonVariants = cva(
24
24
  sm: 'h-8 gap-1.5 rounded-md px-3 has-[>ng-icon]:px-2.5',
25
25
  lg: 'h-10 rounded-md px-6 has-[>ng-icon]:px-4',
26
26
  icon: 'size-9',
27
+ 'icon-xs': `size-6 [&_ng-icon:not([class*='text-'])]:text-xs`,
27
28
  'icon-sm': 'size-8',
28
29
  'icon-lg': 'size-10',
29
30
  },
@@ -0,0 +1,52 @@
1
+ import { HlmCombobox } from './lib/hlm-combobox';
2
+ import { HlmComboboxChip } from './lib/hlm-combobox-chip';
3
+ import { HlmComboboxChipInput } from './lib/hlm-combobox-chip-input';
4
+ import { HlmComboboxChips } from './lib/hlm-combobox-chips';
5
+ import { HlmComboboxContent } from './lib/hlm-combobox-content';
6
+ import { HlmComboboxEmpty } from './lib/hlm-combobox-empty';
7
+ import { HlmComboboxGroup } from './lib/hlm-combobox-group';
8
+ import { HlmComboboxInput } from './lib/hlm-combobox-input';
9
+ import { HlmComboboxItem } from './lib/hlm-combobox-item';
10
+ import { HlmComboboxLabel } from './lib/hlm-combobox-label';
11
+ import { HlmComboboxList } from './lib/hlm-combobox-list';
12
+ import { HlmComboboxMultiple } from './lib/hlm-combobox-multiple';
13
+ import { HlmComboboxSeparator } from './lib/hlm-combobox-separator';
14
+ import { HlmComboboxTrigger } from './lib/hlm-combobox-trigger';
15
+ import { HlmComboboxValue } from './lib/hlm-combobox-value';
16
+ import { HlmComboboxValues } from './lib/hlm-combobox-values';
17
+
18
+ export * from './lib/hlm-combobox';
19
+ export * from './lib/hlm-combobox-chip';
20
+ export * from './lib/hlm-combobox-chip-input';
21
+ export * from './lib/hlm-combobox-chips';
22
+ export * from './lib/hlm-combobox-content';
23
+ export * from './lib/hlm-combobox-empty';
24
+ export * from './lib/hlm-combobox-group';
25
+ export * from './lib/hlm-combobox-input';
26
+ export * from './lib/hlm-combobox-item';
27
+ export * from './lib/hlm-combobox-label';
28
+ export * from './lib/hlm-combobox-list';
29
+ export * from './lib/hlm-combobox-multiple';
30
+ export * from './lib/hlm-combobox-separator';
31
+ export * from './lib/hlm-combobox-trigger';
32
+ export * from './lib/hlm-combobox-value';
33
+ export * from './lib/hlm-combobox-values';
34
+
35
+ export const HlmComboboxImports = [
36
+ HlmCombobox,
37
+ HlmComboboxChip,
38
+ HlmComboboxChipInput,
39
+ HlmComboboxChips,
40
+ HlmComboboxContent,
41
+ HlmComboboxEmpty,
42
+ HlmComboboxGroup,
43
+ HlmComboboxInput,
44
+ HlmComboboxItem,
45
+ HlmComboboxLabel,
46
+ HlmComboboxList,
47
+ HlmComboboxMultiple,
48
+ HlmComboboxSeparator,
49
+ HlmComboboxTrigger,
50
+ HlmComboboxValue,
51
+ HlmComboboxValues,
52
+ ] as const;
@@ -0,0 +1,16 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxChipInput } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: 'input[hlmComboboxChipInput]',
7
+ hostDirectives: [{ directive: BrnComboboxChipInput, inputs: ['id'] }],
8
+ host: {
9
+ 'data-slott': 'combobox-chip-input',
10
+ },
11
+ })
12
+ export class HlmComboboxChipInput {
13
+ constructor() {
14
+ classes(() => 'min-w-16 flex-1 outline-none');
15
+ }
16
+ }
@@ -0,0 +1,17 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxChipRemove } from '@spartan-ng/brain/combobox';
3
+ import { buttonVariants } from '<%- importAlias %>/button';
4
+ import { classes } from '<%- importAlias %>/utils';
5
+
6
+ @Directive({
7
+ selector: 'button[hlmComboboxChipRemove]',
8
+ hostDirectives: [BrnComboboxChipRemove],
9
+ host: {
10
+ 'data-slot': 'combobox-chip-remove',
11
+ },
12
+ })
13
+ export class HlmComboboxChipRemove {
14
+ constructor() {
15
+ classes(() => ['-ml-1 opacity-50 hover:opacity-100', buttonVariants({ variant: 'ghost', size: 'icon-xs' })]);
16
+ }
17
+ }
@@ -0,0 +1,37 @@
1
+ import type { BooleanInput } from '@angular/cdk/coercion';
2
+ import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';
3
+ import { NgIcon, provideIcons } from '@ng-icons/core';
4
+ import { lucideX } from '@ng-icons/lucide';
5
+ import { BrnComboboxChip } from '@spartan-ng/brain/combobox';
6
+ import { classes } from '<%- importAlias %>/utils';
7
+ import { HlmComboboxChipRemove } from './hlm-combobox-chip-remove';
8
+
9
+ @Component({
10
+ selector: 'hlm-combobox-chip',
11
+ imports: [NgIcon, HlmComboboxChipRemove],
12
+ providers: [provideIcons({ lucideX })],
13
+ changeDetection: ChangeDetectionStrategy.OnPush,
14
+ hostDirectives: [{ directive: BrnComboboxChip, inputs: ['value'] }],
15
+ host: {
16
+ 'data-slot': 'combobox-chip',
17
+ },
18
+ template: `
19
+ <ng-content />
20
+
21
+ @if (showRemove()) {
22
+ <button hlmComboboxChipRemove>
23
+ <ng-icon name="lucideX" />
24
+ </button>
25
+ }
26
+ `,
27
+ })
28
+ export class HlmComboboxChip {
29
+ public readonly showRemove = input<boolean, BooleanInput>(true, { transform: booleanAttribute });
30
+
31
+ constructor() {
32
+ classes(
33
+ () =>
34
+ 'bg-muted text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0',
35
+ );
36
+ }
37
+ }
@@ -0,0 +1,19 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxAnchor, BrnComboboxInputWrapper, BrnComboboxPopoverTrigger } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxChips],hlm-combobox-chips',
7
+ hostDirectives: [BrnComboboxInputWrapper, BrnComboboxAnchor, BrnComboboxPopoverTrigger],
8
+ host: {
9
+ 'data-slott': 'combobox-chips',
10
+ },
11
+ })
12
+ export class HlmComboboxChips {
13
+ constructor() {
14
+ classes(
15
+ () =>
16
+ 'dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 has-data-[slot=combobox-chip]:px-1.5; flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:ring-[3px] has-aria-invalid:ring-[3px]',
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,17 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxContent } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxContent]',
7
+ hostDirectives: [BrnComboboxContent],
8
+ })
9
+ export class HlmComboboxContent {
10
+ constructor() {
11
+ classes(() => [
12
+ 'group/combobox-content bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 max-h-72 w-(--brn-combobox-width) min-w-36 overflow-hidden rounded-md p-0 shadow-md ring-1 duration-100',
13
+ // change input group styles in the content
14
+ '**:data-[slot=input-group]:bg-input **:data-[slot=input-group]:border-input/30 **:has-[[data-slot=input-group-control]:focus-visible]:border-input **:has-[[data-slot=input-group-control]:focus-visible]:ring-0 **:data-[slot=input-group]:m-1 **:data-[slot=input-group]:mb-0 **:data-[slot=input-group]:h-8 **:data-[slot=input-group]:shadow-none',
15
+ ]);
16
+ }
17
+ }
@@ -0,0 +1,19 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxEmpty } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxEmpty],hlm-combobox-empty',
7
+ hostDirectives: [BrnComboboxEmpty],
8
+ host: {
9
+ 'data-slot': 'combobox-empty',
10
+ },
11
+ })
12
+ export class HlmComboboxEmpty {
13
+ constructor() {
14
+ classes(
15
+ () =>
16
+ 'text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex',
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,16 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxGroup } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxGroup]',
7
+ hostDirectives: [BrnComboboxGroup],
8
+ host: {
9
+ 'data-slot': 'combobox-group',
10
+ },
11
+ })
12
+ export class HlmComboboxGroup {
13
+ constructor() {
14
+ classes(() => 'data-hidden:hidden');
15
+ }
16
+ }
@@ -0,0 +1,69 @@
1
+ import { BooleanInput } from '@angular/cdk/coercion';
2
+ import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';
3
+ import { NgIcon, provideIcons } from '@ng-icons/core';
4
+ import { lucideChevronDown, lucideX } from '@ng-icons/lucide';
5
+ import { BrnComboboxImports, BrnComboboxInputWrapper, BrnComboboxPopoverTrigger } from '@spartan-ng/brain/combobox';
6
+ import { HlmInputGroupImports } from '<%- importAlias %>/input-group';
7
+
8
+ @Component({
9
+ selector: 'hlm-combobox-input',
10
+ imports: [HlmInputGroupImports, NgIcon, BrnComboboxImports, BrnComboboxPopoverTrigger],
11
+ providers: [provideIcons({ lucideChevronDown, lucideX })],
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ hostDirectives: [BrnComboboxInputWrapper],
14
+ template: `
15
+ <hlm-input-group brnComboboxAnchor class="w-auto">
16
+ <input
17
+ brnComboboxInput
18
+ #comboboxInput="brnComboboxInput"
19
+ brnComboboxPopoverTrigger
20
+ hlmInputGroupInput
21
+ [placeholder]="placeholder()"
22
+ [attr.aria-invalid]="ariaInvalid() ? 'true' : null"
23
+ />
24
+
25
+ <hlm-input-group-addon align="inline-end">
26
+ @if (showTrigger()) {
27
+ <button
28
+ brnComboboxPopoverTrigger
29
+ hlmInputGroupButton
30
+ data-slot="input-group-button"
31
+ [disabled]="comboboxInput.disabled()"
32
+ size="icon-xs"
33
+ variant="ghost"
34
+ class="group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent"
35
+ >
36
+ <ng-icon name="lucideChevronDown" />
37
+ </button>
38
+ }
39
+
40
+ @if (showClear()) {
41
+ <button
42
+ *brnComboboxClear
43
+ hlmInputGroupButton
44
+ data-slot="combobox-clear"
45
+ [disabled]="comboboxInput.disabled()"
46
+ size="icon-xs"
47
+ variant="ghost"
48
+ >
49
+ <ng-icon name="lucideX" />
50
+ </button>
51
+ }
52
+ </hlm-input-group-addon>
53
+
54
+ <ng-content />
55
+ </hlm-input-group>
56
+ `,
57
+ })
58
+ export class HlmComboboxInput {
59
+ public readonly placeholder = input<string>('');
60
+
61
+ public readonly showTrigger = input<boolean, BooleanInput>(true, { transform: booleanAttribute });
62
+ public readonly showClear = input<boolean, BooleanInput>(false, { transform: booleanAttribute });
63
+
64
+ // TODO input and input-group styles need to support aria-invalid directly
65
+ public readonly ariaInvalid = input<boolean, BooleanInput>(false, {
66
+ transform: booleanAttribute,
67
+ alias: 'aria-invalid',
68
+ });
69
+ }
@@ -0,0 +1,38 @@
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 { BrnComboboxItem } from '@spartan-ng/brain/combobox';
5
+ import { classes } from '<%- importAlias %>/utils';
6
+
7
+ @Component({
8
+ selector: 'hlm-combobox-item',
9
+ imports: [NgIcon],
10
+ providers: [provideIcons({ lucideCheck })],
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ hostDirectives: [{ directive: BrnComboboxItem, inputs: ['id', 'disabled', 'value'] }],
13
+ host: {
14
+ 'data-slot': 'combobox-item',
15
+ },
16
+ template: `
17
+ <ng-content />
18
+ @if (_active()) {
19
+ <ng-icon
20
+ name="lucideCheck"
21
+ class="pointer-events-none absolute right-2 flex size-4 items-center justify-center"
22
+ aria-hidden="true"
23
+ />
24
+ }
25
+ `,
26
+ })
27
+ export class HlmComboboxItem {
28
+ private readonly _brnComboboxItem = inject(BrnComboboxItem);
29
+
30
+ protected readonly _active = this._brnComboboxItem.active;
31
+
32
+ constructor() {
33
+ classes(
34
+ () =>
35
+ `data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-hidden:hidden data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0 [&_ng-icon:not([class*='text-'])]:text-base`,
36
+ );
37
+ }
38
+ }
@@ -0,0 +1,16 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxLabel } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxLabel]',
7
+ hostDirectives: [{ directive: BrnComboboxLabel, inputs: ['id'] }],
8
+ host: {
9
+ 'data-slot': 'combobox-label',
10
+ },
11
+ })
12
+ export class HlmComboboxLabel {
13
+ constructor() {
14
+ classes(() => 'text-muted-foreground px-2 py-1.5 text-xs');
15
+ }
16
+ }
@@ -0,0 +1,19 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxList } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxList]',
7
+ hostDirectives: [{ directive: BrnComboboxList, inputs: ['id'] }],
8
+ host: {
9
+ 'data-slot': 'combobox-list',
10
+ },
11
+ })
12
+ export class HlmComboboxList {
13
+ constructor() {
14
+ classes(
15
+ () =>
16
+ 'no-scrollbar max-h-[calc(--spacing(72)---spacing(9))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0',
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,38 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxMultiple } from '@spartan-ng/brain/combobox';
3
+ import { provideBrnDialogDefaultOptions } from '@spartan-ng/brain/dialog';
4
+ import { BrnPopover, provideBrnPopoverConfig } from '@spartan-ng/brain/popover';
5
+ import { classes } from '<%- importAlias %>/utils';
6
+
7
+ @Directive({
8
+ selector: '[hlmComboboxMultiple],hlm-combobox-multiple',
9
+ providers: [
10
+ provideBrnPopoverConfig({
11
+ align: 'start',
12
+ sideOffset: 6,
13
+ }),
14
+ provideBrnDialogDefaultOptions({
15
+ autoFocus: 'first-heading',
16
+ }),
17
+ ],
18
+ hostDirectives: [
19
+ {
20
+ directive: BrnComboboxMultiple,
21
+ inputs: ['disabled', 'filter', 'value', 'itemToString', 'filterOptions', 'isItemEqualToValue'],
22
+ outputs: ['valueChange'],
23
+ },
24
+ {
25
+ directive: BrnPopover,
26
+ inputs: ['align', 'autoFocus', 'closeDelay', 'closeOnOutsidePointerEvents', 'sideOffset', 'state', 'offsetX'],
27
+ outputs: ['stateChanged', 'closed'],
28
+ },
29
+ ],
30
+ host: {
31
+ 'data-slot': 'combobox',
32
+ },
33
+ })
34
+ export class HlmComboboxMultiple {
35
+ constructor() {
36
+ classes(() => 'block');
37
+ }
38
+ }
@@ -0,0 +1,16 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxSeparator } from '@spartan-ng/brain/combobox';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmComboboxSeparator]',
7
+ hostDirectives: [{ directive: BrnComboboxSeparator, inputs: ['orientation'] }],
8
+ host: {
9
+ 'data-slot': 'combobox-separator',
10
+ },
11
+ })
12
+ export class HlmComboboxSeparator {
13
+ constructor() {
14
+ classes(() => 'bg-border -mx-1 my-1 h-px');
15
+ }
16
+ }
@@ -0,0 +1,42 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
+ import { NgIcon, provideIcons } from '@ng-icons/core';
3
+ import { lucideChevronDown } from '@ng-icons/lucide';
4
+ import {
5
+ BrnComboboxAnchor,
6
+ BrnComboboxInputWrapper,
7
+ BrnComboboxPopoverTrigger,
8
+ BrnComboboxTrigger,
9
+ } from '@spartan-ng/brain/combobox';
10
+ import { ButtonVariants, HlmButton } from '<%- importAlias %>/button';
11
+ import { hlm } from '<%- importAlias %>/utils';
12
+ import type { ClassValue } from 'clsx';
13
+
14
+ @Component({
15
+ selector: 'hlm-combobox-trigger',
16
+ imports: [NgIcon, HlmButton, BrnComboboxAnchor, BrnComboboxTrigger, BrnComboboxPopoverTrigger],
17
+ providers: [provideIcons({ lucideChevronDown })],
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ hostDirectives: [BrnComboboxInputWrapper],
20
+ template: `
21
+ <button
22
+ brnComboboxTrigger
23
+ brnComboboxAnchor
24
+ brnComboboxPopoverTrigger
25
+ hlmBtn
26
+ data-slot="combobox-trigger"
27
+ [class]="_computedClass()"
28
+ [variant]="variant()"
29
+ >
30
+ <ng-content />
31
+ <ng-icon name="lucideChevronDown" />
32
+ </button>
33
+ `,
34
+ })
35
+ export class HlmComboboxTrigger {
36
+ public readonly userClass = input<ClassValue>('', {
37
+ alias: 'class',
38
+ });
39
+ protected readonly _computedClass = computed(() => hlm(this.userClass()));
40
+
41
+ public readonly variant = input<ButtonVariants['variant']>('outline');
42
+ }
@@ -0,0 +1,5 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxValue } from '@spartan-ng/brain/combobox';
3
+
4
+ @Directive({ selector: '[hlmComboboxValue]', hostDirectives: [BrnComboboxValue] })
5
+ export class HlmComboboxValue {}
@@ -0,0 +1,5 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnComboboxValues } from '@spartan-ng/brain/combobox';
3
+
4
+ @Directive({ selector: '[hlmComboboxValues]', hostDirectives: [BrnComboboxValues] })
5
+ export class HlmComboboxValues {}
@@ -0,0 +1,38 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnCombobox } from '@spartan-ng/brain/combobox';
3
+ import { provideBrnDialogDefaultOptions } from '@spartan-ng/brain/dialog';
4
+ import { BrnPopover, provideBrnPopoverConfig } from '@spartan-ng/brain/popover';
5
+ import { classes } from '<%- importAlias %>/utils';
6
+
7
+ @Directive({
8
+ selector: '[hlmCombobox],hlm-combobox',
9
+ providers: [
10
+ provideBrnPopoverConfig({
11
+ align: 'start',
12
+ sideOffset: 6,
13
+ }),
14
+ provideBrnDialogDefaultOptions({
15
+ autoFocus: 'first-heading',
16
+ }),
17
+ ],
18
+ hostDirectives: [
19
+ {
20
+ directive: BrnCombobox,
21
+ inputs: ['disabled', 'filter', 'value', 'itemToString', 'filterOptions', 'isItemEqualToValue'],
22
+ outputs: ['valueChange'],
23
+ },
24
+ {
25
+ directive: BrnPopover,
26
+ inputs: ['align', 'autoFocus', 'closeDelay', 'closeOnOutsidePointerEvents', 'sideOffset', 'state', 'offsetX'],
27
+ outputs: ['stateChanged', 'closed'],
28
+ },
29
+ ],
30
+ host: {
31
+ 'data-slot': 'combobox',
32
+ },
33
+ })
34
+ export class HlmCombobox {
35
+ constructor() {
36
+ classes(() => 'block');
37
+ }
38
+ }
@@ -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: 'combobox' });
8
+ }
9
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/combobox/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,UAAU,EAAE,CAAC,CAAC;AACvE,CAAC"}
@@ -17,6 +17,7 @@ exports.primitiveDependencies = {
17
17
  carousel: ['utils', 'button', 'icon'],
18
18
  checkbox: ['utils', 'icon'],
19
19
  collapsible: ['utils'],
20
+ combobox: ['utils', 'input-group', 'button', 'icon'],
20
21
  command: ['utils', 'button', 'icon'],
21
22
  'context-menu': ['utils', 'dropdown-menu'],
22
23
  'date-picker': ['utils', 'calendar', 'icon', 'popover'],
@@ -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' | 'autocomplete' | 'avatar' | 'badge' | 'breadcrumb' | 'button' | 'button-group' | 'calendar' | 'card' | 'carousel' | 'checkbox' | 'collapsible' | 'command' | 'context-menu' | 'date-picker' | 'dialog' | 'dropdown-menu' | 'empty' | 'field' | 'form-field' | 'hover-card' | 'icon' | 'input' | 'input-group' | 'input-otp' | 'item' | 'kbd' | 'label' | 'menubar' | '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' | 'autocomplete' | 'avatar' | 'badge' | 'breadcrumb' | 'button' | 'button-group' | 'calendar' | 'card' | 'carousel' | 'checkbox' | 'collapsible' | 'combobox' | 'command' | 'context-menu' | 'date-picker' | 'dialog' | 'dropdown-menu' | 'empty' | 'field' | 'form-field' | 'hover-card' | 'icon' | 'input' | 'input-group' | 'input-otp' | 'item' | 'kbd' | 'label' | 'menubar' | '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';
@@ -3,7 +3,7 @@
3
3
  "name": "accordion",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=20.0.0 <22.0.0",
6
- "@spartan-ng/brain": "0.0.1-alpha.603",
6
+ "@spartan-ng/brain": "0.0.1-alpha.605",
7
7
  "@ng-icons/core": ">=32.0.0 <34.0.0",
8
8
  "@ng-icons/lucide": ">=32.0.0 <34.0.0"
9
9
  }
@@ -19,7 +19,7 @@
19
19
  "name": "alert-dialog",
20
20
  "peerDependencies": {
21
21
  "@angular/core": ">=20.0.0 <22.0.0",
22
- "@spartan-ng/brain": "0.0.1-alpha.603",
22
+ "@spartan-ng/brain": "0.0.1-alpha.605",
23
23
  "clsx": "^2.1.1"
24
24
  }
25
25
  },
@@ -34,7 +34,7 @@
34
34
  "name": "autocomplete",
35
35
  "peerDependencies": {
36
36
  "@angular/core": ">=20.0.0 <22.0.0",
37
- "@spartan-ng/brain": "0.0.1-alpha.603",
37
+ "@spartan-ng/brain": "0.0.1-alpha.605",
38
38
  "@angular/cdk": ">=20.0.0 <22.0.0",
39
39
  "@angular/common": ">=20.0.0 <22.0.0",
40
40
  "@angular/forms": ">=20.0.0 <22.0.0",
@@ -47,7 +47,7 @@
47
47
  "name": "avatar",
48
48
  "peerDependencies": {
49
49
  "@angular/core": ">=20.0.0 <22.0.0",
50
- "@spartan-ng/brain": "0.0.1-alpha.603"
50
+ "@spartan-ng/brain": "0.0.1-alpha.605"
51
51
  }
52
52
  },
53
53
  "badge": {
@@ -71,7 +71,7 @@
71
71
  "name": "button",
72
72
  "peerDependencies": {
73
73
  "@angular/core": ">=20.0.0 <22.0.0",
74
- "@spartan-ng/brain": "0.0.1-alpha.603",
74
+ "@spartan-ng/brain": "0.0.1-alpha.605",
75
75
  "class-variance-authority": "^0.7.0",
76
76
  "clsx": "^2.1.1"
77
77
  }
@@ -80,7 +80,7 @@
80
80
  "name": "button-group",
81
81
  "peerDependencies": {
82
82
  "@angular/core": ">=20.0.0 <22.0.0",
83
- "@spartan-ng/brain": "0.0.1-alpha.603",
83
+ "@spartan-ng/brain": "0.0.1-alpha.605",
84
84
  "class-variance-authority": "^0.7.0"
85
85
  }
86
86
  },
@@ -92,7 +92,7 @@
92
92
  "@angular/core": ">=20.0.0 <22.0.0",
93
93
  "@ng-icons/core": ">=32.0.0 <34.0.0",
94
94
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
95
- "@spartan-ng/brain": "0.0.1-alpha.603",
95
+ "@spartan-ng/brain": "0.0.1-alpha.605",
96
96
  "clsx": "^2.1.1"
97
97
  }
98
98
  },
@@ -121,7 +121,7 @@
121
121
  "@angular/cdk": ">=20.0.0 <22.0.0",
122
122
  "@ng-icons/core": ">=32.0.0 <34.0.0",
123
123
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
124
- "@spartan-ng/brain": "0.0.1-alpha.603",
124
+ "@spartan-ng/brain": "0.0.1-alpha.605",
125
125
  "clsx": "^2.1.1"
126
126
  }
127
127
  },
@@ -129,21 +129,32 @@
129
129
  "name": "collapsible",
130
130
  "peerDependencies": {
131
131
  "@angular/core": ">=20.0.0 <22.0.0",
132
- "@spartan-ng/brain": "0.0.1-alpha.603"
132
+ "@spartan-ng/brain": "0.0.1-alpha.605"
133
+ }
134
+ },
135
+ "combobox": {
136
+ "name": "combobox",
137
+ "peerDependencies": {
138
+ "@angular/core": ">=20.0.0 <22.0.0",
139
+ "@spartan-ng/brain": "0.0.1-alpha.605",
140
+ "@angular/cdk": ">=20.0.0 <22.0.0",
141
+ "@ng-icons/core": ">=32.0.0 <34.0.0",
142
+ "@ng-icons/lucide": ">=32.0.0 <34.0.0",
143
+ "clsx": "^2.1.1"
133
144
  }
134
145
  },
135
146
  "command": {
136
147
  "name": "command",
137
148
  "peerDependencies": {
138
149
  "@angular/core": ">=20.0.0 <22.0.0",
139
- "@spartan-ng/brain": "0.0.1-alpha.603"
150
+ "@spartan-ng/brain": "0.0.1-alpha.605"
140
151
  }
141
152
  },
142
153
  "context-menu": {
143
154
  "name": "context-menu",
144
155
  "peerDependencies": {
145
156
  "@angular/core": ">=20.0.0 <22.0.0",
146
- "@spartan-ng/brain": "0.0.1-alpha.603",
157
+ "@spartan-ng/brain": "0.0.1-alpha.605",
147
158
  "@angular/cdk": ">=20.0.0 <22.0.0",
148
159
  "rxjs": "^7.8.0"
149
160
  }
@@ -156,7 +167,7 @@
156
167
  "@angular/forms": ">=20.0.0 <22.0.0",
157
168
  "@ng-icons/core": ">=32.0.0 <34.0.0",
158
169
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
159
- "@spartan-ng/brain": "0.0.1-alpha.603",
170
+ "@spartan-ng/brain": "0.0.1-alpha.605",
160
171
  "clsx": "^2.1.1"
161
172
  }
162
173
  },
@@ -164,7 +175,7 @@
164
175
  "name": "dialog",
165
176
  "peerDependencies": {
166
177
  "@angular/core": ">=20.0.0 <22.0.0",
167
- "@spartan-ng/brain": "0.0.1-alpha.603",
178
+ "@spartan-ng/brain": "0.0.1-alpha.605",
168
179
  "@angular/cdk": ">=20.0.0 <22.0.0",
169
180
  "@angular/common": ">=20.0.0 <22.0.0",
170
181
  "@ng-icons/core": ">=32.0.0 <34.0.0",
@@ -180,7 +191,7 @@
180
191
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
181
192
  "@angular/cdk": ">=20.0.0 <22.0.0",
182
193
  "rxjs": "^7.8.0",
183
- "@spartan-ng/brain": "0.0.1-alpha.603"
194
+ "@spartan-ng/brain": "0.0.1-alpha.605"
184
195
  }
185
196
  },
186
197
  "empty": {
@@ -203,14 +214,14 @@
203
214
  "peerDependencies": {
204
215
  "@angular/core": ">=20.0.0 <22.0.0",
205
216
  "@angular/forms": ">=20.0.0 <22.0.0",
206
- "@spartan-ng/brain": "0.0.1-alpha.603"
217
+ "@spartan-ng/brain": "0.0.1-alpha.605"
207
218
  }
208
219
  },
209
220
  "hover-card": {
210
221
  "name": "hover-card",
211
222
  "peerDependencies": {
212
223
  "@angular/core": ">=20.0.0 <22.0.0",
213
- "@spartan-ng/brain": "0.0.1-alpha.603"
224
+ "@spartan-ng/brain": "0.0.1-alpha.605"
214
225
  }
215
226
  },
216
227
  "icon": {
@@ -226,7 +237,7 @@
226
237
  "peerDependencies": {
227
238
  "@angular/core": ">=20.0.0 <22.0.0",
228
239
  "@angular/forms": ">=20.0.0 <22.0.0",
229
- "@spartan-ng/brain": "0.0.1-alpha.603",
240
+ "@spartan-ng/brain": "0.0.1-alpha.605",
230
241
  "class-variance-authority": "^0.7.0",
231
242
  "clsx": "^2.1.1"
232
243
  }
@@ -245,7 +256,7 @@
245
256
  "@ng-icons/core": ">=32.0.0 <34.0.0",
246
257
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
247
258
  "@angular/cdk": ">=20.0.0 <22.0.0",
248
- "@spartan-ng/brain": "0.0.1-alpha.603"
259
+ "@spartan-ng/brain": "0.0.1-alpha.605"
249
260
  }
250
261
  },
251
262
  "item": {
@@ -253,7 +264,7 @@
253
264
  "peerDependencies": {
254
265
  "@angular/core": ">=20.0.0 <22.0.0",
255
266
  "class-variance-authority": "^0.7.0",
256
- "@spartan-ng/brain": "0.0.1-alpha.603"
267
+ "@spartan-ng/brain": "0.0.1-alpha.605"
257
268
  }
258
269
  },
259
270
  "kbd": {
@@ -266,14 +277,14 @@
266
277
  "name": "label",
267
278
  "peerDependencies": {
268
279
  "@angular/core": ">=20.0.0 <22.0.0",
269
- "@spartan-ng/brain": "0.0.1-alpha.603"
280
+ "@spartan-ng/brain": "0.0.1-alpha.605"
270
281
  }
271
282
  },
272
283
  "menubar": {
273
284
  "name": "menubar",
274
285
  "peerDependencies": {
275
286
  "@angular/core": ">=20.0.0 <22.0.0",
276
- "@spartan-ng/brain": "0.0.1-alpha.603",
287
+ "@spartan-ng/brain": "0.0.1-alpha.605",
277
288
  "@angular/cdk": ">=20.0.0 <22.0.0",
278
289
  "rxjs": "^7.8.0"
279
290
  }
@@ -282,7 +293,7 @@
282
293
  "name": "navigation-menu",
283
294
  "peerDependencies": {
284
295
  "@angular/core": ">=20.0.0 <22.0.0",
285
- "@spartan-ng/brain": "0.0.1-alpha.603"
296
+ "@spartan-ng/brain": "0.0.1-alpha.605"
286
297
  }
287
298
  },
288
299
  "pagination": {
@@ -291,7 +302,7 @@
291
302
  "@angular/cdk": ">=20.0.0 <22.0.0",
292
303
  "@angular/core": ">=20.0.0 <22.0.0",
293
304
  "@angular/forms": ">=20.0.0 <22.0.0",
294
- "@spartan-ng/brain": "0.0.1-alpha.603",
305
+ "@spartan-ng/brain": "0.0.1-alpha.605",
295
306
  "@ng-icons/core": ">=32.0.0 <34.0.0",
296
307
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
297
308
  "@angular/router": ">=20.0.0 <22.0.0"
@@ -301,21 +312,21 @@
301
312
  "name": "popover",
302
313
  "peerDependencies": {
303
314
  "@angular/core": ">=20.0.0 <22.0.0",
304
- "@spartan-ng/brain": "0.0.1-alpha.603"
315
+ "@spartan-ng/brain": "0.0.1-alpha.605"
305
316
  }
306
317
  },
307
318
  "progress": {
308
319
  "name": "progress",
309
320
  "peerDependencies": {
310
321
  "@angular/core": ">=20.0.0 <22.0.0",
311
- "@spartan-ng/brain": "0.0.1-alpha.603"
322
+ "@spartan-ng/brain": "0.0.1-alpha.605"
312
323
  }
313
324
  },
314
325
  "radio-group": {
315
326
  "name": "radio-group",
316
327
  "peerDependencies": {
317
328
  "@angular/core": ">=20.0.0 <22.0.0",
318
- "@spartan-ng/brain": "0.0.1-alpha.603",
329
+ "@spartan-ng/brain": "0.0.1-alpha.605",
319
330
  "@angular/cdk": ">=20.0.0 <22.0.0",
320
331
  "@angular/common": ">=20.0.0 <22.0.0",
321
332
  "clsx": "^2.1.1"
@@ -325,7 +336,7 @@
325
336
  "name": "resizable",
326
337
  "peerDependencies": {
327
338
  "@angular/core": ">=20.0.0 <22.0.0",
328
- "@spartan-ng/brain": "0.0.1-alpha.603",
339
+ "@spartan-ng/brain": "0.0.1-alpha.605",
329
340
  "@ng-icons/core": ">=32.0.0 <34.0.0",
330
341
  "@ng-icons/lucide": ">=32.0.0 <34.0.0"
331
342
  }
@@ -341,7 +352,7 @@
341
352
  "peerDependencies": {
342
353
  "@angular/cdk": ">=20.0.0 <22.0.0",
343
354
  "@angular/core": ">=20.0.0 <22.0.0",
344
- "@spartan-ng/brain": "0.0.1-alpha.603",
355
+ "@spartan-ng/brain": "0.0.1-alpha.605",
345
356
  "@ng-icons/core": ">=32.0.0 <34.0.0",
346
357
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
347
358
  "class-variance-authority": "^0.7.0",
@@ -352,14 +363,14 @@
352
363
  "name": "separator",
353
364
  "peerDependencies": {
354
365
  "@angular/core": ">=20.0.0 <22.0.0",
355
- "@spartan-ng/brain": "0.0.1-alpha.603"
366
+ "@spartan-ng/brain": "0.0.1-alpha.605"
356
367
  }
357
368
  },
358
369
  "sheet": {
359
370
  "name": "sheet",
360
371
  "peerDependencies": {
361
372
  "@angular/core": ">=20.0.0 <22.0.0",
362
- "@spartan-ng/brain": "0.0.1-alpha.603",
373
+ "@spartan-ng/brain": "0.0.1-alpha.605",
363
374
  "@ng-icons/core": ">=32.0.0 <34.0.0",
364
375
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
365
376
  "class-variance-authority": "^0.7.0",
@@ -371,7 +382,7 @@
371
382
  "peerDependencies": {
372
383
  "@angular/core": ">=20.0.0 <22.0.0",
373
384
  "@angular/cdk": ">=20.0.0 <22.0.0",
374
- "@spartan-ng/brain": "0.0.1-alpha.603",
385
+ "@spartan-ng/brain": "0.0.1-alpha.605",
375
386
  "class-variance-authority": "^0.7.0",
376
387
  "@ng-icons/core": ">=32.0.0 <34.0.0",
377
388
  "@ng-icons/lucide": ">=32.0.0 <34.0.0",
@@ -389,7 +400,7 @@
389
400
  "name": "slider",
390
401
  "peerDependencies": {
391
402
  "@angular/core": ">=20.0.0 <22.0.0",
392
- "@spartan-ng/brain": "0.0.1-alpha.603"
403
+ "@spartan-ng/brain": "0.0.1-alpha.605"
393
404
  }
394
405
  },
395
406
  "sonner": {
@@ -414,7 +425,7 @@
414
425
  "@angular/core": ">=20.0.0 <22.0.0",
415
426
  "@angular/cdk": ">=20.0.0 <22.0.0",
416
427
  "@angular/forms": ">=20.0.0 <22.0.0",
417
- "@spartan-ng/brain": "0.0.1-alpha.603",
428
+ "@spartan-ng/brain": "0.0.1-alpha.605",
418
429
  "clsx": "^2.1.1"
419
430
  }
420
431
  },
@@ -428,7 +439,7 @@
428
439
  "name": "tabs",
429
440
  "peerDependencies": {
430
441
  "@angular/core": ">=20.0.0 <22.0.0",
431
- "@spartan-ng/brain": "0.0.1-alpha.603",
442
+ "@spartan-ng/brain": "0.0.1-alpha.605",
432
443
  "class-variance-authority": "^0.7.0",
433
444
  "@angular/cdk": ">=20.0.0 <22.0.0",
434
445
  "@ng-icons/core": ">=32.0.0 <34.0.0",
@@ -442,7 +453,7 @@
442
453
  "peerDependencies": {
443
454
  "@angular/core": ">=20.0.0 <22.0.0",
444
455
  "@angular/forms": ">=20.0.0 <22.0.0",
445
- "@spartan-ng/brain": "0.0.1-alpha.603",
456
+ "@spartan-ng/brain": "0.0.1-alpha.605",
446
457
  "class-variance-authority": "^0.7.0",
447
458
  "clsx": "^2.1.1"
448
459
  }
@@ -451,7 +462,7 @@
451
462
  "name": "toggle",
452
463
  "peerDependencies": {
453
464
  "@angular/core": ">=20.0.0 <22.0.0",
454
- "@spartan-ng/brain": "0.0.1-alpha.603",
465
+ "@spartan-ng/brain": "0.0.1-alpha.605",
455
466
  "class-variance-authority": "^0.7.0"
456
467
  }
457
468
  },
@@ -459,7 +470,7 @@
459
470
  "name": "toggle-group",
460
471
  "peerDependencies": {
461
472
  "@angular/core": ">=20.0.0 <22.0.0",
462
- "@spartan-ng/brain": "0.0.1-alpha.603",
473
+ "@spartan-ng/brain": "0.0.1-alpha.605",
463
474
  "@angular/cdk": ">=20.0.0 <22.0.0"
464
475
  }
465
476
  },
@@ -467,7 +478,7 @@
467
478
  "name": "tooltip",
468
479
  "peerDependencies": {
469
480
  "@angular/core": ">=20.0.0 <22.0.0",
470
- "@spartan-ng/brain": "0.0.1-alpha.603"
481
+ "@spartan-ng/brain": "0.0.1-alpha.605"
471
482
  }
472
483
  },
473
484
  "typography": {