@atelier-ui/react 0.1.9 → 0.1.11

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 (35) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/package.json +1 -1
  3. package/src/lib/accordion/llm-accordion.css +120 -0
  4. package/src/lib/alert/llm-alert.css +80 -0
  5. package/src/lib/avatar/llm-avatar.css +106 -0
  6. package/src/lib/badge/llm-badge.css +60 -0
  7. package/src/lib/breadcrumbs/llm-breadcrumbs.css +62 -0
  8. package/src/lib/button/llm-button.css +139 -0
  9. package/src/lib/card/llm-card.css +70 -0
  10. package/src/lib/chat/llm-chat.css +446 -0
  11. package/src/lib/checkbox/llm-checkbox.css +123 -0
  12. package/src/lib/code-block/llm-code-block.css +112 -0
  13. package/src/lib/combobox/llm-combobox.css +169 -0
  14. package/src/lib/dialog/llm-dialog.css +174 -0
  15. package/src/lib/drawer/llm-drawer.css +228 -0
  16. package/src/lib/icon/llm-icon.css +29 -0
  17. package/src/lib/input/llm-input.css +94 -0
  18. package/src/lib/menu/llm-menu.css +85 -0
  19. package/src/lib/pagination/llm-pagination.css +80 -0
  20. package/src/lib/progress/llm-progress.css +69 -0
  21. package/src/lib/radio/llm-radio.css +78 -0
  22. package/src/lib/radio-group/llm-radio-group.css +31 -0
  23. package/src/lib/select/llm-select.css +83 -0
  24. package/src/lib/skeleton/llm-skeleton.css +51 -0
  25. package/src/lib/spec.d.ts +2 -2
  26. package/src/lib/spec.d.ts.map +1 -1
  27. package/src/lib/spec.js.map +1 -1
  28. package/src/lib/stepper/llm-stepper.css +171 -0
  29. package/src/lib/table/llm-table.css +200 -0
  30. package/src/lib/tabs/llm-tabs.css +120 -0
  31. package/src/lib/textarea/llm-textarea.css +100 -0
  32. package/src/lib/toast/llm-toast.css +137 -0
  33. package/src/lib/toggle/llm-toggle.css +118 -0
  34. package/src/lib/tooltip/llm-tooltip.css +80 -0
  35. package/styles/tokens.css +346 -0
@@ -0,0 +1,85 @@
1
+ /* Menu panel */
2
+ .llm-menu {
3
+ display: block;
4
+ min-width: 12rem;
5
+ padding: var(--ui-spacing-2) 0;
6
+ background: var(--ui-color-surface-raised);
7
+ border: 1px solid var(--ui-color-border);
8
+ border-radius: var(--ui-radius-lg);
9
+ box-shadow: var(--ui-shadow-lg);
10
+ font-family: var(--ui-font-family);
11
+ font-size: var(--ui-font-size-md);
12
+ color: var(--ui-color-text);
13
+ outline: none;
14
+ overflow: hidden;
15
+
16
+ /* Entry animation */
17
+ animation: llm-menu-enter var(--ui-duration-normal) var(--ui-ease-out) forwards;
18
+ }
19
+
20
+ .llm-menu.variant-compact {
21
+ font-size: var(--ui-font-size-sm);
22
+ padding: var(--ui-spacing-1) 0;
23
+ }
24
+
25
+ .llm-menu.variant-compact .llm-menu-item {
26
+ min-height: 2rem;
27
+ padding: var(--ui-spacing-1) var(--ui-spacing-3);
28
+ }
29
+
30
+ @keyframes llm-menu-enter {
31
+ from {
32
+ opacity: 0;
33
+ transform: translateY(-4px);
34
+ }
35
+ to {
36
+ opacity: 1;
37
+ transform: translateY(0);
38
+ }
39
+ }
40
+
41
+ /* Menu item */
42
+ .llm-menu-item {
43
+ display: flex;
44
+ align-items: center;
45
+ gap: var(--ui-spacing-3);
46
+ min-height: 2.25rem;
47
+ padding: var(--ui-spacing-2) var(--ui-spacing-4);
48
+ cursor: pointer;
49
+ color: var(--ui-color-text);
50
+ transition: background var(--ui-transition-fast);
51
+ outline: none;
52
+ border: none;
53
+ background: none;
54
+ font: inherit;
55
+ width: 100%;
56
+ text-align: start;
57
+ }
58
+
59
+ .llm-menu-item:hover,
60
+ .llm-menu-item:focus-visible {
61
+ background: var(--ui-color-surface-sunken);
62
+ }
63
+
64
+ .llm-menu-item.is-disabled {
65
+ opacity: var(--ui-opacity-disabled);
66
+ cursor: not-allowed;
67
+ }
68
+
69
+ /* Separator */
70
+ .llm-menu-separator {
71
+ display: block;
72
+ height: 1px;
73
+ margin: var(--ui-spacing-2) 0;
74
+ background: var(--ui-color-border);
75
+ border: none;
76
+ }
77
+
78
+ /* Trigger panel — positioned absolutely below trigger */
79
+ .llm-menu-panel {
80
+ position: absolute;
81
+ z-index: var(--ui-z-dropdown, 100);
82
+ top: calc(100% + var(--ui-spacing-2));
83
+ left: 0;
84
+ min-width: 100%;
85
+ }
@@ -0,0 +1,80 @@
1
+ .llm-pagination {
2
+ display: block;
3
+ font-family: var(--ui-font-family);
4
+ }
5
+
6
+ .page-list {
7
+ display: flex;
8
+ flex-wrap: wrap;
9
+ align-items: center;
10
+ gap: var(--ui-spacing-2);
11
+ list-style: none;
12
+ margin: 0;
13
+ padding: 0;
14
+ }
15
+
16
+ /* Page button */
17
+ .page-btn {
18
+ all: unset;
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ min-width: 2.25rem;
23
+ height: 2.25rem;
24
+ padding: 0 var(--ui-spacing-2);
25
+ border-radius: var(--ui-radius-md);
26
+ border: 1px solid transparent;
27
+ background: transparent;
28
+ color: var(--ui-color-text);
29
+ font-size: var(--ui-font-size-sm);
30
+ font-weight: var(--ui-font-weight-medium);
31
+ cursor: pointer;
32
+ user-select: none;
33
+ transition:
34
+ background-color var(--ui-transition-fast),
35
+ border-color var(--ui-transition-fast),
36
+ color var(--ui-transition-fast);
37
+ }
38
+
39
+ .page-btn:hover:not(:disabled) {
40
+ background-color: var(--ui-color-surface-sunken);
41
+ color: var(--ui-color-text);
42
+ }
43
+
44
+ .page-btn:focus-visible {
45
+ outline: none;
46
+ box-shadow: var(--ui-focus-ring);
47
+ }
48
+
49
+ /* Active (current) page — primary fill */
50
+ .page-btn.is-active {
51
+ background-color: var(--ui-color-primary);
52
+ border-color: var(--ui-color-primary);
53
+ color: var(--ui-color-text-on-primary);
54
+ font-weight: var(--ui-font-weight-semibold);
55
+ }
56
+
57
+ .page-btn.is-active:hover {
58
+ background-color: var(--ui-color-primary-hover);
59
+ border-color: var(--ui-color-primary-hover);
60
+ }
61
+
62
+ /* Disabled */
63
+ .page-btn.is-disabled,
64
+ .page-btn:disabled {
65
+ opacity: var(--ui-opacity-disabled);
66
+ pointer-events: none;
67
+ cursor: default;
68
+ }
69
+
70
+ /* Ellipsis */
71
+ .ellipsis {
72
+ display: inline-flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ min-width: 2.25rem;
76
+ height: 2.25rem;
77
+ color: var(--ui-color-text-muted);
78
+ font-size: var(--ui-font-size-sm);
79
+ user-select: none;
80
+ }
@@ -0,0 +1,69 @@
1
+ .llm-progress {
2
+ display: block;
3
+ width: 100%;
4
+ font-family: var(--ui-font-family);
5
+ }
6
+
7
+ .track {
8
+ position: relative;
9
+ width: 100%;
10
+ border-radius: var(--ui-radius-full);
11
+ background-color: var(--ui-color-surface-sunken);
12
+ overflow: hidden;
13
+ }
14
+
15
+ /* Size variants — modernised for visibility (sm was 4px → 6px) */
16
+ .llm-progress.size-sm .track {
17
+ height: 6px;
18
+ }
19
+
20
+ .llm-progress.size-md .track {
21
+ height: 10px;
22
+ }
23
+
24
+ .llm-progress.size-lg .track {
25
+ height: 14px;
26
+ }
27
+
28
+ /* Fill */
29
+ .fill {
30
+ height: 100%;
31
+ border-radius: var(--ui-radius-full);
32
+ background-color: var(--ui-color-primary);
33
+ transition: width var(--ui-transition-normal);
34
+ }
35
+
36
+ /* Color variants */
37
+ .llm-progress.variant-success .fill {
38
+ background-color: var(--ui-color-success);
39
+ }
40
+
41
+ .llm-progress.variant-warning .fill {
42
+ background-color: var(--ui-color-warning);
43
+ }
44
+
45
+ .llm-progress.variant-danger .fill {
46
+ background-color: var(--ui-color-danger);
47
+ }
48
+
49
+ /* Indeterminate animation */
50
+ @keyframes progress-indeterminate {
51
+ 0% {
52
+ transform: translateX(-150%);
53
+ }
54
+ 100% {
55
+ transform: translateX(350%);
56
+ }
57
+ }
58
+
59
+ .llm-progress.is-indeterminate .fill {
60
+ width: 40% !important;
61
+ animation: progress-indeterminate 1.4s var(--ui-ease-in-out) infinite;
62
+ }
63
+
64
+ @media (prefers-reduced-motion: reduce) {
65
+ .llm-progress.is-indeterminate .fill {
66
+ animation: none;
67
+ opacity: 0.5;
68
+ }
69
+ }
@@ -0,0 +1,78 @@
1
+ .llm-radio {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: var(--ui-spacing-3);
5
+ cursor: pointer;
6
+ user-select: none;
7
+ color: var(--ui-color-text);
8
+ line-height: var(--ui-line-height-normal);
9
+ font-family: var(--ui-font-family);
10
+ font-size: var(--ui-font-size-md);
11
+ padding: var(--ui-spacing-1) 0;
12
+ min-height: 1.5rem;
13
+ transition: color var(--ui-transition-fast);
14
+ }
15
+
16
+ .llm-radio:hover:not(.is-disabled) {
17
+ color: var(--ui-color-primary);
18
+ }
19
+
20
+ .llm-radio input[type='radio'] {
21
+ appearance: none;
22
+ -webkit-appearance: none;
23
+ flex-shrink: 0;
24
+ width: 1.25rem;
25
+ height: 1.25rem;
26
+ border: 1.5px solid var(--ui-color-border-strong);
27
+ border-radius: 50%;
28
+ background-color: var(--ui-color-input-bg);
29
+ cursor: pointer;
30
+ position: relative;
31
+ transition: border-color var(--ui-transition-fast),
32
+ border-width var(--ui-transition-fast) var(--ui-ease-out),
33
+ background-color var(--ui-transition-fast),
34
+ box-shadow var(--ui-transition-fast);
35
+ outline: none;
36
+ margin: 0;
37
+ }
38
+
39
+ .llm-radio:hover input[type='radio']:not(:disabled) {
40
+ border-color: var(--ui-color-primary);
41
+ }
42
+
43
+ .llm-radio input[type='radio']:focus-visible {
44
+ box-shadow: var(--ui-focus-ring);
45
+ border-color: var(--ui-color-primary);
46
+ }
47
+
48
+ /* Checked state — thick inner ring */
49
+ .llm-radio input[type='radio']:checked {
50
+ border-color: var(--ui-color-primary);
51
+ border-width: 6px;
52
+ }
53
+
54
+ /* Invalid state */
55
+ .llm-radio.is-invalid input[type='radio'] {
56
+ border-color: var(--ui-color-input-border-invalid);
57
+ }
58
+
59
+ .llm-radio.is-invalid:hover input[type='radio'] {
60
+ border-color: var(--ui-color-danger-hover);
61
+ }
62
+
63
+ .llm-radio.is-invalid input[type='radio']:focus-visible {
64
+ border-color: var(--ui-color-input-border-invalid);
65
+ box-shadow: 0 0 0 2px var(--ui-color-surface), 0 0 0 4px var(--ui-color-danger);
66
+ }
67
+
68
+ /* Disabled state */
69
+ .llm-radio.is-disabled {
70
+ opacity: var(--ui-opacity-disabled);
71
+ cursor: not-allowed;
72
+ color: var(--ui-color-text-muted);
73
+ }
74
+
75
+ .llm-radio.is-disabled input[type='radio'] {
76
+ cursor: not-allowed;
77
+ border-color: var(--ui-color-border);
78
+ }
@@ -0,0 +1,31 @@
1
+ .llm-radio-group {
2
+ display: flex;
3
+ font-family: var(--ui-font-family);
4
+ gap: var(--ui-spacing-3);
5
+ }
6
+
7
+ .llm-radio-group.orientation-vertical {
8
+ flex-direction: column;
9
+ }
10
+
11
+ .llm-radio-group.orientation-horizontal {
12
+ flex-direction: row;
13
+ flex-wrap: wrap;
14
+ }
15
+
16
+ .llm-radio-group.is-disabled {
17
+ opacity: var(--ui-opacity-disabled);
18
+ cursor: not-allowed;
19
+ }
20
+
21
+ /* Error messages */
22
+ .llm-radio-group .errors {
23
+ margin-top: var(--ui-spacing-2);
24
+ }
25
+
26
+ .llm-radio-group .error-message {
27
+ margin: 0;
28
+ font-size: var(--ui-font-size-sm);
29
+ color: var(--ui-color-error-text);
30
+ line-height: var(--ui-line-height-normal);
31
+ }
@@ -0,0 +1,83 @@
1
+ .llm-select {
2
+ display: inline-block;
3
+ position: relative;
4
+ font-family: var(--ui-font-family);
5
+ font-size: var(--ui-font-size-md);
6
+ }
7
+
8
+ .llm-select label {
9
+ display: block;
10
+ margin-bottom: var(--ui-spacing-2);
11
+ font-size: var(--ui-font-size-sm);
12
+ color: var(--ui-color-text);
13
+ font-weight: var(--ui-font-weight-medium);
14
+ }
15
+
16
+ /* Select wrapper — holds native select + arrow icon */
17
+ .llm-select .select-wrapper {
18
+ position: relative;
19
+ display: flex;
20
+ align-items: center;
21
+ }
22
+
23
+ .llm-select select {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ width: 100%;
28
+ min-height: 2.5rem;
29
+ padding: 0.625rem var(--ui-spacing-4);
30
+ padding-inline-end: calc(var(--ui-spacing-4) + 1.25rem);
31
+ background: var(--ui-color-input-bg);
32
+ border: 1px solid var(--ui-color-input-border);
33
+ border-radius: var(--ui-radius-md);
34
+ color: var(--ui-color-text);
35
+ font-family: inherit;
36
+ font-size: inherit;
37
+ cursor: pointer;
38
+ appearance: none;
39
+ -webkit-appearance: none;
40
+ transition:
41
+ border-color var(--ui-transition-fast),
42
+ box-shadow var(--ui-transition-fast),
43
+ background-color var(--ui-transition-fast);
44
+ }
45
+
46
+ .llm-select select:hover:not(:disabled) {
47
+ border-color: var(--ui-color-input-border-hover);
48
+ }
49
+
50
+ .llm-select select:focus-visible {
51
+ outline: none;
52
+ box-shadow: var(--ui-focus-ring);
53
+ border-color: var(--ui-color-input-border-focus);
54
+ }
55
+
56
+ .llm-select select:disabled {
57
+ opacity: var(--ui-opacity-disabled);
58
+ cursor: not-allowed;
59
+ }
60
+
61
+ .llm-select.is-invalid select {
62
+ border-color: var(--ui-color-input-border-invalid);
63
+ }
64
+
65
+ /* Arrow icon */
66
+ .llm-select .select-arrow {
67
+ position: absolute;
68
+ inset-inline-end: var(--ui-spacing-4);
69
+ pointer-events: none;
70
+ font-size: var(--ui-font-size-xs);
71
+ color: var(--ui-color-text-muted);
72
+ }
73
+
74
+ /* Error display */
75
+ .llm-select .errors {
76
+ margin-top: var(--ui-spacing-2);
77
+ }
78
+
79
+ .llm-select .error-message {
80
+ margin: 0;
81
+ font-size: var(--ui-font-size-sm);
82
+ color: var(--ui-color-error-text);
83
+ }
@@ -0,0 +1,51 @@
1
+ .llm-skeleton {
2
+ display: block;
3
+ background: var(--ui-color-border);
4
+ overflow: hidden;
5
+ position: relative;
6
+ }
7
+
8
+ /* Variant shapes */
9
+ .llm-skeleton.variant-text {
10
+ border-radius: var(--ui-radius-sm);
11
+ }
12
+
13
+ .llm-skeleton.variant-circular {
14
+ border-radius: var(--ui-radius-full, 9999px);
15
+ }
16
+
17
+ .llm-skeleton.variant-rectangular {
18
+ border-radius: var(--ui-radius-md);
19
+ }
20
+
21
+ /* Shimmer animation — uses currentColor-aware overlay so it reads on
22
+ * both light and dark surfaces (was hardcoded white at 0.3 alpha,
23
+ * which only showed on dark backgrounds). */
24
+ .llm-skeleton.is-animated::after {
25
+ content: '';
26
+ position: absolute;
27
+ inset: 0;
28
+ background: linear-gradient(
29
+ 90deg,
30
+ transparent 0%,
31
+ color-mix(in srgb, var(--ui-color-surface-raised) 80%, transparent) 50%,
32
+ transparent 100%
33
+ );
34
+ animation: shimmer 1.5s infinite;
35
+ }
36
+
37
+ @keyframes shimmer {
38
+ 0% {
39
+ transform: translateX(-100%);
40
+ }
41
+ 100% {
42
+ transform: translateX(100%);
43
+ }
44
+ }
45
+
46
+ /* Respect reduced motion */
47
+ @media (prefers-reduced-motion: reduce) {
48
+ .llm-skeleton.is-animated::after {
49
+ animation: none;
50
+ }
51
+ }
package/src/lib/spec.d.ts CHANGED
@@ -90,12 +90,12 @@ export interface LlmTextareaSpec extends LlmFormFieldSpec {
90
90
  placeholder?: string;
91
91
  autoResize?: boolean;
92
92
  }
93
- export interface LlmCheckboxSpec extends LlmFormFieldSpec {
93
+ export interface LlmCheckboxSpec extends Omit<LlmFormFieldSpec, 'value' | 'onValueChange'> {
94
94
  checked?: boolean;
95
95
  onCheckedChange?: (checked: boolean) => void;
96
96
  indeterminate?: boolean;
97
97
  }
98
- export interface LlmToggleSpec extends LlmFormFieldSpec {
98
+ export interface LlmToggleSpec extends Omit<LlmFormFieldSpec, 'value' | 'onValueChange'> {
99
99
  checked?: boolean;
100
100
  onCheckedChange?: (checked: boolean) => void;
101
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../../libs/react/src/lib/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../../libs/react/src/lib/spec.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAKH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC9E,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AACpF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAKD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;AAC1E,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AACD,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAKD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACzD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC3D,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAUD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;AACpF,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,eAAe,CAAC;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,eAAe,CAAC;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAKD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AACxE,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAKD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAC/D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAKD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AACrD,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAC5E,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAKD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AACnD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AACtE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAKD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AACpF,MAAM,MAAM,yBAAyB,GACjC,WAAW,GACX,YAAY,GACZ,cAAc,GACd,eAAe,CAAC;AACpB,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAKD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AACrE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAKD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC9E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AACpE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AACxD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAKD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAKD,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,MAAM,GACN,OAAO,GACP,YAAY,GACZ,cAAc,GACd,cAAc,GACd,eAAe,GACf,UAAU,GACV,WAAW,GACX,aAAa,GACb,YAAY,GACZ,MAAM,GACN,OAAO,GACP,KAAK,GACL,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,eAAe,CAAC;AACpB,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../../libs/react/src/lib/spec.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4EAA4E;AAC5E,4EAA4E","sourcesContent":["// AUTO-GENERATED from libs/spec/src/index.ts — do not edit here.\n// Run `node tools/scripts/sync-spec.mjs` after editing the source of truth.\n// The framework libs inline these types so @atelier-ui/spec stays internal.\n\n/**\n * @atelier-ui/spec\n *\n * Framework-agnostic TypeScript interfaces defining the public API contract\n * for every llm-components component. Both the Angular and React libraries\n * import from here so the compiler enforces parity.\n *\n * Angular: use the union types as `input<T>()` type parameters.\n * React: extend the spec interface from the framework-specific props interface.\n */\n\n// ---------------------------------------------------------------------------\n// Button\n// ---------------------------------------------------------------------------\nexport type LlmButtonVariant = 'primary' | 'secondary' | 'outline' | 'danger';\nexport type LlmButtonSize = 'sm' | 'md' | 'lg';\nexport interface LlmButtonSpec {\n variant?: LlmButtonVariant;\n size?: LlmButtonSize;\n disabled?: boolean;\n loading?: boolean;\n /**\n * Accessible name — rendered as `aria-label`. Required when the\n * button has no visible text label (icon-only buttons), otherwise\n * the button is unnamed for assistive tech. The React adapter\n * encodes this requirement at the type level via a discriminated\n * union; the Angular and Vue adapters log a dev-mode warning when\n * a rendered button has no accessible name.\n */\n 'aria-label'?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Badge\n// ---------------------------------------------------------------------------\nexport type LlmBadgeVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\nexport type LlmBadgeSize = 'sm' | 'md';\nexport interface LlmBadgeSpec {\n variant?: LlmBadgeVariant;\n size?: LlmBadgeSize;\n}\n\n// ---------------------------------------------------------------------------\n// Avatar / AvatarGroup\n// ---------------------------------------------------------------------------\nexport type LlmAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type LlmAvatarShape = 'circle' | 'square';\nexport type LlmAvatarStatus = 'online' | 'offline' | 'away' | 'busy' | '';\nexport interface LlmAvatarSpec {\n src?: string;\n alt?: string;\n name?: string;\n size?: LlmAvatarSize;\n shape?: LlmAvatarShape;\n status?: LlmAvatarStatus;\n}\nexport interface LlmAvatarGroupSpec {\n max?: number;\n size?: LlmAvatarSize;\n}\n\n// ---------------------------------------------------------------------------\n// Card\n// ---------------------------------------------------------------------------\nexport type LlmCardVariant = 'elevated' | 'outlined' | 'flat';\nexport type LlmCardPadding = 'none' | 'sm' | 'md' | 'lg';\n/**\n * Optional landmark role for the card. Default behaviour is a plain\n * `<div>` — most cards group content visually and shouldn't add a\n * landmark to the page outline.\n *\n * Pick a role only when the card is meaningful as a landmark:\n * - `'article'` for self-contained pieces of content (a blog post,\n * a comment, a forum entry) that make sense out of context.\n * - `'region'` for a perceivable area that needs a screen-reader\n * stop. Pair with `aria-label` or `aria-labelledby`.\n * - `'section'` is not a landmark by itself — equivalent to a\n * `<section>` element. Useful when nesting structure matters.\n */\nexport type LlmCardRole = 'article' | 'region' | 'section';\nexport interface LlmCardSpec {\n variant?: LlmCardVariant;\n padding?: LlmCardPadding;\n /**\n * Opt-in landmark role. Default is no role (plain `<div>`).\n * See {@link LlmCardRole} for when to use each value.\n */\n role?: LlmCardRole;\n}\n\n// ---------------------------------------------------------------------------\n// Input / Textarea (shared form field props)\n// ---------------------------------------------------------------------------\n// `any` is intentional here: downstream form-field interfaces narrow `value`\n// to the concrete primitive they accept (string, number, boolean, Date, …).\n// Using `unknown` would force every downstream consumer to redeclare the\n// property, defeating the purpose of the shared spec.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface LlmFormFieldSpec {\n value?: any;\n onValueChange?: (value: any) => void;\n disabled?: boolean;\n readonly?: boolean;\n invalid?: boolean;\n required?: boolean;\n name?: string;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport type LlmInputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';\nexport interface LlmInputSpec extends LlmFormFieldSpec {\n type?: LlmInputType;\n placeholder?: string;\n}\n\nexport interface LlmTextareaSpec extends LlmFormFieldSpec {\n rows?: number;\n placeholder?: string;\n autoResize?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Checkbox / Toggle\n// ---------------------------------------------------------------------------\nexport interface LlmCheckboxSpec extends LlmFormFieldSpec {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n indeterminate?: boolean;\n}\n\nexport interface LlmToggleSpec extends LlmFormFieldSpec {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Radio / RadioGroup\n// ---------------------------------------------------------------------------\nexport interface LlmRadioSpec {\n radioValue: string;\n disabled?: boolean;\n}\n\nexport interface LlmRadioGroupSpec extends LlmFormFieldSpec {\n value?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Select / Option\n// ---------------------------------------------------------------------------\nexport interface LlmSelectSpec extends LlmFormFieldSpec {\n placeholder?: string;\n}\n\nexport interface LlmOptionSpec {\n optionValue: string;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stepper\n// ---------------------------------------------------------------------------\nexport interface LlmStepperSpec {\n activeStep?: number;\n orientation?: 'horizontal' | 'vertical';\n linear?: boolean;\n}\n\nexport interface LlmStepSpec {\n label: string;\n description?: string;\n completed?: boolean;\n error?: boolean;\n optional?: boolean;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Combobox\n// ---------------------------------------------------------------------------\nexport interface LlmComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface LlmComboboxSpec extends LlmFormFieldSpec {\n options?: LlmComboboxOption[];\n placeholder?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Alert\n// ---------------------------------------------------------------------------\nexport type LlmAlertVariant = 'info' | 'success' | 'warning' | 'danger';\nexport interface LlmAlertSpec {\n variant?: LlmAlertVariant;\n dismissible?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Dialog\n// ---------------------------------------------------------------------------\nexport type LlmDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\nexport interface LlmDialogSpec {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n closeOnBackdrop?: boolean;\n size?: LlmDialogSize;\n}\n\n// ---------------------------------------------------------------------------\n// TabGroup / Tab\n// ---------------------------------------------------------------------------\nexport type LlmTabGroupVariant = 'default' | 'pills';\nexport interface LlmTabGroupSpec {\n selectedIndex?: number;\n onSelectedIndexChange?: (index: number) => void;\n variant?: LlmTabGroupVariant;\n}\n\nexport interface LlmTabSpec {\n label: string;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// AccordionGroup / AccordionItem\n// ---------------------------------------------------------------------------\nexport type LlmAccordionGroupVariant = 'default' | 'bordered' | 'separated';\nexport interface LlmAccordionGroupSpec {\n multi?: boolean;\n variant?: LlmAccordionGroupVariant;\n}\n\nexport type LlmAccordionHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport interface LlmAccordionItemSpec {\n expanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n disabled?: boolean;\n /**\n * HTML heading level wrapping the trigger button. Default `3`.\n * Set this to match your page's heading outline so the\n * accordion's section titles don't break heading order.\n * Example: if the accordion is nested under an `<h2>`, pass\n * `headingLevel={3}` (default); if nested under an `<h3>`, pass\n * `headingLevel={4}`.\n */\n headingLevel?: LlmAccordionHeadingLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Menu / MenuItem\n// ---------------------------------------------------------------------------\nexport type LlmMenuVariant = 'default' | 'compact';\nexport interface LlmMenuSpec {\n variant?: LlmMenuVariant;\n}\n\nexport interface LlmMenuItemSpec {\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip\n// ---------------------------------------------------------------------------\nexport type LlmTooltipPosition = 'above' | 'below' | 'left' | 'right';\nexport interface LlmTooltipSpec {\n llmTooltip: string;\n llmTooltipPosition?: LlmTooltipPosition;\n llmTooltipDisabled?: boolean;\n llmTooltipShowDelay?: number;\n llmTooltipHideDelay?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Toast\n// ---------------------------------------------------------------------------\nexport type LlmToastVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\nexport type LlmToastContainerPosition =\n | 'top-right'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-center';\nexport interface LlmToastOptions {\n variant?: LlmToastVariant;\n duration?: number;\n dismissible?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Skeleton\n// ---------------------------------------------------------------------------\nexport type LlmSkeletonVariant = 'text' | 'circular' | 'rectangular';\nexport interface LlmSkeletonSpec {\n variant?: LlmSkeletonVariant;\n width?: string;\n height?: string;\n animated?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Breadcrumbs / BreadcrumbItem\n// ---------------------------------------------------------------------------\nexport interface LlmBreadcrumbsSpec {\n separator?: string;\n}\n\nexport interface LlmBreadcrumbItemSpec {\n href?: string;\n current?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Pagination\n// ---------------------------------------------------------------------------\nexport interface LlmPaginationSpec {\n page?: number;\n pageCount?: number;\n siblingCount?: number;\n showFirstLast?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Progress\n// ---------------------------------------------------------------------------\nexport type LlmProgressVariant = 'default' | 'success' | 'warning' | 'danger';\nexport type LlmProgressSize = 'sm' | 'md' | 'lg';\nexport interface LlmProgressSpec {\n value?: number;\n max?: number;\n variant?: LlmProgressVariant;\n size?: LlmProgressSize;\n indeterminate?: boolean;\n /**\n * Accessible name for the progress bar — rendered as `aria-label`.\n * Required by ARIA when there is no visible label nearby; without it\n * screen readers announce only \"progress bar 47%\". Examples:\n * `\"Upload progress\"`, `\"Form completion\"`, `\"Quota usage\"`.\n */\n label?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Drawer\n// ---------------------------------------------------------------------------\nexport type LlmDrawerPosition = 'left' | 'right' | 'top' | 'bottom';\nexport type LlmDrawerSize = 'sm' | 'md' | 'lg' | 'full';\nexport interface LlmDrawerSpec {\n open?: boolean;\n position?: LlmDrawerPosition;\n size?: LlmDrawerSize;\n closeOnBackdrop?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Table\n// ---------------------------------------------------------------------------\nexport type LlmTableVariant = 'default' | 'striped' | 'bordered';\nexport type LlmTableSize = 'sm' | 'md' | 'lg';\nexport type LlmSortDirection = 'asc' | 'desc' | null;\nexport type LlmTableAlign = 'start' | 'center' | 'end';\n\nexport interface LlmTableSpec {\n variant?: LlmTableVariant;\n size?: LlmTableSize;\n stickyHeader?: boolean;\n /**\n * Accessible name for the scrollable table region. The wrapper\n * around the `<table>` is keyboard-focusable (tabindex=0) so that\n * users can scroll horizontally; this label is what screen readers\n * announce when focus enters the region. Defaults to `\"Table\"`.\n */\n 'aria-label'?: string;\n}\n\nexport interface LlmTbodySpec {\n empty?: boolean;\n colSpan?: number;\n}\n\nexport interface LlmTrSpec {\n selected?: boolean;\n selectable?: boolean;\n rowId?: string;\n}\n\nexport interface LlmThSpec {\n sortable?: boolean;\n sortDirection?: LlmSortDirection;\n align?: LlmTableAlign;\n width?: string;\n}\n\nexport interface LlmTdSpec {\n align?: LlmTableAlign;\n}\n\n// ---------------------------------------------------------------------------\n// Icon\n// ---------------------------------------------------------------------------\nexport type LlmIconName =\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'error'\n | 'chevron-up'\n | 'chevron-down'\n | 'chevron-left'\n | 'chevron-right'\n | 'sort-asc'\n | 'sort-desc'\n | 'arrow-right'\n | 'arrow-left'\n | 'copy'\n | 'paste'\n | 'add'\n | 'edit'\n | 'delete'\n | 'close'\n | 'more'\n | 'default-toast';\nexport type LlmIconSize = 'sm' | 'md' | 'lg';\nexport interface LlmIconSpec {\n name: LlmIconName;\n size?: LlmIconSize;\n /**\n * Accessible label. When provided, the icon is announced as an image with\n * this label. When omitted, the icon is hidden from assistive tech (treated\n * as decorative).\n */\n label?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Chat (AI surface)\n// ---------------------------------------------------------------------------\nexport type LlmChatVariant = 'drawer' | 'popup' | 'inline';\nexport type LlmChatStatus = 'idle' | 'streaming' | 'error';\nexport type LlmChatMessageRole = 'user' | 'assistant' | 'system';\n\nexport interface LlmChatMessageSpec {\n id: string;\n role: LlmChatMessageRole;\n content: string;\n failed?: boolean;\n}\n\nexport interface LlmChatSuggestionSpec {\n id: string;\n label: string;\n hint?: string;\n}\n\nexport interface LlmChatSpec {\n variant?: LlmChatVariant;\n status?: LlmChatStatus;\n open?: boolean;\n}\n"]}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../../libs/react/src/lib/spec.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4EAA4E;AAC5E,4EAA4E","sourcesContent":["// AUTO-GENERATED from libs/spec/src/index.ts — do not edit here.\n// Run `node tools/scripts/sync-spec.mjs` after editing the source of truth.\n// The framework libs inline these types so @atelier-ui/spec stays internal.\n\n/**\n * @atelier-ui/spec\n *\n * Framework-agnostic TypeScript interfaces defining the public API contract\n * for every llm-components component. Both the Angular and React libraries\n * import from here so the compiler enforces parity.\n *\n * Angular: use the union types as `input<T>()` type parameters.\n * React: extend the spec interface from the framework-specific props interface.\n */\n\n// ---------------------------------------------------------------------------\n// Button\n// ---------------------------------------------------------------------------\nexport type LlmButtonVariant = 'primary' | 'secondary' | 'outline' | 'danger';\nexport type LlmButtonSize = 'sm' | 'md' | 'lg';\nexport interface LlmButtonSpec {\n variant?: LlmButtonVariant;\n size?: LlmButtonSize;\n disabled?: boolean;\n loading?: boolean;\n /**\n * Accessible name — rendered as `aria-label`. Required when the\n * button has no visible text label (icon-only buttons), otherwise\n * the button is unnamed for assistive tech. The React adapter\n * encodes this requirement at the type level via a discriminated\n * union; the Angular and Vue adapters log a dev-mode warning when\n * a rendered button has no accessible name.\n */\n 'aria-label'?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Badge\n// ---------------------------------------------------------------------------\nexport type LlmBadgeVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\nexport type LlmBadgeSize = 'sm' | 'md';\nexport interface LlmBadgeSpec {\n variant?: LlmBadgeVariant;\n size?: LlmBadgeSize;\n}\n\n// ---------------------------------------------------------------------------\n// Avatar / AvatarGroup\n// ---------------------------------------------------------------------------\nexport type LlmAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type LlmAvatarShape = 'circle' | 'square';\nexport type LlmAvatarStatus = 'online' | 'offline' | 'away' | 'busy' | '';\nexport interface LlmAvatarSpec {\n src?: string;\n alt?: string;\n name?: string;\n size?: LlmAvatarSize;\n shape?: LlmAvatarShape;\n status?: LlmAvatarStatus;\n}\nexport interface LlmAvatarGroupSpec {\n max?: number;\n size?: LlmAvatarSize;\n}\n\n// ---------------------------------------------------------------------------\n// Card\n// ---------------------------------------------------------------------------\nexport type LlmCardVariant = 'elevated' | 'outlined' | 'flat';\nexport type LlmCardPadding = 'none' | 'sm' | 'md' | 'lg';\n/**\n * Optional landmark role for the card. Default behaviour is a plain\n * `<div>` — most cards group content visually and shouldn't add a\n * landmark to the page outline.\n *\n * Pick a role only when the card is meaningful as a landmark:\n * - `'article'` for self-contained pieces of content (a blog post,\n * a comment, a forum entry) that make sense out of context.\n * - `'region'` for a perceivable area that needs a screen-reader\n * stop. Pair with `aria-label` or `aria-labelledby`.\n * - `'section'` is not a landmark by itself — equivalent to a\n * `<section>` element. Useful when nesting structure matters.\n */\nexport type LlmCardRole = 'article' | 'region' | 'section';\nexport interface LlmCardSpec {\n variant?: LlmCardVariant;\n padding?: LlmCardPadding;\n /**\n * Opt-in landmark role. Default is no role (plain `<div>`).\n * See {@link LlmCardRole} for when to use each value.\n */\n role?: LlmCardRole;\n}\n\n// ---------------------------------------------------------------------------\n// Input / Textarea (shared form field props)\n// ---------------------------------------------------------------------------\n// `any` is intentional here: downstream form-field interfaces narrow `value`\n// to the concrete primitive they accept (string, number, boolean, Date, …).\n// Using `unknown` would force every downstream consumer to redeclare the\n// property, defeating the purpose of the shared spec.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface LlmFormFieldSpec {\n value?: any;\n onValueChange?: (value: any) => void;\n disabled?: boolean;\n readonly?: boolean;\n invalid?: boolean;\n required?: boolean;\n name?: string;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport type LlmInputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';\nexport interface LlmInputSpec extends LlmFormFieldSpec {\n type?: LlmInputType;\n placeholder?: string;\n}\n\nexport interface LlmTextareaSpec extends LlmFormFieldSpec {\n rows?: number;\n placeholder?: string;\n autoResize?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Checkbox / Toggle\n// ---------------------------------------------------------------------------\n// Checkbox/Toggle are checked-based, not value-based, so they omit the\n// inherited `value`/`onValueChange` — their state is `checked`/`onCheckedChange`.\n// (Input/Textarea/RadioGroup/Select/Combobox keep the value-based pair.)\nexport interface LlmCheckboxSpec extends Omit<LlmFormFieldSpec, 'value' | 'onValueChange'> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n indeterminate?: boolean;\n}\n\nexport interface LlmToggleSpec extends Omit<LlmFormFieldSpec, 'value' | 'onValueChange'> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Radio / RadioGroup\n// ---------------------------------------------------------------------------\nexport interface LlmRadioSpec {\n radioValue: string;\n disabled?: boolean;\n}\n\nexport interface LlmRadioGroupSpec extends LlmFormFieldSpec {\n value?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Select / Option\n// ---------------------------------------------------------------------------\nexport interface LlmSelectSpec extends LlmFormFieldSpec {\n placeholder?: string;\n}\n\nexport interface LlmOptionSpec {\n optionValue: string;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stepper\n// ---------------------------------------------------------------------------\nexport interface LlmStepperSpec {\n activeStep?: number;\n orientation?: 'horizontal' | 'vertical';\n linear?: boolean;\n}\n\nexport interface LlmStepSpec {\n label: string;\n description?: string;\n completed?: boolean;\n error?: boolean;\n optional?: boolean;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Combobox\n// ---------------------------------------------------------------------------\nexport interface LlmComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface LlmComboboxSpec extends LlmFormFieldSpec {\n options?: LlmComboboxOption[];\n placeholder?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Alert\n// ---------------------------------------------------------------------------\nexport type LlmAlertVariant = 'info' | 'success' | 'warning' | 'danger';\nexport interface LlmAlertSpec {\n variant?: LlmAlertVariant;\n dismissible?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Dialog\n// ---------------------------------------------------------------------------\nexport type LlmDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\nexport interface LlmDialogSpec {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n closeOnBackdrop?: boolean;\n size?: LlmDialogSize;\n}\n\n// ---------------------------------------------------------------------------\n// TabGroup / Tab\n// ---------------------------------------------------------------------------\nexport type LlmTabGroupVariant = 'default' | 'pills';\nexport interface LlmTabGroupSpec {\n selectedIndex?: number;\n onSelectedIndexChange?: (index: number) => void;\n variant?: LlmTabGroupVariant;\n}\n\nexport interface LlmTabSpec {\n label: string;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// AccordionGroup / AccordionItem\n// ---------------------------------------------------------------------------\nexport type LlmAccordionGroupVariant = 'default' | 'bordered' | 'separated';\nexport interface LlmAccordionGroupSpec {\n multi?: boolean;\n variant?: LlmAccordionGroupVariant;\n}\n\nexport type LlmAccordionHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport interface LlmAccordionItemSpec {\n expanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n disabled?: boolean;\n /**\n * HTML heading level wrapping the trigger button. Default `3`.\n * Set this to match your page's heading outline so the\n * accordion's section titles don't break heading order.\n * Example: if the accordion is nested under an `<h2>`, pass\n * `headingLevel={3}` (default); if nested under an `<h3>`, pass\n * `headingLevel={4}`.\n */\n headingLevel?: LlmAccordionHeadingLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Menu / MenuItem\n// ---------------------------------------------------------------------------\nexport type LlmMenuVariant = 'default' | 'compact';\nexport interface LlmMenuSpec {\n variant?: LlmMenuVariant;\n}\n\nexport interface LlmMenuItemSpec {\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip\n// ---------------------------------------------------------------------------\nexport type LlmTooltipPosition = 'above' | 'below' | 'left' | 'right';\nexport interface LlmTooltipSpec {\n llmTooltip: string;\n llmTooltipPosition?: LlmTooltipPosition;\n llmTooltipDisabled?: boolean;\n llmTooltipShowDelay?: number;\n llmTooltipHideDelay?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Toast\n// ---------------------------------------------------------------------------\nexport type LlmToastVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\nexport type LlmToastContainerPosition =\n | 'top-right'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-center';\nexport interface LlmToastOptions {\n variant?: LlmToastVariant;\n duration?: number;\n dismissible?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Skeleton\n// ---------------------------------------------------------------------------\nexport type LlmSkeletonVariant = 'text' | 'circular' | 'rectangular';\nexport interface LlmSkeletonSpec {\n variant?: LlmSkeletonVariant;\n width?: string;\n height?: string;\n animated?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Breadcrumbs / BreadcrumbItem\n// ---------------------------------------------------------------------------\nexport interface LlmBreadcrumbsSpec {\n separator?: string;\n}\n\nexport interface LlmBreadcrumbItemSpec {\n href?: string;\n current?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Pagination\n// ---------------------------------------------------------------------------\nexport interface LlmPaginationSpec {\n page?: number;\n pageCount?: number;\n siblingCount?: number;\n showFirstLast?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Progress\n// ---------------------------------------------------------------------------\nexport type LlmProgressVariant = 'default' | 'success' | 'warning' | 'danger';\nexport type LlmProgressSize = 'sm' | 'md' | 'lg';\nexport interface LlmProgressSpec {\n value?: number;\n max?: number;\n variant?: LlmProgressVariant;\n size?: LlmProgressSize;\n indeterminate?: boolean;\n /**\n * Accessible name for the progress bar — rendered as `aria-label`.\n * Required by ARIA when there is no visible label nearby; without it\n * screen readers announce only \"progress bar 47%\". Examples:\n * `\"Upload progress\"`, `\"Form completion\"`, `\"Quota usage\"`.\n */\n label?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Drawer\n// ---------------------------------------------------------------------------\nexport type LlmDrawerPosition = 'left' | 'right' | 'top' | 'bottom';\nexport type LlmDrawerSize = 'sm' | 'md' | 'lg' | 'full';\nexport interface LlmDrawerSpec {\n open?: boolean;\n position?: LlmDrawerPosition;\n size?: LlmDrawerSize;\n closeOnBackdrop?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Table\n// ---------------------------------------------------------------------------\nexport type LlmTableVariant = 'default' | 'striped' | 'bordered';\nexport type LlmTableSize = 'sm' | 'md' | 'lg';\nexport type LlmSortDirection = 'asc' | 'desc' | null;\nexport type LlmTableAlign = 'start' | 'center' | 'end';\n\nexport interface LlmTableSpec {\n variant?: LlmTableVariant;\n size?: LlmTableSize;\n stickyHeader?: boolean;\n /**\n * Accessible name for the scrollable table region. The wrapper\n * around the `<table>` is keyboard-focusable (tabindex=0) so that\n * users can scroll horizontally; this label is what screen readers\n * announce when focus enters the region. Defaults to `\"Table\"`.\n */\n 'aria-label'?: string;\n}\n\nexport interface LlmTbodySpec {\n empty?: boolean;\n colSpan?: number;\n}\n\nexport interface LlmTrSpec {\n selected?: boolean;\n selectable?: boolean;\n rowId?: string;\n}\n\nexport interface LlmThSpec {\n sortable?: boolean;\n sortDirection?: LlmSortDirection;\n align?: LlmTableAlign;\n width?: string;\n}\n\nexport interface LlmTdSpec {\n align?: LlmTableAlign;\n}\n\n// ---------------------------------------------------------------------------\n// Icon\n// ---------------------------------------------------------------------------\nexport type LlmIconName =\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'error'\n | 'chevron-up'\n | 'chevron-down'\n | 'chevron-left'\n | 'chevron-right'\n | 'sort-asc'\n | 'sort-desc'\n | 'arrow-right'\n | 'arrow-left'\n | 'copy'\n | 'paste'\n | 'add'\n | 'edit'\n | 'delete'\n | 'close'\n | 'more'\n | 'default-toast';\nexport type LlmIconSize = 'sm' | 'md' | 'lg';\nexport interface LlmIconSpec {\n name: LlmIconName;\n size?: LlmIconSize;\n /**\n * Accessible label. When provided, the icon is announced as an image with\n * this label. When omitted, the icon is hidden from assistive tech (treated\n * as decorative).\n */\n label?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Chat (AI surface)\n// ---------------------------------------------------------------------------\nexport type LlmChatVariant = 'drawer' | 'popup' | 'inline';\nexport type LlmChatStatus = 'idle' | 'streaming' | 'error';\nexport type LlmChatMessageRole = 'user' | 'assistant' | 'system';\n\nexport interface LlmChatMessageSpec {\n id: string;\n role: LlmChatMessageRole;\n content: string;\n failed?: boolean;\n}\n\nexport interface LlmChatSuggestionSpec {\n id: string;\n label: string;\n hint?: string;\n}\n\nexport interface LlmChatSpec {\n variant?: LlmChatVariant;\n status?: LlmChatStatus;\n open?: boolean;\n}\n"]}