@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,180 @@
1
+ import {
2
+ a as __domElementStart,
3
+ f as __text,
4
+ g as __domElementEnd,
5
+ d as __nextContext,
6
+ h as __advance,
7
+ i as __textInterpolate,
8
+ v as __domProperty,
9
+ n as input,
10
+ z as model,
11
+ p as computed,
12
+ o as inject,
13
+ D as DomSanitizer,
14
+ A as effect,
15
+ B as untracked,
16
+ S as SecurityContext,
17
+ q as __defineComponent,
18
+ b as __domListener,
19
+ l as __conditionalCreate,
20
+ r as __repeaterCreate,
21
+ k as __attribute,
22
+ m as __conditional,
23
+ t as __repeater,
24
+ j as __classProp,
25
+ } from './index-DRoHZv2r.js';
26
+ import { W as WebExperienceAdapterService } from './experience-adapter.service-CJxHLpWN.js';
27
+
28
+ const _forTrack0 = ($index, $item) => $item.value;
29
+ function SelectComponent_Conditional_1_Template(rf, ctx) {
30
+ if (rf & 1) {
31
+ __domElementStart(0, 'option', 1);
32
+ __text(1);
33
+ __domElementEnd();
34
+ }
35
+ if (rf & 2) {
36
+ const ctx_r0 = __nextContext();
37
+ __advance();
38
+ __textInterpolate(ctx_r0.computedPlaceholder());
39
+ }
40
+ }
41
+ function SelectComponent_For_3_Template(rf, ctx) {
42
+ if (rf & 1) {
43
+ __domElementStart(0, 'option', 2);
44
+ __text(1);
45
+ __domElementEnd();
46
+ }
47
+ if (rf & 2) {
48
+ const option_r2 = ctx.$implicit;
49
+ const ctx_r0 = __nextContext();
50
+ __domProperty('value', option_r2.value)('selected', ctx_r0.value() === option_r2.value);
51
+ __advance();
52
+ __textInterpolate(option_r2.label);
53
+ }
54
+ }
55
+ class SelectComponent {
56
+ static contractSchema = {
57
+ options: 'array',
58
+ value: 'string',
59
+ disabled: 'boolean',
60
+ placeholder: 'string',
61
+ required: 'boolean',
62
+ };
63
+ static strictContract = false;
64
+ contract = input.required(
65
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
66
+ );
67
+ value = model('', ...(false ? [{ debugName: 'value' }] : /* istanbul ignore next */ []));
68
+ computedOptions = computed(
69
+ () => {
70
+ const opts = this.contract().props?.options;
71
+ return Array.isArray(opts)
72
+ ? opts.filter(o => o != null && o.value != null && o.label != null)
73
+ : [];
74
+ },
75
+ ...(false ? [{ debugName: 'computedOptions' }] : /* istanbul ignore next */ [])
76
+ );
77
+ computedPlaceholder = computed(
78
+ () => this.contract().props?.placeholder ?? '',
79
+ ...(false ? [{ debugName: 'computedPlaceholder' }] : /* istanbul ignore next */ [])
80
+ );
81
+ computedDisabled = computed(
82
+ () => !!this.contract().props?.disabled,
83
+ ...(false ? [{ debugName: 'computedDisabled' }] : /* istanbul ignore next */ [])
84
+ );
85
+ computedRequired = computed(
86
+ () => !!this.contract().props?.required,
87
+ ...(false ? [{ debugName: 'computedRequired' }] : /* istanbul ignore next */ [])
88
+ );
89
+ computedAriaLabel = computed(
90
+ () => {
91
+ const label = this.contract().props?.['aria-label'];
92
+ return label !== void 0 && label !== null ? String(label) : void 0;
93
+ },
94
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
95
+ );
96
+ computedAriaDescribedBy = computed(
97
+ () => {
98
+ const desc = this.contract().props?.['aria-describedby'];
99
+ return desc !== void 0 && desc !== null ? String(desc) : void 0;
100
+ },
101
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
102
+ );
103
+ experienceAdapter = inject(WebExperienceAdapterService);
104
+ sanitizer = inject(DomSanitizer);
105
+ constructor() {
106
+ effect(() => {
107
+ const contractVal = this.contract().props?.value;
108
+ const parsedVal = contractVal !== void 0 && contractVal !== null ? String(contractVal) : '';
109
+ untracked(() => {
110
+ if (parsedVal === this.value()) return;
111
+ this.value.set(parsedVal);
112
+ });
113
+ });
114
+ }
115
+ onChange(event) {
116
+ const target = event.target;
117
+ if (!target || this.computedDisabled()) return;
118
+ const rawValue = target.value;
119
+ const sanitizedValue =
120
+ this.sanitizer.sanitize(SecurityContext.HTML, rawValue) || rawValue || '';
121
+ if (target.value !== sanitizedValue) {
122
+ target.value = sanitizedValue;
123
+ }
124
+ this.value.set(sanitizedValue);
125
+ this.experienceAdapter.updateState(this.contract().id, 'value', sanitizedValue);
126
+ }
127
+ static ɵfac = function SelectComponent_Factory(__ngFactoryType__) {
128
+ return new (__ngFactoryType__ || SelectComponent)();
129
+ };
130
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
131
+ type: SelectComponent,
132
+ selectors: [['origo-select']],
133
+ hostVars: 3,
134
+ hostBindings: function SelectComponent_HostBindings(rf, ctx) {
135
+ if (rf & 2) {
136
+ __attribute('data-testid', ctx.contract().id);
137
+ __classProp('origo-select', true);
138
+ }
139
+ },
140
+ inputs: { contract: [1, 'contract'], value: [1, 'value'] },
141
+ outputs: { value: 'valueChange' },
142
+ decls: 4,
143
+ vars: 6,
144
+ consts: [
145
+ [3, 'change', 'id', 'disabled', 'required'],
146
+ ['value', '', 'disabled', '', 'selected', '', 'hidden', ''],
147
+ [3, 'value', 'selected'],
148
+ ],
149
+ template: function SelectComponent_Template(rf, ctx) {
150
+ if (rf & 1) {
151
+ __domElementStart(0, 'select', 0);
152
+ __domListener('change', function SelectComponent_Template_select_change_0_listener($event) {
153
+ return ctx.onChange($event);
154
+ });
155
+ __conditionalCreate(1, SelectComponent_Conditional_1_Template, 2, 1, 'option', 1);
156
+ __repeaterCreate(2, SelectComponent_For_3_Template, 2, 3, 'option', 2, _forTrack0);
157
+ __domElementEnd();
158
+ }
159
+ if (rf & 2) {
160
+ __domProperty('id', ctx.contract().id)('disabled', ctx.computedDisabled())(
161
+ 'required',
162
+ ctx.computedRequired()
163
+ );
164
+ __attribute('aria-label', ctx.computedAriaLabel())(
165
+ 'aria-describedby',
166
+ ctx.computedAriaDescribedBy()
167
+ );
168
+ __advance();
169
+ __conditional(ctx.computedPlaceholder() ? 1 : -1);
170
+ __advance();
171
+ __repeater(ctx.computedOptions());
172
+ }
173
+ },
174
+ encapsulation: 3,
175
+ });
176
+ }
177
+ /* @__PURE__ */ (() => {})();
178
+
179
+ export { SelectComponent };
180
+ //# sourceMappingURL=select.component-BC_aoLNt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.component-BC_aoLNt.js","sources":["../../../src/components/primitives/select/select.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 SelectProps {\n options: Array<{ value: string; label: string }>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n required?: boolean;\n}\n\n@Component({\n selector: 'origo-select',\n standalone: true,\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[class.origo-select]': 'true',\n '[attr.data-testid]': 'contract().id',\n },\n})\nexport class SelectComponent implements OrigoAdapter<SelectProps> {\n static readonly contractSchema = {\n options: 'array',\n value: 'string',\n disabled: 'boolean',\n placeholder: 'string',\n required: 'boolean',\n };\n static readonly strictContract = false;\n\n contract = input.required<InteractionContract<SelectProps>>();\n value = model<string>('');\n\n computedOptions = computed(() => {\n const opts = this.contract().props?.options;\n return Array.isArray(opts)\n ? opts.filter(o => o != null && o.value != null && o.label != null)\n : [];\n });\n computedPlaceholder = computed(() => this.contract().props?.placeholder ?? '');\n computedDisabled = computed(() => !!this.contract().props?.disabled);\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 onChange(event: Event) {\n const target = event.target as HTMLSelectElement | null;\n if (!target || this.computedDisabled()) 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.ɵɵdomElementStart","i0.ɵɵtext","i0.ɵɵdomElementEnd","i0.ɵɵnextContext","i0.ɵɵadvance","i0.ɵɵtextInterpolate","i0.ɵɵdomProperty"],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ import {
2
+ x as __domElement,
3
+ d as __nextContext,
4
+ v as __domProperty,
5
+ T as __sanitizeHtml,
6
+ a as __domElementStart,
7
+ f as __text,
8
+ g as __domElementEnd,
9
+ h as __advance,
10
+ i as __textInterpolate,
11
+ ɵ as __getCurrentView,
12
+ b as __domListener,
13
+ c as __restoreView,
14
+ e as __resetView,
15
+ l as __conditionalCreate,
16
+ j as __classProp,
17
+ k as __attribute,
18
+ m as __conditional,
19
+ n as input,
20
+ o as inject,
21
+ D as DomSanitizer,
22
+ p as computed,
23
+ S as SecurityContext,
24
+ q as __defineComponent,
25
+ r as __repeaterCreate,
26
+ t as __repeater,
27
+ } from './index-DRoHZv2r.js';
28
+ import { W as WebExperienceAdapterService } from './experience-adapter.service-CJxHLpWN.js';
29
+
30
+ const _forTrack0 = ($index, $item) => $item.key;
31
+ function SidebarComponent_For_2_Conditional_2_Template(rf, ctx) {
32
+ if (rf & 1) {
33
+ __domElement(0, 'span', 3);
34
+ }
35
+ if (rf & 2) {
36
+ const item_r2 = __nextContext().$implicit;
37
+ __domProperty('innerHTML', item_r2.icon, __sanitizeHtml);
38
+ }
39
+ }
40
+ function SidebarComponent_For_2_Conditional_3_Template(rf, ctx) {
41
+ if (rf & 1) {
42
+ __domElementStart(0, 'span', 4);
43
+ __text(1);
44
+ __domElementEnd();
45
+ }
46
+ if (rf & 2) {
47
+ const item_r2 = __nextContext().$implicit;
48
+ __advance();
49
+ __textInterpolate(item_r2.label);
50
+ }
51
+ }
52
+ function SidebarComponent_For_2_Template(rf, ctx) {
53
+ if (rf & 1) {
54
+ const _r1 = __getCurrentView();
55
+ __domElementStart(0, 'li', 1)(1, 'a', 2);
56
+ __domListener('click', function SidebarComponent_For_2_Template_a_click_1_listener() {
57
+ const item_r2 = __restoreView(_r1).$implicit;
58
+ const ctx_r2 = __nextContext();
59
+ return __resetView(ctx_r2.onItemClick(item_r2));
60
+ })('keydown', function SidebarComponent_For_2_Template_a_keydown_1_listener($event) {
61
+ const ctx_r3 = __restoreView(_r1);
62
+ const item_r2 = ctx_r3.$implicit;
63
+ const ɵ$index_3_r5 = ctx_r3.$index;
64
+ const ctx_r2 = __nextContext();
65
+ return __resetView(ctx_r2.onKeyDown($event, item_r2, ɵ$index_3_r5));
66
+ });
67
+ __conditionalCreate(2, SidebarComponent_For_2_Conditional_2_Template, 1, 1, 'span', 3);
68
+ __conditionalCreate(3, SidebarComponent_For_2_Conditional_3_Template, 2, 1, 'span', 4);
69
+ __domElementEnd()();
70
+ }
71
+ if (rf & 2) {
72
+ const item_r2 = ctx.$implicit;
73
+ const ctx_r2 = __nextContext();
74
+ __advance();
75
+ __classProp(
76
+ 'origo-sidebar__link--active',
77
+ ctx_r2.computedActiveOutcome() === item_r2.outcomeRef
78
+ );
79
+ __attribute(
80
+ 'aria-current',
81
+ ctx_r2.computedActiveOutcome() === item_r2.outcomeRef ? 'page' : null
82
+ )('aria-label', ctx_r2.computedCollapsed() ? item_r2.label : null)(
83
+ 'title',
84
+ ctx_r2.computedCollapsed() ? item_r2.label : null
85
+ );
86
+ __advance();
87
+ __conditional(item_r2.icon ? 2 : -1);
88
+ __advance();
89
+ __conditional(!ctx_r2.computedCollapsed() ? 3 : -1);
90
+ }
91
+ }
92
+ class SidebarComponent {
93
+ static contractSchema = {
94
+ items: 'array',
95
+ collapsed: 'boolean',
96
+ };
97
+ static strictContract = false;
98
+ contract = input.required(
99
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
100
+ );
101
+ experienceAdapter = inject(WebExperienceAdapterService);
102
+ sanitizer = inject(DomSanitizer);
103
+ computedCollapsed = computed(
104
+ () => !!this.contract().props?.collapsed,
105
+ ...(false ? [{ debugName: 'computedCollapsed' }] : /* istanbul ignore next */ [])
106
+ );
107
+ computedAriaLabel = computed(
108
+ () => {
109
+ const label = this.contract().props?.['aria-label'];
110
+ return label !== void 0 && label !== null ? String(label) : 'Sidebar';
111
+ },
112
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
113
+ );
114
+ computedAriaDescribedBy = computed(
115
+ () => {
116
+ const desc = this.contract().props?.['aria-describedby'];
117
+ return desc !== void 0 && desc !== null ? String(desc) : void 0;
118
+ },
119
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
120
+ );
121
+ computedItems = computed(
122
+ () => {
123
+ const items = this.contract().props?.items;
124
+ if (!Array.isArray(items)) return [];
125
+ return items
126
+ .filter(
127
+ item => item != null && item.key != null && item.label != null && item.outcomeRef != null
128
+ )
129
+ .map(item => {
130
+ return {
131
+ key: String(item.key),
132
+ label:
133
+ this.sanitizer.sanitize(SecurityContext.HTML, String(item.label)) ||
134
+ String(item.label).replace(/[<>]/g, ''),
135
+ icon: item.icon
136
+ ? this.sanitizer.sanitize(SecurityContext.HTML, String(item.icon)) ||
137
+ String(item.icon).replace(/[<>]/g, '')
138
+ : void 0,
139
+ outcomeRef: String(item.outcomeRef),
140
+ };
141
+ });
142
+ },
143
+ ...(false ? [{ debugName: 'computedItems' }] : /* istanbul ignore next */ [])
144
+ );
145
+ computedActiveOutcome = computed(
146
+ () => this.contract().props?.activeOutcome,
147
+ ...(false ? [{ debugName: 'computedActiveOutcome' }] : /* istanbul ignore next */ [])
148
+ );
149
+ onItemClick(item) {
150
+ if (!item.outcomeRef) return;
151
+ this.experienceAdapter.updateState(this.contract().id, 'activeOutcome', item.outcomeRef);
152
+ }
153
+ onKeyDown(event, item, index) {
154
+ if (event.key === 'Enter' || event.key === ' ') {
155
+ event.preventDefault();
156
+ this.onItemClick(item);
157
+ return;
158
+ }
159
+ const host = event.target;
160
+ const links = Array.from(
161
+ host.closest('.origo-sidebar__list')?.querySelectorAll('.origo-sidebar__link') || []
162
+ );
163
+ if (event.key === 'ArrowDown') {
164
+ event.preventDefault();
165
+ const next = links[index + 1];
166
+ if (next) next.focus();
167
+ } else if (event.key === 'ArrowUp') {
168
+ event.preventDefault();
169
+ const prev = links[index - 1];
170
+ if (prev) prev.focus();
171
+ }
172
+ }
173
+ static ɵfac = function SidebarComponent_Factory(__ngFactoryType__) {
174
+ return new (__ngFactoryType__ || SidebarComponent)();
175
+ };
176
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
177
+ type: SidebarComponent,
178
+ selectors: [['origo-sidebar']],
179
+ hostAttrs: ['role', 'navigation'],
180
+ hostVars: 7,
181
+ hostBindings: function SidebarComponent_HostBindings(rf, ctx) {
182
+ if (rf & 2) {
183
+ __attribute('data-testid', ctx.contract().id)('aria-label', ctx.computedAriaLabel())(
184
+ 'aria-describedby',
185
+ ctx.computedAriaDescribedBy()
186
+ );
187
+ __classProp('origo-sidebar', true)('origo-sidebar--collapsed', ctx.computedCollapsed());
188
+ }
189
+ },
190
+ inputs: { contract: [1, 'contract'] },
191
+ decls: 3,
192
+ vars: 0,
193
+ consts: [
194
+ [1, 'origo-sidebar__list'],
195
+ [1, 'origo-sidebar__item'],
196
+ ['href', 'javascript:void(0)', 1, 'origo-sidebar__link', 3, 'click', 'keydown'],
197
+ [1, 'origo-sidebar__icon', 3, 'innerHTML'],
198
+ [1, 'origo-sidebar__label'],
199
+ ],
200
+ template: function SidebarComponent_Template(rf, ctx) {
201
+ if (rf & 1) {
202
+ __domElementStart(0, 'ul', 0);
203
+ __repeaterCreate(1, SidebarComponent_For_2_Template, 4, 7, 'li', 1, _forTrack0);
204
+ __domElementEnd();
205
+ }
206
+ if (rf & 2) {
207
+ __advance();
208
+ __repeater(ctx.computedItems());
209
+ }
210
+ },
211
+ encapsulation: 3,
212
+ });
213
+ }
214
+ /* @__PURE__ */ (() => {})();
215
+
216
+ export { SidebarComponent };
217
+ //# sourceMappingURL=sidebar.component-CY_vKSCu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.component-CY_vKSCu.js","sources":["../../../src/components/primitives/sidebar/sidebar.component.ts"],"sourcesContent":["import {\n Component,\n input,\n ChangeDetectionStrategy,\n computed,\n ViewEncapsulation,\n inject,\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 SidebarItem {\n key: string;\n label: string;\n icon?: string;\n outcomeRef: string;\n}\n\nexport interface SidebarProps {\n items?: Array<SidebarItem>;\n activeOutcome?: string;\n collapsed?: boolean;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n}\n\n@Component({\n selector: 'origo-sidebar',\n standalone: true,\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[class.origo-sidebar]': 'true',\n '[class.origo-sidebar--collapsed]': 'computedCollapsed()',\n '[attr.data-testid]': 'contract().id',\n '[attr.aria-label]': 'computedAriaLabel()',\n '[attr.aria-describedby]': 'computedAriaDescribedBy()',\n role: 'navigation',\n },\n})\nexport class SidebarComponent implements OrigoAdapter<SidebarProps> {\n static readonly contractSchema = {\n items: 'array',\n collapsed: 'boolean',\n };\n static readonly strictContract = false;\n\n contract = input.required<InteractionContract<SidebarProps>>();\n\n private experienceAdapter = inject(WebExperienceAdapterService);\n private sanitizer = inject(DomSanitizer);\n\n computedCollapsed = computed(() => !!this.contract().props?.collapsed);\n\n computedAriaLabel = computed(() => {\n const label = this.contract().props?.['aria-label'];\n return label !== undefined && label !== null ? String(label) : 'Sidebar';\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 computedItems = computed(() => {\n const items = this.contract().props?.items;\n if (!Array.isArray(items)) return [];\n\n return items\n .filter(\n item => item != null && item.key != null && item.label != null && item.outcomeRef != null\n )\n .map(item => {\n return {\n key: String(item.key),\n label:\n this.sanitizer.sanitize(SecurityContext.HTML, String(item.label)) ||\n String(item.label).replace(/[<>]/g, ''),\n icon: item.icon\n ? this.sanitizer.sanitize(SecurityContext.HTML, String(item.icon)) ||\n String(item.icon).replace(/[<>]/g, '')\n : undefined,\n outcomeRef: String(item.outcomeRef),\n };\n });\n });\n\n computedActiveOutcome = computed(() => this.contract().props?.activeOutcome);\n\n onItemClick(item: SidebarItem) {\n if (!item.outcomeRef) return;\n this.experienceAdapter.updateState(this.contract().id, 'activeOutcome', item.outcomeRef);\n }\n\n onKeyDown(event: KeyboardEvent, item: SidebarItem, index: number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onItemClick(item);\n return;\n }\n\n const host = event.target as HTMLElement;\n const links = Array.from(\n host.closest('.origo-sidebar__list')?.querySelectorAll('.origo-sidebar__link') || []\n );\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n const next = links[index + 1] as HTMLElement;\n if (next) next.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n const prev = links[index - 1] as HTMLElement;\n if (prev) prev.focus();\n }\n }\n}\n"],"names":["i0.ɵɵdomElement","i0.ɵɵnextContext","i0.ɵɵdomProperty","i0.ɵɵsanitizeHtml","i0.ɵɵdomElementStart","i0.ɵɵtext","i0.ɵɵdomElementEnd","i0.ɵɵtextInterpolate","i0.ɵɵgetCurrentView","i0.ɵɵdomListener","i0.ɵɵrestoreView","i0.ɵɵresetView","i0.ɵɵconditionalCreate","i0.ɵɵadvance","i0.ɵɵclassProp","i0.ɵɵconditional"],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import {
2
+ a as __domElementStart,
3
+ f as __text,
4
+ g as __domElementEnd,
5
+ d as __nextContext,
6
+ h as __advance,
7
+ i as __textInterpolate,
8
+ n as input,
9
+ z as model,
10
+ p as computed,
11
+ o as inject,
12
+ A as effect,
13
+ B as untracked,
14
+ q as __defineComponent,
15
+ b as __domListener,
16
+ l as __conditionalCreate,
17
+ j as __classProp,
18
+ v as __domProperty,
19
+ k as __attribute,
20
+ m as __conditional,
21
+ } from './index-DRoHZv2r.js';
22
+ import { c as coerceContractProps } from './adapter-iYml3Kk6.js';
23
+ import { W as WebExperienceAdapterService } from './experience-adapter.service-CJxHLpWN.js';
24
+
25
+ function SwitchComponent_Conditional_2_Template(rf, ctx) {
26
+ if (rf & 1) {
27
+ __domElementStart(0, 'span', 2);
28
+ __text(1);
29
+ __domElementEnd();
30
+ }
31
+ if (rf & 2) {
32
+ const ctx_r0 = __nextContext();
33
+ __advance();
34
+ __textInterpolate(ctx_r0.computedLabel());
35
+ }
36
+ }
37
+ class SwitchComponent {
38
+ static contractSchema = {
39
+ checked: 'boolean',
40
+ label: 'string',
41
+ disabled: 'boolean',
42
+ };
43
+ static strictContract = false;
44
+ contract = input.required(
45
+ ...(false ? [{ debugName: 'contract' }] : /* istanbul ignore next */ [])
46
+ );
47
+ checked = model(false, ...(false ? [{ debugName: 'checked' }] : /* istanbul ignore next */ []));
48
+ computedLabel = computed(
49
+ () => this.contract().props?.label ?? '',
50
+ ...(false ? [{ debugName: 'computedLabel' }] : /* istanbul ignore next */ [])
51
+ );
52
+ computedDisabled = computed(
53
+ () => !!this.contract().props?.disabled,
54
+ ...(false ? [{ debugName: 'computedDisabled' }] : /* istanbul ignore next */ [])
55
+ );
56
+ computedAriaLabel = computed(
57
+ () => {
58
+ const v = this.contract().props?.['aria-label'];
59
+ return v !== void 0 && v !== null && String(v).trim() !== '' ? String(v) : void 0;
60
+ },
61
+ ...(false ? [{ debugName: 'computedAriaLabel' }] : /* istanbul ignore next */ [])
62
+ );
63
+ computedAriaDescribedBy = computed(
64
+ () => {
65
+ const v = this.contract().props?.['aria-describedby'];
66
+ return v !== void 0 && v !== null && String(v).trim() !== '' ? String(v) : void 0;
67
+ },
68
+ ...(false ? [{ debugName: 'computedAriaDescribedBy' }] : /* istanbul ignore next */ [])
69
+ );
70
+ experienceAdapter = inject(WebExperienceAdapterService);
71
+ constructor() {
72
+ effect(() => {
73
+ const props = this.contract().props;
74
+ const coerced = props ? coerceContractProps(props, SwitchComponent.contractSchema) : {};
75
+ const contractVal = coerced['checked'] !== void 0 ? !!coerced['checked'] : this.checked();
76
+ untracked(() => {
77
+ if (contractVal === this.checked()) return;
78
+ this.checked.set(contractVal);
79
+ });
80
+ });
81
+ }
82
+ onChange(event) {
83
+ const target = event.target;
84
+ if (!(target instanceof HTMLInputElement) || this.computedDisabled() || !this.contract().id)
85
+ return;
86
+ const isChecked = target.checked;
87
+ this.checked.set(isChecked);
88
+ this.experienceAdapter.updateState(this.contract().id, 'checked', isChecked);
89
+ }
90
+ static ɵfac = function SwitchComponent_Factory(__ngFactoryType__) {
91
+ return new (__ngFactoryType__ || SwitchComponent)();
92
+ };
93
+ static ɵcmp = /* @__PURE__ */ __defineComponent({
94
+ type: SwitchComponent,
95
+ selectors: [['origo-switch']],
96
+ hostVars: 3,
97
+ hostBindings: function SwitchComponent_HostBindings(rf, ctx) {
98
+ if (rf & 2) {
99
+ __attribute('data-testid', ctx.contract().id ?? '');
100
+ __classProp('origo-switch', true);
101
+ }
102
+ },
103
+ inputs: { contract: [1, 'contract'], checked: [1, 'checked'] },
104
+ outputs: { checked: 'checkedChange' },
105
+ decls: 3,
106
+ vars: 10,
107
+ consts: [
108
+ [3, 'for'],
109
+ ['type', 'checkbox', 'role', 'switch', 3, 'change', 'id', 'checked', 'disabled'],
110
+ [1, 'label-text'],
111
+ ],
112
+ template: function SwitchComponent_Template(rf, ctx) {
113
+ if (rf & 1) {
114
+ __domElementStart(0, 'label', 0)(1, 'input', 1);
115
+ __domListener('change', function SwitchComponent_Template_input_change_1_listener($event) {
116
+ return ctx.onChange($event);
117
+ });
118
+ __domElementEnd();
119
+ __conditionalCreate(2, SwitchComponent_Conditional_2_Template, 2, 1, 'span', 2);
120
+ __domElementEnd();
121
+ }
122
+ if (rf & 2) {
123
+ __classProp('disabled', ctx.computedDisabled());
124
+ __domProperty('htmlFor', ctx.contract().id);
125
+ __advance();
126
+ __domProperty('id', ctx.contract().id)('checked', ctx.checked())(
127
+ 'disabled',
128
+ ctx.computedDisabled()
129
+ );
130
+ __attribute('aria-checked', ctx.checked().toString())(
131
+ 'aria-label',
132
+ ctx.computedAriaLabel() ?? void 0
133
+ )('aria-describedby', ctx.computedAriaDescribedBy() ?? void 0);
134
+ __advance();
135
+ __conditional(ctx.computedLabel() ? 2 : -1);
136
+ }
137
+ },
138
+ encapsulation: 3,
139
+ });
140
+ }
141
+ /* @__PURE__ */ (() => {})();
142
+
143
+ export { SwitchComponent };
144
+ //# sourceMappingURL=switch.component-BtfhJxLp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.component-BtfhJxLp.js","sources":["../../../src/components/primitives/switch/switch.component.ts"],"sourcesContent":["import {\n Component,\n input,\n model,\n computed,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n inject,\n effect,\n untracked,\n} from '@angular/core';\nimport { InteractionContract } from '@origo/core';\nimport { OrigoAdapter, coerceContractProps } from '../../../adapters/web/adapter';\nimport { WebExperienceAdapterService } from '../../../adapters/web/experience-adapter.service';\n\nexport interface SwitchProps {\n checked?: boolean;\n label?: string;\n disabled?: boolean;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n}\n\n@Component({\n selector: 'origo-switch',\n standalone: true,\n templateUrl: './switch.component.html',\n styleUrls: ['./switch.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[class.origo-switch]': 'true',\n '[attr.data-testid]': 'contract().id ?? \"\"',\n },\n})\nexport class SwitchComponent implements OrigoAdapter<SwitchProps> {\n static readonly contractSchema: Record<\n string,\n 'string' | 'number' | 'boolean' | 'object' | 'array'\n > = {\n checked: 'boolean',\n label: 'string',\n disabled: 'boolean',\n };\n static readonly strictContract = false;\n\n contract = input.required<InteractionContract<SwitchProps>>();\n checked = model<boolean>(false);\n\n computedLabel = computed(() => this.contract().props?.label ?? '');\n computedDisabled = computed(() => !!this.contract().props?.disabled);\n computedAriaLabel = computed(() => {\n const v = this.contract().props?.['aria-label'];\n return v !== undefined && v !== null && String(v).trim() !== '' ? String(v) : undefined;\n });\n computedAriaDescribedBy = computed(() => {\n const v = this.contract().props?.['aria-describedby'];\n return v !== undefined && v !== null && String(v).trim() !== '' ? String(v) : undefined;\n });\n\n private experienceAdapter = inject(WebExperienceAdapterService);\n\n constructor() {\n effect(() => {\n const props = this.contract().props;\n const coerced = props\n ? coerceContractProps<Record<string, unknown>>(props, SwitchComponent.contractSchema)\n : {};\n const contractVal = coerced['checked'] !== undefined ? !!coerced['checked'] : this.checked();\n untracked(() => {\n if (contractVal === this.checked()) return;\n this.checked.set(contractVal);\n });\n });\n }\n\n onChange(event: Event) {\n const target = event.target;\n if (!(target instanceof HTMLInputElement) || this.computedDisabled() || !this.contract().id)\n return;\n\n const isChecked = target.checked;\n this.checked.set(isChecked);\n this.experienceAdapter.updateState(this.contract().id, 'checked', isChecked);\n }\n}\n"],"names":["i0.ɵɵdomElementStart","i0.ɵɵtext","i0.ɵɵdomElementEnd","i0.ɵɵnextContext","i0.ɵɵadvance","i0.ɵɵtextInterpolate","i0.ɵɵdefineComponent","i0.ɵɵattribute","i0.ɵɵclassProp"],"mappings":"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"}