@vadem/ui 0.0.0-stage → 0.0.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.
- package/LICENSE-lucide.txt +43 -0
- package/README.md +19 -2
- package/fesm2022/vadem-ui-accordion.mjs +139 -0
- package/fesm2022/vadem-ui-accordion.mjs.map +1 -0
- package/fesm2022/vadem-ui-active-filters.mjs +355 -0
- package/fesm2022/vadem-ui-active-filters.mjs.map +1 -0
- package/fesm2022/vadem-ui-alert-dialog.mjs +433 -0
- package/fesm2022/vadem-ui-alert-dialog.mjs.map +1 -0
- package/fesm2022/vadem-ui-alert.mjs +266 -0
- package/fesm2022/vadem-ui-alert.mjs.map +1 -0
- package/fesm2022/vadem-ui-autocomplete.mjs +715 -0
- package/fesm2022/vadem-ui-autocomplete.mjs.map +1 -0
- package/fesm2022/vadem-ui-avatar.mjs +219 -0
- package/fesm2022/vadem-ui-avatar.mjs.map +1 -0
- package/fesm2022/vadem-ui-badge.mjs +86 -0
- package/fesm2022/vadem-ui-badge.mjs.map +1 -0
- package/fesm2022/vadem-ui-breadcrumbs.mjs +61 -0
- package/fesm2022/vadem-ui-breadcrumbs.mjs.map +1 -0
- package/fesm2022/vadem-ui-button.mjs +220 -0
- package/fesm2022/vadem-ui-button.mjs.map +1 -0
- package/fesm2022/vadem-ui-calendar.mjs +1314 -0
- package/fesm2022/vadem-ui-calendar.mjs.map +1 -0
- package/fesm2022/vadem-ui-card.mjs +271 -0
- package/fesm2022/vadem-ui-card.mjs.map +1 -0
- package/fesm2022/vadem-ui-character-count.mjs +269 -0
- package/fesm2022/vadem-ui-character-count.mjs.map +1 -0
- package/fesm2022/vadem-ui-chart.mjs +1984 -0
- package/fesm2022/vadem-ui-chart.mjs.map +1 -0
- package/fesm2022/vadem-ui-checkbox.mjs +67 -0
- package/fesm2022/vadem-ui-checkbox.mjs.map +1 -0
- package/fesm2022/vadem-ui-color-picker.mjs +815 -0
- package/fesm2022/vadem-ui-color-picker.mjs.map +1 -0
- package/fesm2022/vadem-ui-command.mjs +735 -0
- package/fesm2022/vadem-ui-command.mjs.map +1 -0
- package/fesm2022/vadem-ui-copy-button.mjs +375 -0
- package/fesm2022/vadem-ui-copy-button.mjs.map +1 -0
- package/fesm2022/vadem-ui-date-range-picker.mjs +1011 -0
- package/fesm2022/vadem-ui-date-range-picker.mjs.map +1 -0
- package/fesm2022/vadem-ui-description-list.mjs +59 -0
- package/fesm2022/vadem-ui-description-list.mjs.map +1 -0
- package/fesm2022/vadem-ui-dialog.mjs +587 -0
- package/fesm2022/vadem-ui-dialog.mjs.map +1 -0
- package/fesm2022/vadem-ui-dropzone.mjs +176 -0
- package/fesm2022/vadem-ui-dropzone.mjs.map +1 -0
- package/fesm2022/vadem-ui-editable-text.mjs +641 -0
- package/fesm2022/vadem-ui-editable-text.mjs.map +1 -0
- package/fesm2022/vadem-ui-empty-state.mjs +175 -0
- package/fesm2022/vadem-ui-empty-state.mjs.map +1 -0
- package/fesm2022/vadem-ui-expandable-text.mjs +244 -0
- package/fesm2022/vadem-ui-expandable-text.mjs.map +1 -0
- package/fesm2022/vadem-ui-field.mjs +583 -0
- package/fesm2022/vadem-ui-field.mjs.map +1 -0
- package/fesm2022/vadem-ui-file-preview.mjs +532 -0
- package/fesm2022/vadem-ui-file-preview.mjs.map +1 -0
- package/fesm2022/vadem-ui-file-size.mjs +83 -0
- package/fesm2022/vadem-ui-file-size.mjs.map +1 -0
- package/fesm2022/vadem-ui-form-error-summary.mjs +201 -0
- package/fesm2022/vadem-ui-form-error-summary.mjs.map +1 -0
- package/fesm2022/vadem-ui-icon.mjs +303 -0
- package/fesm2022/vadem-ui-icon.mjs.map +1 -0
- package/fesm2022/vadem-ui-input.mjs +120 -0
- package/fesm2022/vadem-ui-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-kbd.mjs +286 -0
- package/fesm2022/vadem-ui-kbd.mjs.map +1 -0
- package/fesm2022/vadem-ui-keyboard.mjs +105 -0
- package/fesm2022/vadem-ui-keyboard.mjs.map +1 -0
- package/fesm2022/vadem-ui-locale.mjs +443 -0
- package/fesm2022/vadem-ui-locale.mjs.map +1 -0
- package/fesm2022/vadem-ui-menu.mjs +637 -0
- package/fesm2022/vadem-ui-menu.mjs.map +1 -0
- package/fesm2022/vadem-ui-navigation-list.mjs +130 -0
- package/fesm2022/vadem-ui-navigation-list.mjs.map +1 -0
- package/fesm2022/vadem-ui-number-input.mjs +264 -0
- package/fesm2022/vadem-ui-number-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-otp-input.mjs +86 -0
- package/fesm2022/vadem-ui-otp-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-pagination.mjs +353 -0
- package/fesm2022/vadem-ui-pagination.mjs.map +1 -0
- package/fesm2022/vadem-ui-password-input.mjs +213 -0
- package/fesm2022/vadem-ui-password-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-popover.mjs +178 -0
- package/fesm2022/vadem-ui-popover.mjs.map +1 -0
- package/fesm2022/vadem-ui-progress.mjs +331 -0
- package/fesm2022/vadem-ui-progress.mjs.map +1 -0
- package/fesm2022/vadem-ui-radio.mjs +39 -0
- package/fesm2022/vadem-ui-radio.mjs.map +1 -0
- package/fesm2022/vadem-ui-range-slider.mjs +561 -0
- package/fesm2022/vadem-ui-range-slider.mjs.map +1 -0
- package/fesm2022/vadem-ui-rating.mjs +404 -0
- package/fesm2022/vadem-ui-rating.mjs.map +1 -0
- package/fesm2022/vadem-ui-relative-time.mjs +217 -0
- package/fesm2022/vadem-ui-relative-time.mjs.map +1 -0
- package/fesm2022/vadem-ui-reorder-list.mjs +601 -0
- package/fesm2022/vadem-ui-reorder-list.mjs.map +1 -0
- package/fesm2022/vadem-ui-scroll-area.mjs +65 -0
- package/fesm2022/vadem-ui-scroll-area.mjs.map +1 -0
- package/fesm2022/vadem-ui-search-input.mjs +307 -0
- package/fesm2022/vadem-ui-search-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-segmented.mjs +297 -0
- package/fesm2022/vadem-ui-segmented.mjs.map +1 -0
- package/fesm2022/vadem-ui-select.mjs +1462 -0
- package/fesm2022/vadem-ui-select.mjs.map +1 -0
- package/fesm2022/vadem-ui-sidebar.mjs +493 -0
- package/fesm2022/vadem-ui-sidebar.mjs.map +1 -0
- package/fesm2022/vadem-ui-skeleton.mjs +106 -0
- package/fesm2022/vadem-ui-skeleton.mjs.map +1 -0
- package/fesm2022/vadem-ui-slider.mjs +60 -0
- package/fesm2022/vadem-ui-slider.mjs.map +1 -0
- package/fesm2022/vadem-ui-splitter.mjs +438 -0
- package/fesm2022/vadem-ui-splitter.mjs.map +1 -0
- package/fesm2022/vadem-ui-stat.mjs +369 -0
- package/fesm2022/vadem-ui-stat.mjs.map +1 -0
- package/fesm2022/vadem-ui-stepper.mjs +483 -0
- package/fesm2022/vadem-ui-stepper.mjs.map +1 -0
- package/fesm2022/vadem-ui-switch.mjs +45 -0
- package/fesm2022/vadem-ui-switch.mjs.map +1 -0
- package/fesm2022/vadem-ui-table.mjs +593 -0
- package/fesm2022/vadem-ui-table.mjs.map +1 -0
- package/fesm2022/vadem-ui-tabs.mjs +405 -0
- package/fesm2022/vadem-ui-tabs.mjs.map +1 -0
- package/fesm2022/vadem-ui-tag-input.mjs +685 -0
- package/fesm2022/vadem-ui-tag-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-text-highlight.mjs +126 -0
- package/fesm2022/vadem-ui-text-highlight.mjs.map +1 -0
- package/fesm2022/vadem-ui-time-input.mjs +430 -0
- package/fesm2022/vadem-ui-time-input.mjs.map +1 -0
- package/fesm2022/vadem-ui-timeline.mjs +313 -0
- package/fesm2022/vadem-ui-timeline.mjs.map +1 -0
- package/fesm2022/vadem-ui-toast.mjs +397 -0
- package/fesm2022/vadem-ui-toast.mjs.map +1 -0
- package/fesm2022/vadem-ui-toolbar.mjs +396 -0
- package/fesm2022/vadem-ui-toolbar.mjs.map +1 -0
- package/fesm2022/vadem-ui-tooltip.mjs +218 -0
- package/fesm2022/vadem-ui-tooltip.mjs.map +1 -0
- package/fesm2022/vadem-ui-tree.mjs +551 -0
- package/fesm2022/vadem-ui-tree.mjs.map +1 -0
- package/fesm2022/vadem-ui-upload-list.mjs +408 -0
- package/fesm2022/vadem-ui-upload-list.mjs.map +1 -0
- package/fesm2022/vadem-ui.mjs +4 -0
- package/fesm2022/vadem-ui.mjs.map +1 -0
- package/fonts/jetbrains-mono/OFL.txt +93 -0
- package/fonts/jetbrains-mono/jetbrains-mono-cyrillic.woff2 +0 -0
- package/fonts/jetbrains-mono/jetbrains-mono-latin.woff2 +0 -0
- package/fonts/manrope/OFL.txt +93 -0
- package/fonts/manrope/manrope-cyrillic.woff2 +0 -0
- package/fonts/manrope/manrope-latin.woff2 +0 -0
- package/package.json +306 -3
- package/styles/base.css +160 -0
- package/styles/components/accordion.css +130 -0
- package/styles/components/active-filters.css +42 -0
- package/styles/components/alert-dialog.css +34 -0
- package/styles/components/alert.css +159 -0
- package/styles/components/autocomplete.css +97 -0
- package/styles/components/avatar.css +90 -0
- package/styles/components/badge.css +91 -0
- package/styles/components/breadcrumbs.css +94 -0
- package/styles/components/button.css +174 -0
- package/styles/components/calendar.css +186 -0
- package/styles/components/card.css +206 -0
- package/styles/components/character-count.css +41 -0
- package/styles/components/chart.css +308 -0
- package/styles/components/checkbox.css +115 -0
- package/styles/components/color-picker.css +158 -0
- package/styles/components/command.css +175 -0
- package/styles/components/copy-button.css +58 -0
- package/styles/components/date-range-picker.css +153 -0
- package/styles/components/description-list.css +69 -0
- package/styles/components/dialog.css +334 -0
- package/styles/components/dropzone.css +89 -0
- package/styles/components/editable-text.css +58 -0
- package/styles/components/empty-state.css +72 -0
- package/styles/components/expandable-text.css +24 -0
- package/styles/components/field.css +148 -0
- package/styles/components/file-preview.css +65 -0
- package/styles/components/form-error-summary.css +71 -0
- package/styles/components/icon.css +38 -0
- package/styles/components/index.css +80 -0
- package/styles/components/input.css +171 -0
- package/styles/components/kbd.css +42 -0
- package/styles/components/menu.css +168 -0
- package/styles/components/multi-select.css +156 -0
- package/styles/components/navigation-list.css +147 -0
- package/styles/components/number-input.css +33 -0
- package/styles/components/otp-input.css +26 -0
- package/styles/components/pagination.css +127 -0
- package/styles/components/password-input.css +20 -0
- package/styles/components/popover.css +93 -0
- package/styles/components/progress-ring.css +112 -0
- package/styles/components/progress.css +162 -0
- package/styles/components/radio.css +117 -0
- package/styles/components/range-slider.css +158 -0
- package/styles/components/rating.css +100 -0
- package/styles/components/reorder-list.css +143 -0
- package/styles/components/scroll-area.css +39 -0
- package/styles/components/search-input.css +25 -0
- package/styles/components/segmented.css +136 -0
- package/styles/components/select.css +257 -0
- package/styles/components/sidebar.css +105 -0
- package/styles/components/skeleton.css +83 -0
- package/styles/components/slider.css +132 -0
- package/styles/components/splitter.css +83 -0
- package/styles/components/stat.css +62 -0
- package/styles/components/stepper.css +236 -0
- package/styles/components/switch.css +107 -0
- package/styles/components/table.css +195 -0
- package/styles/components/tabs.css +198 -0
- package/styles/components/tag-input.css +138 -0
- package/styles/components/text-highlight.css +22 -0
- package/styles/components/time-input.css +96 -0
- package/styles/components/timeline.css +182 -0
- package/styles/components/toast.css +146 -0
- package/styles/components/toolbar.css +72 -0
- package/styles/components/tooltip.css +93 -0
- package/styles/components/tree.css +88 -0
- package/styles/components/upload-list.css +113 -0
- package/styles/fonts.css +67 -0
- package/styles/index.css +14 -0
- package/styles/reset.css +57 -0
- package/styles/tokens/primitives.css +364 -0
- package/styles/tokens/semantic.css +233 -0
- package/types/vadem-ui-accordion.d.ts +43 -0
- package/types/vadem-ui-active-filters.d.ts +73 -0
- package/types/vadem-ui-alert-dialog.d.ts +87 -0
- package/types/vadem-ui-alert.d.ts +64 -0
- package/types/vadem-ui-autocomplete.d.ts +156 -0
- package/types/vadem-ui-avatar.d.ts +59 -0
- package/types/vadem-ui-badge.d.ts +25 -0
- package/types/vadem-ui-breadcrumbs.d.ts +22 -0
- package/types/vadem-ui-button.d.ts +52 -0
- package/types/vadem-ui-calendar.d.ts +327 -0
- package/types/vadem-ui-card.d.ts +58 -0
- package/types/vadem-ui-character-count.d.ts +71 -0
- package/types/vadem-ui-chart.d.ts +452 -0
- package/types/vadem-ui-checkbox.d.ts +20 -0
- package/types/vadem-ui-color-picker.d.ts +171 -0
- package/types/vadem-ui-command.d.ts +145 -0
- package/types/vadem-ui-copy-button.d.ts +90 -0
- package/types/vadem-ui-date-range-picker.d.ts +216 -0
- package/types/vadem-ui-description-list.d.ts +15 -0
- package/types/vadem-ui-dialog.d.ts +174 -0
- package/types/vadem-ui-dropzone.d.ts +73 -0
- package/types/vadem-ui-editable-text.d.ts +141 -0
- package/types/vadem-ui-empty-state.d.ts +34 -0
- package/types/vadem-ui-expandable-text.d.ts +52 -0
- package/types/vadem-ui-field.d.ts +180 -0
- package/types/vadem-ui-file-preview.d.ts +108 -0
- package/types/vadem-ui-file-size.d.ts +18 -0
- package/types/vadem-ui-form-error-summary.d.ts +46 -0
- package/types/vadem-ui-icon.d.ts +152 -0
- package/types/vadem-ui-input.d.ts +31 -0
- package/types/vadem-ui-kbd.d.ts +66 -0
- package/types/vadem-ui-keyboard.d.ts +61 -0
- package/types/vadem-ui-locale.d.ts +241 -0
- package/types/vadem-ui-menu.d.ts +132 -0
- package/types/vadem-ui-navigation-list.d.ts +28 -0
- package/types/vadem-ui-number-input.d.ts +39 -0
- package/types/vadem-ui-otp-input.d.ts +15 -0
- package/types/vadem-ui-pagination.d.ts +96 -0
- package/types/vadem-ui-password-input.d.ts +36 -0
- package/types/vadem-ui-popover.d.ts +48 -0
- package/types/vadem-ui-progress.d.ts +95 -0
- package/types/vadem-ui-radio.d.ts +11 -0
- package/types/vadem-ui-range-slider.d.ts +136 -0
- package/types/vadem-ui-rating.d.ts +95 -0
- package/types/vadem-ui-relative-time.d.ts +58 -0
- package/types/vadem-ui-reorder-list.d.ts +120 -0
- package/types/vadem-ui-scroll-area.d.ts +13 -0
- package/types/vadem-ui-search-input.d.ts +58 -0
- package/types/vadem-ui-segmented.d.ts +76 -0
- package/types/vadem-ui-select.d.ts +303 -0
- package/types/vadem-ui-sidebar.d.ts +70 -0
- package/types/vadem-ui-skeleton.d.ts +28 -0
- package/types/vadem-ui-slider.d.ts +17 -0
- package/types/vadem-ui-splitter.d.ts +99 -0
- package/types/vadem-ui-stat.d.ts +101 -0
- package/types/vadem-ui-stepper.d.ts +108 -0
- package/types/vadem-ui-switch.d.ts +10 -0
- package/types/vadem-ui-table.d.ts +172 -0
- package/types/vadem-ui-tabs.d.ts +101 -0
- package/types/vadem-ui-tag-input.d.ts +170 -0
- package/types/vadem-ui-text-highlight.d.ts +27 -0
- package/types/vadem-ui-time-input.d.ts +47 -0
- package/types/vadem-ui-timeline.d.ts +54 -0
- package/types/vadem-ui-toast.d.ts +104 -0
- package/types/vadem-ui-toolbar.d.ts +80 -0
- package/types/vadem-ui-tooltip.d.ts +71 -0
- package/types/vadem-ui-tree.d.ts +123 -0
- package/types/vadem-ui-upload-list.d.ts +70 -0
- package/types/vadem-ui.d.ts +1 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
import { InjectionToken, computed, inject, makeEnvironmentProviders } from "@angular/core";
|
|
2
|
+
function vdPlural(code, count, forms) {
|
|
3
|
+
return (forms[new Intl.PluralRules(code).select(count)] ?? forms.other).replace("#", String(count));
|
|
4
|
+
}
|
|
5
|
+
const vdLocaleEn = {
|
|
6
|
+
code: "en",
|
|
7
|
+
activeFilters: {
|
|
8
|
+
label: "Active filters",
|
|
9
|
+
clearText: "Clear all",
|
|
10
|
+
emptyText: "No filters applied.",
|
|
11
|
+
invalidText: "These filters could not be displayed.",
|
|
12
|
+
removeLabel: (label, value) => `Remove ${label}: ${value}`
|
|
13
|
+
},
|
|
14
|
+
alert: { dismissLabel: "Dismiss" },
|
|
15
|
+
alertDialog: {
|
|
16
|
+
confirmLabel: "Confirm",
|
|
17
|
+
cancelLabel: "Cancel",
|
|
18
|
+
pendingText: "Working… Please wait.",
|
|
19
|
+
errorText: "The action could not be completed. Try again or cancel."
|
|
20
|
+
},
|
|
21
|
+
autocomplete: {
|
|
22
|
+
label: "Suggestions",
|
|
23
|
+
loadingText: "Loading suggestions…",
|
|
24
|
+
emptyText: "No suggestions. You can enter your own text.",
|
|
25
|
+
resultsText: (count) => vdPlural("en", count, {
|
|
26
|
+
one: "# suggestion available.",
|
|
27
|
+
other: "# suggestions available."
|
|
28
|
+
})
|
|
29
|
+
},
|
|
30
|
+
breadcrumbs: { label: "Breadcrumb" },
|
|
31
|
+
calendar: {
|
|
32
|
+
previousLabel: "Previous month",
|
|
33
|
+
nextLabel: "Next month"
|
|
34
|
+
},
|
|
35
|
+
characterCount: {
|
|
36
|
+
countText: (used, limit) => limit === null ? vdPlural("en", used, {
|
|
37
|
+
one: `${used} character`,
|
|
38
|
+
other: `${used} characters`
|
|
39
|
+
}) : `${used} / ${limit}`,
|
|
40
|
+
remainingText: (count) => vdPlural("en", count, {
|
|
41
|
+
one: `${count} character remaining.`,
|
|
42
|
+
other: `${count} characters remaining.`
|
|
43
|
+
}),
|
|
44
|
+
overText: (count) => vdPlural("en", count, {
|
|
45
|
+
one: `${count} character over the limit.`,
|
|
46
|
+
other: `${count} characters over the limit.`
|
|
47
|
+
}),
|
|
48
|
+
limitText: "Character limit reached."
|
|
49
|
+
},
|
|
50
|
+
chart: {
|
|
51
|
+
tableLabel: "Data table",
|
|
52
|
+
categoryLabel: "Category",
|
|
53
|
+
trendSummary: (first, last, min, max) => `from ${first} to ${last}, low ${min}, high ${max}`
|
|
54
|
+
},
|
|
55
|
+
datePicker: {
|
|
56
|
+
openLabel: "Choose date",
|
|
57
|
+
dialogLabel: "Choose date",
|
|
58
|
+
previousLabel: "Previous month",
|
|
59
|
+
nextLabel: "Next month"
|
|
60
|
+
},
|
|
61
|
+
colorPicker: {
|
|
62
|
+
placeholder: "Choose color",
|
|
63
|
+
pickerLabel: "Choose color",
|
|
64
|
+
hexLabel: "HEX color",
|
|
65
|
+
paletteLabel: "Palette",
|
|
66
|
+
applyLabel: "Apply color",
|
|
67
|
+
errorLabel: "Enter a HEX color, such as #6D4BD3"
|
|
68
|
+
},
|
|
69
|
+
contextMenu: { label: "Actions" },
|
|
70
|
+
command: {
|
|
71
|
+
label: "Search commands",
|
|
72
|
+
placeholder: "Search commands…",
|
|
73
|
+
emptyText: "No commands found",
|
|
74
|
+
loadingText: "Loading commands…"
|
|
75
|
+
},
|
|
76
|
+
copyButton: {
|
|
77
|
+
label: "Copy",
|
|
78
|
+
copyingLabel: "Copying…",
|
|
79
|
+
copiedLabel: "Copied",
|
|
80
|
+
errorLabel: "Try again",
|
|
81
|
+
errorMessage: "Could not copy. Select the text and copy it manually."
|
|
82
|
+
},
|
|
83
|
+
dateRangePicker: {
|
|
84
|
+
groupLabel: "Date range",
|
|
85
|
+
startLabel: "Start date",
|
|
86
|
+
endLabel: "End date",
|
|
87
|
+
openLabel: "Choose date range",
|
|
88
|
+
pickerLabel: "Choose date range",
|
|
89
|
+
previousLabel: "Previous month",
|
|
90
|
+
nextLabel: "Next month",
|
|
91
|
+
startInstruction: "Choose the start date",
|
|
92
|
+
endInstruction: "Choose the end date",
|
|
93
|
+
errorLabel: "Enter a valid range, with the end on or after the start"
|
|
94
|
+
},
|
|
95
|
+
editableText: {
|
|
96
|
+
emptyText: "Add a value",
|
|
97
|
+
editLabel: (label, value) => `Edit ${label}: ${value}`,
|
|
98
|
+
saveLabel: "Save",
|
|
99
|
+
cancelLabel: "Cancel",
|
|
100
|
+
savingText: "Saving…",
|
|
101
|
+
savedText: "Saved.",
|
|
102
|
+
saveErrorText: "Could not save. Your text is kept; try again.",
|
|
103
|
+
requiredText: "Enter a value.",
|
|
104
|
+
tooLongText: (limit) => `Use at most ${limit} characters.`
|
|
105
|
+
},
|
|
106
|
+
fileSize: { unknownText: "Unknown size" },
|
|
107
|
+
filePreview: {
|
|
108
|
+
title: "File preview",
|
|
109
|
+
closeLabel: "Close",
|
|
110
|
+
downloadLabel: "Download",
|
|
111
|
+
loadingText: "Loading preview…",
|
|
112
|
+
errorText: "The image could not be displayed. Download the file to open it.",
|
|
113
|
+
emptyText: "Choose a file to preview.",
|
|
114
|
+
unsupportedText: "Preview is not available for this file type. Download it to open it.",
|
|
115
|
+
pdfText: "PDF preview depends on your browser. If it is unavailable, download the file to open it."
|
|
116
|
+
},
|
|
117
|
+
expandableText: {
|
|
118
|
+
expandLabel: "Show more",
|
|
119
|
+
collapseLabel: "Show less"
|
|
120
|
+
},
|
|
121
|
+
formErrorSummary: {
|
|
122
|
+
title: "Check the form",
|
|
123
|
+
description: "Correct the following fields before continuing."
|
|
124
|
+
},
|
|
125
|
+
kbd: { thenLabel: "then" },
|
|
126
|
+
navigationList: { label: "Navigation" },
|
|
127
|
+
numberInput: {
|
|
128
|
+
decreaseLabel: "Decrease value",
|
|
129
|
+
increaseLabel: "Increase value"
|
|
130
|
+
},
|
|
131
|
+
pagination: {
|
|
132
|
+
label: "Pagination",
|
|
133
|
+
previousLabel: "Previous page",
|
|
134
|
+
nextLabel: "Next page",
|
|
135
|
+
pageLabel: (page) => `Page ${page}`
|
|
136
|
+
},
|
|
137
|
+
passwordInput: { revealLabel: "Show password" },
|
|
138
|
+
progressRing: { label: "Loading" },
|
|
139
|
+
rangeSlider: {
|
|
140
|
+
lowerLabel: "Minimum",
|
|
141
|
+
upperLabel: "Maximum"
|
|
142
|
+
},
|
|
143
|
+
rating: { starLabel: (value) => vdPlural("en", value, {
|
|
144
|
+
one: "# out of 5 stars",
|
|
145
|
+
other: "# out of 5 stars"
|
|
146
|
+
}) },
|
|
147
|
+
relativeTime: {
|
|
148
|
+
justNowText: "Just now",
|
|
149
|
+
unknownText: "Unknown time"
|
|
150
|
+
},
|
|
151
|
+
reorderList: {
|
|
152
|
+
label: "Item order",
|
|
153
|
+
instructions: "Move items with Up and Down buttons or drag the handle. Escape cancels dragging.",
|
|
154
|
+
upText: "Up",
|
|
155
|
+
downText: "Down",
|
|
156
|
+
emptyText: "There are no items to reorder.",
|
|
157
|
+
invalidText: "This list cannot be reordered.",
|
|
158
|
+
movedText: (label, position, total) => `${label}. Position ${position} of ${total}.`,
|
|
159
|
+
canceledText: (label) => `Reordering canceled: ${label}.`
|
|
160
|
+
},
|
|
161
|
+
searchInput: {
|
|
162
|
+
clearLabel: "Clear search",
|
|
163
|
+
loadingLabel: "Searching"
|
|
164
|
+
},
|
|
165
|
+
select: { emptyText: "No options" },
|
|
166
|
+
multiSelect: {
|
|
167
|
+
removeLabel: (label) => `Remove ${label}`,
|
|
168
|
+
selectionLabel: (count) => `${count} selected`
|
|
169
|
+
},
|
|
170
|
+
sidebar: {
|
|
171
|
+
label: "Navigation",
|
|
172
|
+
closeLabel: "Close"
|
|
173
|
+
},
|
|
174
|
+
stat: {
|
|
175
|
+
increaseLabel: "Increase",
|
|
176
|
+
decreaseLabel: "Decrease",
|
|
177
|
+
unchangedLabel: "No change"
|
|
178
|
+
},
|
|
179
|
+
stepper: {
|
|
180
|
+
label: "Steps",
|
|
181
|
+
completedLabel: "Completed",
|
|
182
|
+
errorLabel: "Needs attention"
|
|
183
|
+
},
|
|
184
|
+
tagInput: {
|
|
185
|
+
addLabel: "Add tag",
|
|
186
|
+
tagsLabel: "Tags",
|
|
187
|
+
removeLabel: (tag) => `Remove ${tag}`,
|
|
188
|
+
addedMessage: (tag) => `Added ${tag}.`,
|
|
189
|
+
removedMessage: (tag) => `Removed ${tag}.`,
|
|
190
|
+
duplicateMessage: (tag) => `${tag} is already added.`
|
|
191
|
+
},
|
|
192
|
+
timeInput: {
|
|
193
|
+
pickerLabel: "Choose time",
|
|
194
|
+
hoursLabel: "Hours",
|
|
195
|
+
minutesLabel: "Minutes",
|
|
196
|
+
emptyLabel: "No available times"
|
|
197
|
+
},
|
|
198
|
+
timeline: { label: "Activity timeline" },
|
|
199
|
+
toast: {
|
|
200
|
+
label: "Notifications",
|
|
201
|
+
closeLabel: "Close"
|
|
202
|
+
},
|
|
203
|
+
toolbar: { label: "Toolbar" },
|
|
204
|
+
tree: { label: "Tree" },
|
|
205
|
+
uploadList: { label: "Uploads" }
|
|
206
|
+
};
|
|
207
|
+
const vdLocaleUk = {
|
|
208
|
+
code: "uk",
|
|
209
|
+
activeFilters: {
|
|
210
|
+
label: "Застосовані фільтри",
|
|
211
|
+
clearText: "Очистити всі",
|
|
212
|
+
emptyText: "Фільтри не застосовано.",
|
|
213
|
+
invalidText: "Не вдалося показати ці фільтри.",
|
|
214
|
+
removeLabel: (label, value) => `Прибрати фільтр ${label}: ${value}`
|
|
215
|
+
},
|
|
216
|
+
alert: { dismissLabel: "Закрити повідомлення" },
|
|
217
|
+
alertDialog: {
|
|
218
|
+
confirmLabel: "Підтвердити",
|
|
219
|
+
cancelLabel: "Скасувати",
|
|
220
|
+
pendingText: "Виконуємо дію… Зачекайте.",
|
|
221
|
+
errorText: "Не вдалося виконати дію. Спробуйте ще раз або скасуйте."
|
|
222
|
+
},
|
|
223
|
+
autocomplete: {
|
|
224
|
+
label: "Підказки",
|
|
225
|
+
loadingText: "Завантаження підказок…",
|
|
226
|
+
emptyText: "Підказок немає. Можна ввести власний текст.",
|
|
227
|
+
resultsText: (count) => vdPlural("uk", count, {
|
|
228
|
+
one: "Доступна # підказка.",
|
|
229
|
+
few: "Доступні # підказки.",
|
|
230
|
+
other: "Доступно # підказок."
|
|
231
|
+
})
|
|
232
|
+
},
|
|
233
|
+
breadcrumbs: { label: "Навігаційний ланцюжок" },
|
|
234
|
+
calendar: {
|
|
235
|
+
previousLabel: "Попередній місяць",
|
|
236
|
+
nextLabel: "Наступний місяць"
|
|
237
|
+
},
|
|
238
|
+
characterCount: {
|
|
239
|
+
countText: (used, limit) => limit === null ? vdPlural("uk", used, {
|
|
240
|
+
one: `${used} символ`,
|
|
241
|
+
few: `${used} символи`,
|
|
242
|
+
many: `${used} символів`,
|
|
243
|
+
other: `${used} символу`
|
|
244
|
+
}) : `${used} / ${limit}`,
|
|
245
|
+
remainingText: (count) => `Залишилось ${vdPlural("uk", count, {
|
|
246
|
+
one: `${count} символ`,
|
|
247
|
+
few: `${count} символи`,
|
|
248
|
+
many: `${count} символів`,
|
|
249
|
+
other: `${count} символу`
|
|
250
|
+
})}.`,
|
|
251
|
+
overText: (count) => `Перевищення на ${vdPlural("uk", count, {
|
|
252
|
+
one: `${count} символ`,
|
|
253
|
+
few: `${count} символи`,
|
|
254
|
+
many: `${count} символів`,
|
|
255
|
+
other: `${count} символу`
|
|
256
|
+
})}.`,
|
|
257
|
+
limitText: "Ліміт символів досягнуто."
|
|
258
|
+
},
|
|
259
|
+
chart: {
|
|
260
|
+
tableLabel: "Таблиця даних",
|
|
261
|
+
categoryLabel: "Категорія",
|
|
262
|
+
trendSummary: (first, last, min, max) => `від ${first} до ${last}, мінімум ${min}, максимум ${max}`
|
|
263
|
+
},
|
|
264
|
+
datePicker: {
|
|
265
|
+
openLabel: "Обрати дату",
|
|
266
|
+
dialogLabel: "Обрати дату",
|
|
267
|
+
previousLabel: "Попередній місяць",
|
|
268
|
+
nextLabel: "Наступний місяць"
|
|
269
|
+
},
|
|
270
|
+
colorPicker: {
|
|
271
|
+
placeholder: "Оберіть колір",
|
|
272
|
+
pickerLabel: "Обрати колір",
|
|
273
|
+
hexLabel: "Колір HEX",
|
|
274
|
+
paletteLabel: "Палітра",
|
|
275
|
+
applyLabel: "Застосувати колір",
|
|
276
|
+
errorLabel: "Введіть колір у форматі HEX, наприклад #6D4BD3"
|
|
277
|
+
},
|
|
278
|
+
contextMenu: { label: "Дії" },
|
|
279
|
+
command: {
|
|
280
|
+
label: "Пошук команд",
|
|
281
|
+
placeholder: "Пошук команд…",
|
|
282
|
+
emptyText: "Команд не знайдено",
|
|
283
|
+
loadingText: "Завантаження команд…"
|
|
284
|
+
},
|
|
285
|
+
copyButton: {
|
|
286
|
+
label: "Копіювати",
|
|
287
|
+
copyingLabel: "Копіювання…",
|
|
288
|
+
copiedLabel: "Скопійовано",
|
|
289
|
+
errorLabel: "Спробувати ще раз",
|
|
290
|
+
errorMessage: "Не вдалося скопіювати. Виділіть текст і скопіюйте вручну."
|
|
291
|
+
},
|
|
292
|
+
dateRangePicker: {
|
|
293
|
+
groupLabel: "Діапазон дат",
|
|
294
|
+
startLabel: "Дата початку",
|
|
295
|
+
endLabel: "Дата завершення",
|
|
296
|
+
openLabel: "Обрати діапазон дат",
|
|
297
|
+
pickerLabel: "Обрати діапазон дат",
|
|
298
|
+
previousLabel: "Попередній місяць",
|
|
299
|
+
nextLabel: "Наступний місяць",
|
|
300
|
+
startInstruction: "Оберіть дату початку",
|
|
301
|
+
endInstruction: "Оберіть дату завершення",
|
|
302
|
+
errorLabel: "Введіть коректний діапазон: кінець не раніше за початок"
|
|
303
|
+
},
|
|
304
|
+
editableText: {
|
|
305
|
+
emptyText: "Додати значення",
|
|
306
|
+
editLabel: (label, value) => `Редагувати ${label}: ${value}`,
|
|
307
|
+
saveLabel: "Зберегти",
|
|
308
|
+
cancelLabel: "Скасувати",
|
|
309
|
+
savingText: "Зберігаємо…",
|
|
310
|
+
savedText: "Збережено.",
|
|
311
|
+
saveErrorText: "Не вдалося зберегти. Текст збережено в полі; спробуйте ще раз.",
|
|
312
|
+
requiredText: "Введіть значення.",
|
|
313
|
+
tooLongText: (limit) => `Використайте не більше ${limit} символів.`
|
|
314
|
+
},
|
|
315
|
+
fileSize: { unknownText: "Розмір невідомий" },
|
|
316
|
+
filePreview: {
|
|
317
|
+
title: "Перегляд файлу",
|
|
318
|
+
closeLabel: "Закрити",
|
|
319
|
+
downloadLabel: "Завантажити",
|
|
320
|
+
loadingText: "Завантажуємо перегляд…",
|
|
321
|
+
errorText: "Не вдалося показати зображення. Завантажте файл, щоб відкрити його.",
|
|
322
|
+
emptyText: "Виберіть файл для перегляду.",
|
|
323
|
+
unsupportedText: "Перегляд цього типу файлів недоступний. Завантажте файл, щоб відкрити його.",
|
|
324
|
+
pdfText: "Перегляд PDF залежить від браузера. Якщо документ не відображається, завантажте файл."
|
|
325
|
+
},
|
|
326
|
+
expandableText: {
|
|
327
|
+
expandLabel: "Показати більше",
|
|
328
|
+
collapseLabel: "Згорнути"
|
|
329
|
+
},
|
|
330
|
+
formErrorSummary: {
|
|
331
|
+
title: "Перевірте форму",
|
|
332
|
+
description: "Виправте ці поля, перш ніж продовжити."
|
|
333
|
+
},
|
|
334
|
+
kbd: { thenLabel: "потім" },
|
|
335
|
+
navigationList: { label: "Навігація" },
|
|
336
|
+
numberInput: {
|
|
337
|
+
decreaseLabel: "Зменшити значення",
|
|
338
|
+
increaseLabel: "Збільшити значення"
|
|
339
|
+
},
|
|
340
|
+
pagination: {
|
|
341
|
+
label: "Сторінки",
|
|
342
|
+
previousLabel: "Попередня сторінка",
|
|
343
|
+
nextLabel: "Наступна сторінка",
|
|
344
|
+
pageLabel: (page) => `Сторінка ${page}`
|
|
345
|
+
},
|
|
346
|
+
passwordInput: { revealLabel: "Показати пароль" },
|
|
347
|
+
progressRing: { label: "Завантаження" },
|
|
348
|
+
rangeSlider: {
|
|
349
|
+
lowerLabel: "Мінімум",
|
|
350
|
+
upperLabel: "Максимум"
|
|
351
|
+
},
|
|
352
|
+
rating: { starLabel: (value) => vdPlural("uk", value, {
|
|
353
|
+
one: "# зірка з 5",
|
|
354
|
+
few: "# зірки з 5",
|
|
355
|
+
other: "# зірок з 5"
|
|
356
|
+
}) },
|
|
357
|
+
relativeTime: {
|
|
358
|
+
justNowText: "Щойно",
|
|
359
|
+
unknownText: "Час невідомий"
|
|
360
|
+
},
|
|
361
|
+
reorderList: {
|
|
362
|
+
label: "Порядок елементів",
|
|
363
|
+
instructions: "Змінюйте порядок кнопками «Вище» та «Нижче» або перетягніть за маркер. Escape скасовує перетягування.",
|
|
364
|
+
upText: "Вище",
|
|
365
|
+
downText: "Нижче",
|
|
366
|
+
emptyText: "Немає елементів для впорядкування.",
|
|
367
|
+
invalidText: "Не вдалося впорядкувати цей список.",
|
|
368
|
+
movedText: (label, position, total) => `${label}. Позиція ${position} з ${total}.`,
|
|
369
|
+
canceledText: (label) => `Переміщення скасовано: ${label}.`
|
|
370
|
+
},
|
|
371
|
+
searchInput: {
|
|
372
|
+
clearLabel: "Очистити пошук",
|
|
373
|
+
loadingLabel: "Пошук"
|
|
374
|
+
},
|
|
375
|
+
select: { emptyText: "Немає варіантів" },
|
|
376
|
+
multiSelect: {
|
|
377
|
+
removeLabel: (label) => `Вилучити ${label}`,
|
|
378
|
+
selectionLabel: (count) => `Обрано: ${count}`
|
|
379
|
+
},
|
|
380
|
+
sidebar: {
|
|
381
|
+
label: "Навігація",
|
|
382
|
+
closeLabel: "Закрити"
|
|
383
|
+
},
|
|
384
|
+
stat: {
|
|
385
|
+
increaseLabel: "Зростання",
|
|
386
|
+
decreaseLabel: "Падіння",
|
|
387
|
+
unchangedLabel: "Без змін"
|
|
388
|
+
},
|
|
389
|
+
stepper: {
|
|
390
|
+
label: "Кроки",
|
|
391
|
+
completedLabel: "Завершено",
|
|
392
|
+
errorLabel: "Потребує уваги"
|
|
393
|
+
},
|
|
394
|
+
tagInput: {
|
|
395
|
+
addLabel: "Додати тег",
|
|
396
|
+
tagsLabel: "Теги",
|
|
397
|
+
removeLabel: (tag) => `Вилучити ${tag}`,
|
|
398
|
+
addedMessage: (tag) => `Додано ${tag}.`,
|
|
399
|
+
removedMessage: (tag) => `Вилучено ${tag}.`,
|
|
400
|
+
duplicateMessage: (tag) => `${tag} вже додано.`
|
|
401
|
+
},
|
|
402
|
+
timeInput: {
|
|
403
|
+
pickerLabel: "Обрати час",
|
|
404
|
+
hoursLabel: "Години",
|
|
405
|
+
minutesLabel: "Хвилини",
|
|
406
|
+
emptyLabel: "Немає доступного часу"
|
|
407
|
+
},
|
|
408
|
+
timeline: { label: "Хронологія подій" },
|
|
409
|
+
toast: {
|
|
410
|
+
label: "Сповіщення",
|
|
411
|
+
closeLabel: "Закрити"
|
|
412
|
+
},
|
|
413
|
+
toolbar: { label: "Панель інструментів" },
|
|
414
|
+
tree: { label: "Дерево" },
|
|
415
|
+
uploadList: { label: "Завантаження" }
|
|
416
|
+
};
|
|
417
|
+
const VD_LOCALE = new InjectionToken("VD_LOCALE", {
|
|
418
|
+
providedIn: "root",
|
|
419
|
+
factory: () => vdLocaleEn
|
|
420
|
+
});
|
|
421
|
+
function provideVdLocale(locale) {
|
|
422
|
+
return makeEnvironmentProviders([{
|
|
423
|
+
provide: VD_LOCALE,
|
|
424
|
+
useValue: locale
|
|
425
|
+
}]);
|
|
426
|
+
}
|
|
427
|
+
function vdLocaleProvider(locale) {
|
|
428
|
+
return {
|
|
429
|
+
provide: VD_LOCALE,
|
|
430
|
+
useValue: locale
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function vdTexts(section, inputs) {
|
|
434
|
+
const locale = inject(VD_LOCALE)[section];
|
|
435
|
+
return computed(() => {
|
|
436
|
+
const resolved = {};
|
|
437
|
+
for (const key of Object.keys(inputs)) resolved[key] = inputs[key]() ?? locale[key];
|
|
438
|
+
return resolved;
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
export { VD_LOCALE, provideVdLocale, vdLocaleEn, vdLocaleProvider, vdLocaleUk, vdPlural, vdTexts };
|
|
442
|
+
|
|
443
|
+
//# sourceMappingURL=vadem-ui-locale.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vadem-ui-locale.mjs","names":[],"sources":["../../../projects/ui/locale/src/core/locale.ts","../../../projects/ui/locale/src/locale.ts"],"sourcesContent":["/**\n * Default user-facing strings of every component, grouped by component. Framework-agnostic:\n * adapters provide one of these objects; a component input always overrides its entry.\n */\n\nexport interface VdLocale {\n /** BCP 47 language tag, also used for plural rules. */\n code: string;\n activeFilters: {\n label: string;\n clearText: string;\n emptyText: string;\n invalidText: string;\n removeLabel: (label: string, value: string) => string;\n };\n alert: { dismissLabel: string };\n alertDialog: {\n confirmLabel: string;\n cancelLabel: string;\n pendingText: string;\n errorText: string;\n };\n autocomplete: {\n label: string;\n loadingText: string;\n emptyText: string;\n resultsText: (count: number) => string;\n };\n breadcrumbs: { label: string };\n calendar: { previousLabel: string; nextLabel: string };\n characterCount: {\n countText: (used: number, limit: number | null) => string;\n remainingText: (remaining: number) => string;\n overText: (excess: number) => string;\n limitText: string;\n };\n chart: {\n tableLabel: string;\n categoryLabel: string;\n /** Spoken summary of a sparkline: values arrive already formatted. */\n trendSummary: (first: string, last: string, min: string, max: string) => string;\n };\n datePicker: { openLabel: string; dialogLabel: string; previousLabel: string; nextLabel: string };\n colorPicker: {\n placeholder: string;\n pickerLabel: string;\n hexLabel: string;\n paletteLabel: string;\n applyLabel: string;\n errorLabel: string;\n };\n command: { label: string; placeholder: string; emptyText: string; loadingText: string };\n contextMenu: { label: string };\n copyButton: {\n label: string;\n copyingLabel: string;\n copiedLabel: string;\n errorLabel: string;\n errorMessage: string;\n };\n dateRangePicker: {\n groupLabel: string;\n startLabel: string;\n endLabel: string;\n openLabel: string;\n pickerLabel: string;\n previousLabel: string;\n nextLabel: string;\n startInstruction: string;\n endInstruction: string;\n errorLabel: string;\n };\n editableText: {\n emptyText: string;\n editLabel: (label: string, value: string) => string;\n saveLabel: string;\n cancelLabel: string;\n savingText: string;\n savedText: string;\n saveErrorText: string;\n requiredText: string;\n tooLongText: (limit: number) => string;\n };\n fileSize: { unknownText: string };\n filePreview: {\n title: string;\n closeLabel: string;\n downloadLabel: string;\n loadingText: string;\n errorText: string;\n emptyText: string;\n unsupportedText: string;\n pdfText: string;\n };\n expandableText: { expandLabel: string; collapseLabel: string };\n formErrorSummary: { title: string; description: string };\n kbd: { thenLabel: string };\n navigationList: { label: string };\n numberInput: { decreaseLabel: string; increaseLabel: string };\n pagination: {\n label: string;\n previousLabel: string;\n nextLabel: string;\n pageLabel: (page: number) => string;\n };\n passwordInput: { revealLabel: string };\n progressRing: { label: string };\n rangeSlider: { lowerLabel: string; upperLabel: string };\n rating: { starLabel: (value: number) => string };\n relativeTime: { justNowText: string; unknownText: string };\n reorderList: {\n label: string;\n instructions: string;\n upText: string;\n downText: string;\n emptyText: string;\n invalidText: string;\n movedText: (label: string, position: number, total: number) => string;\n canceledText: (label: string) => string;\n };\n searchInput: { clearLabel: string; loadingLabel: string };\n select: { emptyText: string };\n multiSelect: {\n removeLabel: (label: string) => string;\n selectionLabel: (count: number) => string;\n };\n sidebar: { label: string; closeLabel: string };\n stat: { increaseLabel: string; decreaseLabel: string; unchangedLabel: string };\n stepper: { label: string; completedLabel: string; errorLabel: string };\n tagInput: {\n addLabel: string;\n tagsLabel: string;\n removeLabel: (tag: string) => string;\n addedMessage: (tag: string) => string;\n removedMessage: (tag: string) => string;\n duplicateMessage: (tag: string) => string;\n };\n timeInput: { pickerLabel: string; hoursLabel: string; minutesLabel: string; emptyLabel: string };\n timeline: { label: string };\n toast: { label: string; closeLabel: string };\n toolbar: { label: string };\n tree: { label: string };\n uploadList: { label: string };\n}\n\n/** Picks a plural form with the platform's CLDR rules (\"one\", \"few\", \"many\", \"other\"...). */\nexport function vdPlural(\n code: string,\n count: number,\n forms: Partial<Record<Intl.LDMLPluralRule, string>> & { other: string },\n): string {\n const rule = new Intl.PluralRules(code).select(count);\n return (forms[rule] ?? forms.other).replace('#', String(count));\n}\n\nexport const vdLocaleEn: VdLocale = {\n code: 'en',\n activeFilters: {\n label: 'Active filters',\n clearText: 'Clear all',\n emptyText: 'No filters applied.',\n invalidText: 'These filters could not be displayed.',\n removeLabel: (label, value) => `Remove ${label}: ${value}`,\n },\n alert: { dismissLabel: 'Dismiss' },\n alertDialog: {\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n pendingText: 'Working… Please wait.',\n errorText: 'The action could not be completed. Try again or cancel.',\n },\n autocomplete: {\n label: 'Suggestions',\n loadingText: 'Loading suggestions…',\n emptyText: 'No suggestions. You can enter your own text.',\n resultsText: (count) =>\n vdPlural('en', count, {\n one: '# suggestion available.',\n other: '# suggestions available.',\n }),\n },\n breadcrumbs: { label: 'Breadcrumb' },\n calendar: { previousLabel: 'Previous month', nextLabel: 'Next month' },\n characterCount: {\n countText: (used, limit) =>\n limit === null\n ? vdPlural('en', used, { one: `${used} character`, other: `${used} characters` })\n : `${used} / ${limit}`,\n remainingText: (count) =>\n vdPlural('en', count, {\n one: `${count} character remaining.`,\n other: `${count} characters remaining.`,\n }),\n overText: (count) =>\n vdPlural('en', count, {\n one: `${count} character over the limit.`,\n other: `${count} characters over the limit.`,\n }),\n limitText: 'Character limit reached.',\n },\n chart: {\n tableLabel: 'Data table',\n categoryLabel: 'Category',\n trendSummary: (first, last, min, max) => `from ${first} to ${last}, low ${min}, high ${max}`,\n },\n datePicker: {\n openLabel: 'Choose date',\n dialogLabel: 'Choose date',\n previousLabel: 'Previous month',\n nextLabel: 'Next month',\n },\n colorPicker: {\n placeholder: 'Choose color',\n pickerLabel: 'Choose color',\n hexLabel: 'HEX color',\n paletteLabel: 'Palette',\n applyLabel: 'Apply color',\n errorLabel: 'Enter a HEX color, such as #6D4BD3',\n },\n contextMenu: { label: 'Actions' },\n command: {\n label: 'Search commands',\n placeholder: 'Search commands…',\n emptyText: 'No commands found',\n loadingText: 'Loading commands…',\n },\n copyButton: {\n label: 'Copy',\n copyingLabel: 'Copying…',\n copiedLabel: 'Copied',\n errorLabel: 'Try again',\n errorMessage: 'Could not copy. Select the text and copy it manually.',\n },\n dateRangePicker: {\n groupLabel: 'Date range',\n startLabel: 'Start date',\n endLabel: 'End date',\n openLabel: 'Choose date range',\n pickerLabel: 'Choose date range',\n previousLabel: 'Previous month',\n nextLabel: 'Next month',\n startInstruction: 'Choose the start date',\n endInstruction: 'Choose the end date',\n errorLabel: 'Enter a valid range, with the end on or after the start',\n },\n editableText: {\n emptyText: 'Add a value',\n editLabel: (label, value) => `Edit ${label}: ${value}`,\n saveLabel: 'Save',\n cancelLabel: 'Cancel',\n savingText: 'Saving…',\n savedText: 'Saved.',\n saveErrorText: 'Could not save. Your text is kept; try again.',\n requiredText: 'Enter a value.',\n tooLongText: (limit) => `Use at most ${limit} characters.`,\n },\n fileSize: { unknownText: 'Unknown size' },\n filePreview: {\n title: 'File preview',\n closeLabel: 'Close',\n downloadLabel: 'Download',\n loadingText: 'Loading preview…',\n errorText: 'The image could not be displayed. Download the file to open it.',\n emptyText: 'Choose a file to preview.',\n unsupportedText: 'Preview is not available for this file type. Download it to open it.',\n pdfText:\n 'PDF preview depends on your browser. If it is unavailable, download the file to open it.',\n },\n expandableText: { expandLabel: 'Show more', collapseLabel: 'Show less' },\n formErrorSummary: {\n title: 'Check the form',\n description: 'Correct the following fields before continuing.',\n },\n kbd: { thenLabel: 'then' },\n navigationList: { label: 'Navigation' },\n numberInput: { decreaseLabel: 'Decrease value', increaseLabel: 'Increase value' },\n pagination: {\n label: 'Pagination',\n previousLabel: 'Previous page',\n nextLabel: 'Next page',\n pageLabel: (page) => `Page ${page}`,\n },\n passwordInput: { revealLabel: 'Show password' },\n progressRing: { label: 'Loading' },\n rangeSlider: { lowerLabel: 'Minimum', upperLabel: 'Maximum' },\n rating: {\n starLabel: (value) =>\n vdPlural('en', value, { one: '# out of 5 stars', other: '# out of 5 stars' }),\n },\n relativeTime: { justNowText: 'Just now', unknownText: 'Unknown time' },\n reorderList: {\n label: 'Item order',\n instructions:\n 'Move items with Up and Down buttons or drag the handle. Escape cancels dragging.',\n upText: 'Up',\n downText: 'Down',\n emptyText: 'There are no items to reorder.',\n invalidText: 'This list cannot be reordered.',\n movedText: (label, position, total) => `${label}. Position ${position} of ${total}.`,\n canceledText: (label) => `Reordering canceled: ${label}.`,\n },\n searchInput: { clearLabel: 'Clear search', loadingLabel: 'Searching' },\n select: { emptyText: 'No options' },\n multiSelect: {\n removeLabel: (label) => `Remove ${label}`,\n selectionLabel: (count) => `${count} selected`,\n },\n sidebar: { label: 'Navigation', closeLabel: 'Close' },\n stat: { increaseLabel: 'Increase', decreaseLabel: 'Decrease', unchangedLabel: 'No change' },\n stepper: { label: 'Steps', completedLabel: 'Completed', errorLabel: 'Needs attention' },\n tagInput: {\n addLabel: 'Add tag',\n tagsLabel: 'Tags',\n removeLabel: (tag) => `Remove ${tag}`,\n addedMessage: (tag) => `Added ${tag}.`,\n removedMessage: (tag) => `Removed ${tag}.`,\n duplicateMessage: (tag) => `${tag} is already added.`,\n },\n timeInput: {\n pickerLabel: 'Choose time',\n hoursLabel: 'Hours',\n minutesLabel: 'Minutes',\n emptyLabel: 'No available times',\n },\n timeline: { label: 'Activity timeline' },\n toast: { label: 'Notifications', closeLabel: 'Close' },\n toolbar: { label: 'Toolbar' },\n tree: { label: 'Tree' },\n uploadList: { label: 'Uploads' },\n};\n\nexport const vdLocaleUk: VdLocale = {\n code: 'uk',\n activeFilters: {\n label: 'Застосовані фільтри',\n clearText: 'Очистити всі',\n emptyText: 'Фільтри не застосовано.',\n invalidText: 'Не вдалося показати ці фільтри.',\n removeLabel: (label, value) => `Прибрати фільтр ${label}: ${value}`,\n },\n alert: { dismissLabel: 'Закрити повідомлення' },\n alertDialog: {\n confirmLabel: 'Підтвердити',\n cancelLabel: 'Скасувати',\n pendingText: 'Виконуємо дію… Зачекайте.',\n errorText: 'Не вдалося виконати дію. Спробуйте ще раз або скасуйте.',\n },\n autocomplete: {\n label: 'Підказки',\n loadingText: 'Завантаження підказок…',\n emptyText: 'Підказок немає. Можна ввести власний текст.',\n resultsText: (count) =>\n vdPlural('uk', count, {\n one: 'Доступна # підказка.',\n few: 'Доступні # підказки.',\n other: 'Доступно # підказок.',\n }),\n },\n breadcrumbs: { label: 'Навігаційний ланцюжок' },\n calendar: { previousLabel: 'Попередній місяць', nextLabel: 'Наступний місяць' },\n characterCount: {\n countText: (used, limit) =>\n limit === null\n ? vdPlural('uk', used, {\n one: `${used} символ`,\n few: `${used} символи`,\n many: `${used} символів`,\n other: `${used} символу`,\n })\n : `${used} / ${limit}`,\n remainingText: (count) =>\n `Залишилось ${vdPlural('uk', count, { one: `${count} символ`, few: `${count} символи`, many: `${count} символів`, other: `${count} символу` })}.`,\n overText: (count) =>\n `Перевищення на ${vdPlural('uk', count, { one: `${count} символ`, few: `${count} символи`, many: `${count} символів`, other: `${count} символу` })}.`,\n limitText: 'Ліміт символів досягнуто.',\n },\n chart: {\n tableLabel: 'Таблиця даних',\n categoryLabel: 'Категорія',\n trendSummary: (first, last, min, max) =>\n `від ${first} до ${last}, мінімум ${min}, максимум ${max}`,\n },\n datePicker: {\n openLabel: 'Обрати дату',\n dialogLabel: 'Обрати дату',\n previousLabel: 'Попередній місяць',\n nextLabel: 'Наступний місяць',\n },\n colorPicker: {\n placeholder: 'Оберіть колір',\n pickerLabel: 'Обрати колір',\n hexLabel: 'Колір HEX',\n paletteLabel: 'Палітра',\n applyLabel: 'Застосувати колір',\n errorLabel: 'Введіть колір у форматі HEX, наприклад #6D4BD3',\n },\n contextMenu: { label: 'Дії' },\n command: {\n label: 'Пошук команд',\n placeholder: 'Пошук команд…',\n emptyText: 'Команд не знайдено',\n loadingText: 'Завантаження команд…',\n },\n copyButton: {\n label: 'Копіювати',\n copyingLabel: 'Копіювання…',\n copiedLabel: 'Скопійовано',\n errorLabel: 'Спробувати ще раз',\n errorMessage: 'Не вдалося скопіювати. Виділіть текст і скопіюйте вручну.',\n },\n dateRangePicker: {\n groupLabel: 'Діапазон дат',\n startLabel: 'Дата початку',\n endLabel: 'Дата завершення',\n openLabel: 'Обрати діапазон дат',\n pickerLabel: 'Обрати діапазон дат',\n previousLabel: 'Попередній місяць',\n nextLabel: 'Наступний місяць',\n startInstruction: 'Оберіть дату початку',\n endInstruction: 'Оберіть дату завершення',\n errorLabel: 'Введіть коректний діапазон: кінець не раніше за початок',\n },\n editableText: {\n emptyText: 'Додати значення',\n editLabel: (label, value) => `Редагувати ${label}: ${value}`,\n saveLabel: 'Зберегти',\n cancelLabel: 'Скасувати',\n savingText: 'Зберігаємо…',\n savedText: 'Збережено.',\n saveErrorText: 'Не вдалося зберегти. Текст збережено в полі; спробуйте ще раз.',\n requiredText: 'Введіть значення.',\n tooLongText: (limit) => `Використайте не більше ${limit} символів.`,\n },\n fileSize: { unknownText: 'Розмір невідомий' },\n filePreview: {\n title: 'Перегляд файлу',\n closeLabel: 'Закрити',\n downloadLabel: 'Завантажити',\n loadingText: 'Завантажуємо перегляд…',\n errorText: 'Не вдалося показати зображення. Завантажте файл, щоб відкрити його.',\n emptyText: 'Виберіть файл для перегляду.',\n unsupportedText: 'Перегляд цього типу файлів недоступний. Завантажте файл, щоб відкрити його.',\n pdfText:\n 'Перегляд PDF залежить від браузера. Якщо документ не відображається, завантажте файл.',\n },\n expandableText: { expandLabel: 'Показати більше', collapseLabel: 'Згорнути' },\n formErrorSummary: {\n title: 'Перевірте форму',\n description: 'Виправте ці поля, перш ніж продовжити.',\n },\n kbd: { thenLabel: 'потім' },\n navigationList: { label: 'Навігація' },\n numberInput: { decreaseLabel: 'Зменшити значення', increaseLabel: 'Збільшити значення' },\n pagination: {\n label: 'Сторінки',\n previousLabel: 'Попередня сторінка',\n nextLabel: 'Наступна сторінка',\n pageLabel: (page) => `Сторінка ${page}`,\n },\n passwordInput: { revealLabel: 'Показати пароль' },\n progressRing: { label: 'Завантаження' },\n rangeSlider: { lowerLabel: 'Мінімум', upperLabel: 'Максимум' },\n rating: {\n starLabel: (value) =>\n vdPlural('uk', value, {\n one: '# зірка з 5',\n few: '# зірки з 5',\n other: '# зірок з 5',\n }),\n },\n relativeTime: { justNowText: 'Щойно', unknownText: 'Час невідомий' },\n reorderList: {\n label: 'Порядок елементів',\n instructions:\n 'Змінюйте порядок кнопками «Вище» та «Нижче» або перетягніть за маркер. Escape скасовує перетягування.',\n upText: 'Вище',\n downText: 'Нижче',\n emptyText: 'Немає елементів для впорядкування.',\n invalidText: 'Не вдалося впорядкувати цей список.',\n movedText: (label, position, total) => `${label}. Позиція ${position} з ${total}.`,\n canceledText: (label) => `Переміщення скасовано: ${label}.`,\n },\n searchInput: { clearLabel: 'Очистити пошук', loadingLabel: 'Пошук' },\n select: { emptyText: 'Немає варіантів' },\n multiSelect: {\n removeLabel: (label) => `Вилучити ${label}`,\n selectionLabel: (count) => `Обрано: ${count}`,\n },\n sidebar: { label: 'Навігація', closeLabel: 'Закрити' },\n stat: { increaseLabel: 'Зростання', decreaseLabel: 'Падіння', unchangedLabel: 'Без змін' },\n stepper: { label: 'Кроки', completedLabel: 'Завершено', errorLabel: 'Потребує уваги' },\n tagInput: {\n addLabel: 'Додати тег',\n tagsLabel: 'Теги',\n removeLabel: (tag) => `Вилучити ${tag}`,\n addedMessage: (tag) => `Додано ${tag}.`,\n removedMessage: (tag) => `Вилучено ${tag}.`,\n duplicateMessage: (tag) => `${tag} вже додано.`,\n },\n timeInput: {\n pickerLabel: 'Обрати час',\n hoursLabel: 'Години',\n minutesLabel: 'Хвилини',\n emptyLabel: 'Немає доступного часу',\n },\n timeline: { label: 'Хронологія подій' },\n toast: { label: 'Сповіщення', closeLabel: 'Закрити' },\n toolbar: { label: 'Панель інструментів' },\n tree: { label: 'Дерево' },\n uploadList: { label: 'Завантаження' },\n};\n","import {\n type EnvironmentProviders,\n InjectionToken,\n type Provider,\n type Signal,\n computed,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { type VdLocale, vdLocaleEn } from './core/locale';\n\n/** Active strings for Vadem components. English unless the application provides another. */\nexport const VD_LOCALE = new InjectionToken<VdLocale>('VD_LOCALE', {\n providedIn: 'root',\n factory: () => vdLocaleEn,\n});\n\n/** Application-wide component strings: `provideVdLocale(vdLocaleUk)` in bootstrap providers. */\nexport function provideVdLocale(locale: VdLocale): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: VD_LOCALE, useValue: locale }]);\n}\n\n/** The same, for one component subtree: `providers: [vdLocaleProvider(vdLocaleUk)]`. */\nexport function vdLocaleProvider(locale: VdLocale): Provider {\n return { provide: VD_LOCALE, useValue: locale };\n}\n\ntype Section = Exclude<keyof VdLocale, 'code'>;\n\n/**\n * Resolves a component's text inputs against the active locale: an input that is set wins,\n * otherwise the locale entry of the same name. Call in a field initializer (injection context).\n */\nexport function vdTexts<S extends Section, K extends keyof VdLocale[S]>(\n section: S,\n inputs: { [P in K]: Signal<VdLocale[S][P] | undefined> },\n): Signal<Pick<VdLocale[S], K>> {\n const locale = inject(VD_LOCALE)[section];\n return computed(() => {\n const resolved = {} as Pick<VdLocale[S], K>;\n for (const key of Object.keys(inputs) as K[]) {\n resolved[key] = inputs[key]() ?? locale[key];\n }\n return resolved;\n });\n}\n"],"mappings":"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"}
|