@mk-kit/ui 0.53.0 → 0.55.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 +21 -0
- package/fesm2022/mk-kit-ui-core.mjs +2 -0
- package/fesm2022/mk-kit-ui-core.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-dnd.mjs +339 -27
- package/fesm2022/mk-kit-ui-dnd.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-kanban.mjs +81 -9
- package/fesm2022/mk-kit-ui-kanban.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-locales-de.mjs +2 -0
- package/fesm2022/mk-kit-ui-locales-de.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-locales-es.mjs +2 -0
- package/fesm2022/mk-kit-ui-locales-es.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-locales-fr.mjs +2 -0
- package/fesm2022/mk-kit-ui-locales-fr.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-locales-pl.mjs +2 -0
- package/fesm2022/mk-kit-ui-locales-pl.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-locales-uk.mjs +2 -0
- package/fesm2022/mk-kit-ui-locales-uk.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-translate-server.mjs +55 -0
- package/fesm2022/mk-kit-ui-translate-server.mjs.map +1 -0
- package/fesm2022/mk-kit-ui-translate.mjs +417 -0
- package/fesm2022/mk-kit-ui-translate.mjs.map +1 -0
- package/fesm2022/mk-kit-ui.mjs +1 -0
- package/fesm2022/mk-kit-ui.mjs.map +1 -1
- package/package.json +13 -1
- package/styles/presets/momentum.css +272 -0
- package/types/mk-kit-ui-core.d.ts +4 -0
- package/types/mk-kit-ui-dnd.d.ts +178 -6
- package/types/mk-kit-ui-kanban.d.ts +68 -13
- package/types/mk-kit-ui-translate-server.d.ts +39 -0
- package/types/mk-kit-ui-translate.d.ts +251 -0
- package/types/mk-kit-ui.d.ts +1 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, Injector, TransferState, PLATFORM_ID, signal, computed, isDevMode, makeStateKey, runInInjectionContext, Injectable, Pipe, provideAppInitializer, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { isPlatformServer, DOCUMENT } from '@angular/common';
|
|
4
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
5
|
+
import { HttpClient } from '@angular/common/http';
|
|
6
|
+
import { firstValueFrom } from 'rxjs';
|
|
7
|
+
|
|
8
|
+
/** Configuration token; set by {@link provideMkTranslate}. */
|
|
9
|
+
const MK_TRANSLATE_CONFIG = new InjectionToken('MK_TRANSLATE_CONFIG');
|
|
10
|
+
const PLACEHOLDER = /\{\{\s*([\w.-]+)\s*\}\}/g;
|
|
11
|
+
/** `{ a: { b: 'x' } }` → `{ 'a.b': 'x' }`; already-dotted keys pass through. */
|
|
12
|
+
function mkFlattenTranslations(tree, prefix = '', out = {}) {
|
|
13
|
+
if (!tree)
|
|
14
|
+
return out;
|
|
15
|
+
for (const [k, v] of Object.entries(tree)) {
|
|
16
|
+
const key = prefix ? `${prefix}.${k}` : k;
|
|
17
|
+
if (v && typeof v === 'object')
|
|
18
|
+
mkFlattenTranslations(v, key, out);
|
|
19
|
+
else if (typeof v === 'string')
|
|
20
|
+
out[key] = v;
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/** `{ 'a.b': 'x' }` → `{ a: { b: 'x' } }` — for editors that write files back. */
|
|
25
|
+
function mkUnflattenTranslations(flat) {
|
|
26
|
+
const tree = {};
|
|
27
|
+
for (const key of Object.keys(flat).sort()) {
|
|
28
|
+
const parts = key.split('.');
|
|
29
|
+
let node = tree;
|
|
30
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
31
|
+
const next = node[parts[i]];
|
|
32
|
+
if (!next || typeof next !== 'object')
|
|
33
|
+
node[parts[i]] = {};
|
|
34
|
+
node = node[parts[i]];
|
|
35
|
+
}
|
|
36
|
+
node[parts[parts.length - 1]] = flat[key];
|
|
37
|
+
}
|
|
38
|
+
return tree;
|
|
39
|
+
}
|
|
40
|
+
/** Replace `{{name}}` placeholders; unknown names are left in place. */
|
|
41
|
+
function mkInterpolate(template, params) {
|
|
42
|
+
if (!params)
|
|
43
|
+
return template;
|
|
44
|
+
return template.replace(PLACEHOLDER, (match, name) => {
|
|
45
|
+
const value = name.split('.').reduce((acc, part) => (acc && typeof acc === 'object' ? acc[part] : undefined), params);
|
|
46
|
+
return value === undefined || value === null ? match : String(value);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* App translations as signals: a `lang` you switch with `use()`, `instant()`
|
|
51
|
+
* for code, the `translate` pipe for templates, and `plural()` for CLDR
|
|
52
|
+
* count forms. Dictionaries are the plain nested JSON you already have; an
|
|
53
|
+
* optional overrides loader (a database of edits, say) is merged on top per
|
|
54
|
+
* language. On the server the loaded strings ride to the browser through
|
|
55
|
+
* `TransferState`, so hydration never refetches or flashes raw keys.
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* provideMkTranslate({
|
|
59
|
+
* lang: 'pl',
|
|
60
|
+
* fallbackLang: 'pl',
|
|
61
|
+
* loader: mkHttpTranslateLoader({ prefix: '/assets/i18n/' }),
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
* ```html
|
|
65
|
+
* {{ 'checkout.cart.total' | translate }}
|
|
66
|
+
* {{ 'checkout.cart.freeDeliveryMissing' | translate: { amount: 12 } }}
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
class MkTranslate {
|
|
70
|
+
config = inject(MK_TRANSLATE_CONFIG, { optional: true });
|
|
71
|
+
injector = inject(Injector);
|
|
72
|
+
transfer = inject(TransferState, { optional: true });
|
|
73
|
+
isServer = isPlatformServer(inject(PLATFORM_ID));
|
|
74
|
+
document = inject(DOCUMENT, { optional: true });
|
|
75
|
+
loader = null;
|
|
76
|
+
overridesLoader = null;
|
|
77
|
+
dictionaries = new Map();
|
|
78
|
+
declared = new Set();
|
|
79
|
+
pending = new Map();
|
|
80
|
+
/** Bumped whenever a dictionary changes, so readers recompute. */
|
|
81
|
+
version = signal(0, /* @ts-ignore */
|
|
82
|
+
...(ngDevMode ? [{ debugName: "version" }] : /* istanbul ignore next */ []));
|
|
83
|
+
missing = signal(new Set(), /* @ts-ignore */
|
|
84
|
+
...(ngDevMode ? [{ debugName: "missing" }] : /* istanbul ignore next */ []));
|
|
85
|
+
/** The active language. Read it in a `computed()` to follow switches. */
|
|
86
|
+
lang = signal(this.config?.lang ?? 'en', /* @ts-ignore */
|
|
87
|
+
...(ngDevMode ? [{ debugName: "lang" }] : /* istanbul ignore next */ []));
|
|
88
|
+
/** `true` once the active language's strings are in memory. */
|
|
89
|
+
ready = computed(() => {
|
|
90
|
+
this.version();
|
|
91
|
+
return this.dictionaries.has(this.lang());
|
|
92
|
+
}, /* @ts-ignore */
|
|
93
|
+
...(ngDevMode ? [{ debugName: "ready" }] : /* istanbul ignore next */ []));
|
|
94
|
+
/** `lang` as an observable, for code still written around streams. */
|
|
95
|
+
langChange = toObservable(this.lang);
|
|
96
|
+
/** Keys asked for that neither the active nor the fallback language has. */
|
|
97
|
+
missingKeys = computed(() => [...this.missing()].sort(), /* @ts-ignore */
|
|
98
|
+
...(ngDevMode ? [{ debugName: "missingKeys" }] : /* istanbul ignore next */ []));
|
|
99
|
+
constructor() {
|
|
100
|
+
if (!this.config && isDevMode()) {
|
|
101
|
+
console.warn('[mk-translate] provideMkTranslate() is missing — every key renders as itself.');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** The active language as a plain string (for non-reactive call sites). */
|
|
105
|
+
getCurrentLang() {
|
|
106
|
+
return this.lang();
|
|
107
|
+
}
|
|
108
|
+
/** ngx-translate-compatible alias of {@link getCurrentLang}. */
|
|
109
|
+
get currentLang() {
|
|
110
|
+
return this.lang();
|
|
111
|
+
}
|
|
112
|
+
/** Languages known to the service: loaded ones plus any added with {@link addLangs}. */
|
|
113
|
+
getLangs() {
|
|
114
|
+
this.version();
|
|
115
|
+
return [...new Set([...this.declared, ...this.dictionaries.keys()])];
|
|
116
|
+
}
|
|
117
|
+
/** Declare languages up front (a switcher's list); loading still happens on `use()`. */
|
|
118
|
+
addLangs(langs) {
|
|
119
|
+
for (const lang of langs)
|
|
120
|
+
this.declared.add(lang);
|
|
121
|
+
this.bump();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* ngx-translate-compatible alias: `setTranslation(lang, strings, true)`
|
|
125
|
+
* merges like {@link patch}, `false` (the default there) replaces like
|
|
126
|
+
* {@link set}.
|
|
127
|
+
*/
|
|
128
|
+
setTranslation(lang, strings, shouldMerge = false) {
|
|
129
|
+
if (shouldMerge)
|
|
130
|
+
this.patch(lang, strings);
|
|
131
|
+
else
|
|
132
|
+
this.set(lang, strings);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Load `lang` (once — later calls are cached) and make it active. Resolves
|
|
136
|
+
* when the strings are in memory; a failed load rejects and leaves the
|
|
137
|
+
* previous language active.
|
|
138
|
+
*/
|
|
139
|
+
async use(lang) {
|
|
140
|
+
await this.load(lang);
|
|
141
|
+
if (this.config?.fallbackLang && this.config.fallbackLang !== lang) {
|
|
142
|
+
// Best effort: a missing fallback file must not block the switch.
|
|
143
|
+
this.load(this.config.fallbackLang).catch(() => undefined);
|
|
144
|
+
}
|
|
145
|
+
this.lang.set(lang);
|
|
146
|
+
if (this.config?.documentLang !== false) {
|
|
147
|
+
this.document?.documentElement?.setAttribute('lang', lang);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** Load a language into memory without switching to it. */
|
|
151
|
+
async load(lang) {
|
|
152
|
+
if (this.dictionaries.has(lang))
|
|
153
|
+
return;
|
|
154
|
+
let task = this.pending.get(lang);
|
|
155
|
+
if (!task) {
|
|
156
|
+
task = this.fetch(lang).finally(() => this.pending.delete(lang));
|
|
157
|
+
this.pending.set(lang, task);
|
|
158
|
+
}
|
|
159
|
+
return task;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Translate `key` in the active language, then the fallback; `{{name}}`
|
|
163
|
+
* placeholders come from `params`. A missing key renders as the key
|
|
164
|
+
* itself (or whatever `onMissing` returns) and is recorded in
|
|
165
|
+
* {@link missingKeys}. Reactive: reading it inside a template or a
|
|
166
|
+
* `computed()` re-runs on language switch and after `patch()`.
|
|
167
|
+
*/
|
|
168
|
+
instant(key, params) {
|
|
169
|
+
const lang = this.lang();
|
|
170
|
+
this.version();
|
|
171
|
+
const found = this.lookup(key, lang);
|
|
172
|
+
if (found === undefined) {
|
|
173
|
+
this.recordMissing(key);
|
|
174
|
+
const replacement = this.config?.onMissing?.(key, lang);
|
|
175
|
+
return typeof replacement === 'string' ? replacement : key;
|
|
176
|
+
}
|
|
177
|
+
return mkInterpolate(found, params);
|
|
178
|
+
}
|
|
179
|
+
/** Whether `key` exists in `lang` (default: the active language) or its fallback. */
|
|
180
|
+
has(key, lang = this.lang()) {
|
|
181
|
+
this.version();
|
|
182
|
+
return this.lookup(key, lang) !== undefined;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* CLDR plural form: `keyBase.{zero|one|two|few|many|other}` picked with
|
|
186
|
+
* `Intl.PluralRules` for the active language, `other` as the fallback,
|
|
187
|
+
* interpolated with `{ count, ...params }`.
|
|
188
|
+
*
|
|
189
|
+
* ```json
|
|
190
|
+
* { "guests": { "one": "{{count}} osoba", "few": "{{count}} osoby", "many": "{{count}} osób", "other": "{{count}} osoby" } }
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
plural(keyBase, count, params) {
|
|
194
|
+
const n = Number(count) || 0;
|
|
195
|
+
const lang = this.lang();
|
|
196
|
+
let category = 'other';
|
|
197
|
+
try {
|
|
198
|
+
category = new Intl.PluralRules(lang).select(n);
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
/* unknown locale → other */
|
|
202
|
+
}
|
|
203
|
+
const merged = { count: n, ...params };
|
|
204
|
+
const key = `${keyBase}.${category}`;
|
|
205
|
+
return this.has(key) ? this.instant(key, merged) : this.instant(`${keyBase}.other`, merged);
|
|
206
|
+
}
|
|
207
|
+
/** The flat dictionary of `lang` (default: active), `{}` before it loads. */
|
|
208
|
+
translations(lang = this.lang()) {
|
|
209
|
+
this.version();
|
|
210
|
+
return { ...(this.dictionaries.get(lang) ?? {}) };
|
|
211
|
+
}
|
|
212
|
+
/** Languages currently in memory. */
|
|
213
|
+
loadedLangs() {
|
|
214
|
+
this.version();
|
|
215
|
+
return [...this.dictionaries.keys()];
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Merge strings into `lang` at runtime — a translation editor previewing
|
|
219
|
+
* an edit, or a late-arriving overrides payload. Nested or flat.
|
|
220
|
+
*/
|
|
221
|
+
patch(lang, strings) {
|
|
222
|
+
const current = this.dictionaries.get(lang) ?? {};
|
|
223
|
+
this.dictionaries.set(lang, { ...current, ...mkFlattenTranslations(strings) });
|
|
224
|
+
this.bump();
|
|
225
|
+
}
|
|
226
|
+
/** Replace `lang` entirely (tests, editors reloading from source). */
|
|
227
|
+
set(lang, strings) {
|
|
228
|
+
this.dictionaries.set(lang, mkFlattenTranslations(strings));
|
|
229
|
+
this.bump();
|
|
230
|
+
}
|
|
231
|
+
// ── internals ────────────────────────────────────────────────────────────
|
|
232
|
+
lookup(key, lang) {
|
|
233
|
+
const direct = this.dictionaries.get(lang)?.[key];
|
|
234
|
+
if (direct !== undefined)
|
|
235
|
+
return direct;
|
|
236
|
+
const fallback = this.config?.fallbackLang;
|
|
237
|
+
if (fallback && fallback !== lang)
|
|
238
|
+
return this.dictionaries.get(fallback)?.[key];
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
async fetch(lang) {
|
|
242
|
+
const stateKey = makeStateKey(`mk-translate:${lang}`);
|
|
243
|
+
// Hydration: the server already loaded and serialised this language.
|
|
244
|
+
if (!this.isServer && this.transfer?.hasKey(stateKey)) {
|
|
245
|
+
const flat = this.transfer.get(stateKey, {});
|
|
246
|
+
this.transfer.remove(stateKey);
|
|
247
|
+
this.dictionaries.set(lang, flat);
|
|
248
|
+
this.bump();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (!this.config) {
|
|
252
|
+
this.dictionaries.set(lang, {});
|
|
253
|
+
this.bump();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const base = mkFlattenTranslations(await this.baseLoader().load(lang));
|
|
257
|
+
let overrides = {};
|
|
258
|
+
const overridesLoader = this.overridesLoaderOrNull();
|
|
259
|
+
if (overridesLoader) {
|
|
260
|
+
try {
|
|
261
|
+
overrides = mkFlattenTranslations(await overridesLoader.load(lang));
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
if (isDevMode())
|
|
265
|
+
console.warn(`[mk-translate] overrides for "${lang}" failed to load`, err);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const flat = { ...base, ...overrides };
|
|
269
|
+
this.dictionaries.set(lang, flat);
|
|
270
|
+
if (this.isServer && this.transfer)
|
|
271
|
+
this.transfer.set(stateKey, flat);
|
|
272
|
+
this.bump();
|
|
273
|
+
}
|
|
274
|
+
baseLoader() {
|
|
275
|
+
if (!this.loader) {
|
|
276
|
+
this.loader = runInInjectionContext(this.injector, () => this.config.loader());
|
|
277
|
+
}
|
|
278
|
+
return this.loader;
|
|
279
|
+
}
|
|
280
|
+
overridesLoaderOrNull() {
|
|
281
|
+
const factory = this.config?.overrides;
|
|
282
|
+
if (!factory)
|
|
283
|
+
return null;
|
|
284
|
+
if (!this.overridesLoader) {
|
|
285
|
+
this.overridesLoader = runInInjectionContext(this.injector, factory);
|
|
286
|
+
}
|
|
287
|
+
return this.overridesLoader;
|
|
288
|
+
}
|
|
289
|
+
bump() {
|
|
290
|
+
this.version.update((v) => v + 1);
|
|
291
|
+
}
|
|
292
|
+
recordMissing(key) {
|
|
293
|
+
if (this.missing().has(key))
|
|
294
|
+
return;
|
|
295
|
+
const next = new Set(this.missing());
|
|
296
|
+
next.add(key);
|
|
297
|
+
this.missing.set(next);
|
|
298
|
+
}
|
|
299
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslate, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
300
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslate, providedIn: 'root' });
|
|
301
|
+
}
|
|
302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslate, decorators: [{
|
|
303
|
+
type: Injectable,
|
|
304
|
+
args: [{ providedIn: 'root' }]
|
|
305
|
+
}], ctorParameters: () => [] });
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* `translate` — the key's string in the active language, with `{{name}}`
|
|
309
|
+
* placeholders filled from `params`. Impure so a language switch (or a
|
|
310
|
+
* `patch()`) re-renders every use; the signal reads inside `instant()` mark
|
|
311
|
+
* the host view dirty, so this stays cheap under OnPush and zoneless.
|
|
312
|
+
*
|
|
313
|
+
* ```html
|
|
314
|
+
* {{ 'menu.title' | translate }}
|
|
315
|
+
* {{ 'cart.items' | translate: { count: 3 } }}
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
class MkTranslatePipe {
|
|
319
|
+
translate = inject(MkTranslate);
|
|
320
|
+
transform(key, params) {
|
|
321
|
+
if (!key)
|
|
322
|
+
return '';
|
|
323
|
+
return this.translate.instant(key, params);
|
|
324
|
+
}
|
|
325
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
326
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: MkTranslatePipe, isStandalone: true, name: "translate", pure: false });
|
|
327
|
+
}
|
|
328
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslatePipe, decorators: [{
|
|
329
|
+
type: Pipe,
|
|
330
|
+
args: [{ name: 'translate', pure: false }]
|
|
331
|
+
}] });
|
|
332
|
+
/**
|
|
333
|
+
* `translatePlural` — the CLDR plural form under `keyBase` for a count
|
|
334
|
+
* (see {@link MkTranslate.plural}), interpolated with `{ count, ...params }`.
|
|
335
|
+
*
|
|
336
|
+
* ```html
|
|
337
|
+
* {{ guests | translatePlural: 'reservation.guests' }} <!-- 2 osoby / 5 osób -->
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
class MkTranslatePluralPipe {
|
|
341
|
+
translate = inject(MkTranslate);
|
|
342
|
+
transform(count, keyBase, params) {
|
|
343
|
+
return this.translate.plural(keyBase, Number(count) || 0, params);
|
|
344
|
+
}
|
|
345
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslatePluralPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
346
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: MkTranslatePluralPipe, isStandalone: true, name: "translatePlural", pure: false });
|
|
347
|
+
}
|
|
348
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkTranslatePluralPipe, decorators: [{
|
|
349
|
+
type: Pipe,
|
|
350
|
+
args: [{ name: 'translatePlural', pure: false }]
|
|
351
|
+
}] });
|
|
352
|
+
/**
|
|
353
|
+
* Everything a template needs, for `imports: [...MkTranslateImports]` — the
|
|
354
|
+
* one-line replacement for an ngx-translate `TranslateModule` import.
|
|
355
|
+
*/
|
|
356
|
+
const MkTranslateImports = [MkTranslatePipe, MkTranslatePluralPipe];
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Fetch `<prefix><lang><suffix>` with `HttpClient` — the bundled JSON files
|
|
360
|
+
* in `assets/i18n/`. Needs `provideHttpClient()`; SSR apps that read the
|
|
361
|
+
* files from disk can supply their own {@link MkTranslateLoader} instead.
|
|
362
|
+
*/
|
|
363
|
+
function mkHttpTranslateLoader(options = {}) {
|
|
364
|
+
const { prefix = '/assets/i18n/', suffix = '.json' } = options;
|
|
365
|
+
return () => {
|
|
366
|
+
const http = inject(HttpClient);
|
|
367
|
+
return {
|
|
368
|
+
load: (lang) => firstValueFrom(http.get(`${prefix}${lang}${suffix}`)),
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Strings given up front, keyed by language — tests, storybooks, tiny apps.
|
|
374
|
+
* A language not in the map resolves to `{}`.
|
|
375
|
+
*/
|
|
376
|
+
function mkStaticTranslateLoader(byLang) {
|
|
377
|
+
return () => ({ load: (lang) => byLang[lang] ?? {} });
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Register app translations. By default the initial language is loaded
|
|
382
|
+
* before the first render (`preload`), so no view ever shows raw keys and
|
|
383
|
+
* nothing caches them.
|
|
384
|
+
*
|
|
385
|
+
* ```ts
|
|
386
|
+
* providers: [
|
|
387
|
+
* provideHttpClient(withFetch()),
|
|
388
|
+
* provideMkTranslate({
|
|
389
|
+
* lang: 'pl',
|
|
390
|
+
* fallbackLang: 'pl',
|
|
391
|
+
* loader: mkHttpTranslateLoader(),
|
|
392
|
+
* overrides: () => inject(TranslationOverridesApi), // optional
|
|
393
|
+
* }),
|
|
394
|
+
* ]
|
|
395
|
+
* ```
|
|
396
|
+
*/
|
|
397
|
+
function provideMkTranslate(config) {
|
|
398
|
+
const providers = [
|
|
399
|
+
{ provide: MK_TRANSLATE_CONFIG, useValue: config },
|
|
400
|
+
];
|
|
401
|
+
if (config.preload !== false) {
|
|
402
|
+
providers.push(provideAppInitializer(() => inject(MkTranslate)
|
|
403
|
+
.use(config.lang)
|
|
404
|
+
.catch((err) => {
|
|
405
|
+
// A broken file must not blank the app — keys render as themselves.
|
|
406
|
+
console.error(`[mk-translate] "${config.lang}" failed to load before first render`, err);
|
|
407
|
+
})));
|
|
408
|
+
}
|
|
409
|
+
return makeEnvironmentProviders(providers);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Generated bundle index. Do not edit.
|
|
414
|
+
*/
|
|
415
|
+
|
|
416
|
+
export { MK_TRANSLATE_CONFIG, MkTranslate, MkTranslateImports, MkTranslatePipe, MkTranslatePluralPipe, mkFlattenTranslations, mkHttpTranslateLoader, mkInterpolate, mkStaticTranslateLoader, mkUnflattenTranslations, provideMkTranslate };
|
|
417
|
+
//# sourceMappingURL=mk-kit-ui-translate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mk-kit-ui-translate.mjs","sources":["../../../projects/mk-kit/translate/translate.service.ts","../../../projects/mk-kit/translate/translate.pipe.ts","../../../projects/mk-kit/translate/translate.loaders.ts","../../../projects/mk-kit/translate/translate.providers.ts","../../../projects/mk-kit/translate/mk-kit-ui-translate.ts"],"sourcesContent":["import {\n computed,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n isDevMode,\n makeStateKey,\n PLATFORM_ID,\n runInInjectionContext,\n signal,\n TransferState,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformServer } from '@angular/common';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport type {\n MkFlatTranslations,\n MkTranslateConfig,\n MkTranslateLoader,\n MkTranslateParams,\n MkTranslationTree,\n} from './translate.types';\n\n/** Configuration token; set by {@link provideMkTranslate}. */\nexport const MK_TRANSLATE_CONFIG = new InjectionToken<MkTranslateConfig>('MK_TRANSLATE_CONFIG');\n\nconst PLACEHOLDER = /\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g;\n\n/** `{ a: { b: 'x' } }` → `{ 'a.b': 'x' }`; already-dotted keys pass through. */\nexport function mkFlattenTranslations(\n tree: MkTranslationTree | null | undefined,\n prefix = '',\n out: MkFlatTranslations = {},\n): MkFlatTranslations {\n if (!tree) return out;\n for (const [k, v] of Object.entries(tree)) {\n const key = prefix ? `${prefix}.${k}` : k;\n if (v && typeof v === 'object') mkFlattenTranslations(v, key, out);\n else if (typeof v === 'string') out[key] = v;\n }\n return out;\n}\n\n/** `{ 'a.b': 'x' }` → `{ a: { b: 'x' } }` — for editors that write files back. */\nexport function mkUnflattenTranslations(flat: MkFlatTranslations): MkTranslationTree {\n const tree: MkTranslationTree = {};\n for (const key of Object.keys(flat).sort()) {\n const parts = key.split('.');\n let node = tree;\n for (let i = 0; i < parts.length - 1; i++) {\n const next = node[parts[i]];\n if (!next || typeof next !== 'object') node[parts[i]] = {};\n node = node[parts[i]] as MkTranslationTree;\n }\n node[parts[parts.length - 1]] = flat[key];\n }\n return tree;\n}\n\n/** Replace `{{name}}` placeholders; unknown names are left in place. */\nexport function mkInterpolate(template: string, params?: MkTranslateParams): string {\n if (!params) return template;\n return template.replace(PLACEHOLDER, (match, name: string) => {\n const value = name.split('.').reduce<unknown>(\n (acc, part) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[part] : undefined),\n params,\n );\n return value === undefined || value === null ? match : String(value);\n });\n}\n\n/**\n * App translations as signals: a `lang` you switch with `use()`, `instant()`\n * for code, the `translate` pipe for templates, and `plural()` for CLDR\n * count forms. Dictionaries are the plain nested JSON you already have; an\n * optional overrides loader (a database of edits, say) is merged on top per\n * language. On the server the loaded strings ride to the browser through\n * `TransferState`, so hydration never refetches or flashes raw keys.\n *\n * ```ts\n * provideMkTranslate({\n * lang: 'pl',\n * fallbackLang: 'pl',\n * loader: mkHttpTranslateLoader({ prefix: '/assets/i18n/' }),\n * });\n * ```\n * ```html\n * {{ 'checkout.cart.total' | translate }}\n * {{ 'checkout.cart.freeDeliveryMissing' | translate: { amount: 12 } }}\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class MkTranslate {\n private readonly config = inject(MK_TRANSLATE_CONFIG, { optional: true });\n private readonly injector = inject(Injector);\n private readonly transfer = inject(TransferState, { optional: true });\n private readonly isServer = isPlatformServer(inject(PLATFORM_ID));\n private readonly document = inject(DOCUMENT, { optional: true });\n\n private loader: MkTranslateLoader | null = null;\n private overridesLoader: MkTranslateLoader | null = null;\n private readonly dictionaries = new Map<string, MkFlatTranslations>();\n private readonly declared = new Set<string>();\n private readonly pending = new Map<string, Promise<void>>();\n /** Bumped whenever a dictionary changes, so readers recompute. */\n private readonly version = signal(0);\n private readonly missing = signal<ReadonlySet<string>>(new Set());\n\n /** The active language. Read it in a `computed()` to follow switches. */\n readonly lang = signal<string>(this.config?.lang ?? 'en');\n /** `true` once the active language's strings are in memory. */\n readonly ready = computed(() => {\n this.version();\n return this.dictionaries.has(this.lang());\n });\n /** `lang` as an observable, for code still written around streams. */\n readonly langChange = toObservable(this.lang);\n /** Keys asked for that neither the active nor the fallback language has. */\n readonly missingKeys = computed(() => [...this.missing()].sort());\n\n constructor() {\n if (!this.config && isDevMode()) {\n console.warn('[mk-translate] provideMkTranslate() is missing — every key renders as itself.');\n }\n }\n\n /** The active language as a plain string (for non-reactive call sites). */\n getCurrentLang(): string {\n return this.lang();\n }\n\n /** ngx-translate-compatible alias of {@link getCurrentLang}. */\n get currentLang(): string {\n return this.lang();\n }\n\n /** Languages known to the service: loaded ones plus any added with {@link addLangs}. */\n getLangs(): string[] {\n this.version();\n return [...new Set([...this.declared, ...this.dictionaries.keys()])];\n }\n\n /** Declare languages up front (a switcher's list); loading still happens on `use()`. */\n addLangs(langs: string[]): void {\n for (const lang of langs) this.declared.add(lang);\n this.bump();\n }\n\n /**\n * ngx-translate-compatible alias: `setTranslation(lang, strings, true)`\n * merges like {@link patch}, `false` (the default there) replaces like\n * {@link set}.\n */\n setTranslation(lang: string, strings: MkTranslationTree | MkFlatTranslations, shouldMerge = false): void {\n if (shouldMerge) this.patch(lang, strings);\n else this.set(lang, strings);\n }\n\n /**\n * Load `lang` (once — later calls are cached) and make it active. Resolves\n * when the strings are in memory; a failed load rejects and leaves the\n * previous language active.\n */\n async use(lang: string): Promise<void> {\n await this.load(lang);\n if (this.config?.fallbackLang && this.config.fallbackLang !== lang) {\n // Best effort: a missing fallback file must not block the switch.\n this.load(this.config.fallbackLang).catch(() => undefined);\n }\n this.lang.set(lang);\n if (this.config?.documentLang !== false) {\n this.document?.documentElement?.setAttribute('lang', lang);\n }\n }\n\n /** Load a language into memory without switching to it. */\n async load(lang: string): Promise<void> {\n if (this.dictionaries.has(lang)) return;\n let task = this.pending.get(lang);\n if (!task) {\n task = this.fetch(lang).finally(() => this.pending.delete(lang));\n this.pending.set(lang, task);\n }\n return task;\n }\n\n /**\n * Translate `key` in the active language, then the fallback; `{{name}}`\n * placeholders come from `params`. A missing key renders as the key\n * itself (or whatever `onMissing` returns) and is recorded in\n * {@link missingKeys}. Reactive: reading it inside a template or a\n * `computed()` re-runs on language switch and after `patch()`.\n */\n instant(key: string, params?: MkTranslateParams): string {\n const lang = this.lang();\n this.version();\n const found = this.lookup(key, lang);\n if (found === undefined) {\n this.recordMissing(key);\n const replacement = this.config?.onMissing?.(key, lang);\n return typeof replacement === 'string' ? replacement : key;\n }\n return mkInterpolate(found, params);\n }\n\n /** Whether `key` exists in `lang` (default: the active language) or its fallback. */\n has(key: string, lang = this.lang()): boolean {\n this.version();\n return this.lookup(key, lang) !== undefined;\n }\n\n /**\n * CLDR plural form: `keyBase.{zero|one|two|few|many|other}` picked with\n * `Intl.PluralRules` for the active language, `other` as the fallback,\n * interpolated with `{ count, ...params }`.\n *\n * ```json\n * { \"guests\": { \"one\": \"{{count}} osoba\", \"few\": \"{{count}} osoby\", \"many\": \"{{count}} osób\", \"other\": \"{{count}} osoby\" } }\n * ```\n */\n plural(keyBase: string, count: number, params?: MkTranslateParams): string {\n const n = Number(count) || 0;\n const lang = this.lang();\n let category: string = 'other';\n try {\n category = new Intl.PluralRules(lang).select(n);\n } catch {\n /* unknown locale → other */\n }\n const merged = { count: n, ...params };\n const key = `${keyBase}.${category}`;\n return this.has(key) ? this.instant(key, merged) : this.instant(`${keyBase}.other`, merged);\n }\n\n /** The flat dictionary of `lang` (default: active), `{}` before it loads. */\n translations(lang = this.lang()): MkFlatTranslations {\n this.version();\n return { ...(this.dictionaries.get(lang) ?? {}) };\n }\n\n /** Languages currently in memory. */\n loadedLangs(): string[] {\n this.version();\n return [...this.dictionaries.keys()];\n }\n\n /**\n * Merge strings into `lang` at runtime — a translation editor previewing\n * an edit, or a late-arriving overrides payload. Nested or flat.\n */\n patch(lang: string, strings: MkTranslationTree | MkFlatTranslations): void {\n const current = this.dictionaries.get(lang) ?? {};\n this.dictionaries.set(lang, { ...current, ...mkFlattenTranslations(strings as MkTranslationTree) });\n this.bump();\n }\n\n /** Replace `lang` entirely (tests, editors reloading from source). */\n set(lang: string, strings: MkTranslationTree | MkFlatTranslations): void {\n this.dictionaries.set(lang, mkFlattenTranslations(strings as MkTranslationTree));\n this.bump();\n }\n\n // ── internals ────────────────────────────────────────────────────────────\n\n private lookup(key: string, lang: string): string | undefined {\n const direct = this.dictionaries.get(lang)?.[key];\n if (direct !== undefined) return direct;\n const fallback = this.config?.fallbackLang;\n if (fallback && fallback !== lang) return this.dictionaries.get(fallback)?.[key];\n return undefined;\n }\n\n private async fetch(lang: string): Promise<void> {\n const stateKey = makeStateKey<MkFlatTranslations>(`mk-translate:${lang}`);\n // Hydration: the server already loaded and serialised this language.\n if (!this.isServer && this.transfer?.hasKey(stateKey)) {\n const flat = this.transfer.get(stateKey, {});\n this.transfer.remove(stateKey);\n this.dictionaries.set(lang, flat);\n this.bump();\n return;\n }\n if (!this.config) {\n this.dictionaries.set(lang, {});\n this.bump();\n return;\n }\n const base = mkFlattenTranslations(await this.baseLoader().load(lang));\n let overrides: MkFlatTranslations = {};\n const overridesLoader = this.overridesLoaderOrNull();\n if (overridesLoader) {\n try {\n overrides = mkFlattenTranslations(await overridesLoader.load(lang));\n } catch (err) {\n if (isDevMode()) console.warn(`[mk-translate] overrides for \"${lang}\" failed to load`, err);\n }\n }\n const flat = { ...base, ...overrides };\n this.dictionaries.set(lang, flat);\n if (this.isServer && this.transfer) this.transfer.set(stateKey, flat);\n this.bump();\n }\n\n private baseLoader(): MkTranslateLoader {\n if (!this.loader) {\n this.loader = runInInjectionContext(this.injector, () => this.config!.loader());\n }\n return this.loader;\n }\n\n private overridesLoaderOrNull(): MkTranslateLoader | null {\n const factory = this.config?.overrides;\n if (!factory) return null;\n if (!this.overridesLoader) {\n this.overridesLoader = runInInjectionContext(this.injector, factory);\n }\n return this.overridesLoader;\n }\n\n private bump(): void {\n this.version.update((v) => v + 1);\n }\n\n private recordMissing(key: string): void {\n if (this.missing().has(key)) return;\n const next = new Set(this.missing());\n next.add(key);\n this.missing.set(next);\n }\n}\n","import { inject, Pipe, type PipeTransform } from '@angular/core';\nimport { MkTranslate } from './translate.service';\nimport type { MkTranslateParams } from './translate.types';\n\n/**\n * `translate` — the key's string in the active language, with `{{name}}`\n * placeholders filled from `params`. Impure so a language switch (or a\n * `patch()`) re-renders every use; the signal reads inside `instant()` mark\n * the host view dirty, so this stays cheap under OnPush and zoneless.\n *\n * ```html\n * {{ 'menu.title' | translate }}\n * {{ 'cart.items' | translate: { count: 3 } }}\n * ```\n */\n@Pipe({ name: 'translate', pure: false })\nexport class MkTranslatePipe implements PipeTransform {\n private readonly translate = inject(MkTranslate);\n\n transform(key: string | null | undefined, params?: MkTranslateParams): string {\n if (!key) return '';\n return this.translate.instant(key, params);\n }\n}\n\n/**\n * `translatePlural` — the CLDR plural form under `keyBase` for a count\n * (see {@link MkTranslate.plural}), interpolated with `{ count, ...params }`.\n *\n * ```html\n * {{ guests | translatePlural: 'reservation.guests' }} <!-- 2 osoby / 5 osób -->\n * ```\n */\n@Pipe({ name: 'translatePlural', pure: false })\nexport class MkTranslatePluralPipe implements PipeTransform {\n private readonly translate = inject(MkTranslate);\n\n transform(count: number | string | null | undefined, keyBase: string, params?: MkTranslateParams): string {\n return this.translate.plural(keyBase, Number(count) || 0, params);\n }\n}\n\n/**\n * Everything a template needs, for `imports: [...MkTranslateImports]` — the\n * one-line replacement for an ngx-translate `TranslateModule` import.\n */\nexport const MkTranslateImports = [MkTranslatePipe, MkTranslatePluralPipe] as const;\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\nimport type { MkTranslateLoaderFactory, MkTranslationTree } from './translate.types';\n\n/** Options for {@link mkHttpTranslateLoader}. */\nexport interface MkHttpTranslateLoaderOptions {\n /** URL prefix; the language code is appended. Default `/assets/i18n/`. */\n prefix?: string;\n /** URL suffix after the language code. Default `.json`. */\n suffix?: string;\n}\n\n/**\n * Fetch `<prefix><lang><suffix>` with `HttpClient` — the bundled JSON files\n * in `assets/i18n/`. Needs `provideHttpClient()`; SSR apps that read the\n * files from disk can supply their own {@link MkTranslateLoader} instead.\n */\nexport function mkHttpTranslateLoader(\n options: MkHttpTranslateLoaderOptions = {},\n): MkTranslateLoaderFactory {\n const { prefix = '/assets/i18n/', suffix = '.json' } = options;\n return () => {\n const http = inject(HttpClient);\n return {\n load: (lang: string) => firstValueFrom(http.get<MkTranslationTree>(`${prefix}${lang}${suffix}`)),\n };\n };\n}\n\n/**\n * Strings given up front, keyed by language — tests, storybooks, tiny apps.\n * A language not in the map resolves to `{}`.\n */\nexport function mkStaticTranslateLoader(\n byLang: Record<string, MkTranslationTree>,\n): MkTranslateLoaderFactory {\n return () => ({ load: (lang: string) => byLang[lang] ?? {} });\n}\n","import {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer,\n} from '@angular/core';\nimport { MK_TRANSLATE_CONFIG, MkTranslate } from './translate.service';\nimport type { MkTranslateConfig } from './translate.types';\n\n/**\n * Register app translations. By default the initial language is loaded\n * before the first render (`preload`), so no view ever shows raw keys and\n * nothing caches them.\n *\n * ```ts\n * providers: [\n * provideHttpClient(withFetch()),\n * provideMkTranslate({\n * lang: 'pl',\n * fallbackLang: 'pl',\n * loader: mkHttpTranslateLoader(),\n * overrides: () => inject(TranslationOverridesApi), // optional\n * }),\n * ]\n * ```\n */\nexport function provideMkTranslate(config: MkTranslateConfig): EnvironmentProviders {\n const providers: Parameters<typeof makeEnvironmentProviders>[0] = [\n { provide: MK_TRANSLATE_CONFIG, useValue: config },\n ];\n if (config.preload !== false) {\n providers.push(\n provideAppInitializer(() =>\n inject(MkTranslate)\n .use(config.lang)\n .catch((err: unknown) => {\n // A broken file must not blank the app — keys render as themselves.\n console.error(`[mk-translate] \"${config.lang}\" failed to load before first render`, err);\n }),\n ),\n );\n }\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAuBA;MACa,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;AAE9F,MAAM,WAAW,GAAG,0BAA0B;AAE9C;AACM,SAAU,qBAAqB,CACnC,IAA0C,EAC1C,MAAM,GAAG,EAAE,EACX,GAAA,GAA0B,EAAE,EAAA;AAE5B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,GAAG;AACrB,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACzC,QAAA,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,GAAG,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;aAC7D,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9C;AACA,IAAA,OAAO,GAAG;AACZ;AAEA;AACM,SAAU,uBAAuB,CAAC,IAAwB,EAAA;IAC9D,MAAM,IAAI,GAAsB,EAAE;AAClC,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5B,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;YAC1D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAsB;QAC5C;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C;AACA,IAAA,OAAO,IAAI;AACb;AAEA;AACM,SAAU,aAAa,CAAC,QAAgB,EAAE,MAA0B,EAAA;AACxE,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,QAAQ;IAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,IAAY,KAAI;AAC3D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,IAAI,MAAM,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,GAAI,GAA+B,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,EACpG,MAAM,CACP;AACD,QAAA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACtE,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;MAEU,WAAW,CAAA;IACL,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,QAAQ,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpD,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAExD,MAAM,GAA6B,IAAI;IACvC,eAAe,GAA6B,IAAI;AACvC,IAAA,YAAY,GAAG,IAAI,GAAG,EAA8B;AACpD,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAU;AAC5B,IAAA,OAAO,GAAG,IAAI,GAAG,EAAyB;;IAE1C,OAAO,GAAG,MAAM,CAAC,CAAC;gFAAC;AACnB,IAAA,OAAO,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE;gFAAC;;IAGxD,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI;6EAAC;;AAEhD,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;QAC7B,IAAI,CAAC,OAAO,EAAE;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;8EAAC;;AAEO,IAAA,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEpC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;oFAAC;AAEjE,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,EAAE;AAC/B,YAAA,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC;QAC/F;IACF;;IAGA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;IACpB;;AAGA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;IACpB;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE;QACd,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtE;;AAGA,IAAA,QAAQ,CAAC,KAAe,EAAA;QACtB,KAAK,MAAM,IAAI,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE;IACb;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAY,EAAE,OAA+C,EAAE,WAAW,GAAG,KAAK,EAAA;AAC/F,QAAA,IAAI,WAAW;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IAC9B;AAEA;;;;AAIG;IACH,MAAM,GAAG,CAAC,IAAY,EAAA;AACpB,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE;;AAElE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;QAC5D;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,KAAK,KAAK,EAAE;YACvC,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;QAC5D;IACF;;IAGA,MAAM,IAAI,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE;QACjC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QAC9B;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACH,OAAO,CAAC,GAAW,EAAE,MAA0B,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,OAAO,EAAE;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACvB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC;AACvD,YAAA,OAAO,OAAO,WAAW,KAAK,QAAQ,GAAG,WAAW,GAAG,GAAG;QAC5D;AACA,QAAA,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;IACrC;;IAGA,GAAG,CAAC,GAAW,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAA;QACjC,IAAI,CAAC,OAAO,EAAE;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,SAAS;IAC7C;AAEA;;;;;;;;AAQG;AACH,IAAA,MAAM,CAAC,OAAe,EAAE,KAAa,EAAE,MAA0B,EAAA;QAC/D,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,QAAQ,GAAW,OAAO;AAC9B,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD;AAAE,QAAA,MAAM;;QAER;QACA,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE;AACtC,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE;AACpC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,EAAG,OAAO,CAAA,MAAA,CAAQ,EAAE,MAAM,CAAC;IAC7F;;AAGA,IAAA,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAA;QAC7B,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;IACnD;;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACtC;AAEA;;;AAGG;IACH,KAAK,CAAC,IAAY,EAAE,OAA+C,EAAA;AACjE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,qBAAqB,CAAC,OAA4B,CAAC,EAAE,CAAC;QACnG,IAAI,CAAC,IAAI,EAAE;IACb;;IAGA,GAAG,CAAC,IAAY,EAAE,OAA+C,EAAA;AAC/D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,qBAAqB,CAAC,OAA4B,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,EAAE;IACb;;IAIQ,MAAM,CAAC,GAAW,EAAE,IAAY,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,MAAM;AACvC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY;AAC1C,QAAA,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;AAChF,QAAA,OAAO,SAAS;IAClB;IAEQ,MAAM,KAAK,CAAC,IAAY,EAAA;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAqB,gBAAgB,IAAI,CAAA,CAAE,CAAC;;AAEzE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;AACrD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE;YACX;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE;YACX;QACF;AACA,QAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,SAAS,GAAuB,EAAE;AACtC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACpD,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI;gBACF,SAAS,GAAG,qBAAqB,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,IAAI,SAAS,EAAE;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAA,8BAAA,EAAiC,IAAI,CAAA,gBAAA,CAAkB,EAAE,GAAG,CAAC;YAC7F;QACF;QACA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE;QACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;QACrE,IAAI,CAAC,IAAI,EAAE;IACb;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAO,CAAC,MAAM,EAAE,CAAC;QACjF;QACA,OAAO,IAAI,CAAC,MAAM;IACpB;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS;AACtC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QACtE;QACA,OAAO,IAAI,CAAC,eAAe;IAC7B;IAEQ,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC;AAEQ,IAAA,aAAa,CAAC,GAAW,EAAA;QAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;uGA5OW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACvFlC;;;;;;;;;;AAUG;MAEU,eAAe,CAAA;AACT,IAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;IAEhD,SAAS,CAAC,GAA8B,EAAE,MAA0B,EAAA;AAClE,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IAC5C;uGANW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE;;AAUxC;;;;;;;AAOG;MAEU,qBAAqB,CAAA;AACf,IAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhD,IAAA,SAAS,CAAC,KAAyC,EAAE,OAAe,EAAE,MAA0B,EAAA;AAC9F,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACnE;uGALW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE;;AAS9C;;;AAGG;MACU,kBAAkB,GAAG,CAAC,eAAe,EAAE,qBAAqB;;ACjCzE;;;;AAIG;AACG,SAAU,qBAAqB,CACnC,OAAA,GAAwC,EAAE,EAAA;IAE1C,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO;AAC9D,IAAA,OAAO,MAAK;AACV,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,CAAC,IAAY,KAAK,cAAc,CAAC,IAAI,CAAC,GAAG,CAAoB,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,GAAG,MAAM,CAAA,CAAE,CAAC,CAAC;SACjG;AACH,IAAA,CAAC;AACH;AAEA;;;AAGG;AACG,SAAU,uBAAuB,CACrC,MAAyC,EAAA;IAEzC,OAAO,OAAO,EAAE,IAAI,EAAE,CAAC,IAAY,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC/D;;AC7BA;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,kBAAkB,CAAC,MAAyB,EAAA;AAC1D,IAAA,MAAM,SAAS,GAAmD;AAChE,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE;KACnD;AACD,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE;QAC5B,SAAS,CAAC,IAAI,CACZ,qBAAqB,CAAC,MACpB,MAAM,CAAC,WAAW;AACf,aAAA,GAAG,CAAC,MAAM,CAAC,IAAI;AACf,aAAA,KAAK,CAAC,CAAC,GAAY,KAAI;;YAEtB,OAAO,CAAC,KAAK,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAC,IAAI,CAAA,oCAAA,CAAsC,EAAE,GAAG,CAAC;QAC1F,CAAC,CAAC,CACL,CACF;IACH;AACA,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;AC3CA;;AAEG;;;;"}
|
package/fesm2022/mk-kit-ui.mjs
CHANGED
|
@@ -14,6 +14,7 @@ export * from '@mk-kit/ui/table';
|
|
|
14
14
|
export * from '@mk-kit/ui/status';
|
|
15
15
|
export * from '@mk-kit/ui/data';
|
|
16
16
|
export * from '@mk-kit/ui/kanban';
|
|
17
|
+
export * from '@mk-kit/ui/translate';
|
|
17
18
|
export * from '@mk-kit/ui/feedback';
|
|
18
19
|
export * from '@mk-kit/ui/rich-text';
|
|
19
20
|
export * from '@mk-kit/ui/block-editor';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk-kit-ui.mjs","sources":["../../../projects/mk-kit/src/public-api.ts","../../../projects/mk-kit/src/mk-kit-ui.ts"],"sourcesContent":["/*\n * Public API Surface of @mk-kit/ui.\n *\n * The library ships Material-style secondary entry points — import from the\n * group entries (`@mk-kit/ui/forms`, `@mk-kit/ui/table`, …) so a code-split\n * app only carries the groups each chunk uses. This root entry re-exports\n * everything for convenience; importing it eagerly pulls all groups into the\n * importing chunk.\n */\nexport * from '@mk-kit/ui/core';\nexport * from '@mk-kit/ui/core/signal-forms';\nexport * from '@mk-kit/ui/icon';\nexport * from '@mk-kit/ui/icon/extended';\nexport * from '@mk-kit/ui/chip';\nexport * from '@mk-kit/ui/checkbox';\nexport * from '@mk-kit/ui/button';\nexport * from '@mk-kit/ui/directives';\nexport * from '@mk-kit/ui/dnd';\nexport * from '@mk-kit/ui/navigation';\nexport * from '@mk-kit/ui/forms';\nexport * from '@mk-kit/ui/datetime';\nexport * from '@mk-kit/ui/table';\nexport * from '@mk-kit/ui/status';\nexport * from '@mk-kit/ui/data';\nexport * from '@mk-kit/ui/kanban';\nexport * from '@mk-kit/ui/feedback';\nexport * from '@mk-kit/ui/rich-text';\nexport * from '@mk-kit/ui/block-editor';\nexport * from '@mk-kit/ui/context-menu';\nexport * from '@mk-kit/ui/layout';\nexport * from '@mk-kit/ui/chat';\nexport * from '@mk-kit/ui/query-builder';\nexport * from '@mk-kit/ui/dynamic-form';\nexport * from '@mk-kit/ui/media';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mk-kit-ui.mjs","sources":["../../../projects/mk-kit/src/public-api.ts","../../../projects/mk-kit/src/mk-kit-ui.ts"],"sourcesContent":["/*\n * Public API Surface of @mk-kit/ui.\n *\n * The library ships Material-style secondary entry points — import from the\n * group entries (`@mk-kit/ui/forms`, `@mk-kit/ui/table`, …) so a code-split\n * app only carries the groups each chunk uses. This root entry re-exports\n * everything for convenience; importing it eagerly pulls all groups into the\n * importing chunk.\n */\nexport * from '@mk-kit/ui/core';\nexport * from '@mk-kit/ui/core/signal-forms';\nexport * from '@mk-kit/ui/icon';\nexport * from '@mk-kit/ui/icon/extended';\nexport * from '@mk-kit/ui/chip';\nexport * from '@mk-kit/ui/checkbox';\nexport * from '@mk-kit/ui/button';\nexport * from '@mk-kit/ui/directives';\nexport * from '@mk-kit/ui/dnd';\nexport * from '@mk-kit/ui/navigation';\nexport * from '@mk-kit/ui/forms';\nexport * from '@mk-kit/ui/datetime';\nexport * from '@mk-kit/ui/table';\nexport * from '@mk-kit/ui/status';\nexport * from '@mk-kit/ui/data';\nexport * from '@mk-kit/ui/kanban';\nexport * from '@mk-kit/ui/translate';\nexport * from '@mk-kit/ui/feedback';\nexport * from '@mk-kit/ui/rich-text';\nexport * from '@mk-kit/ui/block-editor';\nexport * from '@mk-kit/ui/context-menu';\nexport * from '@mk-kit/ui/layout';\nexport * from '@mk-kit/ui/chat';\nexport * from '@mk-kit/ui/query-builder';\nexport * from '@mk-kit/ui/dynamic-form';\nexport * from '@mk-kit/ui/media';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAQG;;ACRH;;AAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mk-kit/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.55.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -50,6 +50,10 @@
|
|
|
50
50
|
"style": "./styles/mk-kit.css",
|
|
51
51
|
"default": "./styles/mk-kit.css"
|
|
52
52
|
},
|
|
53
|
+
"./presets/momentum.css": {
|
|
54
|
+
"style": "./styles/presets/momentum.css",
|
|
55
|
+
"default": "./styles/presets/momentum.css"
|
|
56
|
+
},
|
|
53
57
|
"./package.json": {
|
|
54
58
|
"default": "./package.json"
|
|
55
59
|
},
|
|
@@ -184,6 +188,14 @@
|
|
|
184
188
|
"./testing": {
|
|
185
189
|
"types": "./types/mk-kit-ui-testing.d.ts",
|
|
186
190
|
"default": "./fesm2022/mk-kit-ui-testing.mjs"
|
|
191
|
+
},
|
|
192
|
+
"./translate": {
|
|
193
|
+
"types": "./types/mk-kit-ui-translate.d.ts",
|
|
194
|
+
"default": "./fesm2022/mk-kit-ui-translate.mjs"
|
|
195
|
+
},
|
|
196
|
+
"./translate/server": {
|
|
197
|
+
"types": "./types/mk-kit-ui-translate-server.d.ts",
|
|
198
|
+
"default": "./fesm2022/mk-kit-ui-translate-server.mjs"
|
|
187
199
|
}
|
|
188
200
|
},
|
|
189
201
|
"module": "fesm2022/mk-kit-ui.mjs",
|