@spartan-ng/cli 1.6.3 → 1.8.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 (48) hide show
  1. package/package.json +1 -1
  2. package/src/generators/healthcheck/healthchecks/brn-collapsible.js +3 -4
  3. package/src/generators/healthcheck/healthchecks/brn-collapsible.js.map +1 -1
  4. package/src/generators/migrate-collapsible/generator.js +3 -4
  5. package/src/generators/migrate-collapsible/generator.js.map +1 -1
  6. package/src/generators/migrate-collapsible/helm-collapsible-files.d.ts +6 -0
  7. package/src/generators/migrate-collapsible/helm-collapsible-files.js +17 -0
  8. package/src/generators/migrate-collapsible/helm-collapsible-files.js.map +1 -0
  9. package/src/generators/ui/libs/code-block/files/index.ts.template +28 -0
  10. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-actions.ts.template +16 -0
  11. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-content.ts.template +85 -0
  12. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-copy-button.ts.template +62 -0
  13. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-footer.ts.template +13 -0
  14. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-header.ts.template +16 -0
  15. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-line.ts.template +42 -0
  16. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block-title.ts.template +16 -0
  17. package/src/generators/ui/libs/code-block/files/lib/hlm-code-block.ts.template +34 -0
  18. package/src/generators/ui/libs/code-block/generator.d.ts +3 -0
  19. package/src/generators/ui/libs/code-block/generator.js +9 -0
  20. package/src/generators/ui/libs/code-block/generator.js.map +1 -0
  21. package/src/generators/ui/libs/pagination/files/index.ts.template +1 -0
  22. package/src/generators/ui/libs/pagination/files/lib/hlm-numbered-pagination-query-params.ts.template +46 -3
  23. package/src/generators/ui/libs/pagination/files/lib/hlm-numbered-pagination.ts.template +44 -5
  24. package/src/generators/ui/libs/pagination/files/lib/hlm-pagination-next.ts.template +5 -2
  25. package/src/generators/ui/libs/pagination/files/lib/hlm-pagination-previous.ts.template +5 -2
  26. package/src/generators/ui/libs/pagination/files/lib/hlm-pagination.token.ts.template +29 -0
  27. package/src/generators/ui/libs/trace/files/index.ts.template +28 -0
  28. package/src/generators/ui/libs/trace/files/lib/hlm-trace-collapsible-content.ts.template +34 -0
  29. package/src/generators/ui/libs/trace/files/lib/hlm-trace-collapsible-trigger.ts.template +31 -0
  30. package/src/generators/ui/libs/trace/files/lib/hlm-trace-collapsible.ts.template +21 -0
  31. package/src/generators/ui/libs/trace/files/lib/hlm-trace-description.ts.template +13 -0
  32. package/src/generators/ui/libs/trace/files/lib/hlm-trace-icon.ts.template +13 -0
  33. package/src/generators/ui/libs/trace/files/lib/hlm-trace-line.ts.template +18 -0
  34. package/src/generators/ui/libs/trace/files/lib/hlm-trace-title.ts.template +13 -0
  35. package/src/generators/ui/libs/trace/files/lib/hlm-trace.ts.template +16 -0
  36. package/src/generators/ui/libs/trace/generator.d.ts +3 -0
  37. package/src/generators/ui/libs/trace/generator.js +9 -0
  38. package/src/generators/ui/libs/trace/generator.js.map +1 -0
  39. package/src/generators/ui/primitive-deps.js +2 -0
  40. package/src/generators/ui/primitive-deps.js.map +1 -1
  41. package/src/generators/ui/primitives.d.ts +1 -1
  42. package/src/generators/ui/style-luma.css +78 -0
  43. package/src/generators/ui/style-lyra.css +74 -0
  44. package/src/generators/ui/style-maia.css +74 -0
  45. package/src/generators/ui/style-mira.css +73 -0
  46. package/src/generators/ui/style-nova.css +74 -0
  47. package/src/generators/ui/style-vega.css +74 -0
  48. package/src/generators/ui/supported-ui-libraries.json +63 -43
@@ -7,6 +7,7 @@ import type { ButtonVariants } from '<%- importAlias %>/button';
7
7
  import { hlm } from '<%- importAlias %>/utils';
8
8
  import type { ClassValue } from 'clsx';
9
9
  import { HlmPaginationLink } from './hlm-pagination-link';
10
+ import { injectHlmPaginationConfig } from './hlm-pagination.token';
10
11
 
11
12
  @Component({
12
13
  selector: 'hlm-pagination-next',
@@ -29,6 +30,8 @@ import { HlmPaginationLink } from './hlm-pagination-link';
29
30
  `,
30
31
  })
31
32
  export class HlmPaginationNext {
33
+ private readonly _config = injectHlmPaginationConfig();
34
+
32
35
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
33
36
  /** The link to navigate to the next page. */
34
37
  public readonly link = input<RouterLink['routerLink']>();
@@ -38,9 +41,9 @@ export class HlmPaginationNext {
38
41
  public readonly queryParamsHandling = input<RouterLink['queryParamsHandling']>();
39
42
 
40
43
  /** The aria-label for the next page link. */
41
- public readonly ariaLabel = input<string>('Go to next page', { alias: 'aria-label' });
44
+ public readonly ariaLabel = input<string>(this._config.nextAriaLabel, { alias: 'aria-label' });
42
45
  /** The text to display for the next page link. */
43
- public readonly text = input<string>('Next');
46
+ public readonly text = input<string>(this._config.nextLabel);
44
47
  /** Whether the button should only display the icon. */
45
48
  public readonly iconOnly = input<boolean, BooleanInput>(false, {
46
49
  transform: booleanAttribute,
@@ -7,6 +7,7 @@ import type { ButtonVariants } from '<%- importAlias %>/button';
7
7
  import { hlm } from '<%- importAlias %>/utils';
8
8
  import type { ClassValue } from 'clsx';
9
9
  import { HlmPaginationLink } from './hlm-pagination-link';
10
+ import { injectHlmPaginationConfig } from './hlm-pagination.token';
10
11
 
11
12
  @Component({
12
13
  selector: 'hlm-pagination-previous',
@@ -29,6 +30,8 @@ import { HlmPaginationLink } from './hlm-pagination-link';
29
30
  `,
30
31
  })
31
32
  export class HlmPaginationPrevious {
33
+ private readonly _config = injectHlmPaginationConfig();
34
+
32
35
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
33
36
  /** The link to navigate to the previous page. */
34
37
  public readonly link = input<RouterLink['routerLink']>();
@@ -38,9 +41,9 @@ export class HlmPaginationPrevious {
38
41
  public readonly queryParamsHandling = input<RouterLink['queryParamsHandling']>();
39
42
 
40
43
  /** The aria-label for the previous page link. */
41
- public readonly ariaLabel = input<string>('Go to previous page', { alias: 'aria-label' });
44
+ public readonly ariaLabel = input<string>(this._config.previousAriaLabel, { alias: 'aria-label' });
42
45
  /** The text to display for the previous page link. */
43
- public readonly text = input<string>('Previous');
46
+ public readonly text = input<string>(this._config.previousLabel);
44
47
  /** Whether the button should only display the icon. */
45
48
  public readonly iconOnly = input<boolean, BooleanInput>(false, {
46
49
  transform: booleanAttribute,
@@ -0,0 +1,29 @@
1
+ import { inject, InjectionToken, type ValueProvider } from '@angular/core';
2
+
3
+ export interface HlmPaginationConfig {
4
+ totalItemsLabel: string;
5
+ pagesLabel: string;
6
+ previousLabel: string;
7
+ previousAriaLabel: string;
8
+ nextLabel: string;
9
+ nextAriaLabel: string;
10
+ }
11
+
12
+ const defaultConfig: HlmPaginationConfig = {
13
+ totalItemsLabel: 'total items',
14
+ pagesLabel: 'pages',
15
+ nextLabel: 'Next',
16
+ nextAriaLabel: 'Go to next page',
17
+ previousLabel: 'Previous',
18
+ previousAriaLabel: 'Go to previous page',
19
+ };
20
+
21
+ const HlmPaginationConfigToken = new InjectionToken<HlmPaginationConfig>('HlmPaginationConfig');
22
+
23
+ export function provideHlmPaginationConfig(config: Partial<HlmPaginationConfig>): ValueProvider {
24
+ return { provide: HlmPaginationConfigToken, useValue: { ...defaultConfig, ...config } };
25
+ }
26
+
27
+ export function injectHlmPaginationConfig(): HlmPaginationConfig {
28
+ return inject(HlmPaginationConfigToken, { optional: true }) ?? defaultConfig;
29
+ }
@@ -0,0 +1,28 @@
1
+ import { HlmTrace } from './lib/hlm-trace';
2
+ import { HlmTraceCollapsible } from './lib/hlm-trace-collapsible';
3
+ import { HlmTraceCollapsibleContent } from './lib/hlm-trace-collapsible-content';
4
+ import { HlmTraceCollapsibleTrigger } from './lib/hlm-trace-collapsible-trigger';
5
+ import { HlmTraceDescription } from './lib/hlm-trace-description';
6
+ import { HlmTraceIcon } from './lib/hlm-trace-icon';
7
+ import { HlmTraceLine } from './lib/hlm-trace-line';
8
+ import { HlmTraceTitle } from './lib/hlm-trace-title';
9
+
10
+ export * from './lib/hlm-trace';
11
+ export * from './lib/hlm-trace-collapsible';
12
+ export * from './lib/hlm-trace-collapsible-content';
13
+ export * from './lib/hlm-trace-collapsible-trigger';
14
+ export * from './lib/hlm-trace-description';
15
+ export * from './lib/hlm-trace-icon';
16
+ export * from './lib/hlm-trace-line';
17
+ export * from './lib/hlm-trace-title';
18
+
19
+ export const HlmTraceImports = [
20
+ HlmTrace,
21
+ HlmTraceCollapsible,
22
+ HlmTraceCollapsibleContent,
23
+ HlmTraceCollapsibleTrigger,
24
+ HlmTraceDescription,
25
+ HlmTraceIcon,
26
+ HlmTraceLine,
27
+ HlmTraceTitle,
28
+ ] as const;
@@ -0,0 +1,34 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
+ import { BrnCollapsibleContent } from '@spartan-ng/brain/collapsible';
3
+ import { classes, hlm } from '<%- importAlias %>/utils';
4
+ import { ClassValue } from 'clsx';
5
+
6
+ @Component({
7
+ selector: 'hlm-trace-collapsible-content',
8
+ exportAs: 'hlmTraceCollapsibleContent',
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ hostDirectives: [{ directive: BrnCollapsibleContent, inputs: ['id'] }],
11
+ host: { 'data-slot': 'trace-collapsible-content' },
12
+ template: `
13
+ <div [class]="_computedContentInnerClasses()" data-slot="trace-collapsible-content-inner">
14
+ <ng-content />
15
+ </div>
16
+ `,
17
+ })
18
+ export class HlmTraceCollapsibleContent {
19
+ public readonly contentInnerClasses = input<ClassValue>();
20
+
21
+ protected readonly _computedContentInnerClasses = computed(() =>
22
+ hlm(
23
+ 'spartan-trace-collapsible-content-inner text-muted-foreground min-w-0 wrap-break-word',
24
+ this.contentInnerClasses(),
25
+ ),
26
+ );
27
+
28
+ constructor() {
29
+ classes(
30
+ () =>
31
+ 'spartan-trace-collapsible-content block min-w-0 overflow-hidden transition-[height] data-[state=closed]:h-0 data-[state=open]:h-(--brn-collapsible-content-height) motion-reduce:transition-none',
32
+ );
33
+ }
34
+ }
@@ -0,0 +1,31 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { NgIcon, provideIcons } from '@ng-icons/core';
3
+ import { lucideChevronRight } from '@ng-icons/lucide';
4
+ import { BrnCollapsibleTrigger } from '@spartan-ng/brain/collapsible';
5
+ import { classes } from '<%- importAlias %>/utils';
6
+
7
+ @Component({
8
+ // eslint-disable-next-line @angular-eslint/component-selector
9
+ selector: 'button[hlmTraceCollapsibleTrigger]',
10
+ exportAs: 'hlmTraceCollapsibleTrigger',
11
+ imports: [NgIcon],
12
+ providers: [provideIcons({ lucideChevronRight })],
13
+ changeDetection: ChangeDetectionStrategy.OnPush,
14
+ hostDirectives: [{ directive: BrnCollapsibleTrigger, inputs: ['type'] }],
15
+ host: { 'data-slot': 'trace-collapsible-trigger' },
16
+ template: `
17
+ <ng-content />
18
+ <ng-icon
19
+ name="lucideChevronRight"
20
+ class="transition-transform group-aria-expanded/trace-collapsible-trigger:rotate-90 motion-reduce:transition-none"
21
+ />
22
+ `,
23
+ })
24
+ export class HlmTraceCollapsibleTrigger {
25
+ constructor() {
26
+ classes(
27
+ () =>
28
+ 'spartan-trace-collapsible-trigger group/trace-collapsible-trigger text-muted-foreground hover:text-foreground has-[[data-status=error]]:text-destructive flex w-fit max-w-full min-w-0 cursor-pointer items-center text-left transition-colors outline-none',
29
+ );
30
+ }
31
+ }
@@ -0,0 +1,21 @@
1
+ import { Directive } from '@angular/core';
2
+ import { BrnCollapsible } from '@spartan-ng/brain/collapsible';
3
+ import { classes } from '<%- importAlias %>/utils';
4
+
5
+ @Directive({
6
+ selector: '[hlmTraceCollapsible],hlm-trace-collapsible',
7
+ exportAs: 'hlmTraceCollapsible',
8
+ hostDirectives: [
9
+ {
10
+ directive: BrnCollapsible,
11
+ inputs: ['expanded', 'disabled'],
12
+ outputs: ['expandedChange'],
13
+ },
14
+ ],
15
+ host: { 'data-slot': 'trace-collapsible' },
16
+ })
17
+ export class HlmTraceCollapsible {
18
+ constructor() {
19
+ classes(() => 'spartan-trace-collapsible flex w-full min-w-0 flex-col');
20
+ }
21
+ }
@@ -0,0 +1,13 @@
1
+ import { Directive } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmTraceDescription],hlm-trace-description',
6
+ exportAs: 'hlmTraceDescription',
7
+ host: { 'data-slot': 'trace-description' },
8
+ })
9
+ export class HlmTraceDescription {
10
+ constructor() {
11
+ classes(() => 'spartan-trace-description text-muted-foreground/70 shrink-0 tabular-nums');
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { Directive } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmTraceIcon],hlm-trace-icon',
6
+ exportAs: 'hlmTraceIcon',
7
+ host: { 'data-slot': 'trace-icon', '[attr.aria-hidden]': 'true' },
8
+ })
9
+ export class HlmTraceIcon {
10
+ constructor() {
11
+ classes(() => 'spartan-trace-icon flex shrink-0 items-center justify-center [&_ng-icon]:pointer-events-none');
12
+ }
13
+ }
@@ -0,0 +1,18 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmTraceLine],hlm-trace-line',
6
+ exportAs: 'hlmTraceLine',
7
+ host: { 'data-slot': 'trace-line', '[attr.data-status]': 'status()' },
8
+ })
9
+ export class HlmTraceLine {
10
+ public readonly status = input<'running' | 'error' | 'pending'>();
11
+
12
+ constructor() {
13
+ classes(
14
+ () =>
15
+ 'spartan-trace-line text-muted-foreground [a:hover,button:hover]:text-foreground data-[status=error]:text-destructive data-[status=error]:in-[a:hover,button:hover]:text-destructive data-[status=running]:*:data-[slot=trace-title]:shimmer flex w-fit max-w-full min-w-0 items-center transition-colors data-[status=pending]:opacity-60 [a,button]:cursor-pointer',
16
+ );
17
+ }
18
+ }
@@ -0,0 +1,13 @@
1
+ import { Directive } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmTraceTitle],hlm-trace-title',
6
+ exportAs: 'hlmTraceTitle',
7
+ host: { 'data-slot': 'trace-title' },
8
+ })
9
+ export class HlmTraceTitle {
10
+ constructor() {
11
+ classes(() => 'spartan-trace-title motion-reduce:shimmer-none min-w-0 truncate');
12
+ }
13
+ }
@@ -0,0 +1,16 @@
1
+ import { Directive } from '@angular/core';
2
+ import { classes } from '<%- importAlias %>/utils';
3
+
4
+ @Directive({
5
+ selector: '[hlmTrace],hlm-trace',
6
+ exportAs: 'hlmTrace',
7
+ host: { 'data-slot': 'trace' },
8
+ })
9
+ export class HlmTrace {
10
+ constructor() {
11
+ classes(
12
+ () =>
13
+ 'spartan-trace flex w-full min-w-0 flex-col *:has-[>[data-slot=trace-line]]:flex *:has-[>[data-slot=trace-line]]:w-fit *:has-[>[data-slot=trace-line]]:max-w-full *:has-[>[data-slot=trace-line]]:min-w-0 *:has-[>[data-slot=trace-line]]:text-left *:has-[>[data-slot=trace-line]]:outline-none',
14
+ );
15
+ }
16
+ }
@@ -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: 'trace' });
8
+ }
9
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/trace/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,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC"}
@@ -19,6 +19,7 @@ exports.primitiveDependencies = {
19
19
  carousel: ['utils', 'button'],
20
20
  chart: ['utils'],
21
21
  checkbox: ['utils'],
22
+ 'code-block': ['utils', 'button'],
22
23
  collapsible: ['utils'],
23
24
  combobox: ['utils', 'input-group', 'button'],
24
25
  command: ['utils', 'button', 'input-group', 'dialog'],
@@ -64,6 +65,7 @@ exports.primitiveDependencies = {
64
65
  toggle: ['utils'],
65
66
  'toggle-group': ['utils', 'toggle'],
66
67
  tooltip: ['utils'],
68
+ trace: ['utils'],
67
69
  typography: ['utils'],
68
70
  utils: [],
69
71
  };
@@ -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' | 'chart' | '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' | 'message-scroller' | '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';
1
+ export type Primitive = 'accordion' | 'alert' | 'alert-dialog' | 'aspect-ratio' | 'attachment' | 'autocomplete' | 'avatar' | 'badge' | 'breadcrumb' | 'bubble' | 'button' | 'button-group' | 'calendar' | 'card' | 'carousel' | 'chart' | 'checkbox' | 'code-block' | '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' | 'message-scroller' | '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' | 'trace' | 'typography' | 'utils';
@@ -1477,4 +1477,82 @@
1477
1477
  .spartan-menu-translucent {
1478
1478
  @apply bg-popover/70 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground! relative animate-none! before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150;
1479
1479
  }
1480
+
1481
+ /* MARK: Trace */
1482
+ .spartan-trace {
1483
+ @apply *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/30 gap-3 *:has-[>[data-slot=trace-line]]:rounded-lg *:has-[>[data-slot=trace-line]]:focus-visible:ring-3;
1484
+ }
1485
+
1486
+ .spartan-trace-collapsible-trigger {
1487
+ @apply focus-visible:ring-ring/30 gap-1 rounded-lg focus-visible:ring-3;
1488
+ }
1489
+
1490
+ .spartan-trace-line {
1491
+ @apply gap-2 text-sm;
1492
+ }
1493
+
1494
+ .spartan-trace-icon {
1495
+ @apply size-4 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] [[data-slot=trace-title]~&]:-ml-1;
1496
+ }
1497
+
1498
+ .spartan-trace-collapsible-content {
1499
+ @apply duration-200;
1500
+ }
1501
+
1502
+ .spartan-trace-collapsible-content-inner {
1503
+ @apply mt-2.5 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed;
1504
+ }
1505
+
1506
+ /* MARK: Code Block */
1507
+ .spartan-code-block {
1508
+ @apply has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 rounded-2xl text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-3 data-[size=sm]:rounded-xl data-[size=sm]:text-xs;
1509
+ }
1510
+
1511
+ .spartan-code-block-variant-default {
1512
+ @apply bg-muted text-foreground ring-foreground/5 dark:ring-foreground/10 ring-1;
1513
+ }
1514
+
1515
+ .spartan-code-block-variant-destructive {
1516
+ @apply bg-destructive/5 text-destructive ring-destructive/15 dark:bg-destructive/10 dark:ring-destructive/20 ring-1;
1517
+ }
1518
+
1519
+ .spartan-code-block-header {
1520
+ @apply text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive gap-2 px-5 pt-5 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3;
1521
+ }
1522
+
1523
+ .spartan-code-block-footer {
1524
+ @apply text-muted-foreground gap-2 px-5 pb-5 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3;
1525
+ }
1526
+
1527
+ .spartan-code-block-title {
1528
+ @apply text-foreground group-data-[variant=destructive]/code-block:text-destructive font-sans text-sm font-medium group-data-[size=sm]/code-block:text-xs [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] group-data-[size=sm]/code-block:[&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)] *:[ng-icon]:me-1.5;
1529
+ }
1530
+
1531
+ .spartan-code-block-actions {
1532
+ @apply *:data-[slot=button]:hover:bg-foreground/5 dark:*:data-[slot=button]:hover:bg-foreground/10 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:end-4 [[data-slot=code-block]>&]:top-4 [[data-slot=code-block]>&]:m-0 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:*:[button]:ring-1;
1533
+ }
1534
+
1535
+ .spartan-code-block-copy-button {
1536
+ @apply hover:bg-foreground/5 dark:hover:bg-foreground/10;
1537
+ }
1538
+
1539
+ .spartan-code-block-content {
1540
+ @apply px-5 py-5 leading-relaxed group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5;
1541
+ }
1542
+
1543
+ .spartan-code-block-line {
1544
+ @apply before:text-muted-foreground after:text-muted-foreground -mx-5 px-5 group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 before:min-w-6 before:text-end after:start-1 in-data-numbered:gap-x-3;
1545
+ }
1546
+
1547
+ .spartan-code-block-line-variant-highlighted {
1548
+ @apply bg-foreground/5;
1549
+ }
1550
+
1551
+ .spartan-code-block-line-variant-added {
1552
+ @apply bg-foreground/5 after:content-['+'];
1553
+ }
1554
+
1555
+ .spartan-code-block-line-variant-removed {
1556
+ @apply bg-destructive/10 after:text-destructive after:content-['−'];
1557
+ }
1480
1558
  }
@@ -1398,6 +1398,31 @@
1398
1398
  @apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-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 rounded-none px-3 py-1.5 text-xs;
1399
1399
  }
1400
1400
 
1401
+ /* MARK: Trace */
1402
+ .spartan-trace {
1403
+ @apply *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50 gap-2 *:has-[>[data-slot=trace-line]]:rounded-none *:has-[>[data-slot=trace-line]]:focus-visible:ring-1;
1404
+ }
1405
+
1406
+ .spartan-trace-collapsible-trigger {
1407
+ @apply focus-visible:ring-ring/50 gap-1 rounded-none focus-visible:ring-1;
1408
+ }
1409
+
1410
+ .spartan-trace-line {
1411
+ @apply gap-2 text-xs;
1412
+ }
1413
+
1414
+ .spartan-trace-icon {
1415
+ @apply size-3.5 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)] [[data-slot=trace-title]~&]:-ml-1;
1416
+ }
1417
+
1418
+ .spartan-trace-collapsible-content {
1419
+ @apply duration-200;
1420
+ }
1421
+
1422
+ .spartan-trace-collapsible-content-inner {
1423
+ @apply mt-2 mb-1 ml-[calc(--spacing(1.75)-1px)] border-l pr-1 pl-3.75 leading-relaxed;
1424
+ }
1425
+
1401
1426
  /* MARK: Input Group */
1402
1427
  .spartan-input-group {
1403
1428
  @apply border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/20 has-[[data-slot][data-matches-spartan-invalid=true]]:border-destructive dark:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-none border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-1 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pe-1.5 has-[>[data-align=inline-start]]:[&>input]:ps-1.5;
@@ -1454,4 +1479,53 @@
1454
1479
  .spartan-input-group-textarea {
1455
1480
  @apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent data-[matches-spartan-invalid=true]:ring-0 dark:bg-transparent dark:disabled:bg-transparent;
1456
1481
  }
1482
+
1483
+ /* MARK: Code Block */
1484
+ .spartan-code-block {
1485
+ @apply has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 rounded-none text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-1 data-[size=sm]:text-xs;
1486
+ }
1487
+
1488
+ .spartan-code-block-variant-default {
1489
+ @apply border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring border;
1490
+ }
1491
+
1492
+ .spartan-code-block-variant-destructive {
1493
+ @apply border-destructive/30 text-destructive dark:border-destructive/40 border;
1494
+ }
1495
+
1496
+ .spartan-code-block-header {
1497
+ @apply text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive gap-2 px-3 pt-3 group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:pt-2;
1498
+ }
1499
+
1500
+ .spartan-code-block-footer {
1501
+ @apply text-muted-foreground gap-2 px-3 pb-3 group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:pb-2;
1502
+ }
1503
+
1504
+ .spartan-code-block-title {
1505
+ @apply text-foreground group-data-[variant=destructive]/code-block:text-destructive font-sans text-xs font-medium [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)] *:[ng-icon]:me-1.5;
1506
+ }
1507
+
1508
+ .spartan-code-block-actions {
1509
+ @apply [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:m-0 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 [[data-slot=code-block]>&]:*:[button]:ring-1;
1510
+ }
1511
+
1512
+ .spartan-code-block-content {
1513
+ @apply px-3 py-3 leading-relaxed group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:py-2 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5;
1514
+ }
1515
+
1516
+ .spartan-code-block-line {
1517
+ @apply before:text-muted-foreground after:text-muted-foreground -mx-3 px-3 group-data-[size=sm]/code-block:-mx-2 group-data-[size=sm]/code-block:px-2 before:min-w-6 before:text-end after:start-1 in-data-numbered:gap-x-3;
1518
+ }
1519
+
1520
+ .spartan-code-block-line-variant-highlighted {
1521
+ @apply bg-muted;
1522
+ }
1523
+
1524
+ .spartan-code-block-line-variant-added {
1525
+ @apply bg-muted after:content-['+'];
1526
+ }
1527
+
1528
+ .spartan-code-block-line-variant-removed {
1529
+ @apply bg-destructive/10 after:text-destructive after:content-['−'];
1530
+ }
1457
1531
  }
@@ -1420,6 +1420,31 @@
1420
1420
  @apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-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 rounded-2xl px-3 py-1.5 text-xs **:data-[slot=kbd]:rounded-4xl;
1421
1421
  }
1422
1422
 
1423
+ /* MARK: Trace */
1424
+ .spartan-trace {
1425
+ @apply *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50 gap-3 *:has-[>[data-slot=trace-line]]:rounded-lg *:has-[>[data-slot=trace-line]]:focus-visible:ring-[3px];
1426
+ }
1427
+
1428
+ .spartan-trace-collapsible-trigger {
1429
+ @apply focus-visible:ring-ring/50 gap-1 rounded-lg focus-visible:ring-[3px];
1430
+ }
1431
+
1432
+ .spartan-trace-line {
1433
+ @apply gap-2 text-sm;
1434
+ }
1435
+
1436
+ .spartan-trace-icon {
1437
+ @apply size-4 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] [[data-slot=trace-title]~&]:-ml-1;
1438
+ }
1439
+
1440
+ .spartan-trace-collapsible-content {
1441
+ @apply duration-200;
1442
+ }
1443
+
1444
+ .spartan-trace-collapsible-content-inner {
1445
+ @apply mt-2.5 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed;
1446
+ }
1447
+
1423
1448
  /* MARK: Input Group */
1424
1449
  .spartan-input-group {
1425
1450
  @apply border-input bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/20 has-[[data-slot][data-matches-spartan-invalid=true]]:border-destructive dark:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/40 h-9 rounded-4xl border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-2xl has-data-[align=block-start]:rounded-2xl has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-3 has-[textarea]:rounded-xl has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pe-1.5 has-[>[data-align=inline-start]]:[&>input]:ps-1.5;
@@ -1472,4 +1497,53 @@
1472
1497
  .spartan-input-group-textarea {
1473
1498
  @apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 data-[matches-spartan-invalid=true]:ring-0 dark:bg-transparent;
1474
1499
  }
1500
+
1501
+ /* MARK: Code Block */
1502
+ .spartan-code-block {
1503
+ @apply has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 rounded-xl text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-[3px] data-[size=sm]:rounded-lg data-[size=sm]:text-xs;
1504
+ }
1505
+
1506
+ .spartan-code-block-variant-default {
1507
+ @apply border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring border;
1508
+ }
1509
+
1510
+ .spartan-code-block-variant-destructive {
1511
+ @apply border-destructive/30 text-destructive dark:border-destructive/40 border;
1512
+ }
1513
+
1514
+ .spartan-code-block-header {
1515
+ @apply text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive gap-2 px-4 pt-4 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3;
1516
+ }
1517
+
1518
+ .spartan-code-block-footer {
1519
+ @apply text-muted-foreground gap-2 px-4 pb-4 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3;
1520
+ }
1521
+
1522
+ .spartan-code-block-title {
1523
+ @apply text-foreground group-data-[variant=destructive]/code-block:text-destructive font-sans text-sm font-medium group-data-[size=sm]/code-block:text-xs [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] group-data-[size=sm]/code-block:[&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)] *:[ng-icon]:me-1.5;
1524
+ }
1525
+
1526
+ .spartan-code-block-actions {
1527
+ @apply [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:end-3 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:m-0 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:*:[button]:ring-1;
1528
+ }
1529
+
1530
+ .spartan-code-block-content {
1531
+ @apply px-4 py-4 leading-relaxed group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5;
1532
+ }
1533
+
1534
+ .spartan-code-block-line {
1535
+ @apply before:text-muted-foreground after:text-muted-foreground -mx-4 px-4 group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 before:min-w-6 before:text-end after:start-1 in-data-numbered:gap-x-3;
1536
+ }
1537
+
1538
+ .spartan-code-block-line-variant-highlighted {
1539
+ @apply bg-muted;
1540
+ }
1541
+
1542
+ .spartan-code-block-line-variant-added {
1543
+ @apply bg-muted after:content-['+'];
1544
+ }
1545
+
1546
+ .spartan-code-block-line-variant-removed {
1547
+ @apply bg-destructive/10 after:text-destructive after:content-['−'];
1548
+ }
1475
1549
  }