@star-ng/ui 0.0.0-stage → 0.1.0

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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -2
  3. package/fesm2022/star-ng-ui-accordion.mjs +376 -0
  4. package/fesm2022/star-ng-ui-accordion.mjs.map +1 -0
  5. package/fesm2022/star-ng-ui-autocomplete.mjs +782 -0
  6. package/fesm2022/star-ng-ui-autocomplete.mjs.map +1 -0
  7. package/fesm2022/star-ng-ui-avatar.mjs +154 -0
  8. package/fesm2022/star-ng-ui-avatar.mjs.map +1 -0
  9. package/fesm2022/star-ng-ui-badge.mjs +153 -0
  10. package/fesm2022/star-ng-ui-badge.mjs.map +1 -0
  11. package/fesm2022/star-ng-ui-breadcrumb.mjs +199 -0
  12. package/fesm2022/star-ng-ui-breadcrumb.mjs.map +1 -0
  13. package/fesm2022/star-ng-ui-button.mjs +282 -0
  14. package/fesm2022/star-ng-ui-button.mjs.map +1 -0
  15. package/fesm2022/star-ng-ui-card.mjs +112 -0
  16. package/fesm2022/star-ng-ui-card.mjs.map +1 -0
  17. package/fesm2022/star-ng-ui-chart.mjs +1904 -0
  18. package/fesm2022/star-ng-ui-chart.mjs.map +1 -0
  19. package/fesm2022/star-ng-ui-checkbox.mjs +345 -0
  20. package/fesm2022/star-ng-ui-checkbox.mjs.map +1 -0
  21. package/fesm2022/star-ng-ui-core.mjs +392 -0
  22. package/fesm2022/star-ng-ui-core.mjs.map +1 -0
  23. package/fesm2022/star-ng-ui-data-display.mjs +1556 -0
  24. package/fesm2022/star-ng-ui-data-display.mjs.map +1 -0
  25. package/fesm2022/star-ng-ui-date-picker.mjs +2786 -0
  26. package/fesm2022/star-ng-ui-date-picker.mjs.map +1 -0
  27. package/fesm2022/star-ng-ui-dialog.mjs +948 -0
  28. package/fesm2022/star-ng-ui-dialog.mjs.map +1 -0
  29. package/fesm2022/star-ng-ui-drawer.mjs +158 -0
  30. package/fesm2022/star-ng-ui-drawer.mjs.map +1 -0
  31. package/fesm2022/star-ng-ui-editor.mjs +416 -0
  32. package/fesm2022/star-ng-ui-editor.mjs.map +1 -0
  33. package/fesm2022/star-ng-ui-field.mjs +378 -0
  34. package/fesm2022/star-ng-ui-field.mjs.map +1 -0
  35. package/fesm2022/star-ng-ui-file-upload.mjs +762 -0
  36. package/fesm2022/star-ng-ui-file-upload.mjs.map +1 -0
  37. package/fesm2022/star-ng-ui-i18n-de.mjs +179 -0
  38. package/fesm2022/star-ng-ui-i18n-de.mjs.map +1 -0
  39. package/fesm2022/star-ng-ui-i18n-es.mjs +179 -0
  40. package/fesm2022/star-ng-ui-i18n-es.mjs.map +1 -0
  41. package/fesm2022/star-ng-ui-input-group.mjs +188 -0
  42. package/fesm2022/star-ng-ui-input-group.mjs.map +1 -0
  43. package/fesm2022/star-ng-ui-input-mask.mjs +434 -0
  44. package/fesm2022/star-ng-ui-input-mask.mjs.map +1 -0
  45. package/fesm2022/star-ng-ui-input-number.mjs +691 -0
  46. package/fesm2022/star-ng-ui-input-number.mjs.map +1 -0
  47. package/fesm2022/star-ng-ui-input-otp.mjs +343 -0
  48. package/fesm2022/star-ng-ui-input-otp.mjs.map +1 -0
  49. package/fesm2022/star-ng-ui-input-tags.mjs +616 -0
  50. package/fesm2022/star-ng-ui-input-tags.mjs.map +1 -0
  51. package/fesm2022/star-ng-ui-knob.mjs +514 -0
  52. package/fesm2022/star-ng-ui-knob.mjs.map +1 -0
  53. package/fesm2022/star-ng-ui-layout.mjs +608 -0
  54. package/fesm2022/star-ng-ui-layout.mjs.map +1 -0
  55. package/fesm2022/star-ng-ui-listbox.mjs +978 -0
  56. package/fesm2022/star-ng-ui-listbox.mjs.map +1 -0
  57. package/fesm2022/star-ng-ui-media.mjs +833 -0
  58. package/fesm2022/star-ng-ui-media.mjs.map +1 -0
  59. package/fesm2022/star-ng-ui-menu.mjs +1840 -0
  60. package/fesm2022/star-ng-ui-menu.mjs.map +1 -0
  61. package/fesm2022/star-ng-ui-message.mjs +191 -0
  62. package/fesm2022/star-ng-ui-message.mjs.map +1 -0
  63. package/fesm2022/star-ng-ui-paginator.mjs +387 -0
  64. package/fesm2022/star-ng-ui-paginator.mjs.map +1 -0
  65. package/fesm2022/star-ng-ui-panel.mjs +324 -0
  66. package/fesm2022/star-ng-ui-panel.mjs.map +1 -0
  67. package/fesm2022/star-ng-ui-password.mjs +517 -0
  68. package/fesm2022/star-ng-ui-password.mjs.map +1 -0
  69. package/fesm2022/star-ng-ui-popover.mjs +241 -0
  70. package/fesm2022/star-ng-ui-popover.mjs.map +1 -0
  71. package/fesm2022/star-ng-ui-progress-bar.mjs +183 -0
  72. package/fesm2022/star-ng-ui-progress-bar.mjs.map +1 -0
  73. package/fesm2022/star-ng-ui-radio.mjs +411 -0
  74. package/fesm2022/star-ng-ui-radio.mjs.map +1 -0
  75. package/fesm2022/star-ng-ui-rating.mjs +211 -0
  76. package/fesm2022/star-ng-ui-rating.mjs.map +1 -0
  77. package/fesm2022/star-ng-ui-select-button.mjs +613 -0
  78. package/fesm2022/star-ng-ui-select-button.mjs.map +1 -0
  79. package/fesm2022/star-ng-ui-select.mjs +2523 -0
  80. package/fesm2022/star-ng-ui-select.mjs.map +1 -0
  81. package/fesm2022/star-ng-ui-skeleton.mjs +160 -0
  82. package/fesm2022/star-ng-ui-skeleton.mjs.map +1 -0
  83. package/fesm2022/star-ng-ui-slider.mjs +552 -0
  84. package/fesm2022/star-ng-ui-slider.mjs.map +1 -0
  85. package/fesm2022/star-ng-ui-spinner.mjs +148 -0
  86. package/fesm2022/star-ng-ui-spinner.mjs.map +1 -0
  87. package/fesm2022/star-ng-ui-stepper.mjs +360 -0
  88. package/fesm2022/star-ng-ui-stepper.mjs.map +1 -0
  89. package/fesm2022/star-ng-ui-table.mjs +3477 -0
  90. package/fesm2022/star-ng-ui-table.mjs.map +1 -0
  91. package/fesm2022/star-ng-ui-tabs.mjs +464 -0
  92. package/fesm2022/star-ng-ui-tabs.mjs.map +1 -0
  93. package/fesm2022/star-ng-ui-tag.mjs +129 -0
  94. package/fesm2022/star-ng-ui-tag.mjs.map +1 -0
  95. package/fesm2022/star-ng-ui-theme-switch.mjs +105 -0
  96. package/fesm2022/star-ng-ui-theme-switch.mjs.map +1 -0
  97. package/fesm2022/star-ng-ui-theme.mjs +98 -0
  98. package/fesm2022/star-ng-ui-theme.mjs.map +1 -0
  99. package/fesm2022/star-ng-ui-toast.mjs +298 -0
  100. package/fesm2022/star-ng-ui-toast.mjs.map +1 -0
  101. package/fesm2022/star-ng-ui-toggle-switch.mjs +316 -0
  102. package/fesm2022/star-ng-ui-toggle-switch.mjs.map +1 -0
  103. package/fesm2022/star-ng-ui-tooltip.mjs +297 -0
  104. package/fesm2022/star-ng-ui-tooltip.mjs.map +1 -0
  105. package/fesm2022/star-ng-ui-transloco.mjs +40 -0
  106. package/fesm2022/star-ng-ui-transloco.mjs.map +1 -0
  107. package/fesm2022/star-ng-ui-tree.mjs +1446 -0
  108. package/fesm2022/star-ng-ui-tree.mjs.map +1 -0
  109. package/fesm2022/star-ng-ui-utility.mjs +2134 -0
  110. package/fesm2022/star-ng-ui-utility.mjs.map +1 -0
  111. package/fesm2022/star-ng-ui.mjs +51 -0
  112. package/package.json +281 -3
  113. package/styles/_base.scss +70 -0
  114. package/styles/_shared.scss +2 -0
  115. package/styles/_tokens.scss +190 -0
  116. package/styles/controls/_accordion.scss +75 -0
  117. package/styles/controls/_autocomplete.scss +44 -0
  118. package/styles/controls/_avatar.scss +39 -0
  119. package/styles/controls/_breadcrumb.scss +45 -0
  120. package/styles/controls/_button.scss +137 -0
  121. package/styles/controls/_card.scss +38 -0
  122. package/styles/controls/_chart.scss +214 -0
  123. package/styles/controls/_chip.scss +51 -0
  124. package/styles/controls/_choice.scss +153 -0
  125. package/styles/controls/_data-display.scss +118 -0
  126. package/styles/controls/_date-picker.scss +300 -0
  127. package/styles/controls/_dialog.scss +123 -0
  128. package/styles/controls/_drawer.scss +118 -0
  129. package/styles/controls/_editor.scss +74 -0
  130. package/styles/controls/_field.scss +92 -0
  131. package/styles/controls/_file-upload.scss +136 -0
  132. package/styles/controls/_input-group.scss +104 -0
  133. package/styles/controls/_input-mask.scss +46 -0
  134. package/styles/controls/_input-number.scss +125 -0
  135. package/styles/controls/_knob.scss +76 -0
  136. package/styles/controls/_layout.scss +182 -0
  137. package/styles/controls/_listbox.scss +38 -0
  138. package/styles/controls/_media.scss +222 -0
  139. package/styles/controls/_menu.scss +254 -0
  140. package/styles/controls/_message.scss +48 -0
  141. package/styles/controls/_org-chart.scss +128 -0
  142. package/styles/controls/_paginator.scss +59 -0
  143. package/styles/controls/_panel.scss +83 -0
  144. package/styles/controls/_popover.scss +40 -0
  145. package/styles/controls/_progress-bar.scss +74 -0
  146. package/styles/controls/_select-button.scss +61 -0
  147. package/styles/controls/_select.scss +216 -0
  148. package/styles/controls/_skeleton.scss +43 -0
  149. package/styles/controls/_slider.scss +163 -0
  150. package/styles/controls/_spinner.scss +34 -0
  151. package/styles/controls/_stepper.scss +109 -0
  152. package/styles/controls/_table.scss +523 -0
  153. package/styles/controls/_tabs.scss +93 -0
  154. package/styles/controls/_tag.scss +84 -0
  155. package/styles/controls/_toast.scss +141 -0
  156. package/styles/controls/_tooltip.scss +14 -0
  157. package/styles/controls/_tree.scss +113 -0
  158. package/styles/controls/_utility.scss +654 -0
  159. package/styles/star-ng.css +5803 -0
  160. package/styles/star-ng.min.css +1 -0
  161. package/styles/star-ng.scss +50 -0
  162. package/theme/star-theme-first-paint.js +1 -0
  163. package/types/star-ng-ui-accordion.d.ts +82 -0
  164. package/types/star-ng-ui-autocomplete.d.ts +171 -0
  165. package/types/star-ng-ui-avatar.d.ts +43 -0
  166. package/types/star-ng-ui-badge.d.ts +46 -0
  167. package/types/star-ng-ui-breadcrumb.d.ts +39 -0
  168. package/types/star-ng-ui-button.d.ts +79 -0
  169. package/types/star-ng-ui-card.d.ts +29 -0
  170. package/types/star-ng-ui-chart.d.ts +337 -0
  171. package/types/star-ng-ui-checkbox.d.ts +92 -0
  172. package/types/star-ng-ui-core.d.ts +310 -0
  173. package/types/star-ng-ui-data-display.d.ts +339 -0
  174. package/types/star-ng-ui-date-picker.d.ts +701 -0
  175. package/types/star-ng-ui-dialog.d.ts +254 -0
  176. package/types/star-ng-ui-drawer.d.ts +29 -0
  177. package/types/star-ng-ui-editor.d.ts +96 -0
  178. package/types/star-ng-ui-field.d.ts +146 -0
  179. package/types/star-ng-ui-file-upload.d.ts +192 -0
  180. package/types/star-ng-ui-i18n-de.d.ts +7 -0
  181. package/types/star-ng-ui-i18n-es.d.ts +7 -0
  182. package/types/star-ng-ui-input-group.d.ts +58 -0
  183. package/types/star-ng-ui-input-mask.d.ts +126 -0
  184. package/types/star-ng-ui-input-number.d.ts +193 -0
  185. package/types/star-ng-ui-input-otp.d.ts +86 -0
  186. package/types/star-ng-ui-input-tags.d.ts +159 -0
  187. package/types/star-ng-ui-knob.d.ts +121 -0
  188. package/types/star-ng-ui-layout.d.ts +154 -0
  189. package/types/star-ng-ui-listbox.d.ts +197 -0
  190. package/types/star-ng-ui-media.d.ts +161 -0
  191. package/types/star-ng-ui-menu.d.ts +332 -0
  192. package/types/star-ng-ui-message.d.ts +52 -0
  193. package/types/star-ng-ui-paginator.d.ts +85 -0
  194. package/types/star-ng-ui-panel.d.ts +65 -0
  195. package/types/star-ng-ui-password.d.ts +129 -0
  196. package/types/star-ng-ui-popover.d.ts +57 -0
  197. package/types/star-ng-ui-progress-bar.d.ts +49 -0
  198. package/types/star-ng-ui-radio.d.ts +116 -0
  199. package/types/star-ng-ui-rating.d.ts +52 -0
  200. package/types/star-ng-ui-select-button.d.ts +169 -0
  201. package/types/star-ng-ui-select.d.ts +540 -0
  202. package/types/star-ng-ui-skeleton.d.ts +47 -0
  203. package/types/star-ng-ui-slider.d.ts +145 -0
  204. package/types/star-ng-ui-spinner.d.ts +29 -0
  205. package/types/star-ng-ui-stepper.d.ts +89 -0
  206. package/types/star-ng-ui-table.d.ts +829 -0
  207. package/types/star-ng-ui-tabs.d.ts +109 -0
  208. package/types/star-ng-ui-tag.d.ts +35 -0
  209. package/types/star-ng-ui-theme-switch.d.ts +36 -0
  210. package/types/star-ng-ui-theme.d.ts +95 -0
  211. package/types/star-ng-ui-toast.d.ts +84 -0
  212. package/types/star-ng-ui-toggle-switch.d.ts +81 -0
  213. package/types/star-ng-ui-tooltip.d.ts +66 -0
  214. package/types/star-ng-ui-transloco.d.ts +14 -0
  215. package/types/star-ng-ui-tree.d.ts +310 -0
  216. package/types/star-ng-ui-utility.d.ts +533 -0
  217. package/types/star-ng-ui.d.ts +51 -0
@@ -0,0 +1,188 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, input } from "@angular/core";
3
+ var StarIconField = class StarIconField {
4
+ icon = input.required(...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
5
+ iconPosition = input("start", ...ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []);
6
+ static ɵfac = i0.ɵɵngDeclareFactory({
7
+ minVersion: "12.0.0",
8
+ version: "22.2.6",
9
+ ngImport: i0,
10
+ type: StarIconField,
11
+ deps: [],
12
+ target: i0.ɵɵFactoryTarget.Component
13
+ });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({
15
+ minVersion: "17.1.0",
16
+ version: "22.2.6",
17
+ type: StarIconField,
18
+ isStandalone: true,
19
+ selector: "star-icon-field",
20
+ inputs: {
21
+ icon: {
22
+ classPropertyName: "icon",
23
+ publicName: "icon",
24
+ isSignal: true,
25
+ isRequired: true,
26
+ transformFunction: null
27
+ },
28
+ iconPosition: {
29
+ classPropertyName: "iconPosition",
30
+ publicName: "iconPosition",
31
+ isSignal: true,
32
+ isRequired: false,
33
+ transformFunction: null
34
+ }
35
+ },
36
+ host: {
37
+ properties: { "class.star-icon-field--end": "iconPosition() === 'end'" },
38
+ classAttribute: "star-icon-field"
39
+ },
40
+ ngImport: i0,
41
+ template: `
42
+ <i [class]="icon() + ' star-icon-field__icon'" aria-hidden="true"></i>
43
+ <ng-content />
44
+ `,
45
+ isInline: true,
46
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
47
+ });
48
+ };
49
+ i0.ɵɵngDeclareClassMetadata({
50
+ minVersion: "12.0.0",
51
+ version: "22.2.6",
52
+ ngImport: i0,
53
+ type: StarIconField,
54
+ decorators: [{
55
+ type: Component,
56
+ args: [{
57
+ selector: "star-icon-field",
58
+ changeDetection: ChangeDetectionStrategy.OnPush,
59
+ host: {
60
+ class: "star-icon-field",
61
+ "[class.star-icon-field--end]": "iconPosition() === 'end'"
62
+ },
63
+ template: `
64
+ <i [class]="icon() + ' star-icon-field__icon'" aria-hidden="true"></i>
65
+ <ng-content />
66
+ `
67
+ }]
68
+ }],
69
+ propDecorators: {
70
+ icon: [{
71
+ type: i0.Input,
72
+ args: [{
73
+ isSignal: true,
74
+ alias: "icon",
75
+ required: true
76
+ }]
77
+ }],
78
+ iconPosition: [{
79
+ type: i0.Input,
80
+ args: [{
81
+ isSignal: true,
82
+ alias: "iconPosition",
83
+ required: false
84
+ }]
85
+ }]
86
+ }
87
+ });
88
+ var StarInputGroup = class StarInputGroup {
89
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
90
+ static ɵfac = i0.ɵɵngDeclareFactory({
91
+ minVersion: "12.0.0",
92
+ version: "22.2.6",
93
+ ngImport: i0,
94
+ type: StarInputGroup,
95
+ deps: [],
96
+ target: i0.ɵɵFactoryTarget.Component
97
+ });
98
+ static ɵcmp = i0.ɵɵngDeclareComponent({
99
+ minVersion: "17.1.0",
100
+ version: "22.2.6",
101
+ type: StarInputGroup,
102
+ isStandalone: true,
103
+ selector: "star-input-group",
104
+ inputs: { ariaLabel: {
105
+ classPropertyName: "ariaLabel",
106
+ publicName: "ariaLabel",
107
+ isSignal: true,
108
+ isRequired: false,
109
+ transformFunction: null
110
+ } },
111
+ host: {
112
+ attributes: { "role": "group" },
113
+ properties: { "attr.aria-label": "ariaLabel()" },
114
+ classAttribute: "star-input-group"
115
+ },
116
+ ngImport: i0,
117
+ template: `<ng-content />`,
118
+ isInline: true,
119
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
120
+ });
121
+ };
122
+ i0.ɵɵngDeclareClassMetadata({
123
+ minVersion: "12.0.0",
124
+ version: "22.2.6",
125
+ ngImport: i0,
126
+ type: StarInputGroup,
127
+ decorators: [{
128
+ type: Component,
129
+ args: [{
130
+ selector: "star-input-group",
131
+ changeDetection: ChangeDetectionStrategy.OnPush,
132
+ host: {
133
+ class: "star-input-group",
134
+ role: "group",
135
+ "[attr.aria-label]": "ariaLabel()"
136
+ },
137
+ template: `<ng-content />`
138
+ }]
139
+ }],
140
+ propDecorators: { ariaLabel: [{
141
+ type: i0.Input,
142
+ args: [{
143
+ isSignal: true,
144
+ alias: "ariaLabel",
145
+ required: false
146
+ }]
147
+ }] }
148
+ });
149
+ var StarInputGroupAddon = class StarInputGroupAddon {
150
+ static ɵfac = i0.ɵɵngDeclareFactory({
151
+ minVersion: "12.0.0",
152
+ version: "22.2.6",
153
+ ngImport: i0,
154
+ type: StarInputGroupAddon,
155
+ deps: [],
156
+ target: i0.ɵɵFactoryTarget.Component
157
+ });
158
+ static ɵcmp = i0.ɵɵngDeclareComponent({
159
+ minVersion: "14.0.0",
160
+ version: "22.2.6",
161
+ type: StarInputGroupAddon,
162
+ isStandalone: true,
163
+ selector: "star-input-group-addon",
164
+ host: { classAttribute: "star-input-group__addon" },
165
+ ngImport: i0,
166
+ template: `<ng-content />`,
167
+ isInline: true,
168
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
169
+ });
170
+ };
171
+ i0.ɵɵngDeclareClassMetadata({
172
+ minVersion: "12.0.0",
173
+ version: "22.2.6",
174
+ ngImport: i0,
175
+ type: StarInputGroupAddon,
176
+ decorators: [{
177
+ type: Component,
178
+ args: [{
179
+ selector: "star-input-group-addon",
180
+ changeDetection: ChangeDetectionStrategy.OnPush,
181
+ host: { class: "star-input-group__addon" },
182
+ template: `<ng-content />`
183
+ }]
184
+ }]
185
+ });
186
+ export { StarIconField, StarInputGroup, StarInputGroupAddon };
187
+
188
+ //# sourceMappingURL=star-ng-ui-input-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-ng-ui-input-group.mjs","names":[],"sources":["../../../projects/star-ng/input-group/input-group.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Icon inside a text input (PrimeNG `p-iconfield` + `p-inputicon`). The icon is decoration\n * only: the input still needs a label (`star-field` or `aria-label`).\n *\n * ```html\n * <star-icon-field icon=\"ph-bold ph-magnifying-glass\">\n * <input starInput type=\"search\" aria-label=\"Search cases\" />\n * </star-icon-field>\n * ```\n */\n@Component({\n selector: 'star-icon-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'star-icon-field',\n '[class.star-icon-field--end]': \"iconPosition() === 'end'\",\n },\n template: `\n <i [class]=\"icon() + ' star-icon-field__icon'\" aria-hidden=\"true\"></i>\n <ng-content />\n `,\n})\nexport class StarIconField {\n /** Phosphor icon classes, for example `ph-bold ph-magnifying-glass`. */\n readonly icon = input.required<string>();\n readonly iconPosition = input<'start' | 'end'>('start');\n}\n\n/**\n * Joins an input with add-ons before or after it (PrimeNG `p-inputgroup`): a unit, a prefix\n * text, an icon or a button. Put `star-input-group-addon` elements, native `starInput` inputs\n * and `star-button` elements inside, in visual order.\n *\n * ```html\n * <star-input-group>\n * <star-input-group-addon>https://</star-input-group-addon>\n * <input starInput aria-label=\"Website\" />\n * <star-button variant=\"secondary\">Check</star-button>\n * </star-input-group>\n * ```\n */\n@Component({\n selector: 'star-input-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-input-group', role: 'group', '[attr.aria-label]': 'ariaLabel()' },\n template: `<ng-content />`,\n})\nexport class StarInputGroup {\n readonly ariaLabel = input<string | null>(null);\n}\n\n/** Text or icon add-on of `star-input-group`. */\n@Component({\n selector: 'star-input-group-addon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-input-group__addon' },\n template: `<ng-content />`,\n})\nexport class StarInputGroupAddon {}\n"],"mappings":"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"}
@@ -0,0 +1,434 @@
1
+ import { _IdGenerator } from "@angular/cdk/a11y";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input, model, output, viewChild } from "@angular/core";
4
+ import { StarField } from "@star-ng/ui/field";
5
+ const TOKENS = {
6
+ "9": /\d/,
7
+ a: /\p{L}/u,
8
+ "*": /[\p{L}\d]/u
9
+ };
10
+ function applyMask(mask, raw, slotChar = "_") {
11
+ let out = "";
12
+ let r = 0;
13
+ for (const char of mask) {
14
+ const token = TOKENS[char];
15
+ if (!token) {
16
+ out += char;
17
+ continue;
18
+ }
19
+ while (r < raw.length && !token.test(raw[r])) r++;
20
+ out += r < raw.length ? raw[r++] : slotChar;
21
+ }
22
+ return out;
23
+ }
24
+ function unmask(mask, masked, slotChar = "_") {
25
+ let out = "";
26
+ [...mask].forEach((char, i) => {
27
+ if (TOKENS[char] && masked[i] !== void 0 && masked[i] !== slotChar) out += masked[i];
28
+ });
29
+ return out;
30
+ }
31
+ var StarInputMask = class StarInputMask {
32
+ field = inject(StarField, { optional: true });
33
+ showInvalid = computed(() => this.invalid() && this.touched() || !!this.field?.errorText(), ...ngDevMode ? [{ debugName: "showInvalid" }] : /* istanbul ignore next */ []);
34
+ constructor() {
35
+ this.field?.linkControl(this.inputId);
36
+ }
37
+ value = model("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
38
+ mask = input.required(...ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []);
39
+ slotChar = input("_", ...ngDevMode ? [{ debugName: "slotChar" }] : /* istanbul ignore next */ []);
40
+ unmask = input(false, {
41
+ ...ngDevMode ? { debugName: "unmask" } : /* istanbul ignore next */ {},
42
+ transform: booleanAttribute
43
+ });
44
+ autoClear = input(true, {
45
+ ...ngDevMode ? { debugName: "autoClear" } : /* istanbul ignore next */ {},
46
+ transform: booleanAttribute
47
+ });
48
+ placeholder = input(null, ...ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []);
49
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
50
+ inputId = input(inject(_IdGenerator).getId("star-mask-"), ...ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []);
51
+ disabled = input(false, {
52
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
53
+ transform: booleanAttribute
54
+ });
55
+ readonly = input(false, {
56
+ ...ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {},
57
+ transform: booleanAttribute
58
+ });
59
+ required = input(false, {
60
+ ...ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {},
61
+ transform: booleanAttribute
62
+ });
63
+ invalid = input(false, {
64
+ ...ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {},
65
+ transform: booleanAttribute
66
+ });
67
+ touched = input(false, {
68
+ ...ngDevMode ? { debugName: "touched" } : /* istanbul ignore next */ {},
69
+ transform: booleanAttribute
70
+ });
71
+ name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
72
+ touch = output();
73
+ completed = output();
74
+ tokenPattern = /[9a*]/g;
75
+ input = viewChild.required("input", ...ngDevMode ? [{ debugName: "input" }] : /* istanbul ignore next */ []);
76
+ numericOnly = computed(() => !/[a*]/.test(this.mask()), ...ngDevMode ? [{ debugName: "numericOnly" }] : /* istanbul ignore next */ []);
77
+ display = computed(() => {
78
+ const value = this.value();
79
+ return value ? applyMask(this.mask(), value, this.slotChar()) : "";
80
+ }, ...ngDevMode ? [{ debugName: "display" }] : /* istanbul ignore next */ []);
81
+ slotsFilled(masked) {
82
+ return !masked.includes(this.slotChar());
83
+ }
84
+ onFocus(input) {
85
+ if (!input.value) input.value = applyMask(this.mask(), "", this.slotChar());
86
+ queueMicrotask(() => this.placeCaret(input));
87
+ }
88
+ onInput(input) {
89
+ const raw = [...input.value].filter((char) => char !== this.slotChar() && /[\p{L}\d]/u.test(char)).join("");
90
+ const masked = applyMask(this.mask(), raw, this.slotChar());
91
+ input.value = masked;
92
+ this.placeCaret(input);
93
+ const typed = unmask(this.mask(), masked, this.slotChar());
94
+ this.value.set(this.unmask() ? typed : typed ? masked : "");
95
+ if (this.slotsFilled(masked)) this.completed.emit(this.value());
96
+ }
97
+ onBlur(input) {
98
+ if (!unmask(this.mask(), input.value, this.slotChar()) || this.autoClear() && !this.slotsFilled(input.value)) {
99
+ this.value.set("");
100
+ input.value = "";
101
+ }
102
+ this.touch.emit();
103
+ }
104
+ placeCaret(input) {
105
+ const index = input.value.indexOf(this.slotChar());
106
+ const position = index < 0 ? input.value.length : index;
107
+ input.setSelectionRange?.(position, position);
108
+ }
109
+ focus() {
110
+ this.input().nativeElement.focus();
111
+ }
112
+ static ɵfac = i0.ɵɵngDeclareFactory({
113
+ minVersion: "12.0.0",
114
+ version: "22.2.6",
115
+ ngImport: i0,
116
+ type: StarInputMask,
117
+ deps: [],
118
+ target: i0.ɵɵFactoryTarget.Component
119
+ });
120
+ static ɵcmp = i0.ɵɵngDeclareComponent({
121
+ minVersion: "17.2.0",
122
+ version: "22.2.6",
123
+ type: StarInputMask,
124
+ isStandalone: true,
125
+ selector: "star-input-mask",
126
+ inputs: {
127
+ value: {
128
+ classPropertyName: "value",
129
+ publicName: "value",
130
+ isSignal: true,
131
+ isRequired: false,
132
+ transformFunction: null
133
+ },
134
+ mask: {
135
+ classPropertyName: "mask",
136
+ publicName: "mask",
137
+ isSignal: true,
138
+ isRequired: true,
139
+ transformFunction: null
140
+ },
141
+ slotChar: {
142
+ classPropertyName: "slotChar",
143
+ publicName: "slotChar",
144
+ isSignal: true,
145
+ isRequired: false,
146
+ transformFunction: null
147
+ },
148
+ unmask: {
149
+ classPropertyName: "unmask",
150
+ publicName: "unmask",
151
+ isSignal: true,
152
+ isRequired: false,
153
+ transformFunction: null
154
+ },
155
+ autoClear: {
156
+ classPropertyName: "autoClear",
157
+ publicName: "autoClear",
158
+ isSignal: true,
159
+ isRequired: false,
160
+ transformFunction: null
161
+ },
162
+ placeholder: {
163
+ classPropertyName: "placeholder",
164
+ publicName: "placeholder",
165
+ isSignal: true,
166
+ isRequired: false,
167
+ transformFunction: null
168
+ },
169
+ ariaLabel: {
170
+ classPropertyName: "ariaLabel",
171
+ publicName: "ariaLabel",
172
+ isSignal: true,
173
+ isRequired: false,
174
+ transformFunction: null
175
+ },
176
+ inputId: {
177
+ classPropertyName: "inputId",
178
+ publicName: "inputId",
179
+ isSignal: true,
180
+ isRequired: false,
181
+ transformFunction: null
182
+ },
183
+ disabled: {
184
+ classPropertyName: "disabled",
185
+ publicName: "disabled",
186
+ isSignal: true,
187
+ isRequired: false,
188
+ transformFunction: null
189
+ },
190
+ readonly: {
191
+ classPropertyName: "readonly",
192
+ publicName: "readonly",
193
+ isSignal: true,
194
+ isRequired: false,
195
+ transformFunction: null
196
+ },
197
+ required: {
198
+ classPropertyName: "required",
199
+ publicName: "required",
200
+ isSignal: true,
201
+ isRequired: false,
202
+ transformFunction: null
203
+ },
204
+ invalid: {
205
+ classPropertyName: "invalid",
206
+ publicName: "invalid",
207
+ isSignal: true,
208
+ isRequired: false,
209
+ transformFunction: null
210
+ },
211
+ touched: {
212
+ classPropertyName: "touched",
213
+ publicName: "touched",
214
+ isSignal: true,
215
+ isRequired: false,
216
+ transformFunction: null
217
+ },
218
+ name: {
219
+ classPropertyName: "name",
220
+ publicName: "name",
221
+ isSignal: true,
222
+ isRequired: false,
223
+ transformFunction: null
224
+ }
225
+ },
226
+ outputs: {
227
+ value: "valueChange",
228
+ touch: "touch",
229
+ completed: "completed"
230
+ },
231
+ host: { classAttribute: "star-mask" },
232
+ viewQueries: [{
233
+ propertyName: "input",
234
+ first: true,
235
+ predicate: ["input"],
236
+ descendants: true,
237
+ isSignal: true
238
+ }],
239
+ ngImport: i0,
240
+ template: `
241
+ <input
242
+ #input
243
+ type="text"
244
+ class="star-input star-mask__input"
245
+ autocomplete="off"
246
+ [attr.inputmode]="numericOnly() ? 'numeric' : null"
247
+ [id]="inputId()"
248
+ [attr.name]="name() || null"
249
+ [value]="display()"
250
+ [attr.placeholder]="placeholder() ?? mask().replace(tokenPattern, slotChar())"
251
+ [disabled]="disabled()"
252
+ [readOnly]="readonly()"
253
+ [required]="required()"
254
+ [attr.aria-label]="ariaLabel()"
255
+ [attr.aria-describedby]="field?.describedBy() ?? null"
256
+ [attr.aria-invalid]="showInvalid() || null"
257
+ (input)="onInput(input)"
258
+ (focus)="onFocus(input)"
259
+ (blur)="onBlur(input)"
260
+ />
261
+ `,
262
+ isInline: true,
263
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
264
+ });
265
+ };
266
+ i0.ɵɵngDeclareClassMetadata({
267
+ minVersion: "12.0.0",
268
+ version: "22.2.6",
269
+ ngImport: i0,
270
+ type: StarInputMask,
271
+ decorators: [{
272
+ type: Component,
273
+ args: [{
274
+ selector: "star-input-mask",
275
+ changeDetection: ChangeDetectionStrategy.OnPush,
276
+ host: { class: "star-mask" },
277
+ template: `
278
+ <input
279
+ #input
280
+ type="text"
281
+ class="star-input star-mask__input"
282
+ autocomplete="off"
283
+ [attr.inputmode]="numericOnly() ? 'numeric' : null"
284
+ [id]="inputId()"
285
+ [attr.name]="name() || null"
286
+ [value]="display()"
287
+ [attr.placeholder]="placeholder() ?? mask().replace(tokenPattern, slotChar())"
288
+ [disabled]="disabled()"
289
+ [readOnly]="readonly()"
290
+ [required]="required()"
291
+ [attr.aria-label]="ariaLabel()"
292
+ [attr.aria-describedby]="field?.describedBy() ?? null"
293
+ [attr.aria-invalid]="showInvalid() || null"
294
+ (input)="onInput(input)"
295
+ (focus)="onFocus(input)"
296
+ (blur)="onBlur(input)"
297
+ />
298
+ `
299
+ }]
300
+ }],
301
+ ctorParameters: () => [],
302
+ propDecorators: {
303
+ value: [{
304
+ type: i0.Input,
305
+ args: [{
306
+ isSignal: true,
307
+ alias: "value",
308
+ required: false
309
+ }]
310
+ }, {
311
+ type: i0.Output,
312
+ args: ["valueChange"]
313
+ }],
314
+ mask: [{
315
+ type: i0.Input,
316
+ args: [{
317
+ isSignal: true,
318
+ alias: "mask",
319
+ required: true
320
+ }]
321
+ }],
322
+ slotChar: [{
323
+ type: i0.Input,
324
+ args: [{
325
+ isSignal: true,
326
+ alias: "slotChar",
327
+ required: false
328
+ }]
329
+ }],
330
+ unmask: [{
331
+ type: i0.Input,
332
+ args: [{
333
+ isSignal: true,
334
+ alias: "unmask",
335
+ required: false
336
+ }]
337
+ }],
338
+ autoClear: [{
339
+ type: i0.Input,
340
+ args: [{
341
+ isSignal: true,
342
+ alias: "autoClear",
343
+ required: false
344
+ }]
345
+ }],
346
+ placeholder: [{
347
+ type: i0.Input,
348
+ args: [{
349
+ isSignal: true,
350
+ alias: "placeholder",
351
+ required: false
352
+ }]
353
+ }],
354
+ ariaLabel: [{
355
+ type: i0.Input,
356
+ args: [{
357
+ isSignal: true,
358
+ alias: "ariaLabel",
359
+ required: false
360
+ }]
361
+ }],
362
+ inputId: [{
363
+ type: i0.Input,
364
+ args: [{
365
+ isSignal: true,
366
+ alias: "inputId",
367
+ required: false
368
+ }]
369
+ }],
370
+ disabled: [{
371
+ type: i0.Input,
372
+ args: [{
373
+ isSignal: true,
374
+ alias: "disabled",
375
+ required: false
376
+ }]
377
+ }],
378
+ readonly: [{
379
+ type: i0.Input,
380
+ args: [{
381
+ isSignal: true,
382
+ alias: "readonly",
383
+ required: false
384
+ }]
385
+ }],
386
+ required: [{
387
+ type: i0.Input,
388
+ args: [{
389
+ isSignal: true,
390
+ alias: "required",
391
+ required: false
392
+ }]
393
+ }],
394
+ invalid: [{
395
+ type: i0.Input,
396
+ args: [{
397
+ isSignal: true,
398
+ alias: "invalid",
399
+ required: false
400
+ }]
401
+ }],
402
+ touched: [{
403
+ type: i0.Input,
404
+ args: [{
405
+ isSignal: true,
406
+ alias: "touched",
407
+ required: false
408
+ }]
409
+ }],
410
+ name: [{
411
+ type: i0.Input,
412
+ args: [{
413
+ isSignal: true,
414
+ alias: "name",
415
+ required: false
416
+ }]
417
+ }],
418
+ touch: [{
419
+ type: i0.Output,
420
+ args: ["touch"]
421
+ }],
422
+ completed: [{
423
+ type: i0.Output,
424
+ args: ["completed"]
425
+ }],
426
+ input: [{
427
+ type: i0.ViewChild,
428
+ args: ["input", { isSignal: true }]
429
+ }]
430
+ }
431
+ });
432
+ export { StarInputMask, applyMask, unmask };
433
+
434
+ //# sourceMappingURL=star-ng-ui-input-mask.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-ng-ui-input-mask.mjs","names":[],"sources":["../../../projects/star-ng/input-mask/input-mask.ts"],"sourcesContent":["import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { StarField } from '@star-ng/ui/field';\n\n/** Mask slot tokens (PrimeNG `p-inputmask` syntax): `9` digit, `a` letter, `*` letter or digit. */\nconst TOKENS: Record<string, RegExp> = { '9': /\\d/, a: /\\p{L}/u, '*': /[\\p{L}\\d]/u };\n\n/** Applies a mask to raw characters; returns the masked text (unfilled slots as `slotChar`). */\nexport function applyMask(mask: string, raw: string, slotChar = '_'): string {\n let out = '';\n let r = 0;\n for (const char of mask) {\n const token = TOKENS[char];\n if (!token) {\n out += char;\n continue;\n }\n while (r < raw.length && !token.test(raw[r])) r++;\n out += r < raw.length ? raw[r++] : slotChar;\n }\n return out;\n}\n\n/** Characters typed into the slots, without literals and slot chars. */\nexport function unmask(mask: string, masked: string, slotChar = '_'): string {\n let out = '';\n [...mask].forEach((char, i) => {\n if (TOKENS[char] && masked[i] !== undefined && masked[i] !== slotChar) out += masked[i];\n });\n return out;\n}\n\n/**\n * Masked text field (PrimeNG `p-inputmask`): fixed-format entry such as phone numbers, postal\n * codes or serial numbers. Mask tokens: `9` digit, `a` letter, `*` letter or digit; other\n * characters are literals. The value is the masked text, or the raw slots with `unmask`.\n *\n * `<star-input-mask mask=\"(999) 999-9999\" [formField]=\"form.phone\" ariaLabel=\"Phone number\" />`\n */\n@Component({\n selector: 'star-input-mask',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-mask' },\n template: `\n <input\n #input\n type=\"text\"\n class=\"star-input star-mask__input\"\n autocomplete=\"off\"\n [attr.inputmode]=\"numericOnly() ? 'numeric' : null\"\n [id]=\"inputId()\"\n [attr.name]=\"name() || null\"\n [value]=\"display()\"\n [attr.placeholder]=\"placeholder() ?? mask().replace(tokenPattern, slotChar())\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n [attr.aria-invalid]=\"showInvalid() || null\"\n (input)=\"onInput(input)\"\n (focus)=\"onFocus(input)\"\n (blur)=\"onBlur(input)\"\n />\n `,\n})\nexport class StarInputMask implements FormValueControl<string> {\n protected readonly field = inject(StarField, { optional: true });\n /** Invalid after touch, or while the parent `star-field` shows an error. */\n protected readonly showInvalid = computed(\n () => (this.invalid() && this.touched()) || !!this.field?.errorText(),\n );\n\n constructor() {\n this.field?.linkControl(this.inputId);\n }\n\n readonly value = model('');\n readonly mask = input.required<string>();\n readonly slotChar = input('_');\n /** Store only the typed characters (no literals). */\n readonly unmask = input(false, { transform: booleanAttribute });\n /** Keep a partly filled value on blur (default clears it). */\n readonly autoClear = input(true, { transform: booleanAttribute });\n readonly placeholder = input<string | null>(null);\n readonly ariaLabel = input<string | null>(null);\n readonly inputId = input(inject(_IdGenerator).getId('star-mask-'));\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n readonly name = input('');\n readonly touch = output<void>();\n readonly completed = output<string>();\n\n protected readonly tokenPattern = /[9a*]/g;\n private readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n protected readonly numericOnly = computed(() => !/[a*]/.test(this.mask()));\n protected readonly display = computed(() => {\n const value = this.value();\n return value ? applyMask(this.mask(), value, this.slotChar()) : '';\n });\n\n private slotsFilled(masked: string): boolean {\n return !masked.includes(this.slotChar());\n }\n\n protected onFocus(input: HTMLInputElement): void {\n if (!input.value) input.value = applyMask(this.mask(), '', this.slotChar());\n queueMicrotask(() => this.placeCaret(input));\n }\n\n protected onInput(input: HTMLInputElement): void {\n // Take every letter or digit in order: works for typing inside the mask and for pasting\n // raw text such as \"5551234567\". Mask literals are punctuation, so they drop out.\n const raw = [...input.value]\n .filter((char) => char !== this.slotChar() && /[\\p{L}\\d]/u.test(char))\n .join('');\n const masked = applyMask(this.mask(), raw, this.slotChar());\n input.value = masked;\n this.placeCaret(input);\n const typed = unmask(this.mask(), masked, this.slotChar());\n this.value.set(this.unmask() ? typed : typed ? masked : '');\n if (this.slotsFilled(masked)) this.completed.emit(this.value());\n }\n\n protected onBlur(input: HTMLInputElement): void {\n const typed = unmask(this.mask(), input.value, this.slotChar());\n if (!typed || (this.autoClear() && !this.slotsFilled(input.value))) {\n this.value.set('');\n input.value = '';\n }\n this.touch.emit();\n }\n\n /** Puts the caret on the first empty slot. */\n private placeCaret(input: HTMLInputElement): void {\n const index = input.value.indexOf(this.slotChar());\n const position = index < 0 ? input.value.length : index;\n input.setSelectionRange?.(position, position);\n }\n\n focus(): void {\n this.input().nativeElement.focus();\n }\n}\n"],"mappings":"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"}