@chelone/core 0.5.0 → 0.7.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/dist/assistant/assistant-session.d.ts +28 -0
- package/dist/assistant/assistant-session.js +208 -0
- package/dist/assistant/echo-transport.d.ts +7 -0
- package/dist/assistant/echo-transport.js +28 -0
- package/dist/assistant/http-transport.d.ts +10 -0
- package/dist/assistant/http-transport.js +98 -0
- package/dist/assistant/types.d.ts +54 -0
- package/dist/auth/access-control.d.ts +13 -5
- package/dist/auth/access-control.js +25 -21
- package/dist/auth/auth-options.d.ts +21 -17
- package/dist/auth/auth-options.js +80 -48
- package/dist/auth/permission-matrix.d.ts +12 -0
- package/dist/auth/permission-matrix.js +67 -0
- package/dist/auth/types.d.ts +14 -4
- package/dist/block-editor/block-document.d.ts +60 -0
- package/dist/block-editor/block-document.js +143 -0
- package/dist/block-editor/data-blocks.d.ts +63 -0
- package/dist/block-editor/data-blocks.js +117 -0
- package/dist/chart/chart-data.d.ts +25 -0
- package/dist/chart/chart-data.js +61 -0
- package/dist/command-menu/hotkey.js +58 -47
- package/dist/command-menu/recents.js +8 -11
- package/dist/command-menu/registry.d.ts +9 -5
- package/dist/command-menu/registry.js +36 -46
- package/dist/controller/calendar-dates.js +82 -113
- package/dist/controller/calendar-events.js +93 -88
- package/dist/controller/client-list-controller.d.ts +2 -2
- package/dist/controller/client-list-controller.js +251 -254
- package/dist/controller/data-table-columns.d.ts +2 -0
- package/dist/controller/data-table-columns.js +50 -56
- package/dist/controller/deep-equal.d.ts +1 -0
- package/dist/controller/deep-equal.js +14 -0
- package/dist/controller/filter-toggle.js +36 -44
- package/dist/controller/in-place-editor.d.ts +42 -0
- package/dist/controller/in-place-editor.js +42 -0
- package/dist/controller/infinite-list-controller.js +220 -190
- package/dist/controller/inspector.d.ts +49 -0
- package/dist/controller/inspector.js +64 -0
- package/dist/controller/job-monitor.d.ts +41 -0
- package/dist/controller/job-monitor.js +49 -0
- package/dist/controller/kanban-board.d.ts +2 -3
- package/dist/controller/kanban-board.js +43 -24
- package/dist/controller/list-controller.d.ts +5 -5
- package/dist/controller/list-controller.js +444 -400
- package/dist/controller/list-params.js +96 -87
- package/dist/controller/pivot-grid.d.ts +36 -0
- package/dist/controller/pivot-grid.js +99 -0
- package/dist/controller/prev-next.d.ts +2 -2
- package/dist/controller/prev-next.js +74 -54
- package/dist/controller/record-controllers.d.ts +14 -6
- package/dist/controller/record-controllers.js +288 -257
- package/dist/controller/record-diff.d.ts +21 -0
- package/dist/controller/record-diff.js +50 -0
- package/dist/controller/record-timeline.d.ts +35 -0
- package/dist/controller/record-timeline.js +48 -0
- package/dist/controller/record-tree.js +57 -47
- package/dist/controller/record-workflow.d.ts +38 -16
- package/dist/controller/record-workflow.js +85 -64
- package/dist/controller/reference-many-controller.js +198 -192
- package/dist/controller/reference-one-controller.d.ts +1 -1
- package/dist/controller/reference-one-controller.js +63 -56
- package/dist/controller/saved-queries.js +104 -91
- package/dist/controller/translate-fallback.js +10 -6
- package/dist/csv/export.d.ts +2 -1
- package/dist/csv/export.js +43 -40
- package/dist/csv/import-controller.js +185 -169
- package/dist/csv/match-headers.js +29 -22
- package/dist/csv/parse-with.js +60 -54
- package/dist/csv/run-import.js +69 -72
- package/dist/csv/validate-rows.d.ts +1 -1
- package/dist/csv/validate-rows.js +65 -52
- package/dist/data/cache-ops.d.ts +5 -4
- package/dist/data/cache-ops.js +208 -190
- package/dist/data/combine-data-providers.js +25 -23
- package/dist/data/data-provider-log.d.ts +45 -0
- package/dist/data/data-provider-log.js +93 -0
- package/dist/data/errors.js +14 -10
- package/dist/data/fake-provider.d.ts +6 -3
- package/dist/data/fake-provider.js +129 -114
- package/dist/data/fetch-utils.js +61 -44
- package/dist/data/filter-branch.d.ts +5 -0
- package/dist/data/filter-branch.js +10 -0
- package/dist/data/get-many-aggregate.js +84 -76
- package/dist/data/http-error.js +17 -12
- package/dist/data/keys.js +50 -36
- package/dist/data/mutation-options.d.ts +14 -9
- package/dist/data/mutation-options.js +93 -109
- package/dist/data/query-options.js +73 -68
- package/dist/data/remove-empty.d.ts +3 -0
- package/dist/data/remove-empty.js +11 -0
- package/dist/data/undoable.d.ts +2 -2
- package/dist/data/undoable.js +190 -174
- package/dist/data/with-lifecycle-callbacks.d.ts +45 -17
- package/dist/data/with-lifecycle-callbacks.js +66 -52
- package/dist/environment/application-update-store.js +58 -55
- package/dist/environment/offline-store.js +21 -21
- package/dist/form/array-binding.d.ts +30 -11
- package/dist/form/array-binding.js +184 -166
- package/dist/form/choice-ids.d.ts +7 -0
- package/dist/form/choice-ids.js +11 -0
- package/dist/form/choices-controller.d.ts +3 -2
- package/dist/form/choices-controller.js +302 -275
- package/dist/form/date-format.d.ts +38 -0
- package/dist/form/date-format.js +89 -0
- package/dist/form/dirty-values.d.ts +2 -2
- package/dist/form/dirty-values.js +22 -11
- package/dist/form/duration.d.ts +22 -0
- package/dist/form/duration.js +49 -0
- package/dist/form/edit-create-form.d.ts +12 -5
- package/dist/form/edit-create-form.js +243 -188
- package/dist/form/event-value.d.ts +6 -0
- package/dist/form/event-value.js +17 -0
- package/dist/form/field-error.d.ts +14 -0
- package/dist/form/field-error.js +28 -0
- package/dist/form/field-name.d.ts +20 -0
- package/dist/form/field-name.js +6 -0
- package/dist/form/filter-form-values.js +63 -49
- package/dist/form/form-controller.d.ts +9 -1
- package/dist/form/form-controller.js +165 -160
- package/dist/form/form-groups.d.ts +4 -3
- package/dist/form/form-groups.js +79 -79
- package/dist/form/form-handle.d.ts +175 -0
- package/dist/form/form-handle.js +68 -0
- package/dist/form/input-binding.d.ts +56 -31
- package/dist/form/input-binding.js +169 -118
- package/dist/form/input-values.d.ts +130 -0
- package/dist/form/input-values.js +177 -0
- package/dist/form/json-text.js +51 -37
- package/dist/form/save-pipeline.d.ts +6 -8
- package/dist/form/save-pipeline.js +91 -82
- package/dist/form/set-form-values.d.ts +6 -0
- package/dist/form/set-form-values.js +10 -0
- package/dist/form/source.js +97 -65
- package/dist/form/text-of.d.ts +2 -0
- package/dist/form/text-of.js +7 -0
- package/dist/form/validators.d.ts +58 -19
- package/dist/form/validators.js +97 -71
- package/dist/geo/bbox.d.ts +5 -4
- package/dist/geo/bbox.js +69 -48
- package/dist/geo/bounds.d.ts +14 -3
- package/dist/geo/bounds.js +98 -68
- package/dist/geo/constraints.js +88 -93
- package/dist/geo/coordinates.js +31 -23
- package/dist/geo/editor.d.ts +13 -13
- package/dist/geo/editor.js +176 -153
- package/dist/geo/geocoding.d.ts +4 -4
- package/dist/geo/geocoding.js +38 -41
- package/dist/geo/geojson.d.ts +12 -74
- package/dist/geo/geojson.js +52 -40
- package/dist/geo/geometry-math.d.ts +4 -4
- package/dist/geo/geometry-math.js +100 -93
- package/dist/geo/index.d.ts +7 -6
- package/dist/geo/map-layers.d.ts +42 -7
- package/dist/geo/map-layers.js +88 -62
- package/dist/geo/map-style.js +31 -32
- package/dist/geo/messages.js +48 -45
- package/dist/geo/nominatim.js +88 -80
- package/dist/geo/osm-presets.d.ts +4 -3
- package/dist/geo/osm-presets.js +108 -86
- package/dist/geo/osm-tags.js +14 -12
- package/dist/geo/overpass.d.ts +14 -2
- package/dist/geo/overpass.js +83 -90
- package/dist/geo/shape-value.d.ts +9 -5
- package/dist/geo/shape-value.js +169 -146
- package/dist/geo/snap-to-roads.d.ts +3 -3
- package/dist/geo/snap-to-roads.js +55 -50
- package/dist/geo/throttle.js +36 -39
- package/dist/guards.d.ts +37 -0
- package/dist/guards.js +62 -0
- package/dist/i18n/default-messages.js +34 -29
- package/dist/i18n/english-messages.js +187 -189
- package/dist/i18n/i18n.d.ts +8 -2
- package/dist/i18n/i18n.js +47 -48
- package/dist/i18n/inflection.d.ts +34 -0
- package/dist/i18n/inflection.js +82 -0
- package/dist/i18n/messages.d.ts +10 -2
- package/dist/i18n/messages.js +17 -4
- package/dist/i18n/missing-keys.d.ts +19 -0
- package/dist/i18n/missing-keys.js +68 -0
- package/dist/i18n/translatable.d.ts +16 -1
- package/dist/i18n/translatable.js +40 -47
- package/dist/index.d.ts +96 -22
- package/dist/index.js +52 -257
- package/dist/json/deep-equal.d.ts +8 -0
- package/dist/json/deep-equal.js +24 -0
- package/dist/json/strip-json-comments.js +38 -42
- package/dist/noop.d.ts +2 -0
- package/dist/noop.js +4 -0
- package/dist/notification/error-message.d.ts +2 -0
- package/dist/notification/error-message.js +10 -0
- package/dist/notification/notification-store.d.ts +3 -2
- package/dist/notification/notification-store.js +41 -45
- package/dist/onboarding-tour/placement.d.ts +34 -0
- package/dist/onboarding-tour/placement.js +67 -0
- package/dist/onboarding-tour/tour-controller.d.ts +25 -0
- package/dist/onboarding-tour/tour-controller.js +50 -0
- package/dist/realtime/add-events-for-mutations.js +75 -81
- package/dist/realtime/announce-lock.d.ts +7 -0
- package/dist/realtime/announce-lock.js +18 -0
- package/dist/realtime/broadcast-channel-transport.d.ts +14 -0
- package/dist/realtime/broadcast-channel-transport.js +69 -0
- package/dist/realtime/copy-members.js +22 -14
- package/dist/realtime/in-memory-lock-provider.js +41 -60
- package/dist/realtime/live.js +95 -101
- package/dist/realtime/lock-options.js +16 -16
- package/dist/realtime/lock-session.js +91 -78
- package/dist/realtime/memory-transport.js +26 -67
- package/dist/realtime/presence.js +120 -122
- package/dist/realtime/realtime-data-provider.d.ts +10 -0
- package/dist/realtime/realtime-data-provider.js +45 -42
- package/dist/realtime/reconnect-backoff.d.ts +15 -0
- package/dist/realtime/reconnect-backoff.js +17 -0
- package/dist/realtime/sse-transport.d.ts +31 -0
- package/dist/realtime/sse-transport.js +235 -0
- package/dist/realtime/status-store.js +23 -28
- package/dist/realtime/topic-hub.d.ts +24 -0
- package/dist/realtime/topic-hub.js +66 -0
- package/dist/realtime/topics.js +10 -12
- package/dist/realtime/types.js +10 -12
- package/dist/realtime/unread-count.js +21 -21
- package/dist/realtime/websocket-transport.d.ts +32 -0
- package/dist/realtime/websocket-transport.js +306 -0
- package/dist/resource/describe-resource.d.ts +2 -0
- package/dist/resource/describe-resource.js +232 -219
- package/dist/resource/get-at-path.js +29 -14
- package/dist/resource/identifier.d.ts +18 -0
- package/dist/resource/identifier.js +27 -0
- package/dist/resource/record.d.ts +4 -0
- package/dist/resource/record.js +10 -0
- package/dist/resource/register.d.ts +7 -0
- package/dist/resource/registry-store.d.ts +45 -15
- package/dist/resource/registry-store.js +67 -60
- package/dist/resource/registry.d.ts +10 -0
- package/dist/resource/registry.js +8 -4
- package/dist/resource/source-path.d.ts +16 -1
- package/dist/rich-text/rich-text-extras.d.ts +132 -0
- package/dist/rich-text/rich-text-extras.js +179 -0
- package/dist/rich-text/rich-text-image.d.ts +124 -0
- package/dist/rich-text/rich-text-image.js +163 -0
- package/dist/rich-text/rich-text.d.ts +62 -0
- package/dist/rich-text/rich-text.js +142 -0
- package/dist/router/location.d.ts +22 -4
- package/dist/router/location.js +41 -18
- package/dist/router/match.js +47 -39
- package/dist/router/paths.js +40 -34
- package/dist/router/record-from-location.d.ts +1 -1
- package/dist/router/record-from-location.js +25 -17
- package/dist/store/adapters.js +51 -55
- package/dist/store/micro-store.js +57 -59
- package/dist/store/shallow-equal.d.ts +12 -0
- package/dist/store/shallow-equal.js +20 -0
- package/dist/store/store.js +54 -57
- package/package.json +13 -11
|
@@ -1,193 +1,191 @@
|
|
|
1
1
|
import { mapMessages } from "../geo/messages.js";
|
|
2
2
|
import { defaultMessages } from "./default-messages.js";
|
|
3
3
|
import { defineMessages } from "./messages.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
4
|
+
// src/i18n/english-messages.ts
|
|
5
|
+
/**
|
|
6
|
+
* The English catalog an `<Admin>` with no `i18n` prop reads from, and the base
|
|
7
|
+
* an app extends: spread it, then add or override entries.
|
|
8
|
+
*
|
|
9
|
+
* The ported shadcn components translate `ra.*` keys (the react-admin namespace
|
|
10
|
+
* they were ported from): page titles, list pagination, the bulk-action bar,
|
|
11
|
+
* menu a11y labels, boolean fields. Chelone's i18n never throws on a missing key
|
|
12
|
+
* (it returns the key or a `_` fallback), so a partial catalog shows raw
|
|
13
|
+
* `ra.page.list`-style keys.
|
|
14
|
+
*
|
|
15
|
+
* Interpolation is single-brace `{name}` (not react-admin's `%{name}`). Plural
|
|
16
|
+
* strings are `{ one, other }` objects keyed by Intl.PluralRules categories
|
|
17
|
+
* (react-admin's `a |||| b` form).
|
|
18
|
+
*
|
|
19
|
+
* `defaultMessages` (the `chelone.*` keys the core controllers emit) and
|
|
20
|
+
* `mapMessages` (the maps add-on's labels) sit underneath.
|
|
21
|
+
*/
|
|
22
|
+
var englishMessages = defineMessages({
|
|
23
|
+
...defaultMessages,
|
|
24
|
+
...mapMessages,
|
|
25
|
+
"ra.page.list": "{name}",
|
|
26
|
+
"ra.page.create": "Create {name}",
|
|
27
|
+
"ra.page.edit": "{name} {recordRepresentation}",
|
|
28
|
+
"ra.page.show": "{name} {recordRepresentation}",
|
|
29
|
+
"ra.page.dashboard": "Dashboard",
|
|
30
|
+
"ra.page.error": "Something went wrong",
|
|
31
|
+
"ra.page.not_found": "Not Found",
|
|
32
|
+
"ra.page.loading": "Loading",
|
|
33
|
+
"ra.page.empty": "No {name} yet.",
|
|
34
|
+
"ra.page.access_denied": "Access denied",
|
|
35
|
+
"ra.page.authentication_error": "Authentication error",
|
|
36
|
+
"ra.action.add": "Add",
|
|
37
|
+
"ra.action.add_filter": "Add filter",
|
|
38
|
+
"ra.action.bulk_actions": {
|
|
39
|
+
one: "1 item selected",
|
|
40
|
+
other: "{count} items selected"
|
|
41
|
+
},
|
|
42
|
+
"ra.action.cancel": "Cancel",
|
|
43
|
+
"ra.action.clear_input_value": "Clear value",
|
|
44
|
+
"ra.action.clear_search": "Clear search",
|
|
45
|
+
"ra.action.close": "Close",
|
|
46
|
+
"ra.action.close_menu": "Close menu",
|
|
47
|
+
"ra.action.confirm": "Confirm",
|
|
48
|
+
"ra.action.create": "Create",
|
|
49
|
+
"ra.action.delete": "Delete",
|
|
50
|
+
"ra.action.edit": "Edit",
|
|
51
|
+
"ra.action.export": "Export",
|
|
52
|
+
"ra.action.list": "List",
|
|
53
|
+
"ra.action.open_menu": "Open menu",
|
|
54
|
+
"ra.action.refresh": "Refresh",
|
|
55
|
+
"ra.action.remove": "Remove",
|
|
56
|
+
"ra.action.remove_filter": "Remove this filter",
|
|
57
|
+
"ra.action.save": "Save",
|
|
58
|
+
"ra.action.search": "Search",
|
|
59
|
+
"ra.action.select_all": "Select all",
|
|
60
|
+
"ra.action.select_row": "Select this row",
|
|
61
|
+
"ra.action.show": "Show",
|
|
62
|
+
"ra.action.sort": "Sort",
|
|
63
|
+
"ra.action.toggle_theme": "Toggle light/dark mode",
|
|
64
|
+
"ra.action.undo": "Undo",
|
|
65
|
+
"ra.action.unselect": "Unselect",
|
|
66
|
+
"ra.action.update": "Update",
|
|
67
|
+
"ra.boolean.true": "Yes",
|
|
68
|
+
"ra.boolean.false": "No",
|
|
69
|
+
"ra.boolean.null": " ",
|
|
70
|
+
"ra.auth.logout": "Logout",
|
|
71
|
+
"ra.auth.sign_in": "Sign in",
|
|
72
|
+
"ra.auth.sign_in_error": "Authentication failed, please retry",
|
|
73
|
+
"ra.auth.user_menu": "Profile",
|
|
74
|
+
"ra.auth.username": "Username",
|
|
75
|
+
"ra.auth.password": "Password",
|
|
76
|
+
"ra.auth.auth_check_error": "Please login to continue",
|
|
77
|
+
"ra.message.access_denied": "You don't have the right permissions to access this page",
|
|
78
|
+
"ra.message.auth_error": "An error occurred while validating the authentication token.",
|
|
79
|
+
"ra.message.authentication_error": "The authentication server returned an error and your credentials could not be checked.",
|
|
80
|
+
"ra.message.error": "A client error occurred and your request couldn't be completed.",
|
|
81
|
+
"ra.message.invalid_form": "The form is not valid. Please check for errors",
|
|
82
|
+
"ra.message.loading": "Please wait",
|
|
83
|
+
"ra.message.not_found": "Either you typed a wrong URL, or you followed a bad link.",
|
|
84
|
+
"ra.navigation.next": "Go to next page",
|
|
85
|
+
"ra.navigation.previous": "Go to previous page",
|
|
86
|
+
"ra.navigation.first": "Go to first page",
|
|
87
|
+
"ra.navigation.last": "Go to last page",
|
|
88
|
+
"ra.navigation.no_results": "No results found",
|
|
89
|
+
"ra.navigation.no_filtered_results": "No results found with the current filters.",
|
|
90
|
+
"ra.navigation.page_range_info": "{offsetBegin}-{offsetEnd} of {total}",
|
|
91
|
+
"ra.navigation.partial_page_range_info": "{offsetBegin}-{offsetEnd} of more than {offsetEnd}",
|
|
92
|
+
"ra.navigation.page_rows_per_page": "Rows per page:",
|
|
93
|
+
"ra.navigation.current_page": "Page {page}",
|
|
94
|
+
"ra.navigation.skip_nav": "Skip to content",
|
|
95
|
+
"ra.input.file.upload_several": "Drop some files to upload, or click to select one.",
|
|
96
|
+
"ra.input.file.upload_single": "Drop a file to upload, or click to select it.",
|
|
97
|
+
"ra.input.image.upload_several": "Drop some pictures to upload, or click to select one.",
|
|
98
|
+
"ra.input.image.upload_single": "Drop a picture to upload, or click to select it.",
|
|
99
|
+
"ra.input.password.toggle_visible": "Hide password",
|
|
100
|
+
"ra.input.password.toggle_hidden": "Show password",
|
|
101
|
+
"ra.theme.light": "Light",
|
|
102
|
+
"ra.theme.dark": "Dark",
|
|
103
|
+
"ra.theme.system": "System",
|
|
104
|
+
"ra.validation.required": "Required",
|
|
105
|
+
"ra.validation.minLength": "Must be {min} characters at least",
|
|
106
|
+
"ra.validation.maxLength": "Must be {max} characters or less",
|
|
107
|
+
"ra.validation.minValue": "Must be at least {min}",
|
|
108
|
+
"ra.validation.maxValue": "Must be {max} or less",
|
|
109
|
+
"ra.validation.number": "Must be a number",
|
|
110
|
+
"ra.validation.email": "Must be a valid email",
|
|
111
|
+
"ra.action.back": "Back",
|
|
112
|
+
"ra.action.bulk_edit_apply": {
|
|
113
|
+
one: "Apply to 1 record",
|
|
114
|
+
other: "Apply to {count} records"
|
|
115
|
+
},
|
|
116
|
+
"ra.action.change_locale": "Change locale",
|
|
117
|
+
"ra.action.clear_array_input": "Clear the array",
|
|
118
|
+
"ra.action.clone": "Clone",
|
|
119
|
+
"ra.action.collapse": "Collapse",
|
|
120
|
+
"ra.action.expand": "Expand",
|
|
121
|
+
"ra.action.move_column_down": "Move down",
|
|
122
|
+
"ra.action.move_column_up": "Move up",
|
|
123
|
+
"ra.action.move_down": "Move down",
|
|
124
|
+
"ra.action.move_up": "Move up",
|
|
125
|
+
"ra.action.reload": "Reload",
|
|
126
|
+
"ra.action.remove_all_filters": "Remove all filters",
|
|
127
|
+
"ra.action.reset": "Reset",
|
|
128
|
+
"ra.action.reset_columns": "Reset",
|
|
129
|
+
"ra.action.search_columns": "Search columns",
|
|
130
|
+
"ra.action.select_columns": "Columns",
|
|
131
|
+
"ra.auth.or": "or",
|
|
132
|
+
"ra.calendar.agenda": "Agenda",
|
|
133
|
+
"ra.calendar.month": "Month",
|
|
134
|
+
"ra.calendar.week": "Week",
|
|
135
|
+
"ra.calendar.next": "Next",
|
|
136
|
+
"ra.calendar.previous": "Previous",
|
|
137
|
+
"ra.calendar.today": "Today",
|
|
138
|
+
"ra.calendar.view": "View",
|
|
139
|
+
"ra.calendar.no_events": "No events",
|
|
140
|
+
"ra.csv_import.back": "Back",
|
|
141
|
+
"ra.csv_import.close": "Close",
|
|
142
|
+
"ra.csv_import.complete": "Import complete",
|
|
143
|
+
"ra.csv_import.counts": "{created} created · {failed} failed · {total} total",
|
|
144
|
+
"ra.csv_import.download_errors": "Download error report",
|
|
145
|
+
"ra.csv_import.drop": "Drop a CSV file here, or click to choose one",
|
|
146
|
+
"ra.csv_import.import": "Import",
|
|
147
|
+
"ra.csv_import.issues": "Issues",
|
|
148
|
+
"ra.csv_import.next": "Next",
|
|
149
|
+
"ra.csv_import.not_utf8": "This file is not UTF-8, so some letters may be wrong. Save it as CSV UTF-8 and try again.",
|
|
150
|
+
"ra.csv_import.preview_summary": "{valid} valid · {errors} errors · {total} total",
|
|
151
|
+
"ra.csv_import.required_unmapped": "Required fields are not mapped",
|
|
152
|
+
"ra.csv_import.rows_parsed": "{count} rows parsed",
|
|
153
|
+
"ra.csv_import.step.commit": "Importing",
|
|
154
|
+
"ra.csv_import.step.map": "Map columns",
|
|
155
|
+
"ra.csv_import.step.preview": "Preview",
|
|
156
|
+
"ra.csv_import.step.upload": "Upload",
|
|
157
|
+
"ra.csv_import.unmapped": "Not mapped",
|
|
158
|
+
"ra.csv_import.wrong_file": "Choose a .csv file",
|
|
159
|
+
"ra.message.bulk_delete_content": {
|
|
160
|
+
one: "Are you sure you want to delete this item?",
|
|
161
|
+
other: "Are you sure you want to delete these {count} items?"
|
|
162
|
+
},
|
|
163
|
+
"ra.message.bulk_delete_title": {
|
|
164
|
+
one: "Delete 1 item",
|
|
165
|
+
other: "Delete {count} items"
|
|
166
|
+
},
|
|
167
|
+
"ra.message.bulk_edit_description": {
|
|
168
|
+
one: "Only the fields you change are applied to the selected record.",
|
|
169
|
+
other: "Only the fields you change are applied to the {count} selected records."
|
|
170
|
+
},
|
|
171
|
+
"ra.message.bulk_edit_nested_source": "Bulk edit takes flat sources only, but {source} is nested.",
|
|
172
|
+
"ra.message.bulk_update_content": {
|
|
173
|
+
one: "Are you sure you want to update this item?",
|
|
174
|
+
other: "Are you sure you want to update these {count} items?"
|
|
175
|
+
},
|
|
176
|
+
"ra.message.bulk_update_title": {
|
|
177
|
+
one: "Update 1 item",
|
|
178
|
+
other: "Update {count} items"
|
|
179
|
+
},
|
|
180
|
+
"ra.message.clear_array_input": "Are you sure you want to clear the whole array?",
|
|
181
|
+
"ra.message.delete_content": "Are you sure you want to delete this item?",
|
|
182
|
+
"ra.message.delete_title": "Delete {name} {recordRepresentation}",
|
|
183
|
+
"ra.navigation.clear_filters": "Clear filters",
|
|
184
|
+
"ra.notification.application_update_available": "A new version of the application is available",
|
|
185
|
+
"ra.notification.http_error": "Error",
|
|
186
|
+
"ra.notification.offline": "You are offline",
|
|
187
|
+
"ra.saved_queries.new_label": "Save current query",
|
|
188
|
+
"ra.saved_queries.query_name": "Query name",
|
|
189
|
+
"ra.saved_queries.remove_label_with_name": "Remove saved query \"{name}\""
|
|
190
190
|
});
|
|
191
|
-
export {
|
|
192
|
-
englishMessages
|
|
193
|
-
};
|
|
191
|
+
export { englishMessages };
|
package/dist/i18n/i18n.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MessageCatalog, MessageKey, TranslateParams } from "./messages.js";
|
|
1
|
+
import type { MessageCatalog, MessageKey, TranslateParams, TranslateParamValues } from "./messages.js";
|
|
2
2
|
/**
|
|
3
3
|
* Distributive key lookup: locale catalogs may be heterogeneous (a fallback
|
|
4
4
|
* locale can carry keys a partial catalog lacks), so `TCatalog` is often a
|
|
@@ -13,7 +13,7 @@ type CatalogValue<TCatalog extends MessageCatalog, K extends string> = TCatalog
|
|
|
13
13
|
* assignable to this; key-level literal typing lives on the concrete instance.
|
|
14
14
|
*/
|
|
15
15
|
export interface AnyCheloneI18n {
|
|
16
|
-
translate(key: string, params?:
|
|
16
|
+
translate(key: string, params?: TranslateParamValues): string;
|
|
17
17
|
getLocale(): string;
|
|
18
18
|
setLocale(locale: string): void;
|
|
19
19
|
getLocales(): string[];
|
|
@@ -38,5 +38,11 @@ export declare function createI18n<const TCatalog extends MessageCatalog>(option
|
|
|
38
38
|
locale: string;
|
|
39
39
|
messages: Record<string, TCatalog>;
|
|
40
40
|
fallbackLocale?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Called when the current locale's catalog holds no own entry for a key,
|
|
43
|
+
* even when `fallbackLocale` supplies the text. `fallback` is the string `_`
|
|
44
|
+
* param. A throwing callback goes to `console.error`; `translate` is unchanged.
|
|
45
|
+
*/
|
|
46
|
+
onMissingKey?: (key: string, locale: string, fallback: string | undefined) => void;
|
|
41
47
|
}): CheloneI18n<TCatalog>;
|
|
42
48
|
export {};
|
package/dist/i18n/i18n.js
CHANGED
|
@@ -1,56 +1,55 @@
|
|
|
1
|
+
// src/i18n/i18n.ts
|
|
1
2
|
function interpolate(template, params) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/\{(\w+)\}/g,
|
|
5
|
-
(match, name) => name in params ? String(params[name]) : match
|
|
6
|
-
);
|
|
3
|
+
if (!params) return template;
|
|
4
|
+
return template.replace(/\{(\w+)\}/g, (match, name) => name in params ? String(params[name]) : match);
|
|
7
5
|
}
|
|
8
6
|
function resolve(value, locale, params) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
if (typeof value === "string") return interpolate(value, params);
|
|
8
|
+
const raw = params?.count ?? params?.smart_count;
|
|
9
|
+
if (raw === void 0 || raw === null) return interpolate(value.other, params);
|
|
10
|
+
const count = Number(raw);
|
|
11
|
+
if (Number.isNaN(count)) return interpolate(value.other, params);
|
|
12
|
+
return interpolate(value[new Intl.PluralRules(locale).select(count)] ?? value.other, {
|
|
13
|
+
...params,
|
|
14
|
+
count: params?.count ?? raw,
|
|
15
|
+
smart_count: params?.smart_count ?? raw
|
|
16
|
+
});
|
|
19
17
|
}
|
|
18
|
+
/** Own-property lookup: `"constructor"` or `"toString"` is a missing key, not a function. */
|
|
20
19
|
function lookup(catalog, key) {
|
|
21
|
-
|
|
20
|
+
return catalog && Object.hasOwn(catalog, key) ? catalog[key] : void 0;
|
|
22
21
|
}
|
|
23
22
|
function createI18n(options) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
23
|
+
let locale = options.locale;
|
|
24
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
25
|
+
return {
|
|
26
|
+
translate(key, ...args) {
|
|
27
|
+
const params = args[0];
|
|
28
|
+
const own = lookup(options.messages[locale], key);
|
|
29
|
+
if (own === void 0 && options.onMissingKey) try {
|
|
30
|
+
options.onMissingKey(key, locale, typeof params?._ === "string" ? params._ : void 0);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error(error);
|
|
33
|
+
}
|
|
34
|
+
const value = own ?? (options.fallbackLocale ? lookup(options.messages[options.fallbackLocale], key) : void 0);
|
|
35
|
+
if (value === void 0) {
|
|
36
|
+
if (typeof params?._ === "string") return interpolate(params._, params);
|
|
37
|
+
return key;
|
|
38
|
+
}
|
|
39
|
+
return resolve(value, locale, params);
|
|
40
|
+
},
|
|
41
|
+
getLocale: () => locale,
|
|
42
|
+
setLocale(next) {
|
|
43
|
+
if (!Object.hasOwn(options.messages, next)) throw new Error(`createI18n: unknown locale "${next}" — available: ${Object.keys(options.messages).join(", ")}`);
|
|
44
|
+
if (next === locale) return;
|
|
45
|
+
locale = next;
|
|
46
|
+
for (const cb of subscribers) cb();
|
|
47
|
+
},
|
|
48
|
+
getLocales: () => Object.keys(options.messages),
|
|
49
|
+
subscribe(callback) {
|
|
50
|
+
subscribers.add(callback);
|
|
51
|
+
return () => void subscribers.delete(callback);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
53
54
|
}
|
|
54
|
-
export {
|
|
55
|
-
createI18n
|
|
56
|
-
};
|
|
55
|
+
export { createI18n };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clean-room reimplementation of the SUBSET of the `inflection` package the
|
|
3
|
+
* ra-core label helpers rely on. Chelone carries no `inflection` dependency, so
|
|
4
|
+
* these three small helpers cover exactly what `useGetResourceLabel` /
|
|
5
|
+
* `useTranslateLabel` need:
|
|
6
|
+
*
|
|
7
|
+
* - `humanize(text)` — ra-core `humanize`: strip a trailing `_id`, replace
|
|
8
|
+
* underscores with spaces, lowercase, and capitalize the first letter. Does
|
|
9
|
+
* NOT split camelCase (parity: `humanize('authorName') === 'Authorname'`).
|
|
10
|
+
* - `humanizeField(source)` — ra-core `transform(['underscore','humanize'])`:
|
|
11
|
+
* camelCase-aware, so `firstName` → `First name`. Used for field labels.
|
|
12
|
+
* - `pluralize(word, count)` — ra-core `inflect(word, count)`: singular for
|
|
13
|
+
* `count === 1`, plural otherwise. Covers the regular English rules plus a
|
|
14
|
+
* small irregular set. Full parity with `inflection`'s complete irregular
|
|
15
|
+
* table is a documented non-goal (the fallback only fires when a translation
|
|
16
|
+
* key AND an `options.label` are both absent).
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* ra-core `humanize`: strip a trailing `_id`, underscores → spaces, lowercase,
|
|
20
|
+
* capitalize the first letter. Deliberately does NOT split camelCase.
|
|
21
|
+
*/
|
|
22
|
+
export declare function humanize(text: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* ra-core `transform(source, ['underscore','humanize'])`: camelCase-aware
|
|
25
|
+
* humanization for field labels. `firstName` → `First name`, `full_name` →
|
|
26
|
+
* `Full name`, `author name` → `Author name`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function humanizeField(source: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* ra-core `inflect(word, count)`: singularize when `count === 1`, pluralize
|
|
31
|
+
* otherwise. Case-preserving only for the first letter (the caller humanizes
|
|
32
|
+
* afterward, so casing beyond that does not matter here).
|
|
33
|
+
*/
|
|
34
|
+
export declare function pluralize(word: string, count?: number): string;
|