ngwr 13.0.0 → 14.0.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.
- package/README.md +13 -6
- package/color-picker/styles/_index.scss +43 -5
- package/fesm2022/ngwr-alert.mjs +5 -5
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +11 -1
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-blur-text.mjs +13 -2
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +12 -3
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +14 -3
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-button.mjs +4 -4
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs +15 -0
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +51 -5
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +20 -1
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-collapse.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker-testing.mjs +23 -7
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-color-picker.mjs +89 -10
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +27 -3
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu.mjs +13 -3
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapters-fns.mjs +101 -33
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker-testing.mjs +10 -2
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +103 -13
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-date.mjs +480 -79
- package/fesm2022/ngwr-date.mjs.map +1 -1
- package/fesm2022/ngwr-dialog.mjs +22 -16
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +5 -2
- package/fesm2022/ngwr-directives.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +30 -2
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +24 -18
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +8 -3
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +1 -1
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +52 -12
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +21 -4
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +9 -2
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +63 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +28 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +150 -22
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon-adapters-feather.mjs +11 -0
- package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -1
- package/fesm2022/ngwr-icon-adapters-lucide.mjs +22 -2
- package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +474 -37
- package/fesm2022/ngwr-icon.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +3 -3
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +21 -3
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +14 -7
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +20 -2
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar-router.mjs +73 -0
- package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -0
- package/fesm2022/ngwr-loading-bar.mjs +21 -32
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +63 -11
- package/fesm2022/ngwr-markdown.mjs.map +1 -1
- package/fesm2022/ngwr-mention.mjs +104 -14
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-overlay.mjs +36 -7
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-pagination-testing.mjs +11 -10
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +65 -30
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-popconfirm.mjs +3 -2
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +2 -1
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs +38 -1
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +93 -34
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +10 -3
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +2 -1
- package/fesm2022/ngwr-squircle.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +35 -4
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-table.mjs +35 -12
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-router.mjs +158 -0
- package/fesm2022/ngwr-tabs-router.mjs.map +1 -0
- package/fesm2022/ngwr-tabs-testing.mjs +13 -11
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +104 -12
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +20 -1
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-tour.mjs +1 -1
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +2 -2
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree.mjs +18 -2
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-utils.mjs +143 -1
- package/fesm2022/ngwr-utils.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-window-testing.mjs +10 -2
- package/fesm2022/ngwr-window-testing.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +4 -4
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/i18n/en.json +33 -6
- package/i18n/ru.json +33 -6
- package/llms-full.txt +20 -11
- package/llms.txt +47 -16
- package/mcp/catalog.js +3 -3
- package/mcp/providers.js +11 -0
- package/package.json +11 -3
- package/schematics/migrations/v13/index.js +101 -0
- package/schematics/migrations/v14/index.js +422 -0
- package/schematics/migrations.json +10 -0
- package/schematics/page/templates.js +1 -1
- package/schematics/use/symbol-map.json +1 -0
- package/skills/ngwr/SKILL.md +4 -1
- package/skills/ngwr/references/catalog.md +2 -0
- package/skills/ngwr/references/setup.md +4 -0
- package/stepper/styles/_index.scss +19 -1
- package/textarea/styles/_index.scss +14 -6
- package/toast/styles/_index.scss +12 -4
- package/types/ngwr-alert.d.ts +3 -3
- package/types/ngwr-blur-text.d.ts +8 -0
- package/types/ngwr-breadcrumbs.d.ts +1 -0
- package/types/ngwr-button.d.ts +2 -2
- package/types/ngwr-calendar-testing.d.ts +21 -4
- package/types/ngwr-calendar.d.ts +37 -0
- package/types/ngwr-circular-text.d.ts +9 -0
- package/types/ngwr-collapse.d.ts +19 -15
- package/types/ngwr-color-picker-testing.d.ts +10 -4
- package/types/ngwr-color-picker.d.ts +70 -2
- package/types/ngwr-command-palette.d.ts +14 -0
- package/types/ngwr-context-menu.d.ts +1 -1
- package/types/ngwr-date-adapters-fns.d.ts +71 -29
- package/types/ngwr-date-picker-testing.d.ts +206 -185
- package/types/ngwr-date-picker.d.ts +7 -0
- package/types/ngwr-date.d.ts +143 -13
- package/types/ngwr-drag-drop.d.ts +19 -0
- package/types/ngwr-dropdown.d.ts +1 -1
- package/types/ngwr-event-calendar-testing.d.ts +12 -9
- package/types/ngwr-file-upload.d.ts +31 -3
- package/types/ngwr-fuzzy-text.d.ts +5 -0
- package/types/ngwr-i18n.d.ts +89 -7
- package/types/ngwr-icon-adapters-feather.d.ts +11 -0
- package/types/ngwr-icon.d.ts +42 -1
- package/types/ngwr-input-number.d.ts +1 -1
- package/types/ngwr-input-otp.d.ts +3 -0
- package/types/ngwr-input.d.ts +11 -4
- package/types/ngwr-knob-testing.d.ts +8 -4
- package/types/ngwr-knob.d.ts +18 -0
- package/types/ngwr-loading-bar-router.d.ts +35 -0
- package/types/ngwr-loading-bar.d.ts +19 -9
- package/types/ngwr-mention.d.ts +13 -0
- package/types/ngwr-pagination-testing.d.ts +11 -10
- package/types/ngwr-pagination.d.ts +39 -10
- package/types/ngwr-popconfirm.d.ts +1 -1
- package/types/ngwr-popover.d.ts +1 -1
- package/types/ngwr-select.d.ts +65 -10
- package/types/ngwr-shiny-text.d.ts +1 -0
- package/types/ngwr-splitter-testing.d.ts +9 -4
- package/types/ngwr-squircle.d.ts +1 -1
- package/types/ngwr-statistic.d.ts +22 -2
- package/types/ngwr-table.d.ts +24 -5
- package/types/ngwr-tabs-router.d.ts +67 -0
- package/types/ngwr-tabs-testing.d.ts +12 -10
- package/types/ngwr-tabs.d.ts +103 -6
- package/types/ngwr-textarea.d.ts +9 -0
- package/types/ngwr-tree.d.ts +7 -0
- package/types/ngwr-utils.d.ts +79 -1
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window-testing.d.ts +11 -3
- package/types/ngwr-window.d.ts +11 -4
- package/window/styles/_index.scss +1 -1
package/i18n/en.json
CHANGED
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
"goToPage": "Go to page {{page}}",
|
|
30
30
|
"label": "Pagination",
|
|
31
31
|
"pageOf": "Page {{current}} of {{total}}",
|
|
32
|
-
"
|
|
32
|
+
"range": "{{from}}–{{to}} of {{total}}",
|
|
33
|
+
"compact": "{{current}} / {{total}}"
|
|
33
34
|
},
|
|
34
35
|
"table": {
|
|
35
36
|
"empty": "No data",
|
|
@@ -120,12 +121,14 @@
|
|
|
120
121
|
"collapse": "Collapse",
|
|
121
122
|
"placeholder": "Select…",
|
|
122
123
|
"clearSelection": "Clear selection",
|
|
123
|
-
"removeItem": "Remove {{label}}"
|
|
124
|
+
"removeItem": "Remove {{label}}",
|
|
125
|
+
"more": "+{{count}} more"
|
|
124
126
|
},
|
|
125
127
|
"commandPalette": {
|
|
126
128
|
"label": "Command palette",
|
|
127
129
|
"placeholder": "Type a command or search…",
|
|
128
|
-
"noResults": "No results"
|
|
130
|
+
"noResults": "No results",
|
|
131
|
+
"escHint": "esc"
|
|
129
132
|
},
|
|
130
133
|
"empty": {
|
|
131
134
|
"noData": "No data"
|
|
@@ -136,7 +139,13 @@
|
|
|
136
139
|
"dropZoneLabel": "File upload drop zone — click or drop files",
|
|
137
140
|
"removeFile": "Remove file",
|
|
138
141
|
"invalid": "Unsupported file type",
|
|
139
|
-
"tooBig": "File too large"
|
|
142
|
+
"tooBig": "File too large",
|
|
143
|
+
"size": "{{value}} {{unit}}",
|
|
144
|
+
"unitByte": "B",
|
|
145
|
+
"unitKb": "KB",
|
|
146
|
+
"unitMb": "MB",
|
|
147
|
+
"unitGb": "GB",
|
|
148
|
+
"unitTb": "TB"
|
|
140
149
|
},
|
|
141
150
|
"popconfirm": {
|
|
142
151
|
"label": "Confirm action",
|
|
@@ -184,7 +193,10 @@
|
|
|
184
193
|
"prevYear": "Previous year",
|
|
185
194
|
"nextYear": "Next year",
|
|
186
195
|
"prevYears": "Previous 12 years",
|
|
187
|
-
"nextYears": "Next 12 years"
|
|
196
|
+
"nextYears": "Next 12 years",
|
|
197
|
+
"header": "{{month}} {{year}}",
|
|
198
|
+
"yearRange": "{{from}} – {{to}}",
|
|
199
|
+
"dayLabel": "{{weekday}}, {{date}}"
|
|
188
200
|
},
|
|
189
201
|
"imageCropper": {
|
|
190
202
|
"empty": "No image",
|
|
@@ -201,7 +213,18 @@
|
|
|
201
213
|
"colorPicker": {
|
|
202
214
|
"area": "Saturation and brightness, {{saturation}}% and {{brightness}}%",
|
|
203
215
|
"hue": "Hue",
|
|
204
|
-
"alpha": "Opacity"
|
|
216
|
+
"alpha": "Opacity",
|
|
217
|
+
"formatHex": "HEX",
|
|
218
|
+
"formatRgb": "RGB",
|
|
219
|
+
"formatHsl": "HSL",
|
|
220
|
+
"channelHex": "HEX",
|
|
221
|
+
"channelRed": "R",
|
|
222
|
+
"channelGreen": "G",
|
|
223
|
+
"channelBlue": "B",
|
|
224
|
+
"channelHue": "H",
|
|
225
|
+
"channelSaturation": "S%",
|
|
226
|
+
"channelLightness": "L%",
|
|
227
|
+
"channelAlpha": "A%"
|
|
205
228
|
},
|
|
206
229
|
"calendarHeatmap": {
|
|
207
230
|
"label": "Calendar heatmap"
|
|
@@ -329,6 +352,10 @@
|
|
|
329
352
|
"speedDial": {
|
|
330
353
|
"label": "Actions"
|
|
331
354
|
},
|
|
355
|
+
"statistic": {
|
|
356
|
+
"delta": "{{value}}{{suffix}}",
|
|
357
|
+
"deltaSuffix": "%"
|
|
358
|
+
},
|
|
332
359
|
"result": {
|
|
333
360
|
"notFound": "Sorry, the page you visited does not exist.",
|
|
334
361
|
"forbidden": "Sorry, you are not authorized to access this page.",
|
package/i18n/ru.json
CHANGED
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
"goToPage": "Перейти на страницу {{page}}",
|
|
30
30
|
"label": "Пагинация",
|
|
31
31
|
"pageOf": "Страница {{current}} из {{total}}",
|
|
32
|
-
"
|
|
32
|
+
"range": "{{from}}–{{to}} из {{total}}",
|
|
33
|
+
"compact": "{{current}} / {{total}}"
|
|
33
34
|
},
|
|
34
35
|
"table": {
|
|
35
36
|
"empty": "Нет данных",
|
|
@@ -120,12 +121,14 @@
|
|
|
120
121
|
"collapse": "Свернуть",
|
|
121
122
|
"placeholder": "Выберите…",
|
|
122
123
|
"clearSelection": "Очистить выбор",
|
|
123
|
-
"removeItem": "Удалить {{label}}"
|
|
124
|
+
"removeItem": "Удалить {{label}}",
|
|
125
|
+
"more": "ещё {{count}}"
|
|
124
126
|
},
|
|
125
127
|
"commandPalette": {
|
|
126
128
|
"label": "Палитра команд",
|
|
127
129
|
"placeholder": "Введите команду или поиск…",
|
|
128
|
-
"noResults": "Ничего не найдено"
|
|
130
|
+
"noResults": "Ничего не найдено",
|
|
131
|
+
"escHint": "esc"
|
|
129
132
|
},
|
|
130
133
|
"empty": {
|
|
131
134
|
"noData": "Нет данных"
|
|
@@ -136,7 +139,13 @@
|
|
|
136
139
|
"dropZoneLabel": "Зона загрузки файлов — нажмите или перетащите",
|
|
137
140
|
"removeFile": "Удалить файл",
|
|
138
141
|
"invalid": "Неподдерживаемый тип файла",
|
|
139
|
-
"tooBig": "Файл слишком большой"
|
|
142
|
+
"tooBig": "Файл слишком большой",
|
|
143
|
+
"size": "{{value}} {{unit}}",
|
|
144
|
+
"unitByte": "Б",
|
|
145
|
+
"unitKb": "КБ",
|
|
146
|
+
"unitMb": "МБ",
|
|
147
|
+
"unitGb": "ГБ",
|
|
148
|
+
"unitTb": "ТБ"
|
|
140
149
|
},
|
|
141
150
|
"popconfirm": {
|
|
142
151
|
"label": "Подтверждение действия",
|
|
@@ -184,7 +193,10 @@
|
|
|
184
193
|
"prevYear": "Предыдущий год",
|
|
185
194
|
"nextYear": "Следующий год",
|
|
186
195
|
"prevYears": "Предыдущие 12 лет",
|
|
187
|
-
"nextYears": "Следующие 12 лет"
|
|
196
|
+
"nextYears": "Следующие 12 лет",
|
|
197
|
+
"header": "{{month}} {{year}}",
|
|
198
|
+
"yearRange": "{{from}} – {{to}}",
|
|
199
|
+
"dayLabel": "{{weekday}}, {{date}}"
|
|
188
200
|
},
|
|
189
201
|
"imageCropper": {
|
|
190
202
|
"empty": "Нет изображения",
|
|
@@ -201,7 +213,18 @@
|
|
|
201
213
|
"colorPicker": {
|
|
202
214
|
"area": "Насыщенность и яркость, {{saturation}}% и {{brightness}}%",
|
|
203
215
|
"hue": "Оттенок",
|
|
204
|
-
"alpha": "Непрозрачность"
|
|
216
|
+
"alpha": "Непрозрачность",
|
|
217
|
+
"formatHex": "HEX",
|
|
218
|
+
"formatRgb": "RGB",
|
|
219
|
+
"formatHsl": "HSL",
|
|
220
|
+
"channelHex": "HEX",
|
|
221
|
+
"channelRed": "R",
|
|
222
|
+
"channelGreen": "G",
|
|
223
|
+
"channelBlue": "B",
|
|
224
|
+
"channelHue": "H",
|
|
225
|
+
"channelSaturation": "S%",
|
|
226
|
+
"channelLightness": "L%",
|
|
227
|
+
"channelAlpha": "A%"
|
|
205
228
|
},
|
|
206
229
|
"calendarHeatmap": {
|
|
207
230
|
"label": "Календарная тепловая карта"
|
|
@@ -329,6 +352,10 @@
|
|
|
329
352
|
"speedDial": {
|
|
330
353
|
"label": "Действия"
|
|
331
354
|
},
|
|
355
|
+
"statistic": {
|
|
356
|
+
"delta": "{{value}}{{suffix}}",
|
|
357
|
+
"deltaSuffix": "%"
|
|
358
|
+
},
|
|
332
359
|
"result": {
|
|
333
360
|
"notFound": "Извините, страница не найдена.",
|
|
334
361
|
"forbidden": "Извините, доступ к этой странице ограничен.",
|
package/llms-full.txt
CHANGED
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
|
|
130
130
|
## ngwr/calendar/testing
|
|
131
131
|
- import: `import { WrCalendarDayHarness } from 'ngwr/calendar/testing'`
|
|
132
|
-
- exports: WrCalendarDayHarness, WrCalendarHarness, WrCalendarChip, WrCalendarDayHarnessFilters, WrCalendarHarnessFilters, WrCalendarView
|
|
132
|
+
- exports: WrCalendarDayHarness, WrCalendarHarness, WrCalendarArrowKey, WrCalendarChip, WrCalendarDayHarnessFilters, WrCalendarHarnessFilters, WrCalendarView
|
|
133
133
|
|
|
134
134
|
## ngwr/card
|
|
135
135
|
- import: `import { WrCard } from 'ngwr/card'`
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
## ngwr/collapse
|
|
192
192
|
- import: `import { WrCollapse } from 'ngwr/collapse'`
|
|
193
193
|
- selector: `wr-accordion`, `wr-collapse-group`, `wr-collapse`
|
|
194
|
-
- exports: WrCollapse, WrCollapseGroup, WrAccordion, WR_COLLAPSE_GROUP, WrCollapseGroupContext
|
|
194
|
+
- exports: WrCollapse, WrCollapseGroup, WrAccordion, WR_COLLAPSE_GROUP, WrCollapseGroupContext, WrCollapseGroupMember
|
|
195
195
|
- Expandable panel with a clickable header. Two-way binds `open`. Wrap in `<wr-collapse-group accordion>` for single-open behavior.
|
|
196
196
|
|
|
197
197
|
## ngwr/collapse/testing
|
|
@@ -266,11 +266,11 @@
|
|
|
266
266
|
|
|
267
267
|
## ngwr/date-picker/testing
|
|
268
268
|
- import: `import { WrDatePickerDayHarness } from 'ngwr/date-picker/testing'`
|
|
269
|
-
- exports: WrDatePickerDayHarness, WrDatePickerHarness, WrDateRangePickerHarness, WrDatePickerDayHarnessFilters, WrDatePickerHarnessFilters, WrDatePickerTimeFields, WrDateRangePickerHarnessFilters
|
|
269
|
+
- exports: WrDatePickerDayHarness, WrDatePickerHarness, WrDateRangePickerHarness, WrAnyDatePickerHarness, WrDatePickerDayHarnessFilters, WrDatePickerHarnessFilters, WrDatePickerTimeFields, WrDateRangePickerEnd, WrDateRangePickerHarnessFilters
|
|
270
270
|
|
|
271
271
|
## ngwr/date/adapters/fns
|
|
272
272
|
- import: `import { WrDateFnsAdapter } from 'ngwr/date/adapters/fns'`
|
|
273
|
-
- exports: WrDateFnsAdapter, provideWrDateFnsAdapter
|
|
273
|
+
- exports: WrDateFnsAdapter, provideWrDateFnsAdapter, WR_DATE_FNS_LOCALE
|
|
274
274
|
|
|
275
275
|
## ngwr/date/adapters/luxon
|
|
276
276
|
- import: `import { WrLuxonAdapter } from 'ngwr/date/adapters/luxon'`
|
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
|
|
370
370
|
## ngwr/event-calendar/testing
|
|
371
371
|
- import: `import { WrEventCalendarChipHarness } from 'ngwr/event-calendar/testing'`
|
|
372
|
-
- exports: WrEventCalendarChipHarness, WrEventCalendarHarness, WrEventCalendarChipHarnessFilters, WrEventCalendarHarnessFilters
|
|
372
|
+
- exports: WrEventCalendarChipHarness, WrEventCalendarHarness, WrEventCalendarArrowKey, WrEventCalendarChipHarnessFilters, WrEventCalendarHarnessFilters
|
|
373
373
|
|
|
374
374
|
## ngwr/falling-text
|
|
375
375
|
- import: `import { WrFallingText } from 'ngwr/falling-text'`
|
|
@@ -529,7 +529,7 @@
|
|
|
529
529
|
|
|
530
530
|
## ngwr/knob/testing
|
|
531
531
|
- import: `import { WrKnobHarness } from 'ngwr/knob/testing'`
|
|
532
|
-
- exports: WrKnobHarness, WrKnobHarnessFilters
|
|
532
|
+
- exports: WrKnobHarness, WrKnobArrowKey, WrKnobHarnessFilters
|
|
533
533
|
|
|
534
534
|
## ngwr/layout
|
|
535
535
|
- import: `import { WrLayout } from 'ngwr/layout'`
|
|
@@ -567,7 +567,11 @@
|
|
|
567
567
|
- import: `import { WrLoadingBar } from 'ngwr/loading-bar'`
|
|
568
568
|
- selector: `wr-loading-bar`
|
|
569
569
|
- exports: WrLoadingBar, WrLoadingState, WrLoadingBarComponent
|
|
570
|
-
- Top-of-page progress bar
|
|
570
|
+
- Top-of-page progress bar with a `start()` / `complete()` slot API for HTTP interceptors or any long-running task. Add `provideWrLoadingBarRouter()` and router navigations drive it as well — an opt-in, because that subscription is what would otherwise pull `@angular/router` into an app that never routes.
|
|
571
|
+
|
|
572
|
+
## ngwr/loading-bar/router
|
|
573
|
+
- import: `import { provideWrLoadingBarRouter } from 'ngwr/loading-bar/router'`
|
|
574
|
+
- exports: provideWrLoadingBarRouter
|
|
571
575
|
|
|
572
576
|
## ngwr/markdown
|
|
573
577
|
- import: `import { WrMarkdown } from 'ngwr/markdown'`
|
|
@@ -634,7 +638,7 @@
|
|
|
634
638
|
- import: `import { WrPagination } from 'ngwr/pagination'`
|
|
635
639
|
- selector: `wr-pagination`
|
|
636
640
|
- exports: WrPagination, WrPaginationAlign, WrPaginationSize, WrPaginationShape
|
|
637
|
-
- Numbered page navigator. Two-way binds
|
|
641
|
+
- Numbered page navigator. Two-way binds page and pageSize via signal models.
|
|
638
642
|
|
|
639
643
|
## ngwr/pagination/testing
|
|
640
644
|
- import: `import { WrPaginationHarness } from 'ngwr/pagination/testing'`
|
|
@@ -834,7 +838,7 @@
|
|
|
834
838
|
|
|
835
839
|
## ngwr/splitter/testing
|
|
836
840
|
- import: `import { WrSplitterHarness } from 'ngwr/splitter/testing'`
|
|
837
|
-
- exports: WrSplitterHarness, WrSplitterHarnessFilters, WrSplitterPaneSizes
|
|
841
|
+
- exports: WrSplitterHarness, WrSplitterArrowKey, WrSplitterHarnessFilters, WrSplitterPaneSizes
|
|
838
842
|
|
|
839
843
|
## ngwr/spotlight-card
|
|
840
844
|
- import: `import { WrSpotlightCard } from 'ngwr/spotlight-card'`
|
|
@@ -906,9 +910,14 @@
|
|
|
906
910
|
## ngwr/tabs
|
|
907
911
|
- import: `import { WrTabs } from 'ngwr/tabs'`
|
|
908
912
|
- selector: `wr-tab`, `wr-tabs`
|
|
909
|
-
- exports: WrTabs, WrTab, WR_TABS, WrTabsContext
|
|
913
|
+
- exports: WrTabs, WrTab, WR_TABS, WrTabsContext, WR_TABS_ROUTING, WrTabsRoutingAdapter
|
|
910
914
|
- Tabbed container. Use projected content for simple tabs, or set routerLink on children to switch into router mode.
|
|
911
915
|
|
|
916
|
+
## ngwr/tabs/router
|
|
917
|
+
- import: `import { WrTabsRouting } from 'ngwr/tabs/router'`
|
|
918
|
+
- selector: `[wrTabsRouting]`
|
|
919
|
+
- exports: WrTabsRouting
|
|
920
|
+
|
|
912
921
|
## ngwr/tabs/testing
|
|
913
922
|
- import: `import { WrTabHarness } from 'ngwr/tabs/testing'`
|
|
914
923
|
- exports: WrTabHarness, WrTabsHarness, WrTabHarnessFilters, WrTabsHarnessFilters, WrTabsHarnessSize
|
|
@@ -1007,7 +1016,7 @@
|
|
|
1007
1016
|
|
|
1008
1017
|
## ngwr/utils
|
|
1009
1018
|
- import: `import { isDefined } from 'ngwr/utils'`
|
|
1010
|
-
- exports: Maybe, SafeAny, isDefined, isNonEmptyArray, isObservable, clamp, round, numAttr, resolveCssSize, ResolveCssSizeOptions, ResolvedCssSize, getRootFontSize, getFocusableElements, trapFocus, randomId, noop, debounce, throttle, WrDebouncedFn, WrThrottledFn, KEYS, hasModifier, isPrintableKey, WrKey, badgeLog
|
|
1019
|
+
- exports: Maybe, SafeAny, isDefined, isNonEmptyArray, isObservable, clamp, round, numAttr, isSafeCssValue, resolveCssSize, ResolveCssSizeOptions, ResolvedCssSize, getRootFontSize, getFocusableElements, trapFocus, randomId, noop, debounce, throttle, WrDebouncedFn, WrThrottledFn, KEYS, hasModifier, isComposing, isPrintableKey, WrKey, badgeLog
|
|
1011
1020
|
|
|
1012
1021
|
## ngwr/validators
|
|
1013
1022
|
- import: `import { WrValidators } from 'ngwr/validators'`
|
package/llms.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# ngwr
|
|
2
2
|
|
|
3
3
|
> Angular UI library — standalone, signals-first, zoneless, fully tree-shakable.
|
|
4
|
-
>
|
|
4
|
+
> 204 secondary entry points, 174 component and directive classes, built on
|
|
5
5
|
> `@angular/cdk` primitives. The only runtime dependency is `tslib`. Docs and
|
|
6
6
|
> live demos: https://ngwr.dev — source: https://github.com/thekhegay/ngwr
|
|
7
7
|
|
|
@@ -75,20 +75,44 @@ one element at a time; a step whose target is missing is skipped, not floated.
|
|
|
75
75
|
- `ng g ngwr:page <form|table|dashboard>` — starter page wired with ngwr.
|
|
76
76
|
- `ng update ngwr` — runs upgrade migrations.
|
|
77
77
|
|
|
78
|
-
## Upgrading to
|
|
78
|
+
## Upgrading to v14
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Run `ng update ngwr@14`. It rewrites the renames and REPORTS the rest — read its
|
|
81
|
+
output, because the reported half is where the silent failures are.
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
`ngwr/date`, `ngwr/date-adapter-fns` → `ngwr/date/adapters/fns`,
|
|
84
|
-
`ngwr/date-adapter-luxon` → `ngwr/date/adapters/luxon`. Import paths only —
|
|
85
|
-
every symbol keeps its name. `ng update ngwr@12` rewrites them.
|
|
86
|
-
- **`readI18nText()` returns `Signal<string>`.** Add `()` at every read. No
|
|
87
|
-
codemod: adding the call means knowing which identifiers hold the result, and
|
|
88
|
-
the type error already names every site. `useI18nText`, the `wrT` pipe and the
|
|
89
|
-
`[wrT]` directive are unchanged.
|
|
83
|
+
Rewritten for you (five renames, one word per concept):
|
|
90
84
|
|
|
91
|
-
|
|
85
|
+
- `<wr-alert>` from `closeable` to `closable`.
|
|
86
|
+
- `<wr-table>` from `[totalItems]` to `[total]`.
|
|
87
|
+
- `<wr-pagination>` from `[(currentPage)]` to `[(page)]`, and from
|
|
88
|
+
`(currentPageChange)` to `(pageChange)`.
|
|
89
|
+
- `isDisabledWhenLoading` to `disabledWhenLoading` (the library's last
|
|
90
|
+
`is`-prefixed boolean).
|
|
91
|
+
- The window `chromeSize` scale from `'compact' | 'normal'` to `'sm' | 'md'`,
|
|
92
|
+
including the `.wr-window--chrome-compact` class.
|
|
93
|
+
|
|
94
|
+
Reported, not rewritten — each needs a decision a codemod cannot make:
|
|
95
|
+
|
|
96
|
+
- **Router integration is opt-in.** `<wr-loading-bar>` no longer follows the
|
|
97
|
+
router on its own: add `provideWrLoadingBarRouter()` from
|
|
98
|
+
`ngwr/loading-bar/router`. A `<wr-tab routerLink>` needs `wrTabsRouting` on the
|
|
99
|
+
strip and `WrTabsRouting` (from `ngwr/tabs/router`) in `imports`. The tab strip
|
|
100
|
+
throws without it; **the loading bar does not — it just never moves.**
|
|
101
|
+
- **Locale comes from Angular's `LOCALE_ID`.** `WR_DATE_LOCALE` and `WrI18n`'s
|
|
102
|
+
`defaultLocale` / `availableLocales` used to read `navigator.language` or a
|
|
103
|
+
literal `'en'`. An app that really wants the browser's tag now writes
|
|
104
|
+
`provideWrDateAdapter({ locale: navigator.language })`.
|
|
105
|
+
- **A named date format refuses input it cannot read.** `shortDate` / `time` and
|
|
106
|
+
friends parse through the same `Intl` formatter that printed the string, so
|
|
107
|
+
they round-trip; unreadable input returns null and leaves the committed value
|
|
108
|
+
alone instead of guessing. Pass an explicit token `[format]` if you relied on
|
|
109
|
+
`new Date()`'s leniency.
|
|
110
|
+
- **`<wr-pagination ofLabel>` is gone**, and the `pagination.of` catalog key with
|
|
111
|
+
it. The range is one `pagination.range` template with `{{from}}` / `{{to}}` /
|
|
112
|
+
`{{total}}` placeholders — a catalog still carrying the old key reverts that
|
|
113
|
+
line to English silently.
|
|
114
|
+
|
|
115
|
+
Earlier steps, with diffs, back to v6: https://ngwr.dev/start/migration
|
|
92
116
|
|
|
93
117
|
## Use ngwr — don't hand-roll
|
|
94
118
|
|
|
@@ -140,7 +164,14 @@ before writing your own. Full catalog: https://ngwr.dev/reference/components.
|
|
|
140
164
|
`[(checked)]` on checkbox/switch), or classic `[(ngModel)]` / reactive forms
|
|
141
165
|
via Angular's bridge.
|
|
142
166
|
- **Icons** — register via `provideWrIcons`, render `<wr-icon name="check" />`.
|
|
143
|
-
- **
|
|
167
|
+
- **Router** — nothing injects `@angular/router` unless you opt in. A
|
|
168
|
+
`<wr-tab routerLink>` needs `wrTabsRouting` on the strip plus `WrTabsRouting`
|
|
169
|
+
(`ngwr/tabs/router`) in `imports`, and it throws if you forget.
|
|
170
|
+
`<wr-loading-bar>` follows navigation only with
|
|
171
|
+
`provideWrLoadingBarRouter()` (`ngwr/loading-bar/router`), and it does NOT
|
|
172
|
+
throw — without the provider the bar simply never moves.
|
|
173
|
+
- **i18n** — `{{ 'key' | wrT }}` (pipe from `ngwr/i18n`). The locale defaults to
|
|
174
|
+
Angular's `LOCALE_ID`, not the browser, for both copy and dates.
|
|
144
175
|
- **Theme** — CSS custom properties `--wr-color-*`, `--wr-border-radius-*`, … set
|
|
145
176
|
by `provideWrTheme()`. Two contrast tokens per intent, easy to confuse:
|
|
146
177
|
`--wr-color-<intent>-contrast` is the label ON a filled intent;
|
|
@@ -202,7 +233,7 @@ is meant to be checkable rather than taken on trust:
|
|
|
202
233
|
Forms controls; no `ControlValueAccessor` in the library), a comparison against
|
|
203
234
|
Material / PrimeNG / NG-ZORRO / Taiga / Spartan, and a per-competitor "choose
|
|
204
235
|
something else if" section: https://ngwr.dev/start/comparison
|
|
205
|
-
- **What gates a change** —
|
|
236
|
+
- **What gates a change** — nine gates on every PR, three separate
|
|
206
237
|
accessibility sweeps and what each one cannot see, the two nightly baselines
|
|
207
238
|
and what is accepted in them, plus what the test suite does NOT cover:
|
|
208
239
|
https://ngwr.dev/start/quality
|
|
@@ -210,8 +241,8 @@ is meant to be checkable rather than taken on trust:
|
|
|
210
241
|
https://ngwr.dev/start/playground
|
|
211
242
|
|
|
212
243
|
The honest shape of the project, since these pages say it too: one maintainer,
|
|
213
|
-
MIT,
|
|
214
|
-
|
|
244
|
+
MIT, eight majors shipped since 2026-06-12, a codemod for every break a codemod
|
|
245
|
+
can repair and a reported diagnosis for the rest, no commercial support.
|
|
215
246
|
|
|
216
247
|
## Resources (machine-readable)
|
|
217
248
|
|
package/mcp/catalog.js
CHANGED
|
@@ -11,8 +11,8 @@ import { fileURLToPath } from 'node:url';
|
|
|
11
11
|
* The catalog, read from the files the package already ships.
|
|
12
12
|
*
|
|
13
13
|
* **No second copy of anything, and that is the design constraint this whole
|
|
14
|
-
* server was built under.** `llms-full.txt` (~57 KB,
|
|
15
|
-
* `schematics/use/symbol-map.json` (
|
|
14
|
+
* server was built under.** `llms-full.txt` (~57 KB, 204 entry points) and
|
|
15
|
+
* `schematics/use/symbol-map.json` (216 symbols) are already in the tarball for
|
|
16
16
|
* other reasons, and the `.d.ts` bundle carries every signature. A server that
|
|
17
17
|
* embedded its own index would be a fourth copy to keep in step with the library,
|
|
18
18
|
* and the first one to go stale.
|
|
@@ -51,7 +51,7 @@ class Catalog {
|
|
|
51
51
|
/**
|
|
52
52
|
* Does this entry point ship a stylesheet?
|
|
53
53
|
*
|
|
54
|
-
* Read from the package's own `exports` map rather than assumed:
|
|
54
|
+
* Read from the package's own `exports` map rather than assumed: 96 of the 204
|
|
55
55
|
* entry points ship no `styles/_index.scss` — the testing harnesses, the
|
|
56
56
|
* services, the adapters — and telling a consumer to `@use` one of those breaks
|
|
57
57
|
* their Sass build.
|
package/mcp/providers.js
CHANGED
|
@@ -25,6 +25,17 @@ const REQUIRED_PROVIDERS = [
|
|
|
25
25
|
provider: "provideWrDateFnsAdapter() // from 'ngwr/date/adapters/fns'",
|
|
26
26
|
why: 'every date mode goes through an adapter; there is no built-in default',
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
// The bar itself needs no provider — `start()` / `complete()` work bare — so
|
|
30
|
+
// the rule names the ROUTER half, which is exactly the table's criterion: the
|
|
31
|
+
// component compiles, renders, and sits at 0% forever with nothing naming the
|
|
32
|
+
// cause. The subscription is opt-in because it is what pulls
|
|
33
|
+
// `@angular/router` into a bundle, and this project's own site shipped a dead
|
|
34
|
+
// bar for the length of one release by missing it.
|
|
35
|
+
test: /^WrLoadingBar/,
|
|
36
|
+
provider: "provideWrLoadingBarRouter() // from 'ngwr/loading-bar/router'",
|
|
37
|
+
why: 'without it the bar never responds to navigation; it only moves for manual start() / complete()',
|
|
38
|
+
},
|
|
28
39
|
{
|
|
29
40
|
// Spelled out rather than `^WrT(Pipe|Directive)$`: `describeTest` in the
|
|
30
41
|
// skill generator only names alternatives that are bare symbols, so a group
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngwr",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "14.0.0",
|
|
4
4
|
"bin": {
|
|
5
|
-
"ngwr-mcp": "
|
|
5
|
+
"ngwr-mcp": "mcp/server.js"
|
|
6
6
|
},
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"description": "Signals-first Angular UI library: 100+ standalone, zoneless-ready components with native Signal Forms, SSR-safe rendering and CSS-variable theming.",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"homepage": "https://ngwr.dev",
|
|
35
35
|
"repository": {
|
|
36
36
|
"type": "git",
|
|
37
|
-
"url": "https://github.com/thekhegay/ngwr"
|
|
37
|
+
"url": "git+https://github.com/thekhegay/ngwr.git"
|
|
38
38
|
},
|
|
39
39
|
"bugs": {
|
|
40
40
|
"url": "https://github.com/thekhegay/ngwr/issues"
|
|
@@ -845,6 +845,10 @@
|
|
|
845
845
|
"types": "./types/ngwr-line-chart-testing.d.ts",
|
|
846
846
|
"default": "./fesm2022/ngwr-line-chart-testing.mjs"
|
|
847
847
|
},
|
|
848
|
+
"./loading-bar/router": {
|
|
849
|
+
"types": "./types/ngwr-loading-bar-router.d.ts",
|
|
850
|
+
"default": "./fesm2022/ngwr-loading-bar-router.mjs"
|
|
851
|
+
},
|
|
848
852
|
"./markdown/testing": {
|
|
849
853
|
"types": "./types/ngwr-markdown-testing.d.ts",
|
|
850
854
|
"default": "./fesm2022/ngwr-markdown-testing.mjs"
|
|
@@ -965,6 +969,10 @@
|
|
|
965
969
|
"types": "./types/ngwr-table-testing.d.ts",
|
|
966
970
|
"default": "./fesm2022/ngwr-table-testing.mjs"
|
|
967
971
|
},
|
|
972
|
+
"./tabs/router": {
|
|
973
|
+
"types": "./types/ngwr-tabs-router.d.ts",
|
|
974
|
+
"default": "./fesm2022/ngwr-tabs-router.mjs"
|
|
975
|
+
},
|
|
968
976
|
"./tabs/testing": {
|
|
969
977
|
"types": "./types/ngwr-tabs-testing.d.ts",
|
|
970
978
|
"default": "./fesm2022/ngwr-tabs-testing.mjs"
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
/**
|
|
10
|
+
* v12 to v13 migration. It REPORTS and rewrites nothing, and both halves of
|
|
11
|
+
* that are deliberate.
|
|
12
|
+
*
|
|
13
|
+
* v13 has exactly one breaking change that reaches consumer code: `[id]` on
|
|
14
|
+
* `<wr-checkbox>`, `<wr-radio>` and `<wr-switch>` no longer lands on the HOST
|
|
15
|
+
* element. It only ever lived there by accident — a static `id="x"` was written
|
|
16
|
+
* to the host as a plain attribute AS WELL as fed to the inner `<input>`, so two
|
|
17
|
+
* elements carried the same id, `<label for>` resolved through
|
|
18
|
+
* `getElementById` to the host (not a labelable element, so `input.labels` went
|
|
19
|
+
* from 1 to 0) and `document.getElementById(id)` returned the wrong node. The
|
|
20
|
+
* host binding is `[attr.id]: null` now and the id lands only where it was
|
|
21
|
+
* documented to.
|
|
22
|
+
*
|
|
23
|
+
* **Why this reports instead of rewriting.** The change is not a rename. What a
|
|
24
|
+
* consumer has to do depends on what they wrote and on what they meant by it: a
|
|
25
|
+
* `wr-checkbox#agree { … }` rule may want to become `#agree` (the inner input,
|
|
26
|
+
* which is what most of them were reaching for), or `wr-checkbox:has(#agree)`,
|
|
27
|
+
* or a class — and only the author knows which. Rewriting the selector to
|
|
28
|
+
* `#agree` moves the declarations onto an `<input>` whose box is the 16px tick,
|
|
29
|
+
* not the row, so a codemod confident enough to edit it would silently restyle
|
|
30
|
+
* the wrong element. Naming the files is the honest amount of help.
|
|
31
|
+
*
|
|
32
|
+
* **Why it exists at all**, when v10 and v11 ship nothing. Those two broke
|
|
33
|
+
* painted COLOUR, and an empty codemod would have told people their visual
|
|
34
|
+
* regressions were handled. This one has something true to say: a selector that
|
|
35
|
+
* stops matching is silent in every language it can be written in — CSS has no
|
|
36
|
+
* error for it, `querySelector` returns `null`, and a Playwright or Cypress
|
|
37
|
+
* locator times out somewhere unrelated. It is exactly the shape that needs a
|
|
38
|
+
* file list, and until now nothing produced one: `ng update ngwr@14` from a v12
|
|
39
|
+
* app runs `migration-v14` and never mentions v13 at all, because the semver
|
|
40
|
+
* range `>12.x <=14.0.0` has nothing in it between the two.
|
|
41
|
+
*
|
|
42
|
+
* **What is deliberately NOT reported.** A `<label for="x">` pointing at one of
|
|
43
|
+
* these components got BETTER, not worse — it used to resolve to the
|
|
44
|
+
* unlabelable host and now finds the real input — so there is nothing to tell
|
|
45
|
+
* anyone. And `<wr-checkbox-group>` / `<wr-radio-group>` keep their host `id`;
|
|
46
|
+
* they never had the double-write, and the `#` immediately after the tag name
|
|
47
|
+
* in every pattern here is what keeps `wr-checkbox-group#filters` out of the
|
|
48
|
+
* warning.
|
|
49
|
+
*
|
|
50
|
+
* The other thing v13 shipped — `readonly` and `invalid` reaching every control
|
|
51
|
+
* — is additive, and needs no entry.
|
|
52
|
+
*/
|
|
53
|
+
const IGNORE_DIRS = new Set(['node_modules', 'dist', '.git', '.cache', '.angular', 'coverage', '.next', '.nuxt']);
|
|
54
|
+
/**
|
|
55
|
+
* An id selector anchored to one of the three tags, in a stylesheet, a
|
|
56
|
+
* `querySelector` string or a test locator alike — the substring is the same in
|
|
57
|
+
* all of them.
|
|
58
|
+
*
|
|
59
|
+
* The `#` is doing the anchoring work a negative lookahead does elsewhere in
|
|
60
|
+
* these migrations: `wr-checkbox-group#filters` cannot match `wr-checkbox#`,
|
|
61
|
+
* because the character after `wr-checkbox` is a hyphen. That is worth stating
|
|
62
|
+
* rather than relying on, since the group DOES keep its host id and reporting
|
|
63
|
+
* it would be a false alarm on working code.
|
|
64
|
+
*/
|
|
65
|
+
const HOST_ID_SELECTOR = /\bwr-(?:checkbox|radio|switch)#[\w-]+/g;
|
|
66
|
+
function ngUpdateV13() {
|
|
67
|
+
return (tree, context) => {
|
|
68
|
+
const hits = [];
|
|
69
|
+
visit(tree, '/', filePath => {
|
|
70
|
+
const lower = filePath.toLowerCase();
|
|
71
|
+
if (!/\.(ts|html|scss|css)$/.test(lower))
|
|
72
|
+
return;
|
|
73
|
+
const found = [...new Set(tree.readText(filePath).match(HOST_ID_SELECTOR) ?? [])];
|
|
74
|
+
if (found.length > 0)
|
|
75
|
+
hits.push({ file: filePath, selectors: found });
|
|
76
|
+
});
|
|
77
|
+
if (hits.length === 0) {
|
|
78
|
+
context.logger.info('ngwr v13 migration: nothing to do — no host-id selector on a checkbox, radio or switch.');
|
|
79
|
+
return tree;
|
|
80
|
+
}
|
|
81
|
+
context.logger.warn(`ngwr v13: a host-id selector found in ${hits.length} file(s). \`[id]\` on <wr-checkbox>, <wr-radio> and ` +
|
|
82
|
+
'<wr-switch> no longer lands on the host element — it goes to the inner <input>, which is where the input ' +
|
|
83
|
+
'was always documented to put it. Nothing throws: the selector simply stops matching, and CSS has no error ' +
|
|
84
|
+
'for that. Point it at the inner input (`#agree`), at the host by another hook (`wr-checkbox:has(#agree)`, ' +
|
|
85
|
+
'or a class), depending on which box you meant to style — the row or the 16px tick.');
|
|
86
|
+
for (const { file, selectors } of hits)
|
|
87
|
+
context.logger.warn(` ${file} — ${selectors.join(', ')}`);
|
|
88
|
+
return tree;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function visit(tree, path, visitor) {
|
|
92
|
+
const dir = tree.getDir(path);
|
|
93
|
+
for (const file of dir.subfiles)
|
|
94
|
+
visitor(`${path === '/' ? '' : path}/${file}`);
|
|
95
|
+
for (const sub of dir.subdirs) {
|
|
96
|
+
if (IGNORE_DIRS.has(sub))
|
|
97
|
+
continue;
|
|
98
|
+
visit(tree, `${path === '/' ? '' : path}/${sub}`, visitor);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.default = ngUpdateV13;
|