@hyalo/angular 0.0.0-stage → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/LICENSE +21 -0
  3. package/README.md +45 -2
  4. package/fesm2022/hyalo-angular-accordion.mjs +230 -0
  5. package/fesm2022/hyalo-angular-accordion.mjs.map +1 -0
  6. package/fesm2022/hyalo-angular-alert.mjs +171 -0
  7. package/fesm2022/hyalo-angular-alert.mjs.map +1 -0
  8. package/fesm2022/hyalo-angular-aspect-ratio.mjs +64 -0
  9. package/fesm2022/hyalo-angular-aspect-ratio.mjs.map +1 -0
  10. package/fesm2022/hyalo-angular-avatar.mjs +169 -0
  11. package/fesm2022/hyalo-angular-avatar.mjs.map +1 -0
  12. package/fesm2022/hyalo-angular-badge.mjs +268 -0
  13. package/fesm2022/hyalo-angular-badge.mjs.map +1 -0
  14. package/fesm2022/hyalo-angular-bento.mjs +132 -0
  15. package/fesm2022/hyalo-angular-bento.mjs.map +1 -0
  16. package/fesm2022/hyalo-angular-blocks.mjs +985 -0
  17. package/fesm2022/hyalo-angular-blocks.mjs.map +1 -0
  18. package/fesm2022/hyalo-angular-border-beam.mjs +73 -0
  19. package/fesm2022/hyalo-angular-border-beam.mjs.map +1 -0
  20. package/fesm2022/hyalo-angular-breadcrumb.mjs +77 -0
  21. package/fesm2022/hyalo-angular-breadcrumb.mjs.map +1 -0
  22. package/fesm2022/hyalo-angular-button-group.mjs +90 -0
  23. package/fesm2022/hyalo-angular-button-group.mjs.map +1 -0
  24. package/fesm2022/hyalo-angular-button.mjs +204 -0
  25. package/fesm2022/hyalo-angular-button.mjs.map +1 -0
  26. package/fesm2022/hyalo-angular-card.mjs +221 -0
  27. package/fesm2022/hyalo-angular-card.mjs.map +1 -0
  28. package/fesm2022/hyalo-angular-carousel.mjs +709 -0
  29. package/fesm2022/hyalo-angular-carousel.mjs.map +1 -0
  30. package/fesm2022/hyalo-angular-chapter-nav.mjs +336 -0
  31. package/fesm2022/hyalo-angular-chapter-nav.mjs.map +1 -0
  32. package/fesm2022/hyalo-angular-chart-engine-DSJop6He.mjs +5 -0
  33. package/fesm2022/hyalo-angular-chart-engine-DSJop6He.mjs.map +1 -0
  34. package/fesm2022/hyalo-angular-chart.mjs +391 -0
  35. package/fesm2022/hyalo-angular-chart.mjs.map +1 -0
  36. package/fesm2022/hyalo-angular-choice.mjs +789 -0
  37. package/fesm2022/hyalo-angular-choice.mjs.map +1 -0
  38. package/fesm2022/hyalo-angular-code-block-highlight-B20d5C76.mjs +40 -0
  39. package/fesm2022/hyalo-angular-code-block-highlight-B20d5C76.mjs.map +1 -0
  40. package/fesm2022/hyalo-angular-code-block.mjs +161 -0
  41. package/fesm2022/hyalo-angular-code-block.mjs.map +1 -0
  42. package/fesm2022/hyalo-angular-command.mjs +193 -0
  43. package/fesm2022/hyalo-angular-command.mjs.map +1 -0
  44. package/fesm2022/hyalo-angular-copy.mjs +138 -0
  45. package/fesm2022/hyalo-angular-copy.mjs.map +1 -0
  46. package/fesm2022/hyalo-angular-core.mjs +424 -0
  47. package/fesm2022/hyalo-angular-core.mjs.map +1 -0
  48. package/fesm2022/hyalo-angular-description-list.mjs +57 -0
  49. package/fesm2022/hyalo-angular-description-list.mjs.map +1 -0
  50. package/fesm2022/hyalo-angular-dialog.mjs +600 -0
  51. package/fesm2022/hyalo-angular-dialog.mjs.map +1 -0
  52. package/fesm2022/hyalo-angular-divider.mjs +66 -0
  53. package/fesm2022/hyalo-angular-divider.mjs.map +1 -0
  54. package/fesm2022/hyalo-angular-empty-state.mjs +123 -0
  55. package/fesm2022/hyalo-angular-empty-state.mjs.map +1 -0
  56. package/fesm2022/hyalo-angular-field.mjs +344 -0
  57. package/fesm2022/hyalo-angular-field.mjs.map +1 -0
  58. package/fesm2022/hyalo-angular-filter.mjs +309 -0
  59. package/fesm2022/hyalo-angular-filter.mjs.map +1 -0
  60. package/fesm2022/hyalo-angular-hotspot.mjs +225 -0
  61. package/fesm2022/hyalo-angular-hotspot.mjs.map +1 -0
  62. package/fesm2022/hyalo-angular-hover-card.mjs +233 -0
  63. package/fesm2022/hyalo-angular-hover-card.mjs.map +1 -0
  64. package/fesm2022/hyalo-angular-icon.mjs +385 -0
  65. package/fesm2022/hyalo-angular-icon.mjs.map +1 -0
  66. package/fesm2022/hyalo-angular-image-compare.mjs +168 -0
  67. package/fesm2022/hyalo-angular-image-compare.mjs.map +1 -0
  68. package/fesm2022/hyalo-angular-interaction.mjs +446 -0
  69. package/fesm2022/hyalo-angular-interaction.mjs.map +1 -0
  70. package/fesm2022/hyalo-angular-kbd.mjs +41 -0
  71. package/fesm2022/hyalo-angular-kbd.mjs.map +1 -0
  72. package/fesm2022/hyalo-angular-lightbox.mjs +228 -0
  73. package/fesm2022/hyalo-angular-lightbox.mjs.map +1 -0
  74. package/fesm2022/hyalo-angular-link.mjs +42 -0
  75. package/fesm2022/hyalo-angular-link.mjs.map +1 -0
  76. package/fesm2022/hyalo-angular-list.mjs +131 -0
  77. package/fesm2022/hyalo-angular-list.mjs.map +1 -0
  78. package/fesm2022/hyalo-angular-marquee.mjs +197 -0
  79. package/fesm2022/hyalo-angular-marquee.mjs.map +1 -0
  80. package/fesm2022/hyalo-angular-menu.mjs +423 -0
  81. package/fesm2022/hyalo-angular-menu.mjs.map +1 -0
  82. package/fesm2022/hyalo-angular-mesh.mjs +126 -0
  83. package/fesm2022/hyalo-angular-mesh.mjs.map +1 -0
  84. package/fesm2022/hyalo-angular-motion.mjs +620 -0
  85. package/fesm2022/hyalo-angular-motion.mjs.map +1 -0
  86. package/fesm2022/hyalo-angular-navbar.mjs +343 -0
  87. package/fesm2022/hyalo-angular-navbar.mjs.map +1 -0
  88. package/fesm2022/hyalo-angular-navigation-menu.mjs +222 -0
  89. package/fesm2022/hyalo-angular-navigation-menu.mjs.map +1 -0
  90. package/fesm2022/hyalo-angular-number-ticker.mjs +174 -0
  91. package/fesm2022/hyalo-angular-number-ticker.mjs.map +1 -0
  92. package/fesm2022/hyalo-angular-overlay.mjs +163 -0
  93. package/fesm2022/hyalo-angular-overlay.mjs.map +1 -0
  94. package/fesm2022/hyalo-angular-pagination.mjs +187 -0
  95. package/fesm2022/hyalo-angular-pagination.mjs.map +1 -0
  96. package/fesm2022/hyalo-angular-popover-overlay-kit-6wPwnxln.mjs +3 -0
  97. package/fesm2022/hyalo-angular-popover.mjs +516 -0
  98. package/fesm2022/hyalo-angular-popover.mjs.map +1 -0
  99. package/fesm2022/hyalo-angular-progress.mjs +209 -0
  100. package/fesm2022/hyalo-angular-progress.mjs.map +1 -0
  101. package/fesm2022/hyalo-angular-progressive-blur.mjs +73 -0
  102. package/fesm2022/hyalo-angular-progressive-blur.mjs.map +1 -0
  103. package/fesm2022/hyalo-angular-refraction-renderer-5ZA-kfsA.mjs +186 -0
  104. package/fesm2022/hyalo-angular-refraction-renderer-5ZA-kfsA.mjs.map +1 -0
  105. package/fesm2022/hyalo-angular-refraction.mjs +178 -0
  106. package/fesm2022/hyalo-angular-refraction.mjs.map +1 -0
  107. package/fesm2022/hyalo-angular-scroll-area.mjs +93 -0
  108. package/fesm2022/hyalo-angular-scroll-area.mjs.map +1 -0
  109. package/fesm2022/hyalo-angular-scroll-to-top.mjs +127 -0
  110. package/fesm2022/hyalo-angular-scroll-to-top.mjs.map +1 -0
  111. package/fesm2022/hyalo-angular-segmented.mjs +223 -0
  112. package/fesm2022/hyalo-angular-segmented.mjs.map +1 -0
  113. package/fesm2022/hyalo-angular-select.mjs +561 -0
  114. package/fesm2022/hyalo-angular-select.mjs.map +1 -0
  115. package/fesm2022/hyalo-angular-sidebar.mjs +241 -0
  116. package/fesm2022/hyalo-angular-sidebar.mjs.map +1 -0
  117. package/fesm2022/hyalo-angular-skeleton.mjs +131 -0
  118. package/fesm2022/hyalo-angular-skeleton.mjs.map +1 -0
  119. package/fesm2022/hyalo-angular-sparkline.mjs +110 -0
  120. package/fesm2022/hyalo-angular-sparkline.mjs.map +1 -0
  121. package/fesm2022/hyalo-angular-split-text.mjs +126 -0
  122. package/fesm2022/hyalo-angular-split-text.mjs.map +1 -0
  123. package/fesm2022/hyalo-angular-stat.mjs +193 -0
  124. package/fesm2022/hyalo-angular-stat.mjs.map +1 -0
  125. package/fesm2022/hyalo-angular-stepper.mjs +254 -0
  126. package/fesm2022/hyalo-angular-stepper.mjs.map +1 -0
  127. package/fesm2022/hyalo-angular-table.mjs +335 -0
  128. package/fesm2022/hyalo-angular-table.mjs.map +1 -0
  129. package/fesm2022/hyalo-angular-tabs.mjs +324 -0
  130. package/fesm2022/hyalo-angular-tabs.mjs.map +1 -0
  131. package/fesm2022/hyalo-angular-theme.mjs +94 -0
  132. package/fesm2022/hyalo-angular-theme.mjs.map +1 -0
  133. package/fesm2022/hyalo-angular-timeline.mjs +157 -0
  134. package/fesm2022/hyalo-angular-timeline.mjs.map +1 -0
  135. package/fesm2022/hyalo-angular-toast.mjs +323 -0
  136. package/fesm2022/hyalo-angular-toast.mjs.map +1 -0
  137. package/fesm2022/hyalo-angular.mjs +2 -0
  138. package/package.json +329 -3
  139. package/styles/hyalo-core.css +25 -0
  140. package/styles/hyalo.css +17 -0
  141. package/styles/overlays/dialog.css +9 -0
  142. package/styles/overlays/popover.css +9 -0
  143. package/styles/overlays/select.css +9 -0
  144. package/styles/overlays/toast.css +8 -0
  145. package/styles/palettes/aurora.css +47 -0
  146. package/styles/palettes/ember.css +47 -0
  147. package/styles/palettes/graphite.css +47 -0
  148. package/styles/palettes/ocean.css +47 -0
  149. package/styles/palettes/orchid.css +47 -0
  150. package/styles/palettes/rose.css +47 -0
  151. package/styles/parts/card.css +49 -0
  152. package/styles/parts/dialog.css +116 -0
  153. package/styles/parts/drawer.css +124 -0
  154. package/styles/parts/field.css +44 -0
  155. package/styles/parts/glass.css +139 -0
  156. package/styles/parts/motion.css +101 -0
  157. package/styles/parts/navbar.css +55 -0
  158. package/styles/parts/popover.css +27 -0
  159. package/styles/parts/presence.css +55 -0
  160. package/styles/parts/reset.css +42 -0
  161. package/styles/parts/select.css +46 -0
  162. package/styles/parts/themes.css +105 -0
  163. package/styles/parts/toast.css +128 -0
  164. package/styles/parts/tokens.css +151 -0
  165. package/styles/parts/typography.css +81 -0
  166. package/types/hyalo-angular-accordion.d.ts +74 -0
  167. package/types/hyalo-angular-alert.d.ts +47 -0
  168. package/types/hyalo-angular-aspect-ratio.d.ts +13 -0
  169. package/types/hyalo-angular-avatar.d.ts +39 -0
  170. package/types/hyalo-angular-badge.d.ts +82 -0
  171. package/types/hyalo-angular-bento.d.ts +25 -0
  172. package/types/hyalo-angular-blocks.d.ts +272 -0
  173. package/types/hyalo-angular-border-beam.d.ts +15 -0
  174. package/types/hyalo-angular-breadcrumb.d.ts +22 -0
  175. package/types/hyalo-angular-button-group.d.ts +19 -0
  176. package/types/hyalo-angular-button.d.ts +89 -0
  177. package/types/hyalo-angular-card.d.ts +61 -0
  178. package/types/hyalo-angular-carousel.d.ts +147 -0
  179. package/types/hyalo-angular-chapter-nav.d.ts +79 -0
  180. package/types/hyalo-angular-chart.d.ts +90 -0
  181. package/types/hyalo-angular-choice.d.ts +259 -0
  182. package/types/hyalo-angular-code-block.d.ts +46 -0
  183. package/types/hyalo-angular-command.d.ts +41 -0
  184. package/types/hyalo-angular-copy.d.ts +39 -0
  185. package/types/hyalo-angular-core.d.ts +210 -0
  186. package/types/hyalo-angular-description-list.d.ts +16 -0
  187. package/types/hyalo-angular-dialog.d.ts +171 -0
  188. package/types/hyalo-angular-divider.d.ts +12 -0
  189. package/types/hyalo-angular-empty-state.d.ts +30 -0
  190. package/types/hyalo-angular-field.d.ts +141 -0
  191. package/types/hyalo-angular-filter.d.ts +122 -0
  192. package/types/hyalo-angular-hotspot.d.ts +70 -0
  193. package/types/hyalo-angular-hover-card.d.ts +47 -0
  194. package/types/hyalo-angular-icon.d.ts +122 -0
  195. package/types/hyalo-angular-image-compare.d.ts +55 -0
  196. package/types/hyalo-angular-interaction.d.ts +131 -0
  197. package/types/hyalo-angular-kbd.d.ts +5 -0
  198. package/types/hyalo-angular-lightbox.d.ts +67 -0
  199. package/types/hyalo-angular-link.d.ts +5 -0
  200. package/types/hyalo-angular-list.d.ts +30 -0
  201. package/types/hyalo-angular-marquee.d.ts +48 -0
  202. package/types/hyalo-angular-menu.d.ts +105 -0
  203. package/types/hyalo-angular-mesh.d.ts +36 -0
  204. package/types/hyalo-angular-motion.d.ts +218 -0
  205. package/types/hyalo-angular-navbar.d.ts +110 -0
  206. package/types/hyalo-angular-navigation-menu.d.ts +47 -0
  207. package/types/hyalo-angular-number-ticker.d.ts +52 -0
  208. package/types/hyalo-angular-overlay.d.ts +40 -0
  209. package/types/hyalo-angular-pagination.d.ts +59 -0
  210. package/types/hyalo-angular-popover.d.ts +152 -0
  211. package/types/hyalo-angular-progress.d.ts +46 -0
  212. package/types/hyalo-angular-progressive-blur.d.ts +14 -0
  213. package/types/hyalo-angular-refraction.d.ts +46 -0
  214. package/types/hyalo-angular-scroll-area.d.ts +18 -0
  215. package/types/hyalo-angular-scroll-to-top.d.ts +31 -0
  216. package/types/hyalo-angular-segmented.d.ts +79 -0
  217. package/types/hyalo-angular-select.d.ts +176 -0
  218. package/types/hyalo-angular-sidebar.d.ts +57 -0
  219. package/types/hyalo-angular-skeleton.d.ts +34 -0
  220. package/types/hyalo-angular-sparkline.d.ts +19 -0
  221. package/types/hyalo-angular-split-text.d.ts +24 -0
  222. package/types/hyalo-angular-stat.d.ts +56 -0
  223. package/types/hyalo-angular-stepper.d.ts +63 -0
  224. package/types/hyalo-angular-table.d.ts +125 -0
  225. package/types/hyalo-angular-tabs.d.ts +102 -0
  226. package/types/hyalo-angular-theme.d.ts +46 -0
  227. package/types/hyalo-angular-timeline.d.ts +36 -0
  228. package/types/hyalo-angular-toast.d.ts +79 -0
  229. package/types/hyalo-angular.d.ts +2 -0
@@ -0,0 +1,324 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, contentChildren, inject, input, model, viewChild, viewChildren } from "@angular/core";
3
+ import * as i1 from "@angular/aria/tabs";
4
+ import { Tab, TabList, TabPanel, Tabs } from "@angular/aria/tabs";
5
+ import { HyIcon } from "@hyalo/angular/icon";
6
+ import { ɵtrackIndicator } from "@hyalo/angular/core";
7
+ var HyTab = class HyTab {
8
+ panel = inject(TabPanel);
9
+ label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
10
+ icon = input(...ngDevMode ? [void 0, { debugName: "icon" }] : /* istanbul ignore next */ []);
11
+ disabled = input(false, {
12
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
13
+ transform: booleanAttribute
14
+ });
15
+ static ɵfac = i0.ɵɵngDeclareFactory({
16
+ minVersion: "12.0.0",
17
+ version: "22.2.3",
18
+ ngImport: i0,
19
+ type: HyTab,
20
+ deps: [],
21
+ target: i0.ɵɵFactoryTarget.Component
22
+ });
23
+ static ɵcmp = i0.ɵɵngDeclareComponent({
24
+ minVersion: "17.1.0",
25
+ version: "22.2.3",
26
+ type: HyTab,
27
+ isStandalone: true,
28
+ selector: "hy-tab",
29
+ inputs: {
30
+ label: {
31
+ classPropertyName: "label",
32
+ publicName: "label",
33
+ isSignal: true,
34
+ isRequired: true,
35
+ transformFunction: null
36
+ },
37
+ icon: {
38
+ classPropertyName: "icon",
39
+ publicName: "icon",
40
+ isSignal: true,
41
+ isRequired: false,
42
+ transformFunction: null
43
+ },
44
+ disabled: {
45
+ classPropertyName: "disabled",
46
+ publicName: "disabled",
47
+ isSignal: true,
48
+ isRequired: false,
49
+ transformFunction: null
50
+ }
51
+ },
52
+ host: { classAttribute: "hy-tab-panel" },
53
+ hostDirectives: [{
54
+ directive: i1.TabPanel,
55
+ inputs: ["value", "value"]
56
+ }],
57
+ ngImport: i0,
58
+ template: `<ng-content />`,
59
+ isInline: true,
60
+ styles: [":host{display:block}:host([inert]){display:none}:host(:focus-visible){outline:none;border-radius:var(--hy-radius-s);box-shadow:var(--hy-focus-ring)}\n"],
61
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
62
+ });
63
+ };
64
+ i0.ɵɵngDeclareClassMetadata({
65
+ minVersion: "12.0.0",
66
+ version: "22.2.3",
67
+ ngImport: i0,
68
+ type: HyTab,
69
+ decorators: [{
70
+ type: Component,
71
+ args: [{
72
+ selector: "hy-tab",
73
+ changeDetection: ChangeDetectionStrategy.OnPush,
74
+ hostDirectives: [{
75
+ directive: TabPanel,
76
+ inputs: ["value"]
77
+ }],
78
+ host: { class: "hy-tab-panel" },
79
+ template: `<ng-content />`,
80
+ styles: [":host{display:block}:host([inert]){display:none}:host(:focus-visible){outline:none;border-radius:var(--hy-radius-s);box-shadow:var(--hy-focus-ring)}\n"]
81
+ }]
82
+ }],
83
+ propDecorators: {
84
+ label: [{
85
+ type: i0.Input,
86
+ args: [{
87
+ isSignal: true,
88
+ alias: "label",
89
+ required: true
90
+ }]
91
+ }],
92
+ icon: [{
93
+ type: i0.Input,
94
+ args: [{
95
+ isSignal: true,
96
+ alias: "icon",
97
+ required: false
98
+ }]
99
+ }],
100
+ disabled: [{
101
+ type: i0.Input,
102
+ args: [{
103
+ isSignal: true,
104
+ alias: "disabled",
105
+ required: false
106
+ }]
107
+ }]
108
+ }
109
+ });
110
+ var HyTabs = class HyTabs {
111
+ tabs = contentChildren(HyTab, ...ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []);
112
+ list = viewChild("list", ...ngDevMode ? [{ debugName: "list" }] : /* istanbul ignore next */ []);
113
+ tabEls = viewChildren("tabEl", {
114
+ ...ngDevMode ? { debugName: "tabEls" } : /* istanbul ignore next */ {},
115
+ read: ElementRef
116
+ });
117
+ label = input(...ngDevMode ? [void 0, { debugName: "label" }] : /* istanbul ignore next */ []);
118
+ selected = model(void 0, ...ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []);
119
+ selectionMode = input("follow", ...ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []);
120
+ stretch = input(false, {
121
+ ...ngDevMode ? { debugName: "stretch" } : /* istanbul ignore next */ {},
122
+ transform: booleanAttribute
123
+ });
124
+ current = computed(() => this.selected() ?? this.tabs().find((t) => !t.disabled())?.panel.value(), ...ngDevMode ? [{ debugName: "current" }] : /* istanbul ignore next */ []);
125
+ ready = ɵtrackIndicator(this.list, () => {
126
+ const index = this.tabs().findIndex((t) => t.panel.value() === this.current());
127
+ return this.tabEls()[index]?.nativeElement ?? null;
128
+ });
129
+ static ɵfac = i0.ɵɵngDeclareFactory({
130
+ minVersion: "12.0.0",
131
+ version: "22.2.3",
132
+ ngImport: i0,
133
+ type: HyTabs,
134
+ deps: [],
135
+ target: i0.ɵɵFactoryTarget.Component
136
+ });
137
+ static ɵcmp = i0.ɵɵngDeclareComponent({
138
+ minVersion: "17.0.0",
139
+ version: "22.2.3",
140
+ type: HyTabs,
141
+ isStandalone: true,
142
+ selector: "hy-tabs",
143
+ inputs: {
144
+ label: {
145
+ classPropertyName: "label",
146
+ publicName: "label",
147
+ isSignal: true,
148
+ isRequired: false,
149
+ transformFunction: null
150
+ },
151
+ selected: {
152
+ classPropertyName: "selected",
153
+ publicName: "selected",
154
+ isSignal: true,
155
+ isRequired: false,
156
+ transformFunction: null
157
+ },
158
+ selectionMode: {
159
+ classPropertyName: "selectionMode",
160
+ publicName: "selectionMode",
161
+ isSignal: true,
162
+ isRequired: false,
163
+ transformFunction: null
164
+ },
165
+ stretch: {
166
+ classPropertyName: "stretch",
167
+ publicName: "stretch",
168
+ isSignal: true,
169
+ isRequired: false,
170
+ transformFunction: null
171
+ }
172
+ },
173
+ outputs: { selected: "selectedChange" },
174
+ host: {
175
+ properties: { "attr.data-stretch": "stretch() || null" },
176
+ classAttribute: "hy-tabs"
177
+ },
178
+ queries: [{
179
+ propertyName: "tabs",
180
+ predicate: HyTab,
181
+ isSignal: true
182
+ }],
183
+ viewQueries: [{
184
+ propertyName: "list",
185
+ first: true,
186
+ predicate: ["list"],
187
+ descendants: true,
188
+ isSignal: true
189
+ }, {
190
+ propertyName: "tabEls",
191
+ predicate: ["tabEl"],
192
+ descendants: true,
193
+ read: ElementRef,
194
+ isSignal: true
195
+ }],
196
+ hostDirectives: [{ directive: i1.Tabs }],
197
+ ngImport: i0,
198
+ template: "<div\r\n #list\r\n ngTabList\r\n class=\"hy-tabs__list\"\r\n [attr.data-ready]=\"ready() || null\"\r\n [attr.aria-label]=\"label() || null\"\r\n [selectedTab]=\"current()\"\r\n (selectedTabChange)=\"selected.set($event)\"\r\n [selectionMode]=\"selectionMode()\"\r\n [focusMode]=\"'roving'\"\r\n>\r\n <span class=\"hy-tabs__indicator\" aria-hidden=\"true\"></span>\r\n @for (tab of tabs(); track tab.panel.value()) {\r\n <button\r\n #tabEl\r\n type=\"button\"\r\n ngTab\r\n class=\"hy-tabs__tab\"\r\n [value]=\"tab.panel.value()\"\r\n [disabled]=\"tab.disabled()\"\r\n >\r\n @if (tab.icon(); as icon) {\r\n <hy-icon [name]=\"icon\" />\r\n }\r\n {{ tab.label() }}\r\n </button>\r\n }\r\n</div>\r\n<div class=\"hy-tabs__panels\"><ng-content /></div>\r\n",
199
+ styles: [":host{display:block}.hy-tabs__list{position:relative;display:flex;gap:var(--hy-space-1);padding:var(--hy-space-1);border-radius:var(--hy-tabs-radius, var(--hy-radius-pill));background:var(--hy-tabs-track, color-mix(in srgb, var(--hy-ink) 6%, transparent));overflow-x:auto;scrollbar-width:none;isolation:isolate}:host([data-stretch]) .hy-tabs__list{display:flex}:host([data-stretch]) .hy-tabs__tab{flex:1}.hy-tabs__indicator{position:absolute;inset-block:var(--hy-space-1);left:0;inline-size:var(--hy-ind-size, 0px);translate:var(--hy-ind-x, 0px) 0;border-radius:var(--hy-tabs-radius, var(--hy-radius-pill));background:var(--hy-glass-reflection),var(--hy-tabs-indicator, var(--hy-surface-1));box-shadow:var(--hy-glass-edge),0 2px 8px -2px #0f1a242e;z-index:-1}.hy-tabs__list[data-ready] .hy-tabs__indicator{transition:translate var(--hy-dur-settle) var(--hy-ease-out),inline-size var(--hy-dur-settle) var(--hy-ease-out)}.hy-tabs__tab{display:inline-flex;align-items:center;justify-content:center;gap:var(--hy-space-2);min-block-size:2.25rem;padding-inline:var(--hy-space-4);border:0;border-radius:var(--hy-tabs-radius, var(--hy-radius-pill));background:transparent;color:var(--hy-ink-2);font-weight:540;white-space:nowrap;cursor:pointer;transition:color var(--hy-dur-quick) var(--hy-ease-out)}.hy-tabs__tab:hover,.hy-tabs__tab[aria-selected=true]{color:var(--hy-ink)}.hy-tabs__tab:focus-visible{outline:none;box-shadow:var(--hy-focus-ring)}.hy-tabs__tab[aria-disabled=true]{opacity:.45;cursor:not-allowed}.hy-tabs__panels{padding-block-start:var(--hy-space-5)}@media(forced-colors:active){.hy-tabs__tab[aria-selected=true]{outline:2px solid Highlight}}\n"],
200
+ dependencies: [
201
+ {
202
+ kind: "directive",
203
+ type: TabList,
204
+ selector: "[ngTabList]",
205
+ inputs: [
206
+ "orientation",
207
+ "wrap",
208
+ "softDisabled",
209
+ "focusMode",
210
+ "selectionMode",
211
+ "selectedTab",
212
+ "disabled"
213
+ ],
214
+ outputs: ["selectedTabChange"],
215
+ exportAs: ["ngTabList"]
216
+ },
217
+ {
218
+ kind: "directive",
219
+ type: Tab,
220
+ selector: "[ngTab]",
221
+ inputs: [
222
+ "id",
223
+ "disabled",
224
+ "value"
225
+ ],
226
+ exportAs: ["ngTab"]
227
+ },
228
+ {
229
+ kind: "component",
230
+ type: HyIcon,
231
+ selector: "hy-icon",
232
+ inputs: [
233
+ "name",
234
+ "icon",
235
+ "label",
236
+ "size",
237
+ "strokeWidth"
238
+ ]
239
+ }
240
+ ],
241
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
242
+ });
243
+ };
244
+ i0.ɵɵngDeclareClassMetadata({
245
+ minVersion: "12.0.0",
246
+ version: "22.2.3",
247
+ ngImport: i0,
248
+ type: HyTabs,
249
+ decorators: [{
250
+ type: Component,
251
+ args: [{
252
+ selector: "hy-tabs",
253
+ imports: [
254
+ TabList,
255
+ Tab,
256
+ HyIcon
257
+ ],
258
+ changeDetection: ChangeDetectionStrategy.OnPush,
259
+ hostDirectives: [Tabs],
260
+ host: {
261
+ class: "hy-tabs",
262
+ "[attr.data-stretch]": "stretch() || null"
263
+ },
264
+ template: "<div\r\n #list\r\n ngTabList\r\n class=\"hy-tabs__list\"\r\n [attr.data-ready]=\"ready() || null\"\r\n [attr.aria-label]=\"label() || null\"\r\n [selectedTab]=\"current()\"\r\n (selectedTabChange)=\"selected.set($event)\"\r\n [selectionMode]=\"selectionMode()\"\r\n [focusMode]=\"'roving'\"\r\n>\r\n <span class=\"hy-tabs__indicator\" aria-hidden=\"true\"></span>\r\n @for (tab of tabs(); track tab.panel.value()) {\r\n <button\r\n #tabEl\r\n type=\"button\"\r\n ngTab\r\n class=\"hy-tabs__tab\"\r\n [value]=\"tab.panel.value()\"\r\n [disabled]=\"tab.disabled()\"\r\n >\r\n @if (tab.icon(); as icon) {\r\n <hy-icon [name]=\"icon\" />\r\n }\r\n {{ tab.label() }}\r\n </button>\r\n }\r\n</div>\r\n<div class=\"hy-tabs__panels\"><ng-content /></div>\r\n",
265
+ styles: [":host{display:block}.hy-tabs__list{position:relative;display:flex;gap:var(--hy-space-1);padding:var(--hy-space-1);border-radius:var(--hy-tabs-radius, var(--hy-radius-pill));background:var(--hy-tabs-track, color-mix(in srgb, var(--hy-ink) 6%, transparent));overflow-x:auto;scrollbar-width:none;isolation:isolate}:host([data-stretch]) .hy-tabs__list{display:flex}:host([data-stretch]) .hy-tabs__tab{flex:1}.hy-tabs__indicator{position:absolute;inset-block:var(--hy-space-1);left:0;inline-size:var(--hy-ind-size, 0px);translate:var(--hy-ind-x, 0px) 0;border-radius:var(--hy-tabs-radius, var(--hy-radius-pill));background:var(--hy-glass-reflection),var(--hy-tabs-indicator, var(--hy-surface-1));box-shadow:var(--hy-glass-edge),0 2px 8px -2px #0f1a242e;z-index:-1}.hy-tabs__list[data-ready] .hy-tabs__indicator{transition:translate var(--hy-dur-settle) var(--hy-ease-out),inline-size var(--hy-dur-settle) var(--hy-ease-out)}.hy-tabs__tab{display:inline-flex;align-items:center;justify-content:center;gap:var(--hy-space-2);min-block-size:2.25rem;padding-inline:var(--hy-space-4);border:0;border-radius:var(--hy-tabs-radius, var(--hy-radius-pill));background:transparent;color:var(--hy-ink-2);font-weight:540;white-space:nowrap;cursor:pointer;transition:color var(--hy-dur-quick) var(--hy-ease-out)}.hy-tabs__tab:hover,.hy-tabs__tab[aria-selected=true]{color:var(--hy-ink)}.hy-tabs__tab:focus-visible{outline:none;box-shadow:var(--hy-focus-ring)}.hy-tabs__tab[aria-disabled=true]{opacity:.45;cursor:not-allowed}.hy-tabs__panels{padding-block-start:var(--hy-space-5)}@media(forced-colors:active){.hy-tabs__tab[aria-selected=true]{outline:2px solid Highlight}}\n"]
266
+ }]
267
+ }],
268
+ propDecorators: {
269
+ tabs: [{
270
+ type: i0.ContentChildren,
271
+ args: [i0.forwardRef(() => HyTab), { isSignal: true }]
272
+ }],
273
+ list: [{
274
+ type: i0.ViewChild,
275
+ args: ["list", { isSignal: true }]
276
+ }],
277
+ tabEls: [{
278
+ type: i0.ViewChildren,
279
+ args: ["tabEl", {
280
+ read: ElementRef,
281
+ isSignal: true
282
+ }]
283
+ }],
284
+ label: [{
285
+ type: i0.Input,
286
+ args: [{
287
+ isSignal: true,
288
+ alias: "label",
289
+ required: false
290
+ }]
291
+ }],
292
+ selected: [{
293
+ type: i0.Input,
294
+ args: [{
295
+ isSignal: true,
296
+ alias: "selected",
297
+ required: false
298
+ }]
299
+ }, {
300
+ type: i0.Output,
301
+ args: ["selectedChange"]
302
+ }],
303
+ selectionMode: [{
304
+ type: i0.Input,
305
+ args: [{
306
+ isSignal: true,
307
+ alias: "selectionMode",
308
+ required: false
309
+ }]
310
+ }],
311
+ stretch: [{
312
+ type: i0.Input,
313
+ args: [{
314
+ isSignal: true,
315
+ alias: "stretch",
316
+ required: false
317
+ }]
318
+ }]
319
+ }
320
+ });
321
+ const HY_TABS = [HyTabs, HyTab];
322
+ export { HY_TABS, HyTab, HyTabs };
323
+
324
+ //# sourceMappingURL=hyalo-angular-tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyalo-angular-tabs.mjs","names":["trackIndicator"],"sources":["../../../projects/hyalo/tabs/tabs.ts","../../../projects/hyalo/tabs/tabs.html"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n model,\r\n viewChild,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { Tab, TabList, TabPanel, Tabs } from '@angular/aria/tabs';\r\nimport { HyIcon } from '@hyalo/angular/icon';\r\n\r\nimport { ɵtrackIndicator as trackIndicator } from '@hyalo/angular/core';\r\n\r\n/**\r\n * One tab and its panel. The panel content is rendered up front and hidden\r\n * with `inert` while another tab is selected.\r\n */\r\n@Component({\r\n selector: 'hy-tab',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [{ directive: TabPanel, inputs: ['value'] }],\r\n host: { class: 'hy-tab-panel' },\r\n template: `<ng-content />`,\r\n styleUrl: './tab.css',\r\n})\r\nexport class HyTab {\r\n readonly panel = inject(TabPanel);\r\n /** Text of the tab button. */\r\n readonly label = input.required<string>();\r\n /** Optional icon name shown before the label. */\r\n readonly icon = input<string>();\r\n /** Disables this tab. Arrow keys skip it. */\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n/**\r\n * Tabs with a sliding glass indicator, built on Angular Aria. Arrow keys\r\n * move between tabs (mirrored in RTL), Home and End jump to the ends.\r\n *\r\n * ```html\r\n * <hy-tabs label=\"Watch details\" [(selected)]=\"tab\">\r\n * <hy-tab value=\"overview\" label=\"Overview\">...</hy-tab>\r\n * <hy-tab value=\"specs\" label=\"Specifications\">...</hy-tab>\r\n * </hy-tabs>\r\n * ```\r\n *\r\n * With `selectionMode=\"follow\"` (the default) a tab opens as soon as it is\r\n * focused. Use `explicit` when panels are expensive, so users press Enter or\r\n * Space to open one.\r\n */\r\n@Component({\r\n selector: 'hy-tabs',\r\n imports: [TabList, Tab, HyIcon],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [Tabs],\r\n host: { class: 'hy-tabs', '[attr.data-stretch]': 'stretch() || null' },\r\n templateUrl: './tabs.html',\r\n styleUrl: './tabs.css',\r\n})\r\nexport class HyTabs {\r\n protected readonly tabs = contentChildren(HyTab);\r\n private readonly list = viewChild<ElementRef<HTMLElement>>('list');\r\n private readonly tabEls = viewChildren('tabEl', { read: ElementRef<HTMLElement> });\r\n\r\n /** Accessible name for the tab list. */\r\n readonly label = input<string>();\r\n /** Value of the selected tab. Two-way bindable. Defaults to the first tab. */\r\n readonly selected = model<string | undefined>(undefined);\r\n /** `follow` opens a tab on focus, `explicit` waits for Enter or Space. */\r\n readonly selectionMode = input<'follow' | 'explicit'>('follow');\r\n /** Stretch tabs to fill the row. */\r\n readonly stretch = input(false, { transform: booleanAttribute });\r\n\r\n /** The selected value, falling back to the first enabled tab. */\r\n protected readonly current = computed(\r\n () =>\r\n this.selected() ??\r\n this.tabs()\r\n .find((t) => !t.disabled())\r\n ?.panel.value(),\r\n );\r\n\r\n protected readonly ready = trackIndicator(this.list, () => {\r\n const index = this.tabs().findIndex((t) => t.panel.value() === this.current());\r\n return this.tabEls()[index]?.nativeElement ?? null;\r\n });\r\n}\r\n\r\n/** Everything needed to build tabs. */\r\nexport const HY_TABS = [HyTabs, HyTab] as const;\r\n","<div\r\n #list\r\n ngTabList\r\n class=\"hy-tabs__list\"\r\n [attr.data-ready]=\"ready() || null\"\r\n [attr.aria-label]=\"label() || null\"\r\n [selectedTab]=\"current()\"\r\n (selectedTabChange)=\"selected.set($event)\"\r\n [selectionMode]=\"selectionMode()\"\r\n [focusMode]=\"'roving'\"\r\n>\r\n <span class=\"hy-tabs__indicator\" aria-hidden=\"true\"></span>\r\n @for (tab of tabs(); track tab.panel.value()) {\r\n <button\r\n #tabEl\r\n type=\"button\"\r\n ngTab\r\n class=\"hy-tabs__tab\"\r\n [value]=\"tab.panel.value()\"\r\n [disabled]=\"tab.disabled()\"\r\n >\r\n @if (tab.icon(); as icon) {\r\n <hy-icon [name]=\"icon\" />\r\n }\r\n {{ tab.label() }}\r\n </button>\r\n }\r\n</div>\r\n<div class=\"hy-tabs__panels\"><ng-content /></div>\r\n"],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import * as i0 from "@angular/core";
2
+ import { DOCUMENT, Injectable, inject, signal } from "@angular/core";
3
+ import { HY_CONFIG, ɵinjectIsBrowser } from "@hyalo/angular/core";
4
+ const ATTR = "data-hy-palette";
5
+ const VALID_NAME = /^[a-z0-9-]+$/;
6
+ function defaultPaletteHref(name) {
7
+ return `palette-${name}.css`;
8
+ }
9
+ var HyPalette = class HyPalette {
10
+ document = inject(DOCUMENT);
11
+ config = inject(HY_CONFIG);
12
+ isBrowser = ɵinjectIsBrowser();
13
+ loads = /* @__PURE__ */ new Map();
14
+ _current = signal(this.document.documentElement.getAttribute(ATTR), ...ngDevMode ? [{ debugName: "_current" }] : /* istanbul ignore next */ []);
15
+ _selected = signal(this._current(), ...ngDevMode ? [{ debugName: "_selected" }] : /* istanbul ignore next */ []);
16
+ current = this._current.asReadonly();
17
+ selected = this._selected.asReadonly();
18
+ async use(name) {
19
+ if (name !== null) assertName(name);
20
+ this._selected.set(name);
21
+ try {
22
+ if (name !== null && this.isBrowser) await this.load(name);
23
+ } catch (error) {
24
+ if (this._current() === name) {
25
+ this.document.documentElement.removeAttribute(ATTR);
26
+ this._current.set(null);
27
+ }
28
+ if (this._selected() === name) this._selected.set(this._current());
29
+ throw error;
30
+ }
31
+ if (this._selected() !== name) return;
32
+ const root = this.document.documentElement;
33
+ if (name === null) root.removeAttribute(ATTR);
34
+ else root.setAttribute(ATTR, name);
35
+ this._current.set(name);
36
+ }
37
+ preload(name) {
38
+ assertName(name);
39
+ if (this.isBrowser) this.load(name).catch(() => void 0);
40
+ }
41
+ load(name) {
42
+ const cached = this.loads.get(name);
43
+ if (cached) return cached;
44
+ const head = this.document.head;
45
+ const existing = head.querySelector(`link[${ATTR}="${name}"]`);
46
+ if (existing && !existing.sheet) existing.remove();
47
+ const pending = existing?.sheet ? Promise.resolve() : new Promise((resolve, reject) => {
48
+ const link = this.document.createElement("link");
49
+ link.addEventListener("load", () => resolve(), { once: true });
50
+ link.addEventListener("error", () => {
51
+ link.remove();
52
+ this.loads.delete(name);
53
+ reject(/* @__PURE__ */ new Error(`Hyalo: palette "${name}" failed to load from ${link.href}`));
54
+ }, { once: true });
55
+ link.rel = "stylesheet";
56
+ link.href = (this.config.paletteHref ?? defaultPaletteHref)(name);
57
+ link.setAttribute(ATTR, name);
58
+ head.appendChild(link);
59
+ });
60
+ this.loads.set(name, pending);
61
+ return pending;
62
+ }
63
+ static ɵfac = i0.ɵɵngDeclareFactory({
64
+ minVersion: "12.0.0",
65
+ version: "22.2.3",
66
+ ngImport: i0,
67
+ type: HyPalette,
68
+ deps: [],
69
+ target: i0.ɵɵFactoryTarget.Injectable
70
+ });
71
+ static ɵprov = i0.ɵɵngDeclareInjectable({
72
+ minVersion: "12.0.0",
73
+ version: "22.2.3",
74
+ ngImport: i0,
75
+ type: HyPalette,
76
+ providedIn: "root"
77
+ });
78
+ };
79
+ i0.ɵɵngDeclareClassMetadata({
80
+ minVersion: "12.0.0",
81
+ version: "22.2.3",
82
+ ngImport: i0,
83
+ type: HyPalette,
84
+ decorators: [{
85
+ type: Injectable,
86
+ args: [{ providedIn: "root" }]
87
+ }]
88
+ });
89
+ function assertName(name) {
90
+ if (!VALID_NAME.test(name)) throw new Error(`Hyalo: "${name}" is not a valid palette name. Use a-z, 0-9 and dashes.`);
91
+ }
92
+ export { HyPalette, defaultPaletteHref };
93
+
94
+ //# sourceMappingURL=hyalo-angular-theme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyalo-angular-theme.mjs","names":["injectIsBrowser"],"sources":["../../../projects/hyalo/theme/palette.ts"],"sourcesContent":["import { DOCUMENT, Injectable, inject, signal } from '@angular/core';\r\nimport { HY_CONFIG, ɵinjectIsBrowser as injectIsBrowser } from '@hyalo/angular/core';\r\n\r\n/** The palettes in `styles/palettes/`. Apps can add their own names too. */\r\nexport type HyPaletteName = 'aurora' | 'ember' | 'orchid' | 'ocean' | 'rose' | 'graphite';\r\n\r\nconst ATTR = 'data-hy-palette';\r\nconst VALID_NAME = /^[a-z0-9-]+$/;\r\n\r\n/** Where a palette stylesheet is served from when no `paletteHref` is configured. */\r\nexport function defaultPaletteHref(name: string): string {\r\n return `palette-${name}.css`;\r\n}\r\n\r\n/**\r\n * Switches palettes, loading each stylesheet the first time it is needed.\r\n *\r\n * Palettes are separate files in `styles/palettes/`, so they never add to\r\n * the initial CSS. Their rules only match while `data-hy-palette` is on\r\n * `<html>`, which means a loaded palette costs nothing until it is picked.\r\n * The attribute is set only after the file has loaded, so the page never\r\n * shows half a palette, and switching back to a palette is instant.\r\n *\r\n * To restore a saved palette before the app boots, an inline script can add\r\n * `<link rel=\"stylesheet\" data-hy-palette=\"ocean\" href=\"...\">` to the head\r\n * and the attribute to `<html>`. HyPalette picks up both.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class HyPalette {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly config = inject(HY_CONFIG);\r\n private readonly isBrowser = injectIsBrowser();\r\n private readonly loads = new Map<string, Promise<void>>();\r\n private readonly _current = signal(this.document.documentElement.getAttribute(ATTR));\r\n private readonly _selected = signal(this._current());\r\n\r\n /** The palette on screen, or null for the built-in one. */\r\n readonly current = this._current.asReadonly();\r\n\r\n /**\r\n * The palette last asked for. It changes straight away, while `current`\r\n * waits for the stylesheet, so a picker can show the choice immediately.\r\n */\r\n readonly selected = this._selected.asReadonly();\r\n\r\n /**\r\n * Loads a palette and applies it, or goes back to the built-in palette for\r\n * null. When several calls overlap, the last one wins. Rejects when the\r\n * stylesheet fails to load, and leaves the current palette in place. The\r\n * exception is a palette restored before boot whose file never loaded: the\r\n * page goes back to the built-in palette instead of claiming it.\r\n */\r\n async use(name: HyPaletteName | (string & {}) | null): Promise<void> {\r\n if (name !== null) assertName(name);\r\n this._selected.set(name);\r\n try {\r\n if (name !== null && this.isBrowser) await this.load(name);\r\n } catch (error) {\r\n if (this._current() === name) {\r\n // The palette the page claims to show never loaded, so drop the claim.\r\n this.document.documentElement.removeAttribute(ATTR);\r\n this._current.set(null);\r\n }\r\n if (this._selected() === name) this._selected.set(this._current());\r\n throw error;\r\n }\r\n if (this._selected() !== name) return;\r\n const root = this.document.documentElement;\r\n if (name === null) root.removeAttribute(ATTR);\r\n else root.setAttribute(ATTR, name);\r\n this._current.set(name);\r\n }\r\n\r\n /** Starts loading a palette without applying it, for example on hover. */\r\n preload(name: HyPaletteName | (string & {})): void {\r\n assertName(name);\r\n if (this.isBrowser) this.load(name).catch(() => undefined);\r\n }\r\n\r\n private load(name: string): Promise<void> {\r\n const cached = this.loads.get(name);\r\n if (cached) return cached;\r\n const head = this.document.head;\r\n const existing = head.querySelector<HTMLLinkElement>(`link[${ATTR}=\"${name}\"]`);\r\n // A link without a sheet may have failed before anyone listened, as one\r\n // added by a pre-paint script can, and would then never settle. Replace\r\n // it; if it was still loading, the new one comes from the cache.\r\n if (existing && !existing.sheet) existing.remove();\r\n const pending = existing?.sheet\r\n ? Promise.resolve()\r\n : new Promise<void>((resolve, reject) => {\r\n const link = this.document.createElement('link');\r\n link.addEventListener('load', () => resolve(), { once: true });\r\n link.addEventListener(\r\n 'error',\r\n () => {\r\n link.remove();\r\n this.loads.delete(name);\r\n reject(new Error(`Hyalo: palette \"${name}\" failed to load from ${link.href}`));\r\n },\r\n { once: true },\r\n );\r\n link.rel = 'stylesheet';\r\n link.href = (this.config.paletteHref ?? defaultPaletteHref)(name);\r\n link.setAttribute(ATTR, name);\r\n head.appendChild(link);\r\n });\r\n this.loads.set(name, pending);\r\n return pending;\r\n }\r\n}\r\n\r\n/** Names end up in a selector and a URL, so only simple ones are allowed. */\r\nfunction assertName(name: string): void {\r\n if (!VALID_NAME.test(name)) {\r\n throw new Error(`Hyalo: \"${name}\" is not a valid palette name. Use a-z, 0-9 and dashes.`);\r\n }\r\n}\r\n"],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, input } from "@angular/core";
3
+ var HyTimeline = class HyTimeline {
4
+ label = input("Timeline", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
5
+ static ɵfac = i0.ɵɵngDeclareFactory({
6
+ minVersion: "12.0.0",
7
+ version: "22.2.3",
8
+ ngImport: i0,
9
+ type: HyTimeline,
10
+ deps: [],
11
+ target: i0.ɵɵFactoryTarget.Component
12
+ });
13
+ static ɵcmp = i0.ɵɵngDeclareComponent({
14
+ minVersion: "17.1.0",
15
+ version: "22.2.3",
16
+ type: HyTimeline,
17
+ isStandalone: true,
18
+ selector: "hy-timeline",
19
+ inputs: { label: {
20
+ classPropertyName: "label",
21
+ publicName: "label",
22
+ isSignal: true,
23
+ isRequired: false,
24
+ transformFunction: null
25
+ } },
26
+ host: {
27
+ attributes: { "role": "list" },
28
+ properties: { "attr.aria-label": "label()" }
29
+ },
30
+ ngImport: i0,
31
+ template: "<ng-content />",
32
+ isInline: true,
33
+ styles: [":host{display:block}\n"],
34
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
35
+ });
36
+ };
37
+ i0.ɵɵngDeclareClassMetadata({
38
+ minVersion: "12.0.0",
39
+ version: "22.2.3",
40
+ ngImport: i0,
41
+ type: HyTimeline,
42
+ decorators: [{
43
+ type: Component,
44
+ args: [{
45
+ selector: "hy-timeline",
46
+ changeDetection: ChangeDetectionStrategy.OnPush,
47
+ host: {
48
+ role: "list",
49
+ "[attr.aria-label]": "label()"
50
+ },
51
+ template: "<ng-content />",
52
+ styles: [":host{display:block}\n"]
53
+ }]
54
+ }],
55
+ propDecorators: { label: [{
56
+ type: i0.Input,
57
+ args: [{
58
+ isSignal: true,
59
+ alias: "label",
60
+ required: false
61
+ }]
62
+ }] }
63
+ });
64
+ var HyTimelineItem = class HyTimelineItem {
65
+ heading = input.required(...ngDevMode ? [{ debugName: "heading" }] : /* istanbul ignore next */ []);
66
+ date = input("", ...ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []);
67
+ dateTime = input(null, ...ngDevMode ? [{ debugName: "dateTime" }] : /* istanbul ignore next */ []);
68
+ static ɵfac = i0.ɵɵngDeclareFactory({
69
+ minVersion: "12.0.0",
70
+ version: "22.2.3",
71
+ ngImport: i0,
72
+ type: HyTimelineItem,
73
+ deps: [],
74
+ target: i0.ɵɵFactoryTarget.Component
75
+ });
76
+ static ɵcmp = i0.ɵɵngDeclareComponent({
77
+ minVersion: "17.0.0",
78
+ version: "22.2.3",
79
+ type: HyTimelineItem,
80
+ isStandalone: true,
81
+ selector: "hy-timeline-item",
82
+ inputs: {
83
+ heading: {
84
+ classPropertyName: "heading",
85
+ publicName: "heading",
86
+ isSignal: true,
87
+ isRequired: true,
88
+ transformFunction: null
89
+ },
90
+ date: {
91
+ classPropertyName: "date",
92
+ publicName: "date",
93
+ isSignal: true,
94
+ isRequired: false,
95
+ transformFunction: null
96
+ },
97
+ dateTime: {
98
+ classPropertyName: "dateTime",
99
+ publicName: "dateTime",
100
+ isSignal: true,
101
+ isRequired: false,
102
+ transformFunction: null
103
+ }
104
+ },
105
+ host: { attributes: { "role": "listitem" } },
106
+ ngImport: i0,
107
+ template: "<span class=\"dot\" aria-hidden=\"true\"></span>\r\n@if (date()) {\r\n <time [attr.datetime]=\"dateTime()\">{{ date() }}</time>\r\n}\r\n<strong>{{ heading() }}</strong>\r\n<div><ng-content /></div>\r\n",
108
+ styles: [":host{display:block;position:relative;padding-block:0 var(--hy-space-8);padding-inline:var(--hy-space-8) 0;border-inline-start:1px solid var(--hy-line-strong);margin-inline-start:.5rem;color:var(--hy-ink-2)}:host(:last-child){border-color:transparent}.dot{position:absolute;inset-inline-start:-.35rem;inset-block-start:.4rem;inline-size:.65rem;block-size:.65rem;border-radius:50%;background:var(--hy-primary);box-shadow:0 0 0 4px var(--hy-bg)}time,strong{display:block}time{font-size:var(--hy-step--1);color:var(--hy-ink-3)}strong{color:var(--hy-ink);margin-block-end:var(--hy-space-2)}\n"],
109
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
110
+ });
111
+ };
112
+ i0.ɵɵngDeclareClassMetadata({
113
+ minVersion: "12.0.0",
114
+ version: "22.2.3",
115
+ ngImport: i0,
116
+ type: HyTimelineItem,
117
+ decorators: [{
118
+ type: Component,
119
+ args: [{
120
+ selector: "hy-timeline-item",
121
+ changeDetection: ChangeDetectionStrategy.OnPush,
122
+ host: { role: "listitem" },
123
+ template: "<span class=\"dot\" aria-hidden=\"true\"></span>\r\n@if (date()) {\r\n <time [attr.datetime]=\"dateTime()\">{{ date() }}</time>\r\n}\r\n<strong>{{ heading() }}</strong>\r\n<div><ng-content /></div>\r\n",
124
+ styles: [":host{display:block;position:relative;padding-block:0 var(--hy-space-8);padding-inline:var(--hy-space-8) 0;border-inline-start:1px solid var(--hy-line-strong);margin-inline-start:.5rem;color:var(--hy-ink-2)}:host(:last-child){border-color:transparent}.dot{position:absolute;inset-inline-start:-.35rem;inset-block-start:.4rem;inline-size:.65rem;block-size:.65rem;border-radius:50%;background:var(--hy-primary);box-shadow:0 0 0 4px var(--hy-bg)}time,strong{display:block}time{font-size:var(--hy-step--1);color:var(--hy-ink-3)}strong{color:var(--hy-ink);margin-block-end:var(--hy-space-2)}\n"]
125
+ }]
126
+ }],
127
+ propDecorators: {
128
+ heading: [{
129
+ type: i0.Input,
130
+ args: [{
131
+ isSignal: true,
132
+ alias: "heading",
133
+ required: true
134
+ }]
135
+ }],
136
+ date: [{
137
+ type: i0.Input,
138
+ args: [{
139
+ isSignal: true,
140
+ alias: "date",
141
+ required: false
142
+ }]
143
+ }],
144
+ dateTime: [{
145
+ type: i0.Input,
146
+ args: [{
147
+ isSignal: true,
148
+ alias: "dateTime",
149
+ required: false
150
+ }]
151
+ }]
152
+ }
153
+ });
154
+ const HY_TIMELINE = [HyTimeline, HyTimelineItem];
155
+ export { HY_TIMELINE, HyTimeline, HyTimelineItem };
156
+
157
+ //# sourceMappingURL=hyalo-angular-timeline.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyalo-angular-timeline.mjs","names":[],"sources":["../../../projects/hyalo/timeline/timeline.ts","../../../projects/hyalo/timeline/timeline.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n@Component({\r\n selector: 'hy-timeline',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: 'list', '[attr.aria-label]': 'label()' },\r\n template: '<ng-content />',\r\n styleUrl: './timeline.css',\r\n})\r\nexport class HyTimeline {\r\n readonly label = input('Timeline');\r\n}\r\n@Component({\r\n selector: 'hy-timeline-item',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: 'listitem' },\r\n templateUrl: './timeline.html',\r\n styleUrl: './timeline-item.css',\r\n})\r\nexport class HyTimelineItem {\r\n readonly heading = input.required<string>();\r\n readonly date = input('');\r\n readonly dateTime = input<string | null>(null);\r\n}\r\nexport const HY_TIMELINE = [HyTimeline, HyTimelineItem] as const;\r\n","<span class=\"dot\" aria-hidden=\"true\"></span>\r\n@if (date()) {\r\n <time [attr.datetime]=\"dateTime()\">{{ date() }}</time>\r\n}\r\n<strong>{{ heading() }}</strong>\r\n<div><ng-content /></div>\r\n"],"mappings":";;AAQA,IAAa,aAAb,MAAa,WAAU;CACZ,QAAQ,MAAM,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CADvB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,OAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,QAAA,OAAA;GAAA,YAAA,EAAA,mBAAA,UAAA;EAAA;EAAA,UAAA;EAAA,UAHX;EAAgB,UAAA;EAAA,QAAA,CAAA,wBAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAGf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAPtB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAa,iBACN,wBAAwB;GAAM,MACzC;IAAE,MAAM;IAAQ,qBAAqB;GAAS;GAAE,UAC5C;GAAgB,QAAA,CAAA,wBAAA;EAAA,CAAA;;;;;;;;;;;AAa5B,IAAa,iBAAb,MAAa,eAAc;CAChB,UAAU,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,OAAO,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAChB,WAAW,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAHnC,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAc,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAd,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAc,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,YAAA,EAAA,QAAA,WAAA,EAAA;EAAA,UAAA;EAAA,UClB3B;EAMA,QAAA,CAAA,8kBAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;ADYa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EAP1B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAkB,iBACX,wBAAwB;GAAM,MACzC,EAAE,MAAM,WAAU;GAAE,UAAA;GAAA,QAAA,CAAA,8kBAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAS5B,MAAa,cAAc,CAAC,YAAY,cAAc"}