@origostudio/origo-design 0.0.53 → 0.0.55

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 (90) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/dist/packages/angular-renderer/CHANGELOG.md +22 -0
  3. package/dist/packages/angular-renderer/package.json +9 -4
  4. package/dist/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.d.ts +17 -13
  5. package/dist/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.js +55 -20
  6. package/dist/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.js.map +1 -1
  7. package/dist/packages/angular-renderer/src/components/primitives/pagination/pagination.component.d.ts +64 -0
  8. package/dist/packages/angular-renderer/src/components/primitives/pagination/pagination.component.js +208 -0
  9. package/dist/packages/angular-renderer/src/components/primitives/pagination/pagination.component.js.map +1 -0
  10. package/dist/packages/angular-renderer/src/components/primitives/stepper/stepper.component.d.ts +65 -0
  11. package/dist/packages/angular-renderer/src/components/primitives/stepper/stepper.component.js +272 -0
  12. package/dist/packages/angular-renderer/src/components/primitives/stepper/stepper.component.js.map +1 -0
  13. package/dist/packages/angular-renderer/src/components/primitives/tabs/tabs.component.d.ts +24 -15
  14. package/dist/packages/angular-renderer/src/components/primitives/tabs/tabs.component.js +105 -45
  15. package/dist/packages/angular-renderer/src/components/primitives/tabs/tabs.component.js.map +1 -1
  16. package/dist/packages/angular-renderer/src/index.d.ts +5 -0
  17. package/dist/packages/angular-renderer/src/index.js +5 -0
  18. package/dist/packages/angular-renderer/src/index.js.map +1 -1
  19. package/dist/packages/angular-renderer/src/lib/overlay/overlay-ref.d.ts +40 -0
  20. package/dist/packages/angular-renderer/src/lib/overlay/overlay-ref.js +248 -0
  21. package/dist/packages/angular-renderer/src/lib/overlay/overlay-ref.js.map +1 -0
  22. package/dist/packages/angular-renderer/src/lib/overlay/overlay.models.d.ts +51 -0
  23. package/dist/packages/angular-renderer/src/lib/overlay/overlay.models.js +3 -0
  24. package/dist/packages/angular-renderer/src/lib/overlay/overlay.models.js.map +1 -0
  25. package/dist/packages/angular-renderer/src/lib/overlay/overlay.service.d.ts +12 -0
  26. package/dist/packages/angular-renderer/src/lib/overlay/overlay.service.js +211 -0
  27. package/dist/packages/angular-renderer/src/lib/overlay/overlay.service.js.map +1 -0
  28. package/dist/packages/angular-renderer/src/lib/primitives.provider.js +5 -0
  29. package/dist/packages/angular-renderer/src/lib/primitives.provider.js.map +1 -1
  30. package/dist/packages/cli/CHANGELOG.md +8 -0
  31. package/dist/packages/cli/package.json +2 -2
  32. package/dist/packages/cli/package.json.bak +2 -2
  33. package/dist/packages/core/CHANGELOG.md +8 -0
  34. package/dist/packages/core/package.json +1 -1
  35. package/dist/packages/core/package.json.bak +1 -1
  36. package/dist/packages/design-tokens/CHANGELOG.md +8 -0
  37. package/dist/packages/design-tokens/package.json +1 -1
  38. package/dist/packages/playground/browser/{chunk-CoyK3eaz.js → chunk-1qL4kcgA.js} +1 -1
  39. package/dist/packages/playground/browser/{chunk-DGFBCrz0.js → chunk-BrNyIaRu.js} +1 -1
  40. package/dist/packages/playground/browser/{chunk-BD3aW3fo.js → chunk-BtTuZVyy.js} +1 -1
  41. package/dist/packages/playground/browser/{chunk-CZYE6Vo5.js → chunk-COdU4TAE.js} +1 -1
  42. package/dist/packages/playground/browser/{chunk-D-gQXFhO.js → chunk-ChIFPhYz.js} +1 -1
  43. package/dist/packages/playground/browser/{chunk-CYa5xYdO.js → chunk-CkxX-6B-.js} +1 -1
  44. package/dist/packages/playground/browser/{chunk-kcBcpdDQ.js → chunk-CsaBv_7w.js} +1 -1
  45. package/dist/packages/playground/browser/{chunk-DoDHfFRC.js → chunk-DT7XZi8x.js} +1 -1
  46. package/dist/packages/playground/browser/{chunk-DjQs2rZT.js → chunk-DVT-phDq.js} +1 -1
  47. package/dist/packages/playground/browser/{chunk-DFUtHoSa.js → chunk-DYVZHQvW.js} +1 -1
  48. package/dist/packages/playground/browser/{chunk-OWSRr_rS.js → chunk-DYyPC2oE.js} +1 -1
  49. package/dist/packages/playground/browser/{chunk-BGrPMh-Q.js → chunk-DhQakfe5.js} +1 -1
  50. package/dist/packages/playground/browser/{chunk-Bb34YjCX.js → chunk-FZuwRWVL.js} +1 -1
  51. package/dist/packages/playground/browser/{chunk-Cxq4lcyl.js → chunk-x-oQTX69.js} +1 -1
  52. package/dist/packages/playground/browser/{chunk-K_6Vunnz.js → chunk-xkhVqkfX.js} +1 -1
  53. package/dist/packages/playground/browser/index.html +1 -1
  54. package/dist/packages/playground/browser/main-UNDFLKYI.js +889 -0
  55. package/package.json +3 -1
  56. package/packages/angular-renderer/CHANGELOG.md +22 -0
  57. package/packages/angular-renderer/package.json +9 -4
  58. package/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.html +79 -14
  59. package/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.scss +55 -9
  60. package/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.ts +82 -22
  61. package/packages/angular-renderer/src/components/primitives/pagination/pagination.component.html +95 -0
  62. package/packages/angular-renderer/src/components/primitives/pagination/pagination.component.scss +109 -0
  63. package/packages/angular-renderer/src/components/primitives/pagination/pagination.component.ts +275 -0
  64. package/packages/angular-renderer/src/components/primitives/stepper/stepper.component.html +68 -0
  65. package/packages/angular-renderer/src/components/primitives/stepper/stepper.component.scss +167 -0
  66. package/packages/angular-renderer/src/components/primitives/stepper/stepper.component.ts +325 -0
  67. package/packages/angular-renderer/src/components/primitives/tabs/tabs.component.html +56 -24
  68. package/packages/angular-renderer/src/components/primitives/tabs/tabs.component.scss +115 -17
  69. package/packages/angular-renderer/src/components/primitives/tabs/tabs.component.ts +134 -42
  70. package/packages/angular-renderer/src/index.ts +5 -0
  71. package/packages/angular-renderer/src/lib/overlay/overlay-ref.ts +298 -0
  72. package/packages/angular-renderer/src/lib/overlay/overlay.models.ts +59 -0
  73. package/packages/angular-renderer/src/lib/overlay/overlay.service.ts +227 -0
  74. package/packages/angular-renderer/src/lib/primitives.provider.ts +5 -0
  75. package/packages/angular-renderer/src/styles/overlay.scss +117 -0
  76. package/packages/cli/CHANGELOG.md +8 -0
  77. package/packages/cli/package.json +2 -2
  78. package/packages/core/CHANGELOG.md +8 -0
  79. package/packages/core/package.json +1 -1
  80. package/packages/design-tokens/CHANGELOG.md +8 -0
  81. package/packages/design-tokens/package.json +1 -1
  82. package/packages/devtools/CHANGELOG.md +8 -0
  83. package/packages/devtools/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/deps___vitest_vm__/_metadata.json +3 -3
  84. package/packages/devtools/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  85. package/packages/devtools/package.json +3 -3
  86. package/packages/playground/CHANGELOG.md +8 -0
  87. package/packages/playground/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/deps___vitest_vm__/_metadata.json +3 -3
  88. package/packages/playground/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  89. package/packages/playground/package.json +3 -3
  90. package/dist/packages/playground/browser/main-ZTUYGW6H.js +0 -748
@@ -0,0 +1,275 @@
1
+ import {
2
+ Component,
3
+ input,
4
+ output,
5
+ ChangeDetectionStrategy,
6
+ computed,
7
+ ViewEncapsulation,
8
+ inject,
9
+ viewChild,
10
+ ViewContainerRef,
11
+ } from '@angular/core';
12
+ import { InteractionContract } from '@origostudio/core';
13
+ import {
14
+ OrigoAdapter,
15
+ ContainerComponent as IContainerComponent,
16
+ coerceContractProps,
17
+ } from '../../../adapters/web/adapter';
18
+ import { WebExperienceAdapterService } from '../../../adapters/web/experience-adapter.service';
19
+
20
+ export interface PageChangeEvent {
21
+ page: number;
22
+ first: number;
23
+ rows: number;
24
+ pageCount: number;
25
+ }
26
+
27
+ export interface RowsChangeEvent {
28
+ rows: number;
29
+ first: number;
30
+ }
31
+
32
+ export interface PaginationProps {
33
+ first?: number;
34
+ rows?: number;
35
+ totalRecords?: number;
36
+ pageLinkSize?: number;
37
+ rowsPerPageOptions?: number[];
38
+ showFirstLastIcon?: boolean;
39
+ showPageLinks?: boolean;
40
+ template?: string;
41
+ disabled?: boolean;
42
+ size?: 'small' | 'medium' | 'large';
43
+ variant?: string;
44
+ permissions?: Record<string, string>;
45
+ rules?: Record<string, unknown>;
46
+ metadata?: Record<string, unknown>;
47
+ 'aria-label'?: string;
48
+ 'aria-describedby'?: string;
49
+ }
50
+
51
+ export const PaginationContractSchema: Record<
52
+ keyof PaginationProps,
53
+ 'string' | 'number' | 'boolean' | 'array' | 'object'
54
+ > = {
55
+ first: 'number',
56
+ rows: 'number',
57
+ totalRecords: 'number',
58
+ pageLinkSize: 'number',
59
+ rowsPerPageOptions: 'array',
60
+ showFirstLastIcon: 'boolean',
61
+ showPageLinks: 'boolean',
62
+ template: 'string',
63
+ disabled: 'boolean',
64
+ size: 'string',
65
+ variant: 'string',
66
+ permissions: 'object',
67
+ rules: 'object',
68
+ metadata: 'object',
69
+ 'aria-label': 'string',
70
+ 'aria-describedby': 'string',
71
+ };
72
+
73
+ @Component({
74
+ selector: 'origo-pagination',
75
+ standalone: true,
76
+ templateUrl: './pagination.component.html',
77
+ styleUrls: ['./pagination.component.scss'],
78
+ changeDetection: ChangeDetectionStrategy.OnPush,
79
+ encapsulation: ViewEncapsulation.ShadowDom,
80
+ host: {
81
+ '[class.origo-pagination]': 'true',
82
+ '[attr.data-testid]': 'contract().id',
83
+ },
84
+ })
85
+ export class PaginationComponent implements OrigoAdapter<PaginationProps>, IContainerComponent {
86
+ static readonly contractSchema = PaginationContractSchema;
87
+ static readonly strictContract = false;
88
+
89
+ contract = input.required<InteractionContract<PaginationProps>>();
90
+ vc = viewChild.required('vc', { read: ViewContainerRef });
91
+
92
+ pageChange = output<PageChangeEvent>();
93
+ rowsChange = output<RowsChangeEvent>();
94
+
95
+ private experienceAdapter = inject(WebExperienceAdapterService);
96
+
97
+ protected props = computed(() =>
98
+ coerceContractProps<PaginationProps>(this.contract().props, PaginationContractSchema)
99
+ );
100
+
101
+ computedFirst = computed(() => {
102
+ const f = Number(this.props().first ?? 0);
103
+ return isNaN(f) || f < 0 ? 0 : f;
104
+ });
105
+
106
+ computedRows = computed(() => {
107
+ const r = Number(this.props().rows ?? 10);
108
+ return isNaN(r) || r <= 0 ? 10 : r;
109
+ });
110
+
111
+ computedTotalRecords = computed(() => {
112
+ const t = Number(this.props().totalRecords ?? 0);
113
+ return isNaN(t) || t < 0 ? 0 : t;
114
+ });
115
+
116
+ computedPageLinkSize = computed(() => {
117
+ const s = Number(this.props().pageLinkSize ?? 5);
118
+ return isNaN(s) || s <= 0 ? 5 : s;
119
+ });
120
+
121
+ computedRowsPerPageOptions = computed<number[]>(() => {
122
+ const opts = this.props().rowsPerPageOptions;
123
+ if (!Array.isArray(opts)) return [];
124
+ return opts.map(item => Number(item)).filter(n => !isNaN(n) && n > 0);
125
+ });
126
+
127
+ computedShowFirstLastIcon = computed(() => {
128
+ return this.props().showFirstLastIcon !== false;
129
+ });
130
+
131
+ computedShowPageLinks = computed(() => {
132
+ return this.props().showPageLinks !== false;
133
+ });
134
+
135
+ computedDisabled = computed(() => {
136
+ return !!this.props().disabled;
137
+ });
138
+
139
+ computedAriaLabel = computed(() => {
140
+ const label = this.props()['aria-label'];
141
+ return label !== undefined && label !== null ? String(label) : 'Pagination';
142
+ });
143
+
144
+ computedAriaDescribedBy = computed(() => {
145
+ const desc = this.props()['aria-describedby'];
146
+ return desc !== undefined && desc !== null ? String(desc) : undefined;
147
+ });
148
+
149
+ pageCount = computed(() => {
150
+ const rows = this.computedRows();
151
+ const total = this.computedTotalRecords();
152
+ return rows > 0 ? Math.ceil(total / rows) : 0;
153
+ });
154
+
155
+ pageIndex = computed(() => {
156
+ const rows = this.computedRows();
157
+ const first = this.computedFirst();
158
+ return rows > 0 ? Math.floor(first / rows) : 0;
159
+ });
160
+
161
+ isFirstPage = computed(() => {
162
+ return this.pageIndex() <= 0;
163
+ });
164
+
165
+ isLastPage = computed(() => {
166
+ const count = this.pageCount();
167
+ return count === 0 || this.pageIndex() >= count - 1;
168
+ });
169
+
170
+ visiblePageLinks = computed<number[]>(() => {
171
+ const totalPages = this.pageCount();
172
+ const linkSize = this.computedPageLinkSize();
173
+
174
+ if (totalPages <= 0) return [];
175
+ if (totalPages <= linkSize) {
176
+ return Array.from({ length: totalPages }, (_, i) => i);
177
+ }
178
+
179
+ const current = this.pageIndex();
180
+ const half = Math.floor(linkSize / 2);
181
+ let start = Math.max(0, current - half);
182
+ let end = start + linkSize - 1;
183
+
184
+ if (end >= totalPages) {
185
+ end = totalPages - 1;
186
+ start = Math.max(0, end - linkSize + 1);
187
+ }
188
+
189
+ const pages: number[] = [];
190
+ for (let i = start; i <= end; i++) {
191
+ pages.push(i);
192
+ }
193
+ return pages;
194
+ });
195
+
196
+ changePage(targetIndex: number) {
197
+ if (this.computedDisabled()) return;
198
+
199
+ const count = this.pageCount();
200
+ const clampedIndex = Math.max(0, Math.min(targetIndex, Math.max(0, count - 1)));
201
+ if (clampedIndex === this.pageIndex()) return;
202
+
203
+ const rows = this.computedRows();
204
+ const first = clampedIndex * rows;
205
+
206
+ this.experienceAdapter.updateState(this.contract().id, 'first', first);
207
+
208
+ const event: PageChangeEvent = {
209
+ page: clampedIndex,
210
+ first,
211
+ rows,
212
+ pageCount: count,
213
+ };
214
+
215
+ const contractId = this.contract().id;
216
+ if (contractId) {
217
+ this.experienceAdapter.dispatchCapability(contractId, 'pageChange', event);
218
+ }
219
+
220
+ this.pageChange.emit(event);
221
+ }
222
+
223
+ onFirst() {
224
+ this.changePage(0);
225
+ }
226
+
227
+ onPrevious() {
228
+ this.changePage(this.pageIndex() - 1);
229
+ }
230
+
231
+ onNext() {
232
+ this.changePage(this.pageIndex() + 1);
233
+ }
234
+
235
+ onLast() {
236
+ this.changePage(this.pageCount() - 1);
237
+ }
238
+
239
+ onPageSelect(pageIndex: number) {
240
+ this.changePage(pageIndex);
241
+ }
242
+
243
+ onRowsSelect(event: Event) {
244
+ if (this.computedDisabled()) return;
245
+
246
+ const target = event.target as HTMLSelectElement;
247
+ const newRows = Number(target.value);
248
+ if (isNaN(newRows) || newRows <= 0) return;
249
+
250
+ this.experienceAdapter.updateState(this.contract().id, 'rows', newRows);
251
+ this.experienceAdapter.updateState(this.contract().id, 'first', 0);
252
+
253
+ const rowsEvent: RowsChangeEvent = {
254
+ rows: newRows,
255
+ first: 0,
256
+ };
257
+
258
+ const pageCount = newRows > 0 ? Math.ceil(this.computedTotalRecords() / newRows) : 0;
259
+ const pageEvent: PageChangeEvent = {
260
+ page: 0,
261
+ first: 0,
262
+ rows: newRows,
263
+ pageCount,
264
+ };
265
+
266
+ const contractId = this.contract().id;
267
+ if (contractId) {
268
+ this.experienceAdapter.dispatchCapability(contractId, 'rowsChange', rowsEvent);
269
+ this.experienceAdapter.dispatchCapability(contractId, 'pageChange', pageEvent);
270
+ }
271
+
272
+ this.rowsChange.emit(rowsEvent);
273
+ this.pageChange.emit(pageEvent);
274
+ }
275
+ }
@@ -0,0 +1,68 @@
1
+ <div
2
+ class="origo-stepper__container"
3
+ [class.origo-stepper--vertical]="orientation() === 'vertical'"
4
+ [class.origo-stepper--horizontal]="orientation() === 'horizontal'"
5
+ >
6
+ <div
7
+ class="origo-stepper__list"
8
+ role="tablist"
9
+ [attr.aria-label]="computedAriaLabel()"
10
+ [attr.aria-describedby]="computedAriaDescribedBy()"
11
+ [attr.aria-orientation]="orientation()"
12
+ >
13
+ @for (step of computedSteps(); track step.key; let i = $index; let last = $last) {
14
+ <div class="origo-stepper__item" [class.origo-stepper__item--active]="isStepActive(i)">
15
+ <button
16
+ #stepButton
17
+ type="button"
18
+ role="tab"
19
+ class="origo-stepper__step"
20
+ [class.origo-stepper__step--active]="isStepActive(i)"
21
+ [class.origo-stepper__step--completed]="isStepCompleted(step)"
22
+ [class.origo-stepper__step--disabled]="isStepDisabled(step, i)"
23
+ [disabled]="isStepDisabled(step, i)"
24
+ [attr.aria-selected]="isStepActive(i)"
25
+ [attr.aria-controls]="'step-panel-' + step.key"
26
+ [attr.id]="'step-tab-' + step.key"
27
+ [attr.tabindex]="isStepActive(i) ? 0 : -1"
28
+ (click)="onStepClick(step, i)"
29
+ (keydown)="onKeyDown($event, i)"
30
+ >
31
+ <span class="origo-stepper__indicator" aria-hidden="true">
32
+ @if (isStepCompleted(step)) {
33
+ <span class="origo-stepper__check">✓</span>
34
+ } @else if (step.icon) {
35
+ <span class="origo-stepper__icon">{{ step.icon }}</span>
36
+ } @else {
37
+ <span class="origo-stepper__number">{{ i + 1 }}</span>
38
+ }
39
+ </span>
40
+
41
+ <span class="origo-stepper__content">
42
+ <span class="origo-stepper__label">{{ step.label }}</span>
43
+ @if (step.description) {
44
+ <span class="origo-stepper__description">{{ step.description }}</span>
45
+ }
46
+ </span>
47
+ </button>
48
+
49
+ @if (!last) {
50
+ <div
51
+ class="origo-stepper__connector"
52
+ [class.origo-stepper__connector--completed]="isStepCompleted(step)"
53
+ aria-hidden="true"
54
+ ></div>
55
+ }
56
+ </div>
57
+ }
58
+ </div>
59
+
60
+ <div
61
+ class="origo-stepper__panels"
62
+ role="region"
63
+ [attr.id]="activeStepKey() ? 'step-panel-' + activeStepKey() : null"
64
+ >
65
+ <ng-container #vc></ng-container>
66
+ <ng-content></ng-content>
67
+ </div>
68
+ </div>
@@ -0,0 +1,167 @@
1
+ :host {
2
+ display: block;
3
+ box-sizing: border-box;
4
+ inline-size: 100%;
5
+
6
+ *,
7
+ *::before,
8
+ *::after {
9
+ box-sizing: inherit;
10
+ }
11
+ }
12
+
13
+ :host([hidden]) {
14
+ display: none !important;
15
+ }
16
+
17
+ .origo-stepper__container {
18
+ display: flex;
19
+ flex-direction: column;
20
+ inline-size: 100%;
21
+
22
+ &.origo-stepper--vertical {
23
+ .origo-stepper__list {
24
+ flex-direction: column;
25
+ align-items: stretch;
26
+ }
27
+
28
+ .origo-stepper__item {
29
+ flex-direction: column;
30
+ align-items: flex-start;
31
+ }
32
+
33
+ .origo-stepper__connector {
34
+ inline-size: var(--origo-border-width-thick);
35
+ min-block-size: var(--origo-spacing-lg);
36
+ margin-inline-start: var(--origo-spacing-md);
37
+ margin-block: var(--origo-spacing-xs);
38
+ }
39
+ }
40
+ }
41
+
42
+ .origo-stepper__list {
43
+ display: flex;
44
+ align-items: center;
45
+ inline-size: 100%;
46
+ padding: 0;
47
+ margin: 0;
48
+ gap: var(--origo-spacing-sm);
49
+ }
50
+
51
+ .origo-stepper__item {
52
+ display: flex;
53
+ align-items: center;
54
+ flex: 1 1 auto;
55
+
56
+ &:last-child {
57
+ flex: 0 0 auto;
58
+ }
59
+ }
60
+
61
+ .origo-stepper__step {
62
+ display: inline-flex;
63
+ align-items: center;
64
+ gap: var(--origo-spacing-sm);
65
+ background: none;
66
+ border: none;
67
+ padding-block: var(--origo-spacing-sm);
68
+ padding-inline: var(--origo-spacing-sm);
69
+ cursor: pointer;
70
+ font-family: inherit;
71
+ font-size: var(--origo-typography-button-font-size);
72
+ color: var(--origo-color-text-muted);
73
+ border-radius: var(--origo-radius-sm);
74
+ transition: all var(--origo-duration-fast) ease;
75
+ outline: none;
76
+
77
+ &:hover:not(:disabled) {
78
+ background-color: var(--origo-color-surface-subtle);
79
+ color: var(--origo-color-text-primary);
80
+ }
81
+
82
+ &:focus-visible {
83
+ outline: var(--origo-border-width-thick) solid var(--origo-color-focus);
84
+ outline-offset: 2px;
85
+ }
86
+
87
+ &.origo-stepper__step--active {
88
+ color: var(--origo-color-surface-primary);
89
+ font-weight: 600;
90
+
91
+ .origo-stepper__indicator {
92
+ background-color: var(--origo-color-surface-primary);
93
+ border-color: var(--origo-color-surface-primary);
94
+ color: var(--origo-color-text-inverse);
95
+ }
96
+ }
97
+
98
+ &.origo-stepper__step--completed:not(.origo-stepper__step--active) {
99
+ .origo-stepper__indicator {
100
+ background-color: var(--origo-color-surface-primary);
101
+ border-color: var(--origo-color-surface-primary);
102
+ color: var(--origo-color-text-inverse);
103
+ }
104
+ }
105
+
106
+ &:disabled,
107
+ &.origo-stepper__step--disabled {
108
+ cursor: not-allowed;
109
+ opacity: var(--origo-opacity-disabled);
110
+ color: var(--origo-color-text-disabled);
111
+
112
+ .origo-stepper__indicator {
113
+ border-color: var(--origo-color-border-default);
114
+ color: var(--origo-color-text-disabled);
115
+ }
116
+ }
117
+ }
118
+
119
+ .origo-stepper__indicator {
120
+ display: inline-flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ inline-size: var(--origo-spacing-xl);
124
+ block-size: var(--origo-spacing-xl);
125
+ border-radius: var(--origo-radius-full);
126
+ border: var(--origo-border-width-default) solid var(--origo-color-border-default);
127
+ background-color: var(--origo-color-surface-default);
128
+ color: var(--origo-color-text-muted);
129
+ font-size: var(--origo-typography-button-font-size);
130
+ font-weight: 600;
131
+ flex-shrink: 0;
132
+ transition: all var(--origo-duration-fast) ease;
133
+ }
134
+
135
+ .origo-stepper__content {
136
+ display: inline-flex;
137
+ flex-direction: column;
138
+ align-items: flex-start;
139
+ text-align: start;
140
+ }
141
+
142
+ .origo-stepper__label {
143
+ font-size: var(--origo-typography-button-font-size);
144
+ line-height: var(--origo-typography-button-line-height);
145
+ }
146
+
147
+ .origo-stepper__description {
148
+ font-size: var(--origo-typography-caption-font-size);
149
+ color: var(--origo-color-text-muted);
150
+ }
151
+
152
+ .origo-stepper__connector {
153
+ flex: 1 1 auto;
154
+ block-size: var(--origo-border-width-default);
155
+ background-color: var(--origo-color-border-default);
156
+ margin-inline: var(--origo-spacing-sm);
157
+ transition: background-color var(--origo-duration-fast) ease;
158
+
159
+ &.origo-stepper__connector--completed {
160
+ background-color: var(--origo-color-surface-primary);
161
+ }
162
+ }
163
+
164
+ .origo-stepper__panels {
165
+ display: block;
166
+ padding-block: var(--origo-spacing-md);
167
+ }