@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,335 @@
1
+ import { HyLocale } from "@hyalo/angular/core";
2
+ import { NgTemplateOutlet } from "@angular/common";
3
+ import * as i0 from "@angular/core";
4
+ import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input, model } from "@angular/core";
5
+ var HyTable = class HyTable {
6
+ data = input.required(...ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []);
7
+ columns = input.required(...ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []);
8
+ rowKey = input.required(...ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []);
9
+ caption = input.required(...ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []);
10
+ locale = input(...ngDevMode ? [void 0, { debugName: "locale" }] : /* istanbul ignore next */ []);
11
+ globalLocale = inject(HyLocale);
12
+ effectiveLocale = computed(() => this.locale() ?? this.globalLocale.locale(), ...ngDevMode ? [{ debugName: "effectiveLocale" }] : /* istanbul ignore next */ []);
13
+ selectable = input(false, {
14
+ ...ngDevMode ? { debugName: "selectable" } : /* istanbul ignore next */ {},
15
+ transform: booleanAttribute
16
+ });
17
+ stickyHeader = input(false, {
18
+ ...ngDevMode ? { debugName: "stickyHeader" } : /* istanbul ignore next */ {},
19
+ transform: booleanAttribute
20
+ });
21
+ loading = input(false, {
22
+ ...ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {},
23
+ transform: booleanAttribute
24
+ });
25
+ emptyLabel = input("No results", ...ngDevMode ? [{ debugName: "emptyLabel" }] : /* istanbul ignore next */ []);
26
+ selectionLabel = input("Select all visible rows", ...ngDevMode ? [{ debugName: "selectionLabel" }] : /* istanbul ignore next */ []);
27
+ rowLabel = input(() => "Select row", ...ngDevMode ? [{ debugName: "rowLabel" }] : /* istanbul ignore next */ []);
28
+ selected = model([], ...ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []);
29
+ sort = model(null, ...ngDevMode ? [{ debugName: "sort" }] : /* istanbul ignore next */ []);
30
+ selectedSet = computed(() => new Set(this.selected()), ...ngDevMode ? [{ debugName: "selectedSet" }] : /* istanbul ignore next */ []);
31
+ sorted = computed(() => {
32
+ const rows = [...this.data()], sort = this.sort(), col = this.columns().find((c) => c.id === sort?.column);
33
+ if (!sort || !col?.sortable) return rows;
34
+ const collator = new Intl.Collator(this.effectiveLocale(), {
35
+ numeric: true,
36
+ sensitivity: "base"
37
+ });
38
+ return rows.sort((a, b) => {
39
+ const av = col.cell(a), bv = col.cell(b);
40
+ const result = col.compare ? col.compare(a, b) : av == null ? bv == null ? 0 : -1 : bv == null ? 1 : typeof av === "number" && typeof bv === "number" ? av - bv : collator.compare(String(av), String(bv));
41
+ return (Number.isFinite(result) ? result : 0) * (sort.direction === "asc" ? 1 : -1);
42
+ });
43
+ }, ...ngDevMode ? [{ debugName: "sorted" }] : /* istanbul ignore next */ []);
44
+ view = computed(() => this.sorted().map((row) => ({
45
+ row,
46
+ key: this.rowKey()(row),
47
+ label: this.rowLabel()(row),
48
+ selected: this.selectedSet().has(this.rowKey()(row)),
49
+ cells: this.columns().map((column) => ({
50
+ column,
51
+ value: column.cell(row)
52
+ }))
53
+ })), ...ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []);
54
+ allSelected = computed(() => this.view().length > 0 && this.view().every((row) => row.selected), ...ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []);
55
+ someSelected = computed(() => this.view().some((row) => row.selected) && !this.allSelected(), ...ngDevMode ? [{ debugName: "someSelected" }] : /* istanbul ignore next */ []);
56
+ toggleSort(column) {
57
+ const current = this.sort();
58
+ this.sort.set(current?.column === column.id ? current.direction === "asc" ? {
59
+ column: column.id,
60
+ direction: "desc"
61
+ } : null : {
62
+ column: column.id,
63
+ direction: "asc"
64
+ });
65
+ }
66
+ toggleRow(key) {
67
+ const selected = new Set(this.selected());
68
+ if (selected.has(key)) selected.delete(key);
69
+ else selected.add(key);
70
+ this.selected.set([...selected]);
71
+ }
72
+ toggleAll() {
73
+ const selected = new Set(this.selected()), all = this.allSelected();
74
+ for (const row of this.view()) if (all) selected.delete(row.key);
75
+ else selected.add(row.key);
76
+ this.selected.set([...selected]);
77
+ }
78
+ static ɵfac = i0.ɵɵngDeclareFactory({
79
+ minVersion: "12.0.0",
80
+ version: "22.2.3",
81
+ ngImport: i0,
82
+ type: HyTable,
83
+ deps: [],
84
+ target: i0.ɵɵFactoryTarget.Component
85
+ });
86
+ static ɵcmp = i0.ɵɵngDeclareComponent({
87
+ minVersion: "17.0.0",
88
+ version: "22.2.3",
89
+ type: HyTable,
90
+ isStandalone: true,
91
+ selector: "hy-table",
92
+ inputs: {
93
+ data: {
94
+ classPropertyName: "data",
95
+ publicName: "data",
96
+ isSignal: true,
97
+ isRequired: true,
98
+ transformFunction: null
99
+ },
100
+ columns: {
101
+ classPropertyName: "columns",
102
+ publicName: "columns",
103
+ isSignal: true,
104
+ isRequired: true,
105
+ transformFunction: null
106
+ },
107
+ rowKey: {
108
+ classPropertyName: "rowKey",
109
+ publicName: "rowKey",
110
+ isSignal: true,
111
+ isRequired: true,
112
+ transformFunction: null
113
+ },
114
+ caption: {
115
+ classPropertyName: "caption",
116
+ publicName: "caption",
117
+ isSignal: true,
118
+ isRequired: true,
119
+ transformFunction: null
120
+ },
121
+ locale: {
122
+ classPropertyName: "locale",
123
+ publicName: "locale",
124
+ isSignal: true,
125
+ isRequired: false,
126
+ transformFunction: null
127
+ },
128
+ selectable: {
129
+ classPropertyName: "selectable",
130
+ publicName: "selectable",
131
+ isSignal: true,
132
+ isRequired: false,
133
+ transformFunction: null
134
+ },
135
+ stickyHeader: {
136
+ classPropertyName: "stickyHeader",
137
+ publicName: "stickyHeader",
138
+ isSignal: true,
139
+ isRequired: false,
140
+ transformFunction: null
141
+ },
142
+ loading: {
143
+ classPropertyName: "loading",
144
+ publicName: "loading",
145
+ isSignal: true,
146
+ isRequired: false,
147
+ transformFunction: null
148
+ },
149
+ emptyLabel: {
150
+ classPropertyName: "emptyLabel",
151
+ publicName: "emptyLabel",
152
+ isSignal: true,
153
+ isRequired: false,
154
+ transformFunction: null
155
+ },
156
+ selectionLabel: {
157
+ classPropertyName: "selectionLabel",
158
+ publicName: "selectionLabel",
159
+ isSignal: true,
160
+ isRequired: false,
161
+ transformFunction: null
162
+ },
163
+ rowLabel: {
164
+ classPropertyName: "rowLabel",
165
+ publicName: "rowLabel",
166
+ isSignal: true,
167
+ isRequired: false,
168
+ transformFunction: null
169
+ },
170
+ selected: {
171
+ classPropertyName: "selected",
172
+ publicName: "selected",
173
+ isSignal: true,
174
+ isRequired: false,
175
+ transformFunction: null
176
+ },
177
+ sort: {
178
+ classPropertyName: "sort",
179
+ publicName: "sort",
180
+ isSignal: true,
181
+ isRequired: false,
182
+ transformFunction: null
183
+ }
184
+ },
185
+ outputs: {
186
+ selected: "selectedChange",
187
+ sort: "sortChange"
188
+ },
189
+ ngImport: i0,
190
+ template: "<div\r\n class=\"viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"caption()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [class.sticky]=\"stickyHeader()\"\r\n>\r\n <table>\r\n <caption>\r\n {{\r\n caption()\r\n }}\r\n </caption>\r\n <thead>\r\n <tr>\r\n @if (selectable()) {\r\n <th scope=\"col\" class=\"selection\">\r\n <label class=\"check\"\r\n ><input\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"selectionLabel()\"\r\n [checked]=\"allSelected()\"\r\n [indeterminate]=\"someSelected()\"\r\n [disabled]=\"!view().length\"\r\n (change)=\"toggleAll()\"\r\n /></label>\r\n </th>\r\n }\r\n @for (column of columns(); track column.id) {\r\n <th\r\n scope=\"col\"\r\n [style.text-align]=\"column.align ?? 'start'\"\r\n [attr.aria-sort]=\"\r\n column.sortable\r\n ? sort()?.column === column.id\r\n ? sort()?.direction === 'asc'\r\n ? 'ascending'\r\n : 'descending'\r\n : 'none'\r\n : null\r\n \"\r\n >\r\n @if (column.sortable) {\r\n <button type=\"button\" (click)=\"toggleSort(column)\">\r\n {{ column.header\r\n }}<span aria-hidden=\"true\">{{\r\n sort()?.column === column.id ? (sort()?.direction === 'asc' ? '↑' : '↓') : '↑↓'\r\n }}</span>\r\n </button>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of view(); track item.key) {\r\n <tr [class.selected]=\"item.selected\">\r\n @if (selectable()) {\r\n <td class=\"selection\">\r\n <label class=\"check\"\r\n ><input\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"item.label\"\r\n [checked]=\"item.selected\"\r\n (change)=\"toggleRow(item.key)\"\r\n /></label>\r\n </td>\r\n }\r\n @for (cell of item.cells; track cell.column.id) {\r\n <td [style.text-align]=\"cell.column.align ?? 'start'\">\r\n @if (cell.column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"cell.column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.row, value: cell.value }\"\r\n />\r\n } @else {\r\n {{ cell.value }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\r\n {{ loading() ? 'Loading' : emptyLabel() }}\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n",
191
+ styles: [":host{display:block;min-inline-size:0}.viewport{overflow:auto;max-block-size:var(--hy-table-max-height, 32rem);border:1px solid var(--hy-line);border-radius:var(--hy-radius-m);background:var(--hy-surface-1);color:var(--hy-ink)}table{inline-size:100%;border-collapse:separate;border-spacing:0;text-align:start;font-size:.875rem}caption{text-align:start;font-weight:600;padding:1rem}th{font-weight:600;background:var(--hy-surface-2);white-space:nowrap}th,td{padding:.75rem 1rem;border-block-end:1px solid var(--hy-line)}.sticky th{position:sticky;inset-block-start:0;z-index:1}th button{display:inline-flex;align-items:center;justify-content:inherit;gap:.5rem;min-block-size:44px;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}.selection{inline-size:44px;padding:.25rem}.check{display:grid;place-items:center;inline-size:44px;block-size:44px;cursor:pointer}.check input{inline-size:18px;block-size:18px;margin:0;accent-color:var(--hy-primary);cursor:pointer}tr.selected{background:var(--hy-primary-wash)}tbody tr:last-child td{border-block-end:0}.viewport:focus-visible{outline:2px solid var(--hy-primary);outline-offset:3px}:is(button,a,input):focus-visible{outline:2px solid var(--hy-primary);outline-offset:3px}\n"],
192
+ dependencies: [{
193
+ kind: "directive",
194
+ type: NgTemplateOutlet,
195
+ selector: "[ngTemplateOutlet]",
196
+ inputs: [
197
+ "ngTemplateOutletContext",
198
+ "ngTemplateOutlet",
199
+ "ngTemplateOutletInjector"
200
+ ]
201
+ }],
202
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
203
+ });
204
+ };
205
+ i0.ɵɵngDeclareClassMetadata({
206
+ minVersion: "12.0.0",
207
+ version: "22.2.3",
208
+ ngImport: i0,
209
+ type: HyTable,
210
+ decorators: [{
211
+ type: Component,
212
+ args: [{
213
+ selector: "hy-table",
214
+ imports: [NgTemplateOutlet],
215
+ changeDetection: ChangeDetectionStrategy.OnPush,
216
+ template: "<div\r\n class=\"viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"caption()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [class.sticky]=\"stickyHeader()\"\r\n>\r\n <table>\r\n <caption>\r\n {{\r\n caption()\r\n }}\r\n </caption>\r\n <thead>\r\n <tr>\r\n @if (selectable()) {\r\n <th scope=\"col\" class=\"selection\">\r\n <label class=\"check\"\r\n ><input\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"selectionLabel()\"\r\n [checked]=\"allSelected()\"\r\n [indeterminate]=\"someSelected()\"\r\n [disabled]=\"!view().length\"\r\n (change)=\"toggleAll()\"\r\n /></label>\r\n </th>\r\n }\r\n @for (column of columns(); track column.id) {\r\n <th\r\n scope=\"col\"\r\n [style.text-align]=\"column.align ?? 'start'\"\r\n [attr.aria-sort]=\"\r\n column.sortable\r\n ? sort()?.column === column.id\r\n ? sort()?.direction === 'asc'\r\n ? 'ascending'\r\n : 'descending'\r\n : 'none'\r\n : null\r\n \"\r\n >\r\n @if (column.sortable) {\r\n <button type=\"button\" (click)=\"toggleSort(column)\">\r\n {{ column.header\r\n }}<span aria-hidden=\"true\">{{\r\n sort()?.column === column.id ? (sort()?.direction === 'asc' ? '↑' : '↓') : '↑↓'\r\n }}</span>\r\n </button>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of view(); track item.key) {\r\n <tr [class.selected]=\"item.selected\">\r\n @if (selectable()) {\r\n <td class=\"selection\">\r\n <label class=\"check\"\r\n ><input\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"item.label\"\r\n [checked]=\"item.selected\"\r\n (change)=\"toggleRow(item.key)\"\r\n /></label>\r\n </td>\r\n }\r\n @for (cell of item.cells; track cell.column.id) {\r\n <td [style.text-align]=\"cell.column.align ?? 'start'\">\r\n @if (cell.column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"cell.column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.row, value: cell.value }\"\r\n />\r\n } @else {\r\n {{ cell.value }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\r\n {{ loading() ? 'Loading' : emptyLabel() }}\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n",
217
+ styles: [":host{display:block;min-inline-size:0}.viewport{overflow:auto;max-block-size:var(--hy-table-max-height, 32rem);border:1px solid var(--hy-line);border-radius:var(--hy-radius-m);background:var(--hy-surface-1);color:var(--hy-ink)}table{inline-size:100%;border-collapse:separate;border-spacing:0;text-align:start;font-size:.875rem}caption{text-align:start;font-weight:600;padding:1rem}th{font-weight:600;background:var(--hy-surface-2);white-space:nowrap}th,td{padding:.75rem 1rem;border-block-end:1px solid var(--hy-line)}.sticky th{position:sticky;inset-block-start:0;z-index:1}th button{display:inline-flex;align-items:center;justify-content:inherit;gap:.5rem;min-block-size:44px;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}.selection{inline-size:44px;padding:.25rem}.check{display:grid;place-items:center;inline-size:44px;block-size:44px;cursor:pointer}.check input{inline-size:18px;block-size:18px;margin:0;accent-color:var(--hy-primary);cursor:pointer}tr.selected{background:var(--hy-primary-wash)}tbody tr:last-child td{border-block-end:0}.viewport:focus-visible{outline:2px solid var(--hy-primary);outline-offset:3px}:is(button,a,input):focus-visible{outline:2px solid var(--hy-primary);outline-offset:3px}\n"]
218
+ }]
219
+ }],
220
+ propDecorators: {
221
+ data: [{
222
+ type: i0.Input,
223
+ args: [{
224
+ isSignal: true,
225
+ alias: "data",
226
+ required: true
227
+ }]
228
+ }],
229
+ columns: [{
230
+ type: i0.Input,
231
+ args: [{
232
+ isSignal: true,
233
+ alias: "columns",
234
+ required: true
235
+ }]
236
+ }],
237
+ rowKey: [{
238
+ type: i0.Input,
239
+ args: [{
240
+ isSignal: true,
241
+ alias: "rowKey",
242
+ required: true
243
+ }]
244
+ }],
245
+ caption: [{
246
+ type: i0.Input,
247
+ args: [{
248
+ isSignal: true,
249
+ alias: "caption",
250
+ required: true
251
+ }]
252
+ }],
253
+ locale: [{
254
+ type: i0.Input,
255
+ args: [{
256
+ isSignal: true,
257
+ alias: "locale",
258
+ required: false
259
+ }]
260
+ }],
261
+ selectable: [{
262
+ type: i0.Input,
263
+ args: [{
264
+ isSignal: true,
265
+ alias: "selectable",
266
+ required: false
267
+ }]
268
+ }],
269
+ stickyHeader: [{
270
+ type: i0.Input,
271
+ args: [{
272
+ isSignal: true,
273
+ alias: "stickyHeader",
274
+ required: false
275
+ }]
276
+ }],
277
+ loading: [{
278
+ type: i0.Input,
279
+ args: [{
280
+ isSignal: true,
281
+ alias: "loading",
282
+ required: false
283
+ }]
284
+ }],
285
+ emptyLabel: [{
286
+ type: i0.Input,
287
+ args: [{
288
+ isSignal: true,
289
+ alias: "emptyLabel",
290
+ required: false
291
+ }]
292
+ }],
293
+ selectionLabel: [{
294
+ type: i0.Input,
295
+ args: [{
296
+ isSignal: true,
297
+ alias: "selectionLabel",
298
+ required: false
299
+ }]
300
+ }],
301
+ rowLabel: [{
302
+ type: i0.Input,
303
+ args: [{
304
+ isSignal: true,
305
+ alias: "rowLabel",
306
+ required: false
307
+ }]
308
+ }],
309
+ selected: [{
310
+ type: i0.Input,
311
+ args: [{
312
+ isSignal: true,
313
+ alias: "selected",
314
+ required: false
315
+ }]
316
+ }, {
317
+ type: i0.Output,
318
+ args: ["selectedChange"]
319
+ }],
320
+ sort: [{
321
+ type: i0.Input,
322
+ args: [{
323
+ isSignal: true,
324
+ alias: "sort",
325
+ required: false
326
+ }]
327
+ }, {
328
+ type: i0.Output,
329
+ args: ["sortChange"]
330
+ }]
331
+ }
332
+ });
333
+ export { HyTable };
334
+
335
+ //# sourceMappingURL=hyalo-angular-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyalo-angular-table.mjs","names":[],"sources":["../../../projects/hyalo/table/table.ts","../../../projects/hyalo/table/table.html"],"sourcesContent":["import { HyLocale } from '@hyalo/angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n TemplateRef,\r\n booleanAttribute,\r\n computed,\r\n input,\r\n inject,\r\n model,\r\n} from '@angular/core';\r\nexport type HyRowKey = string | number;\r\nexport interface HyTableCellContext<T> {\r\n readonly $implicit: T;\r\n readonly value: string | number | null;\r\n}\r\nexport interface HyTableColumn<T> {\r\n readonly id: string;\r\n readonly header: string;\r\n readonly cell: (row: T) => string | number | null;\r\n readonly sortable?: boolean;\r\n readonly compare?: (a: T, b: T) => number;\r\n readonly align?: 'start' | 'end' | 'center';\r\n readonly template?: TemplateRef<HyTableCellContext<T>>;\r\n}\r\nexport interface HyTableSort {\r\n readonly column: string;\r\n readonly direction: 'asc' | 'desc';\r\n}\r\n@Component({\r\n selector: 'hy-table',\r\n imports: [NgTemplateOutlet],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './table.html',\r\n styleUrl: './table.css',\r\n})\r\nexport class HyTable<T> {\r\n readonly data = input.required<readonly T[]>();\r\n readonly columns = input.required<readonly HyTableColumn<T>[]>();\r\n readonly rowKey = input.required<(row: T) => HyRowKey>();\r\n readonly caption = input.required<string>();\r\n readonly locale = input<string>();\r\n private readonly globalLocale = inject(HyLocale);\r\n private readonly effectiveLocale = computed(() => this.locale() ?? this.globalLocale.locale());\r\n readonly selectable = input(false, { transform: booleanAttribute });\r\n readonly stickyHeader = input(false, { transform: booleanAttribute });\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n readonly emptyLabel = input('No results');\r\n readonly selectionLabel = input('Select all visible rows');\r\n readonly rowLabel = input<(row: T) => string>(() => 'Select row');\r\n readonly selected = model<readonly HyRowKey[]>([]);\r\n readonly sort = model<HyTableSort | null>(null);\r\n private readonly selectedSet = computed(() => new Set(this.selected()));\r\n private readonly sorted = computed(() => {\r\n const rows = [...this.data()],\r\n sort = this.sort(),\r\n col = this.columns().find((c) => c.id === sort?.column);\r\n if (!sort || !col?.sortable) return rows;\r\n const collator = new Intl.Collator(this.effectiveLocale(), {\r\n numeric: true,\r\n sensitivity: 'base',\r\n });\r\n return rows.sort((a, b) => {\r\n const av = col.cell(a),\r\n bv = col.cell(b);\r\n const result = col.compare\r\n ? col.compare(a, b)\r\n : av == null\r\n ? bv == null\r\n ? 0\r\n : -1\r\n : bv == null\r\n ? 1\r\n : typeof av === 'number' && typeof bv === 'number'\r\n ? av - bv\r\n : collator.compare(String(av), String(bv));\r\n return (Number.isFinite(result) ? result : 0) * (sort.direction === 'asc' ? 1 : -1);\r\n });\r\n });\r\n readonly view = computed(() =>\r\n this.sorted().map((row) => ({\r\n row,\r\n key: this.rowKey()(row),\r\n label: this.rowLabel()(row),\r\n selected: this.selectedSet().has(this.rowKey()(row)),\r\n cells: this.columns().map((column) => ({ column, value: column.cell(row) })),\r\n })),\r\n );\r\n readonly allSelected = computed(\r\n () => this.view().length > 0 && this.view().every((row) => row.selected),\r\n );\r\n readonly someSelected = computed(\r\n () => this.view().some((row) => row.selected) && !this.allSelected(),\r\n );\r\n toggleSort(column: HyTableColumn<T>): void {\r\n const current = this.sort();\r\n this.sort.set(\r\n current?.column === column.id\r\n ? current.direction === 'asc'\r\n ? { column: column.id, direction: 'desc' }\r\n : null\r\n : { column: column.id, direction: 'asc' },\r\n );\r\n }\r\n toggleRow(key: HyRowKey): void {\r\n const selected = new Set(this.selected());\r\n if (selected.has(key)) selected.delete(key);\r\n else selected.add(key);\r\n this.selected.set([...selected]);\r\n }\r\n toggleAll(): void {\r\n const selected = new Set(this.selected()),\r\n all = this.allSelected();\r\n for (const row of this.view()) {\r\n if (all) selected.delete(row.key);\r\n else selected.add(row.key);\r\n }\r\n this.selected.set([...selected]);\r\n }\r\n}\r\n","<div\r\n class=\"viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"caption()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [class.sticky]=\"stickyHeader()\"\r\n>\r\n <table>\r\n <caption>\r\n {{\r\n caption()\r\n }}\r\n </caption>\r\n <thead>\r\n <tr>\r\n @if (selectable()) {\r\n <th scope=\"col\" class=\"selection\">\r\n <label class=\"check\"\r\n ><input\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"selectionLabel()\"\r\n [checked]=\"allSelected()\"\r\n [indeterminate]=\"someSelected()\"\r\n [disabled]=\"!view().length\"\r\n (change)=\"toggleAll()\"\r\n /></label>\r\n </th>\r\n }\r\n @for (column of columns(); track column.id) {\r\n <th\r\n scope=\"col\"\r\n [style.text-align]=\"column.align ?? 'start'\"\r\n [attr.aria-sort]=\"\r\n column.sortable\r\n ? sort()?.column === column.id\r\n ? sort()?.direction === 'asc'\r\n ? 'ascending'\r\n : 'descending'\r\n : 'none'\r\n : null\r\n \"\r\n >\r\n @if (column.sortable) {\r\n <button type=\"button\" (click)=\"toggleSort(column)\">\r\n {{ column.header\r\n }}<span aria-hidden=\"true\">{{\r\n sort()?.column === column.id ? (sort()?.direction === 'asc' ? '↑' : '↓') : '↑↓'\r\n }}</span>\r\n </button>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of view(); track item.key) {\r\n <tr [class.selected]=\"item.selected\">\r\n @if (selectable()) {\r\n <td class=\"selection\">\r\n <label class=\"check\"\r\n ><input\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"item.label\"\r\n [checked]=\"item.selected\"\r\n (change)=\"toggleRow(item.key)\"\r\n /></label>\r\n </td>\r\n }\r\n @for (cell of item.cells; track cell.column.id) {\r\n <td [style.text-align]=\"cell.column.align ?? 'start'\">\r\n @if (cell.column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"cell.column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.row, value: cell.value }\"\r\n />\r\n } @else {\r\n {{ cell.value }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\r\n {{ loading() ? 'Loading' : emptyLabel() }}\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n"],"mappings":"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"}