@origostudio/origo-design 0.0.37 → 0.0.39

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 (137) hide show
  1. package/CHANGELOG.md +3 -2
  2. package/dist/packages/angular-renderer/CHANGELOG.md +21 -0
  3. package/dist/packages/angular-renderer/package.json +7 -6
  4. package/dist/packages/angular-renderer/src/adapters/web/experience-adapter.service.d.ts +2 -0
  5. package/dist/packages/angular-renderer/src/adapters/web/experience-adapter.service.js +11 -0
  6. package/dist/packages/angular-renderer/src/adapters/web/experience-adapter.service.js.map +1 -1
  7. package/dist/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.js.map +1 -1
  8. package/dist/packages/angular-renderer/src/components/primitives/chip/chip.component.js.map +1 -1
  9. package/dist/packages/angular-renderer/src/components/primitives/switch/switch.component.js.map +1 -1
  10. package/dist/packages/angular-renderer/src/devtools/devtools-bridge.js +2 -0
  11. package/dist/packages/angular-renderer/src/devtools/devtools-bridge.js.map +1 -1
  12. package/dist/packages/angular-renderer/src/index.d.ts +1 -0
  13. package/dist/packages/angular-renderer/src/index.js +1 -0
  14. package/dist/packages/angular-renderer/src/index.js.map +1 -1
  15. package/dist/packages/angular-renderer/src/lib/primitives.provider.js +26 -20
  16. package/dist/packages/angular-renderer/src/lib/primitives.provider.js.map +1 -1
  17. package/dist/packages/cli/CHANGELOG.md +8 -0
  18. package/dist/packages/cli/package.json +2 -2
  19. package/dist/packages/cli/package.json.bak +2 -2
  20. package/dist/packages/core/CHANGELOG.md +14 -0
  21. package/dist/packages/core/package.json +2 -2
  22. package/dist/packages/core/package.json.bak +2 -2
  23. package/dist/packages/design-tokens/CHANGELOG.md +8 -0
  24. package/dist/packages/design-tokens/package.json +1 -1
  25. package/dist/packages/playground/browser/{chunk-iSLqhP12.js → chunk-B1z-uVFi.js} +1 -1
  26. package/dist/packages/playground/browser/{chunk-BxusNwwt.js → chunk-BGZXpmBQ.js} +1 -1
  27. package/dist/packages/playground/browser/{chunk-B0HlAWSR.js → chunk-ByrswSrM.js} +1 -1
  28. package/dist/packages/playground/browser/{chunk-rK1aqCb7.js → chunk-CFbPXTNr.js} +1 -1
  29. package/dist/packages/playground/browser/{chunk-Dd9ht4SU.js → chunk-CSecAR9q.js} +1 -1
  30. package/dist/packages/playground/browser/{chunk-BkTn1FbH.js → chunk-D-8Zr5zg.js} +1 -1
  31. package/dist/packages/playground/browser/{chunk-DbylCYBP.js → chunk-D2kcCG-o.js} +1 -1
  32. package/dist/packages/playground/browser/{chunk-zg5PqW0l.js → chunk-DQx5lQqG.js} +1 -1
  33. package/dist/packages/playground/browser/{chunk-DXxUFvGw.js → chunk-Dac2dp5T.js} +1 -1
  34. package/dist/packages/playground/browser/{chunk-CXHFI87Z.js → chunk-DiZkmwKl.js} +1 -1
  35. package/dist/packages/playground/browser/{chunk-BI1AmKI_.js → chunk-DwU-a89u.js} +1 -1
  36. package/dist/packages/playground/browser/{chunk-D2bm1B8y.js → chunk-JF8ksHJn.js} +1 -1
  37. package/dist/packages/playground/browser/{chunk-ZeGfaGFy.js → chunk-_TRKH8kG.js} +1 -1
  38. package/dist/packages/playground/browser/{chunk-DT7GQcHj.js → chunk-e5kB8V0v.js} +1 -1
  39. package/dist/packages/playground/browser/{chunk-94bHXqp1.js → chunk-zJLityDb.js} +1 -1
  40. package/dist/packages/playground/browser/index.html +1 -1
  41. package/dist/packages/playground/browser/main-33XWGVNC.js +731 -0
  42. package/eslint.config.js +2 -1
  43. package/generate_prompts.ps1 +10 -0
  44. package/package.json +3 -2
  45. package/packages/angular-renderer/CHANGELOG.md +21 -0
  46. package/packages/angular-renderer/package.json +7 -6
  47. package/packages/angular-renderer/playwright/.cache/assets/adapter-iYml3Kk6.js +121 -0
  48. package/packages/angular-renderer/playwright/.cache/assets/adapter-iYml3Kk6.js.map +1 -0
  49. package/packages/angular-renderer/playwright/.cache/assets/breadcrumbs.component-DqZwZwH1.js +200 -0
  50. package/packages/angular-renderer/playwright/.cache/assets/breadcrumbs.component-DqZwZwH1.js.map +1 -0
  51. package/packages/angular-renderer/playwright/.cache/assets/button.component-Dnc1mP3D.js +112 -0
  52. package/packages/angular-renderer/playwright/.cache/assets/button.component-Dnc1mP3D.js.map +1 -0
  53. package/packages/angular-renderer/playwright/.cache/assets/card.component-0WWaDbUV.js +180 -0
  54. package/packages/angular-renderer/playwright/.cache/assets/card.component-0WWaDbUV.js.map +1 -0
  55. package/packages/angular-renderer/playwright/.cache/assets/checkbox.component-JGpevUFG.js +150 -0
  56. package/packages/angular-renderer/playwright/.cache/assets/checkbox.component-JGpevUFG.js.map +1 -0
  57. package/packages/angular-renderer/playwright/.cache/assets/chip.component-DHGk3h8k.js +121 -0
  58. package/packages/angular-renderer/playwright/.cache/assets/chip.component-DHGk3h8k.js.map +1 -0
  59. package/packages/angular-renderer/playwright/.cache/assets/data-grid.component-DDZZ4enP.js +352 -0
  60. package/packages/angular-renderer/playwright/.cache/assets/data-grid.component-DDZZ4enP.js.map +1 -0
  61. package/packages/angular-renderer/playwright/.cache/assets/experience-adapter.service-CJxHLpWN.js +38 -0
  62. package/packages/angular-renderer/playwright/.cache/assets/experience-adapter.service-CJxHLpWN.js.map +1 -0
  63. package/packages/angular-renderer/playwright/.cache/assets/form-field.component-DZA0NfB7.js +184 -0
  64. package/packages/angular-renderer/playwright/.cache/assets/form-field.component-DZA0NfB7.js.map +1 -0
  65. package/packages/angular-renderer/playwright/.cache/assets/hbox.component-D5YHn6Vu.js +125 -0
  66. package/packages/angular-renderer/playwright/.cache/assets/hbox.component-D5YHn6Vu.js.map +1 -0
  67. package/packages/angular-renderer/playwright/.cache/assets/index-DRoHZv2r.js +92806 -0
  68. package/packages/angular-renderer/playwright/.cache/assets/index-DRoHZv2r.js.map +1 -0
  69. package/packages/angular-renderer/playwright/.cache/assets/label.component-DDKtYvrS.js +105 -0
  70. package/packages/angular-renderer/playwright/.cache/assets/label.component-DDKtYvrS.js.map +1 -0
  71. package/packages/angular-renderer/playwright/.cache/assets/list.component-DSP5wzI4.js +195 -0
  72. package/packages/angular-renderer/playwright/.cache/assets/list.component-DSP5wzI4.js.map +1 -0
  73. package/packages/angular-renderer/playwright/.cache/assets/radio-group.component-BzVciXZu.js +171 -0
  74. package/packages/angular-renderer/playwright/.cache/assets/radio-group.component-BzVciXZu.js.map +1 -0
  75. package/packages/angular-renderer/playwright/.cache/assets/select.component-BC_aoLNt.js +180 -0
  76. package/packages/angular-renderer/playwright/.cache/assets/select.component-BC_aoLNt.js.map +1 -0
  77. package/packages/angular-renderer/playwright/.cache/assets/sidebar.component-CY_vKSCu.js +217 -0
  78. package/packages/angular-renderer/playwright/.cache/assets/sidebar.component-CY_vKSCu.js.map +1 -0
  79. package/packages/angular-renderer/playwright/.cache/assets/switch.component-BtfhJxLp.js +144 -0
  80. package/packages/angular-renderer/playwright/.cache/assets/switch.component-BtfhJxLp.js.map +1 -0
  81. package/packages/angular-renderer/playwright/.cache/assets/tabs.component-DGcKkhH_.js +218 -0
  82. package/packages/angular-renderer/playwright/.cache/assets/tabs.component-DGcKkhH_.js.map +1 -0
  83. package/packages/angular-renderer/playwright/.cache/assets/text-input.component-IyHHKpW-.js +121 -0
  84. package/packages/angular-renderer/playwright/.cache/assets/text-input.component-IyHHKpW-.js.map +1 -0
  85. package/packages/angular-renderer/playwright/.cache/assets/textarea.component-Bpvh81yV.js +141 -0
  86. package/packages/angular-renderer/playwright/.cache/assets/textarea.component-Bpvh81yV.js.map +1 -0
  87. package/packages/angular-renderer/playwright/.cache/assets/vbox.component-DRe59FUF.js +127 -0
  88. package/packages/angular-renderer/playwright/.cache/assets/vbox.component-DRe59FUF.js.map +1 -0
  89. package/packages/angular-renderer/playwright/.cache/index.html +11 -0
  90. package/packages/angular-renderer/playwright/.cache/metainfo.json +5416 -0
  91. package/packages/angular-renderer/playwright/index.html +11 -0
  92. package/packages/angular-renderer/playwright/index.ts +1 -0
  93. package/packages/angular-renderer/playwright-ct.config.ts +13 -3
  94. package/packages/angular-renderer/src/adapters/web/experience-adapter.service.ts +15 -1
  95. package/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.pw.ts +37 -0
  96. package/packages/angular-renderer/src/components/primitives/breadcrumbs/breadcrumbs.component.ts +0 -1
  97. package/packages/angular-renderer/src/components/primitives/button/button.component.pw.ts +17 -4
  98. package/packages/angular-renderer/src/components/primitives/card/card.component.pw.ts +32 -0
  99. package/packages/angular-renderer/src/components/primitives/checkbox/checkbox.component.pw.ts +38 -0
  100. package/packages/angular-renderer/src/components/primitives/chip/chip.component.pw.ts +56 -0
  101. package/packages/angular-renderer/src/components/primitives/chip/chip.component.ts +1 -1
  102. package/packages/angular-renderer/src/components/primitives/data-grid/data-grid.component.pw.ts +37 -0
  103. package/packages/angular-renderer/src/components/primitives/form-field/form-field.component.pw.ts +38 -0
  104. package/packages/angular-renderer/src/components/primitives/hbox/hbox.component.pw.ts +32 -0
  105. package/packages/angular-renderer/src/components/primitives/label/label.component.pw.ts +32 -0
  106. package/packages/angular-renderer/src/components/primitives/list/list.component.pw.ts +37 -0
  107. package/packages/angular-renderer/src/components/primitives/radio-group/radio-group.component.pw.ts +38 -0
  108. package/packages/angular-renderer/src/components/primitives/select/select.component.pw.ts +32 -0
  109. package/packages/angular-renderer/src/components/primitives/sidebar/sidebar.component.pw.ts +37 -0
  110. package/packages/angular-renderer/src/components/primitives/switch/switch.component.pw.ts +62 -0
  111. package/packages/angular-renderer/src/components/primitives/switch/switch.component.ts +1 -1
  112. package/packages/angular-renderer/src/components/primitives/tabs/tabs.component.pw.ts +37 -0
  113. package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.pw.ts +16 -7
  114. package/packages/angular-renderer/src/components/primitives/textarea/textarea.component.pw.ts +38 -0
  115. package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.pw.ts +17 -4
  116. package/packages/angular-renderer/src/devtools/devtools-bridge.ts +2 -0
  117. package/packages/angular-renderer/src/index.ts +1 -0
  118. package/packages/angular-renderer/src/lib/primitives.provider.ts +29 -21
  119. package/packages/cli/CHANGELOG.md +8 -0
  120. package/packages/cli/package.json +2 -2
  121. package/packages/core/CHANGELOG.md +14 -0
  122. package/packages/core/package.json +2 -2
  123. package/packages/design-tokens/CHANGELOG.md +8 -0
  124. package/packages/design-tokens/package.json +1 -1
  125. package/packages/devtools/CHANGELOG.md +8 -0
  126. package/packages/devtools/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/deps___vitest_vm__/_metadata.json +3 -3
  127. package/packages/devtools/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  128. package/packages/devtools/package.json +1 -1
  129. package/packages/playground/CHANGELOG.md +14 -0
  130. package/packages/playground/netlify.toml +6 -0
  131. package/packages/playground/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/deps___vitest_vm__/_metadata.json +3 -3
  132. package/packages/playground/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  133. package/packages/playground/package.json +3 -3
  134. package/packages/playground/src/app/app.config.ts +6 -1
  135. package/packages/playground/src/preview/preview-root.component.ts +173 -12
  136. package/dist/packages/playground/browser/main-BBGOLU74.js +0 -711
  137. package/packages/angular-renderer/src/components/primitives/primitives.a11y.pw.ts +0 -382
@@ -0,0 +1,218 @@
1
+ import {
2
+ ɵ as __getCurrentView,
3
+ a as __domElementStart,
4
+ b as __domListener,
5
+ c as __restoreView,
6
+ d as __nextContext,
7
+ e as __resetView,
8
+ x as __domElement,
9
+ g as __domElementEnd,
10
+ j as __classProp,
11
+ v as __domProperty,
12
+ k as __attribute,
13
+ h as __advance,
14
+ T as __sanitizeHtml,
15
+ n as input,
16
+ o as inject,
17
+ D as DomSanitizer,
18
+ p as computed,
19
+ S as SecurityContext,
20
+ q as __defineComponent,
21
+ r as __repeaterCreate,
22
+ t as __repeater,
23
+ W as __viewQuery,
24
+ X as __queryRefresh,
25
+ Y as __loadQuery,
26
+ } from './index-DRoHZv2r.js';
27
+ import { W as WebExperienceAdapterService } from './experience-adapter.service-CJxHLpWN.js';
28
+
29
+ const _c0 = ['tabButton'];
30
+ const _forTrack0 = ($index, $item) => $item.key;
31
+ function TabsComponent_For_2_Template(rf, ctx) {
32
+ if (rf & 1) {
33
+ const _r1 = __getCurrentView();
34
+ __domElementStart(0, 'button', 3, 0);
35
+ __domListener('click', function TabsComponent_For_2_Template_button_click_0_listener() {
36
+ const tab_r2 = __restoreView(_r1).$implicit;
37
+ const ctx_r2 = __nextContext();
38
+ return __resetView(ctx_r2.onTabClick(tab_r2));
39
+ })('keydown', function TabsComponent_For_2_Template_button_keydown_0_listener($event) {
40
+ const ɵ$index_3_r4 = __restoreView(_r1).$index;
41
+ const ctx_r2 = __nextContext();
42
+ return __resetView(ctx_r2.onKeyDown($event, ɵ$index_3_r4));
43
+ });
44
+ __domElement(2, 'span', 4);
45
+ __domElementEnd();
46
+ }
47
+ if (rf & 2) {
48
+ const tab_r2 = ctx.$implicit;
49
+ const ɵ$index_3_r4 = ctx.$index;
50
+ const ctx_r2 = __nextContext();
51
+ __classProp('origo-tabs__tab--active', ctx_r2.computedActiveTab() === tab_r2.key);
52
+ __domProperty('disabled', tab_r2.disabled);
53
+ __attribute('aria-selected', ctx_r2.computedActiveTab() === tab_r2.key)(
54
+ 'aria-controls',
55
+ 'tabpanel-' + tab_r2.key
56
+ )('id', 'tab-' + tab_r2.key)(
57
+ 'tabindex',
58
+ ctx_r2.computedActiveTab() === tab_r2.key ||
59
+ (ctx_r2.computedActiveTab() == null && ɵ$index_3_r4 === 0)
60
+ ? 0
61
+ : -1
62
+ );
63
+ __advance(2);
64
+ __domProperty('innerHTML', tab_r2.label, __sanitizeHtml);
65
+ }
66
+ }
67
+ class TabsComponent {
68
+ static contractSchema = {
69
+ tabs: 'array',
70
+ };
71
+ static strictContract = false;
72
+ contract = input.required(
73
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
74
+ );
75
+ experienceAdapter = inject(WebExperienceAdapterService);
76
+ sanitizer = inject(DomSanitizer);
77
+ tabButtons;
78
+ computedAriaLabel = computed(
79
+ () => {
80
+ const label = this.contract().props?.['aria-label'];
81
+ return label !== void 0 && label !== null ? String(label) : void 0;
82
+ },
83
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
84
+ );
85
+ computedAriaDescribedBy = computed(
86
+ () => {
87
+ const desc = this.contract().props?.['aria-describedby'];
88
+ return desc !== void 0 && desc !== null ? String(desc) : void 0;
89
+ },
90
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
91
+ );
92
+ computedTabs = computed(
93
+ () => {
94
+ const tabs = this.contract().props?.tabs;
95
+ if (!Array.isArray(tabs)) return [];
96
+ return tabs
97
+ .filter(tab => tab != null && tab.key != null && tab.label != null)
98
+ .map(tab => {
99
+ return {
100
+ key: String(tab.key),
101
+ label:
102
+ this.sanitizer.sanitize(SecurityContext.HTML, String(tab.label)) ||
103
+ String(tab.label).replace(/[<>]/g, ''),
104
+ disabled: !!tab.disabled,
105
+ };
106
+ });
107
+ },
108
+ ...(false ? [{ debugName: 'computedTabs' }] : /* istanbul ignore next */ [])
109
+ );
110
+ computedActiveTab = computed(
111
+ () => {
112
+ const active = this.contract().props?.activeTab;
113
+ if (active) return active;
114
+ const tabs = this.computedTabs();
115
+ return tabs.length > 0 ? tabs[0].key : void 0;
116
+ },
117
+ ...(false ? [{ debugName: 'computedActiveTab' }] : /* istanbul ignore next */ [])
118
+ );
119
+ onTabClick(tab) {
120
+ if (tab.disabled || !tab.key) return;
121
+ this.experienceAdapter.updateState(this.contract().id, 'activeTab', tab.key);
122
+ }
123
+ onKeyDown(event, index) {
124
+ const tabs = this.computedTabs();
125
+ if (tabs.length === 0) return;
126
+ let nextIndex = index;
127
+ const isRtl =
128
+ typeof window !== 'undefined' && event.target instanceof Element
129
+ ? window.getComputedStyle(event.target).direction === 'rtl'
130
+ : false;
131
+ if (event.key === 'ArrowRight') {
132
+ nextIndex = isRtl ? index - 1 : index + 1;
133
+ event.preventDefault();
134
+ } else if (event.key === 'ArrowLeft') {
135
+ nextIndex = isRtl ? index + 1 : index - 1;
136
+ event.preventDefault();
137
+ } else if (event.key === 'Home') {
138
+ nextIndex = 0;
139
+ event.preventDefault();
140
+ } else if (event.key === 'End') {
141
+ nextIndex = tabs.length - 1;
142
+ event.preventDefault();
143
+ }
144
+ if (nextIndex < 0) nextIndex = tabs.length - 1;
145
+ if (nextIndex >= tabs.length) nextIndex = 0;
146
+ if (nextIndex !== index) {
147
+ setTimeout(() => {
148
+ const buttons = this.tabButtons?.toArray();
149
+ if (buttons && buttons[nextIndex]) {
150
+ buttons[nextIndex].nativeElement.focus();
151
+ }
152
+ });
153
+ }
154
+ }
155
+ static ɵfac = function TabsComponent_Factory(__ngFactoryType__) {
156
+ return new (__ngFactoryType__ || TabsComponent)();
157
+ };
158
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
159
+ type: TabsComponent,
160
+ selectors: [['origo-tabs']],
161
+ viewQuery: function TabsComponent_Query(rf, ctx) {
162
+ if (rf & 1) {
163
+ __viewQuery(_c0, 5);
164
+ }
165
+ if (rf & 2) {
166
+ let _t;
167
+ __queryRefresh((_t = __loadQuery())) && (ctx.tabButtons = _t);
168
+ }
169
+ },
170
+ hostVars: 3,
171
+ hostBindings: function TabsComponent_HostBindings(rf, ctx) {
172
+ if (rf & 2) {
173
+ __attribute('data-testid', ctx.contract().id);
174
+ __classProp('origo-tabs', true);
175
+ }
176
+ },
177
+ inputs: { contract: [1, 'contract'] },
178
+ decls: 3,
179
+ vars: 2,
180
+ consts: [
181
+ ['tabButton', ''],
182
+ ['role', 'tablist', 1, 'origo-tabs__list'],
183
+ [
184
+ 'type',
185
+ 'button',
186
+ 'role',
187
+ 'tab',
188
+ 1,
189
+ 'origo-tabs__tab',
190
+ 3,
191
+ 'origo-tabs__tab--active',
192
+ 'disabled',
193
+ ],
194
+ ['type', 'button', 'role', 'tab', 1, 'origo-tabs__tab', 3, 'click', 'keydown', 'disabled'],
195
+ [1, 'origo-tabs__label', 3, 'innerHTML'],
196
+ ],
197
+ template: function TabsComponent_Template(rf, ctx) {
198
+ if (rf & 1) {
199
+ __domElementStart(0, 'div', 1);
200
+ __repeaterCreate(1, TabsComponent_For_2_Template, 3, 8, 'button', 2, _forTrack0);
201
+ __domElementEnd();
202
+ }
203
+ if (rf & 2) {
204
+ __attribute('aria-label', ctx.computedAriaLabel())(
205
+ 'aria-describedby',
206
+ ctx.computedAriaDescribedBy()
207
+ );
208
+ __advance();
209
+ __repeater(ctx.computedTabs());
210
+ }
211
+ },
212
+ encapsulation: 3,
213
+ });
214
+ }
215
+ /* @__PURE__ */ (() => {})();
216
+
217
+ export { TabsComponent };
218
+ //# sourceMappingURL=tabs.component-DGcKkhH_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.component-DGcKkhH_.js","sources":["../../../src/components/primitives/tabs/tabs.component.ts"],"sourcesContent":["import {\n Component,\n input,\n ChangeDetectionStrategy,\n computed,\n ViewEncapsulation,\n inject,\n SecurityContext,\n ElementRef,\n ViewChildren,\n QueryList,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { InteractionContract } from '@origo/core';\nimport { OrigoAdapter } from '../../../adapters/web/adapter';\nimport { WebExperienceAdapterService } from '../../../adapters/web/experience-adapter.service';\n\nexport interface TabItem {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n tabs?: Array<TabItem>;\n activeTab?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n}\n\n@Component({\n selector: 'origo-tabs',\n standalone: true,\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[class.origo-tabs]': 'true',\n '[attr.data-testid]': 'contract().id',\n },\n})\nexport class TabsComponent implements OrigoAdapter<TabsProps> {\n static readonly contractSchema = {\n tabs: 'array',\n };\n static readonly strictContract = false;\n\n contract = input.required<InteractionContract<TabsProps>>();\n\n private experienceAdapter = inject(WebExperienceAdapterService);\n private sanitizer = inject(DomSanitizer);\n\n @ViewChildren('tabButton') tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n computedAriaLabel = computed(() => {\n const label = this.contract().props?.['aria-label'];\n return label !== undefined && label !== null ? String(label) : undefined;\n });\n\n computedAriaDescribedBy = computed(() => {\n const desc = this.contract().props?.['aria-describedby'];\n return desc !== undefined && desc !== null ? String(desc) : undefined;\n });\n\n computedTabs = computed(() => {\n const tabs = this.contract().props?.tabs;\n if (!Array.isArray(tabs)) return [];\n\n return tabs\n .filter(tab => tab != null && tab.key != null && tab.label != null)\n .map(tab => {\n return {\n key: String(tab.key),\n label:\n this.sanitizer.sanitize(SecurityContext.HTML, String(tab.label)) ||\n String(tab.label).replace(/[<>]/g, ''),\n disabled: !!tab.disabled,\n };\n });\n });\n\n computedActiveTab = computed(() => {\n const active = this.contract().props?.activeTab;\n if (active) return active;\n const tabs = this.computedTabs();\n return tabs.length > 0 ? tabs[0].key : undefined;\n });\n\n onTabClick(tab: TabItem) {\n if (tab.disabled || !tab.key) return;\n this.experienceAdapter.updateState(this.contract().id, 'activeTab', tab.key);\n }\n\n onKeyDown(event: KeyboardEvent, index: number) {\n const tabs = this.computedTabs();\n if (tabs.length === 0) return;\n\n let nextIndex = index;\n const isRtl =\n typeof window !== 'undefined' && event.target instanceof Element\n ? window.getComputedStyle(event.target).direction === 'rtl'\n : false;\n\n if (event.key === 'ArrowRight') {\n nextIndex = isRtl ? index - 1 : index + 1;\n event.preventDefault();\n } else if (event.key === 'ArrowLeft') {\n nextIndex = isRtl ? index + 1 : index - 1;\n event.preventDefault();\n } else if (event.key === 'Home') {\n nextIndex = 0;\n event.preventDefault();\n } else if (event.key === 'End') {\n nextIndex = tabs.length - 1;\n event.preventDefault();\n }\n\n if (nextIndex < 0) nextIndex = tabs.length - 1;\n if (nextIndex >= tabs.length) nextIndex = 0;\n\n if (nextIndex !== index) {\n setTimeout(() => {\n const buttons = this.tabButtons?.toArray();\n if (buttons && buttons[nextIndex]) {\n buttons[nextIndex].nativeElement.focus();\n }\n });\n }\n }\n}\n"],"names":["i0.ɵɵgetCurrentView","i0.ɵɵdomElementStart","i0.ɵɵdomListener","i0.ɵɵrestoreView","i0.ɵɵnextContext","i0.ɵɵresetView","i0.ɵɵdomElement","i0.ɵɵdomElementEnd","i0.ɵɵclassProp","i0.ɵɵadvance","i0.ɵɵdomProperty","i0.ɵɵsanitizeHtml"],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import {
2
+ n as input,
3
+ z as model,
4
+ p as computed,
5
+ o as inject,
6
+ A as effect,
7
+ B as untracked,
8
+ q as __defineComponent,
9
+ a as __domElementStart,
10
+ b as __domListener,
11
+ g as __domElementEnd,
12
+ v as __domProperty,
13
+ k as __attribute,
14
+ j as __classProp,
15
+ } from './index-DRoHZv2r.js';
16
+ import { W as WebExperienceAdapterService } from './experience-adapter.service-CJxHLpWN.js';
17
+
18
+ class TextInputComponent {
19
+ static contractSchema = {
20
+ value: 'string',
21
+ placeholder: 'string',
22
+ disabled: 'boolean',
23
+ readonly: 'boolean',
24
+ };
25
+ static strictContract = false;
26
+ contract = input.required(
27
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
28
+ );
29
+ value = model('', ...(false ? [{ debugName: 'value' }] : /* istanbul ignore next */ []));
30
+ computedPlaceholder = computed(
31
+ () => this.contract().props?.placeholder ?? '',
32
+ ...(false ? [{ debugName: 'computedPlaceholder' }] : /* istanbul ignore next */ [])
33
+ );
34
+ computedDisabled = computed(
35
+ () => !!this.contract().props?.disabled,
36
+ ...(false ? [{ debugName: 'computedDisabled' }] : /* istanbul ignore next */ [])
37
+ );
38
+ computedReadonly = computed(
39
+ () => !!this.contract().props?.readonly,
40
+ ...(false ? [{ debugName: 'computedReadonly' }] : /* istanbul ignore next */ [])
41
+ );
42
+ computedAriaLabel = computed(
43
+ () => {
44
+ const label = this.contract().props?.['aria-label'];
45
+ return label !== void 0 && label !== null && String(label).trim() !== ''
46
+ ? String(label)
47
+ : void 0;
48
+ },
49
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
50
+ );
51
+ computedAriaDescribedBy = computed(
52
+ () => {
53
+ const desc = this.contract().props?.['aria-describedby'];
54
+ return desc !== void 0 && desc !== null && String(desc).trim() !== '' ? String(desc) : void 0;
55
+ },
56
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
57
+ );
58
+ experienceAdapter = inject(WebExperienceAdapterService);
59
+ constructor() {
60
+ effect(() => {
61
+ const contractVal = this.contract().props?.value;
62
+ untracked(() =>
63
+ this.value.set(contractVal !== void 0 && contractVal !== null ? String(contractVal) : '')
64
+ );
65
+ });
66
+ }
67
+ onInput(event) {
68
+ const target = event.target;
69
+ if (!target) return;
70
+ const rawValue = target.value;
71
+ const sanitizedValue = String(rawValue);
72
+ if (target.value !== sanitizedValue) {
73
+ target.value = sanitizedValue;
74
+ }
75
+ this.value.set(sanitizedValue);
76
+ this.experienceAdapter.updateState(this.contract().id, 'value', sanitizedValue);
77
+ }
78
+ static ɵfac = function TextInputComponent_Factory(__ngFactoryType__) {
79
+ return new (__ngFactoryType__ || TextInputComponent)();
80
+ };
81
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
82
+ type: TextInputComponent,
83
+ selectors: [['origo-text-input']],
84
+ hostVars: 3,
85
+ hostBindings: function TextInputComponent_HostBindings(rf, ctx) {
86
+ if (rf & 2) {
87
+ __attribute('data-testid', ctx.contract().id ?? '');
88
+ __classProp('origo-text-input', true);
89
+ }
90
+ },
91
+ inputs: { contract: [1, 'contract'], value: [1, 'value'] },
92
+ outputs: { value: 'valueChange' },
93
+ decls: 1,
94
+ vars: 6,
95
+ consts: [['type', 'text', 3, 'input', 'value', 'placeholder', 'disabled', 'readonly']],
96
+ template: function TextInputComponent_Template(rf, ctx) {
97
+ if (rf & 1) {
98
+ __domElementStart(0, 'input', 0);
99
+ __domListener('input', function TextInputComponent_Template_input_input_0_listener($event) {
100
+ return ctx.onInput($event);
101
+ });
102
+ __domElementEnd();
103
+ }
104
+ if (rf & 2) {
105
+ __domProperty('value', ctx.value())('placeholder', ctx.computedPlaceholder())(
106
+ 'disabled',
107
+ ctx.computedDisabled()
108
+ )('readOnly', ctx.computedReadonly());
109
+ __attribute('aria-label', ctx.computedAriaLabel())(
110
+ 'aria-describedby',
111
+ ctx.computedAriaDescribedBy()
112
+ );
113
+ }
114
+ },
115
+ encapsulation: 3,
116
+ });
117
+ }
118
+ /* @__PURE__ */ (() => {})();
119
+
120
+ export { TextInputComponent };
121
+ //# sourceMappingURL=text-input.component-IyHHKpW-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-input.component-IyHHKpW-.js","sources":["../../../src/components/primitives/text-input/text-input.component.ts"],"sourcesContent":["import {\n Component,\n input,\n model,\n ChangeDetectionStrategy,\n computed,\n ViewEncapsulation,\n inject,\n effect,\n untracked,\n} from '@angular/core';\nimport { InteractionContract } from '@origo/core';\nimport { OrigoAdapter } from '../../../adapters/web/adapter';\nimport { WebExperienceAdapterService } from '../../../adapters/web/experience-adapter.service';\n\nexport interface TextInputProps {\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n readonly?: boolean;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n}\n\n@Component({\n selector: 'origo-text-input',\n standalone: true,\n templateUrl: './text-input.component.html',\n styleUrls: ['./text-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[class.origo-text-input]': 'true',\n '[attr.data-testid]': 'contract().id ?? \"\"',\n },\n})\nexport class TextInputComponent implements OrigoAdapter<TextInputProps> {\n static readonly contractSchema = {\n value: 'string',\n placeholder: 'string',\n disabled: 'boolean',\n readonly: 'boolean',\n };\n static readonly strictContract = false;\n\n contract = input.required<InteractionContract<TextInputProps>>();\n value = model<string>('');\n\n computedPlaceholder = computed(() => this.contract().props?.placeholder ?? '');\n computedDisabled = computed(() => !!this.contract().props?.disabled);\n computedReadonly = computed(() => !!this.contract().props?.readonly);\n computedAriaLabel = computed(() => {\n const label = this.contract().props?.['aria-label'];\n return label !== undefined && label !== null && String(label).trim() !== ''\n ? String(label)\n : undefined;\n });\n computedAriaDescribedBy = computed(() => {\n const desc = this.contract().props?.['aria-describedby'];\n return desc !== undefined && desc !== null && String(desc).trim() !== ''\n ? String(desc)\n : undefined;\n });\n\n private experienceAdapter = inject(WebExperienceAdapterService);\n\n constructor() {\n effect(() => {\n const contractVal = this.contract().props?.value;\n untracked(() =>\n this.value.set(contractVal !== undefined && contractVal !== null ? String(contractVal) : '')\n );\n });\n }\n\n onInput(event: Event) {\n const target = event.target as HTMLInputElement | null;\n if (!target) return;\n\n const rawValue = target.value;\n const sanitizedValue = String(rawValue);\n\n if (target.value !== sanitizedValue) {\n target.value = sanitizedValue;\n }\n\n this.value.set(sanitizedValue);\n this.experienceAdapter.updateState(this.contract().id, 'value', sanitizedValue);\n }\n}\n"],"names":["i0.ɵɵdefineComponent","i0.ɵɵattribute","i0.ɵɵdomElementStart","i0.ɵɵdomListener","i0.ɵɵdomElementEnd"],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import {
2
+ n as input,
3
+ z as model,
4
+ p as computed,
5
+ o as inject,
6
+ D as DomSanitizer,
7
+ A as effect,
8
+ B as untracked,
9
+ S as SecurityContext,
10
+ q as __defineComponent,
11
+ a as __domElementStart,
12
+ b as __domListener,
13
+ g as __domElementEnd,
14
+ v as __domProperty,
15
+ k as __attribute,
16
+ j as __classProp,
17
+ } from './index-DRoHZv2r.js';
18
+ import { W as WebExperienceAdapterService } from './experience-adapter.service-CJxHLpWN.js';
19
+
20
+ class TextareaComponent {
21
+ static contractSchema = {
22
+ value: 'string',
23
+ placeholder: 'string',
24
+ rows: 'number',
25
+ disabled: 'boolean',
26
+ readonly: 'boolean',
27
+ required: 'boolean',
28
+ };
29
+ static strictContract = false;
30
+ contract = input.required(
31
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
32
+ );
33
+ value = model('', ...(false ? [{ debugName: 'value' }] : /* istanbul ignore next */ []));
34
+ computedPlaceholder = computed(
35
+ () => this.contract().props?.placeholder ?? '',
36
+ ...(false ? [{ debugName: 'computedPlaceholder' }] : /* istanbul ignore next */ [])
37
+ );
38
+ computedRows = computed(
39
+ () => {
40
+ const rows = this.contract().props?.rows;
41
+ return typeof rows === 'number' && rows > 0 ? Math.max(1, Math.round(rows)) : 3;
42
+ },
43
+ ...(false ? [{ debugName: 'computedRows' }] : /* istanbul ignore next */ [])
44
+ );
45
+ computedDisabled = computed(
46
+ () => !!this.contract().props?.disabled,
47
+ ...(false ? [{ debugName: 'computedDisabled' }] : /* istanbul ignore next */ [])
48
+ );
49
+ computedReadonly = computed(
50
+ () => !!this.contract().props?.readonly,
51
+ ...(false ? [{ debugName: 'computedReadonly' }] : /* istanbul ignore next */ [])
52
+ );
53
+ computedRequired = computed(
54
+ () => !!this.contract().props?.required,
55
+ ...(false ? [{ debugName: 'computedRequired' }] : /* istanbul ignore next */ [])
56
+ );
57
+ computedAriaLabel = computed(
58
+ () => {
59
+ const label = this.contract().props?.['aria-label'];
60
+ return label !== void 0 && label !== null ? String(label) : void 0;
61
+ },
62
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
63
+ );
64
+ computedAriaDescribedBy = computed(
65
+ () => {
66
+ const desc = this.contract().props?.['aria-describedby'];
67
+ return desc !== void 0 && desc !== null ? String(desc) : void 0;
68
+ },
69
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
70
+ );
71
+ experienceAdapter = inject(WebExperienceAdapterService);
72
+ sanitizer = inject(DomSanitizer);
73
+ constructor() {
74
+ effect(() => {
75
+ const contractVal = this.contract().props?.value;
76
+ const parsedVal = contractVal !== void 0 && contractVal !== null ? String(contractVal) : '';
77
+ untracked(() => {
78
+ if (parsedVal === this.value()) return;
79
+ this.value.set(parsedVal);
80
+ });
81
+ });
82
+ }
83
+ onInput(event) {
84
+ const target = event.target;
85
+ if (!target || this.computedDisabled() || this.computedReadonly()) return;
86
+ const rawValue = target.value;
87
+ const sanitizedValue =
88
+ this.sanitizer.sanitize(SecurityContext.HTML, rawValue) || rawValue || '';
89
+ if (target.value !== sanitizedValue) {
90
+ target.value = sanitizedValue;
91
+ }
92
+ this.value.set(sanitizedValue);
93
+ this.experienceAdapter.updateState(this.contract().id, 'value', sanitizedValue);
94
+ }
95
+ static ɵfac = function TextareaComponent_Factory(__ngFactoryType__) {
96
+ return new (__ngFactoryType__ || TextareaComponent)();
97
+ };
98
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
99
+ type: TextareaComponent,
100
+ selectors: [['origo-textarea']],
101
+ hostVars: 3,
102
+ hostBindings: function TextareaComponent_HostBindings(rf, ctx) {
103
+ if (rf & 2) {
104
+ __attribute('data-testid', ctx.contract().id);
105
+ __classProp('origo-textarea', true);
106
+ }
107
+ },
108
+ inputs: { contract: [1, 'contract'], value: [1, 'value'] },
109
+ outputs: { value: 'valueChange' },
110
+ decls: 1,
111
+ vars: 9,
112
+ consts: [[3, 'input', 'id', 'disabled', 'readonly', 'required', 'value']],
113
+ template: function TextareaComponent_Template(rf, ctx) {
114
+ if (rf & 1) {
115
+ __domElementStart(0, 'textarea', 0);
116
+ __domListener(
117
+ 'input',
118
+ function TextareaComponent_Template_textarea_input_0_listener($event) {
119
+ return ctx.onInput($event);
120
+ }
121
+ );
122
+ __domElementEnd();
123
+ }
124
+ if (rf & 2) {
125
+ __domProperty('id', ctx.contract().id)('disabled', ctx.computedDisabled())(
126
+ 'readOnly',
127
+ ctx.computedReadonly()
128
+ )('required', ctx.computedRequired())('value', ctx.value());
129
+ __attribute('placeholder', ctx.computedPlaceholder())('rows', ctx.computedRows())(
130
+ 'aria-label',
131
+ ctx.computedAriaLabel()
132
+ )('aria-describedby', ctx.computedAriaDescribedBy());
133
+ }
134
+ },
135
+ encapsulation: 3,
136
+ });
137
+ }
138
+ /* @__PURE__ */ (() => {})();
139
+
140
+ export { TextareaComponent };
141
+ //# sourceMappingURL=textarea.component-Bpvh81yV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.component-Bpvh81yV.js","sources":["../../../src/components/primitives/textarea/textarea.component.ts"],"sourcesContent":["import {\n Component,\n input,\n model,\n ChangeDetectionStrategy,\n computed,\n ViewEncapsulation,\n inject,\n effect,\n untracked,\n SecurityContext,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { InteractionContract } from '@origo/core';\nimport { OrigoAdapter } from '../../../adapters/web/adapter';\nimport { WebExperienceAdapterService } from '../../../adapters/web/experience-adapter.service';\n\nexport interface TextareaProps {\n value?: string;\n placeholder?: string;\n rows?: number;\n disabled?: boolean;\n readonly?: boolean;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n required?: boolean;\n}\n\n@Component({\n selector: 'origo-textarea',\n standalone: true,\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[class.origo-textarea]': 'true',\n '[attr.data-testid]': 'contract().id',\n },\n})\nexport class TextareaComponent implements OrigoAdapter<TextareaProps> {\n static readonly contractSchema = {\n value: 'string',\n placeholder: 'string',\n rows: 'number',\n disabled: 'boolean',\n readonly: 'boolean',\n required: 'boolean',\n };\n static readonly strictContract = false;\n\n contract = input.required<InteractionContract<TextareaProps>>();\n value = model<string>('');\n\n computedPlaceholder = computed(() => this.contract().props?.placeholder ?? '');\n computedRows = computed(() => {\n const rows = this.contract().props?.rows;\n return typeof rows === 'number' && rows > 0 ? Math.max(1, Math.round(rows)) : 3;\n });\n computedDisabled = computed(() => !!this.contract().props?.disabled);\n computedReadonly = computed(() => !!this.contract().props?.readonly);\n computedRequired = computed(() => !!this.contract().props?.required);\n computedAriaLabel = computed(() => {\n const label = this.contract().props?.['aria-label'];\n return label !== undefined && label !== null ? String(label) : undefined;\n });\n computedAriaDescribedBy = computed(() => {\n const desc = this.contract().props?.['aria-describedby'];\n return desc !== undefined && desc !== null ? String(desc) : undefined;\n });\n\n private experienceAdapter = inject(WebExperienceAdapterService);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n effect(() => {\n const contractVal = this.contract().props?.value;\n const parsedVal =\n contractVal !== undefined && contractVal !== null ? String(contractVal) : '';\n untracked(() => {\n if (parsedVal === this.value()) return;\n this.value.set(parsedVal);\n });\n });\n }\n\n onInput(event: Event) {\n const target = event.target as HTMLTextAreaElement | null;\n if (!target || this.computedDisabled() || this.computedReadonly()) return;\n\n const rawValue = target.value;\n const sanitizedValue =\n this.sanitizer.sanitize(SecurityContext.HTML, rawValue) || rawValue || '';\n\n if (target.value !== sanitizedValue) {\n target.value = sanitizedValue;\n }\n\n this.value.set(sanitizedValue);\n this.experienceAdapter.updateState(this.contract().id, 'value', sanitizedValue);\n }\n}\n"],"names":["i0.ɵɵdefineComponent","i0.ɵɵattribute","i0.ɵɵdomElementStart","i0.ɵɵdomListener","i0.ɵɵdomElementEnd"],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import {
2
+ n as input,
3
+ M as viewChild,
4
+ V as ViewContainerRef,
5
+ p as computed,
6
+ q as __defineComponent,
7
+ Q as __domElementContainer,
8
+ x as __domElement,
9
+ k as __attribute,
10
+ R as __styleProp,
11
+ j as __classProp,
12
+ O as __viewQuerySignal,
13
+ P as __queryAdvance,
14
+ } from './index-DRoHZv2r.js';
15
+
16
+ const _c0 = ['vc'];
17
+ class VBoxComponent {
18
+ static contractSchema = {
19
+ gap: 'string',
20
+ alignment: 'string',
21
+ padding: 'string',
22
+ };
23
+ static strictContract = false;
24
+ contract = input.required(
25
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
26
+ );
27
+ vc = viewChild.required('vc', {
28
+ ...(false ? { debugName: 'vc' } : /* istanbul ignore next */ {}),
29
+ read: ViewContainerRef,
30
+ });
31
+ computedGap = computed(
32
+ () => {
33
+ const gap = this.contract().props?.gap;
34
+ if (gap === void 0 || gap === null || gap === '') return void 0;
35
+ const num = Number(gap);
36
+ return !isNaN(num) ? `${num}px` : String(gap);
37
+ },
38
+ ...(false ? [{ debugName: 'computedGap' }] : /* istanbul ignore next */ [])
39
+ );
40
+ computedAlignment = computed(
41
+ () => {
42
+ const align = this.contract().props?.alignment;
43
+ switch (align) {
44
+ case 'start':
45
+ return 'flex-start';
46
+ case 'end':
47
+ return 'flex-end';
48
+ case 'center':
49
+ return 'center';
50
+ case 'stretch':
51
+ return 'stretch';
52
+ default:
53
+ return 'stretch';
54
+ }
55
+ },
56
+ ...(false ? [{ debugName: 'computedAlignment' }] : /* istanbul ignore next */ [])
57
+ );
58
+ computedPadding = computed(
59
+ () => {
60
+ const padding = this.contract().props?.padding;
61
+ if (padding === void 0 || padding === null || padding === '') return void 0;
62
+ const num = Number(padding);
63
+ return !isNaN(num) ? `${num}px` : String(padding);
64
+ },
65
+ ...(false ? [{ debugName: 'computedPadding' }] : /* istanbul ignore next */ [])
66
+ );
67
+ computedAriaLabel = computed(
68
+ () => {
69
+ const label = this.contract().props?.['aria-label'];
70
+ return label !== void 0 && label !== null && String(label).trim() !== ''
71
+ ? String(label)
72
+ : void 0;
73
+ },
74
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
75
+ );
76
+ computedAriaDescribedBy = computed(
77
+ () => {
78
+ const desc = this.contract().props?.['aria-describedby'];
79
+ return desc !== void 0 && desc !== null && String(desc).trim() !== '' ? String(desc) : void 0;
80
+ },
81
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
82
+ );
83
+ static ɵfac = function VBoxComponent_Factory(__ngFactoryType__) {
84
+ return new (__ngFactoryType__ || VBoxComponent)();
85
+ };
86
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
87
+ type: VBoxComponent,
88
+ selectors: [['origo-vbox']],
89
+ viewQuery: function VBoxComponent_Query(rf, ctx) {
90
+ if (rf & 1) {
91
+ __viewQuerySignal(ctx.vc, _c0, 5, ViewContainerRef);
92
+ }
93
+ if (rf & 2) {
94
+ __queryAdvance();
95
+ }
96
+ },
97
+ hostVars: 13,
98
+ hostBindings: function VBoxComponent_HostBindings(rf, ctx) {
99
+ if (rf & 2) {
100
+ __attribute('data-testid', ctx.contract().id ?? '')('aria-label', ctx.computedAriaLabel())(
101
+ 'aria-describedby',
102
+ ctx.computedAriaDescribedBy()
103
+ );
104
+ __styleProp('gap', ctx.computedGap())('align-items', ctx.computedAlignment())(
105
+ 'padding-inline',
106
+ ctx.computedPadding()
107
+ )('padding-block', ctx.computedPadding());
108
+ __classProp('origo-vbox', true);
109
+ }
110
+ },
111
+ inputs: { contract: [1, 'contract'] },
112
+ decls: 3,
113
+ vars: 0,
114
+ consts: [['vc', '']],
115
+ template: function VBoxComponent_Template(rf, ctx) {
116
+ if (rf & 1) {
117
+ __domElementContainer(0, null, 0);
118
+ __domElement(2, 'slot');
119
+ }
120
+ },
121
+ encapsulation: 3,
122
+ });
123
+ }
124
+ /* @__PURE__ */ (() => {})();
125
+
126
+ export { VBoxComponent };
127
+ //# sourceMappingURL=vbox.component-DRe59FUF.js.map