@coffer-org/web-sdk 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # @coffer-org/web-sdk
2
+
3
+ The UI contract for Coffer plugin **web bundles**. A plugin's `dist/web.js` is
4
+ loaded at runtime by the host's federation loader; this package defines what that
5
+ bundle declares (`ModuleUIBundle`) and the field-renderer registry it plugs into.
6
+
7
+ ## What a web bundle exports
8
+
9
+ `web.js` **default-exports** a `ModuleUIBundle` — or an array of them:
10
+
11
+ ```ts
12
+ export default ModuleUIBundle | ModuleUIBundle[];
13
+ ```
14
+
15
+ Build one with `defineModuleUI(vault, module, bundle)`:
16
+
17
+ ```tsx
18
+ import { defineModuleUI } from '@coffer-org/web-sdk';
19
+
20
+ export default defineModuleUI('myplugin', 'note', {
21
+ // RecordView?: custom record renderer (replaces the generic RecordContent)
22
+ // renderers?: FieldRenderer[] — own field-type renderers (each carries kinds[])
23
+ // translations?: Partial<Record<'uk' | 'ru' | 'en', Record<string, unknown>>>
24
+ translations: { en: { 'myplugin.hello': 'Hello from myplugin' } },
25
+ });
26
+ ```
27
+
28
+ The host's federation loader applies each bundle once: it registers any
29
+ `RecordView` for `vault/module`, calls `registerRenderer` for every entry in
30
+ `renderers`, and merges `translations` into the global i18next instance. See
31
+ `packages/web/federation.ts` for the loader.
32
+
33
+ ## Vendor singleton model (importmap)
34
+
35
+ Plugin web bundles must **not** ship their own copy of React, i18next, or
36
+ `@coffer-org/web-sdk` — they share the host's. The host publishes one vendor bundle
37
+ under `/vendor/*` and wires an [import map](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap)
38
+ so every bare specifier resolves to that single instance:
39
+
40
+ ```html
41
+ <script type="importmap">
42
+ {
43
+ "imports": {
44
+ "react": "/vendor/react.js",
45
+ "react-dom": "/vendor/react-dom.js",
46
+ "i18next": "/vendor/i18next.js",
47
+ "@coffer-org/web-sdk": "/vendor/web-sdk.js"
48
+ }
49
+ }
50
+ </script>
51
+ ```
52
+
53
+ This keeps a single React (so hooks/context work across bundles) and a single
54
+ i18next (so `addResourceBundle` merges into the one live instance). In dev, Vite
55
+ resolves these specifiers via its own aliases, so the import map is a prod-only
56
+ concern.
57
+
58
+ ## Supported vendor majors
59
+
60
+ | Vendor | Range |
61
+ | --------------------- | ---------------------------- |
62
+ | `react` / `react-dom` | **19** (`>=19`) |
63
+ | `i18next` | **26** (23+ host-compatible) |
64
+
65
+ A scaffolded plugin declares these as **peer** dependencies (see
66
+ `create-coffer-plugin`'s `package.json` template), so it builds against the
67
+ host's instance instead of bundling its own.
68
+
69
+ ## Mismatched vendor versions warn, don't block
70
+
71
+ The import map always resolves a plugin's `react` / `react-dom` / `i18next` /
72
+ `@coffer-org/web-sdk` imports to the host's single instance — there is no runtime
73
+ version gate that refuses to load a bundle. A vendor-major mismatch surfaces as a
74
+ **peer-dependency warning at install/build time**, not a hard runtime failure: a
75
+ plugin built against an older major still loads against the host's instance and
76
+ runs as far as the shared API allows. Keep peers in range to avoid surprises; a
77
+ mismatch is a warning, not a block.
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './module-ui.js';
3
+ export * from './registry.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './module-ui.js';
3
+ export * from './registry.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Контракт для UI-частини модуля.
3
+ * Кожен модуль може мати `ui.tsx` поряд з `index.ts`, де декларує:
4
+ * - кастомний рендер запису (замінює генеричний RecordContent)
5
+ * - переклади (мержаться в глобальний i18next)
6
+ */
7
+ import type { FC } from 'react';
8
+ import type { FieldRenderer } from './types.js';
9
+ export interface RecordViewProps {
10
+ record: Record<string, unknown>;
11
+ onEdit?: () => void;
12
+ }
13
+ /**
14
+ * Що модуль публікує в ui.tsx.
15
+ * Передай через `defineModuleUI(vault, module, { ... })`.
16
+ */
17
+ export interface ModuleUIBundle {
18
+ vault: string;
19
+ module: string;
20
+ /** Повністю кастомний рендер запису. Якщо є — замінює генеричний RecordContent. */
21
+ RecordView?: FC<RecordViewProps>;
22
+ /**
23
+ * Масив рендерів типів полів, які оголошує плагін: кожен рендер несе власний kinds[].
24
+ * Реєструються в глобальний rendererRegistry (симетрично з core-рендерами).
25
+ * Так плагін-власник додає свій тип поля (фабрика + рендер) без змін у core.
26
+ */
27
+ renderers?: FieldRenderer[];
28
+ /**
29
+ * Переклади, які мержаться в глобальний i18next.
30
+ * Ключі — коди мов (uk / ru / en).
31
+ */
32
+ translations?: Partial<Record<'uk' | 'ru' | 'en', Record<string, unknown>>>;
33
+ }
34
+ /** Допоміжна функція — прикріплює vault/module до UI-бандла. */
35
+ export declare function defineModuleUI(vault: string, module: string, ui: Omit<ModuleUIBundle, 'vault' | 'module'>): ModuleUIBundle;
36
+ //# sourceMappingURL=module-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-ui.d.ts","sourceRoot":"","sources":["../src/module-ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,UAAU,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,QAAQ,CAAC,GAC3C,cAAc,CAEhB"}
@@ -0,0 +1,5 @@
1
+ /** Допоміжна функція — прикріплює vault/module до UI-бандла. */
2
+ export function defineModuleUI(vault, module, ui) {
3
+ return { vault, module, ...ui };
4
+ }
5
+ //# sourceMappingURL=module-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-ui.js","sourceRoot":"","sources":["../src/module-ui.ts"],"names":[],"mappings":"AAoCA,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,MAAc,EACd,EAA4C;IAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Єдиний реєстр рендерів полів. Кожен рендерер оголошує `kinds`, які обслуговує.
3
+ * Резолв — суворо по `kind` (1:1). Fallback на `prim` прибрано: пропущена
4
+ * реєстрація або колізія kind — явна помилка.
5
+ */
6
+ import type { FieldClient, FieldMeta, LayoutEl } from '@coffer-org/sdk/fields';
7
+ import type { FieldRenderer, ElementRenderProps, FieldInlineProps } from './types.js';
8
+ import type { FC } from 'react';
9
+ export declare const rendererRegistry: Record<string, FieldRenderer>;
10
+ /** Реєструє рендерер під усіма його `kinds`. Дубль kind → помилка. */
11
+ export declare function registerRenderer<P extends ElementRenderProps>(r: {
12
+ kinds: string[];
13
+ layout?: 'block' | 'scalar';
14
+ Page: FC<P>;
15
+ Inline?: FC<FieldInlineProps>;
16
+ }): void;
17
+ /** Резолв суворо по kind. undefined → kind без рендерера. */
18
+ export declare function resolveRenderer(field: Pick<FieldClient, 'kind'>): FieldRenderer | undefined;
19
+ /** Повертає рядковий ідентифікатор виду layout-елемента. */
20
+ export declare function elementKind(el: LayoutEl): string;
21
+ /** Ширина поля в layout-сітці: апетит рендерера; дефолт scalar. */
22
+ export declare function fieldLayout(field: FieldMeta): 'block' | 'scalar';
23
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAW/E,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAM,CAAC;AAElE,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,kBAAkB,EAAE,CAAC,EAAE;IAChE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACZ,MAAM,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;CAC/B,GAAG,IAAI,CAYP;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,aAAa,GAAG,SAAS,CAE3F;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAQhD;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAEhE"}
@@ -0,0 +1,43 @@
1
+ import { isField, isStatic, isButton, isDivider, isInfo, isGroup, isCollectionGroup, isEmbeddedGroup, } from '@coffer-org/sdk/fields';
2
+ export const rendererRegistry = {};
3
+ /** Реєструє рендерер під усіма його `kinds`. Дубль kind → помилка. */
4
+ export function registerRenderer(r) {
5
+ if (!r.kinds.length)
6
+ throw new Error('[render] рендерер без kinds');
7
+ const stored = {
8
+ kinds: r.kinds,
9
+ layout: r.layout,
10
+ Page: r.Page,
11
+ Inline: r.Inline,
12
+ };
13
+ for (const kind of r.kinds) {
14
+ if (rendererRegistry[kind])
15
+ throw new Error(`[render] kind '${kind}' уже зареєстровано`);
16
+ rendererRegistry[kind] = stored;
17
+ }
18
+ }
19
+ /** Резолв суворо по kind. undefined → kind без рендерера. */
20
+ export function resolveRenderer(field) {
21
+ return rendererRegistry[field.kind];
22
+ }
23
+ /** Повертає рядковий ідентифікатор виду layout-елемента. */
24
+ export function elementKind(el) {
25
+ if (isField(el))
26
+ return el.type.kind;
27
+ if (isStatic(el))
28
+ return el.type.kind;
29
+ if (isGroup(el))
30
+ return isCollectionGroup(el) ? 'collection' : isEmbeddedGroup(el) ? 'embedded' : 'group';
31
+ if (isButton(el))
32
+ return 'button';
33
+ if (isDivider(el))
34
+ return 'divider';
35
+ if (isInfo(el))
36
+ return 'info';
37
+ throw new Error('[render] невідомий layout-елемент');
38
+ }
39
+ /** Ширина поля в layout-сітці: апетит рендерера; дефолт scalar. */
40
+ export function fieldLayout(field) {
41
+ return resolveRenderer(field)?.layout ?? 'scalar';
42
+ }
43
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,CAAC,MAAM,gBAAgB,GAAkC,EAAE,CAAC;AAElE,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAA+B,CAK9D;IACC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACpE,MAAM,MAAM,GAAkB;QAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAyC;QACjD,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,gBAAgB,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,qBAAqB,CAAC,CAAC;QACzF,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAClC,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,KAAgC;IAC9D,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,EAAY;IACtC,IAAI,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC,IAAI,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC,IAAI,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1G,IAAI,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,SAAS,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,MAAM,CAAC,EAAE,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACvD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,OAAO,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,QAAQ,CAAC;AACpD,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Контракт рендера типу поля. Один FieldRenderer описує, як тип поля
3
+ * 1. малюється повним на СТОРІНЦІ запису (Page — self-contained: label/box/error/кнопки),
4
+ * 2. стискається у клітинку таблиці (Inline — компонента, height-aware).
5
+ *
6
+ * Рендери (core та плагінні) реєструються в один rendererRegistry під ключем
7
+ * `kind`. Резолв — суворо по `kind`, без fallback на `prim`.
8
+ *
9
+ * `Page` сам розрулює multiple через `field.hints.multiple` (helper або firstOf).
10
+ */
11
+ import type { FC, ReactNode } from 'react';
12
+ import type { FieldMeta, LayoutEl, OptionItem } from '@coffer-org/sdk/fields';
13
+ /** i18n-функція (сумісна з react-i18next `t`). */
14
+ export type TFn = (key: string, opts?: Record<string, unknown>) => string;
15
+ export type FieldMode = 'view' | 'edit' | 'create';
16
+ export interface RecordCtx {
17
+ vault: string;
18
+ module: string;
19
+ recordId: string | null;
20
+ }
21
+ export interface ElementRenderProps {
22
+ /** Сирий layout-елемент. Опційний: старі FieldSlot-калери ще не передають;
23
+ * компонувальник завжди передає (element-рендерери покладаються через el!). */
24
+ el?: LayoutEl;
25
+ field?: FieldMeta;
26
+ value: unknown;
27
+ onChange?: (v: unknown) => void | Promise<string | undefined>;
28
+ label?: string;
29
+ required?: boolean;
30
+ error?: string;
31
+ selectOptions?: OptionItem[];
32
+ excludeValues?: string[];
33
+ mode: FieldMode;
34
+ recordCtx: RecordCtx;
35
+ bare?: boolean;
36
+ children?: ReactNode;
37
+ }
38
+ export interface FieldRenderProps extends ElementRenderProps {
39
+ field: FieldMeta;
40
+ }
41
+ /** Props компактного рендера клітинки (таблиця/картка). */
42
+ export interface FieldInlineProps {
43
+ field: FieldMeta;
44
+ value: unknown;
45
+ /** Висота (px), у яку вписатись; вирівнювання завжди по центру. Корисно для картинок. */
46
+ height?: number;
47
+ }
48
+ export type BoxGeom = 'inline' | 'textarea' | 'title' | 'none';
49
+ export interface FieldRenderer {
50
+ /** Які kind обслуговує цей елемент. 1:1 з рендерером. */
51
+ kinds: string[];
52
+ /** Просторовий апетит у layout-сітці. default 'scalar' (клітинка ~1/3).
53
+ * 'block' = на всю ширину сторінки/форми. */
54
+ layout?: 'block' | 'scalar';
55
+ /** Повне поле на СТОРІНЦІ запису: label + Pencil/✓/✕ + box + помилка + required. */
56
+ Page: FC<ElementRenderProps>;
57
+ /** Компактний рендер клітинки — КОМПОНЕНТА (не рядок), height-aware, центр по
58
+ * вертикалі, вміє картинки. Реюзабельна в інших рендерерах. */
59
+ Inline?: FC<FieldInlineProps>;
60
+ }
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE9E,kDAAkD;AAClD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAE1E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC;oFACgF;IAChF,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;kDAC8C;IAC9C,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,oFAAoF;IACpF,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAC7B;oEACgE;IAChE,MAAM,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;CAC/B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@coffer-org/web-sdk",
3
+ "version": "1.1.0",
4
+ "type": "module",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./*": {
14
+ "types": "./dist/*.d.ts",
15
+ "default": "./dist/*.js"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "build": "tsc -b tsconfig.build.json",
20
+ "prepack": "npm run build && node ../../scripts/swap-exports.mjs dist",
21
+ "postpack": "node ../../scripts/swap-exports.mjs src"
22
+ },
23
+ "dependencies": {
24
+ "@coffer-org/sdk": "^1.1.0"
25
+ },
26
+ "peerDependencies": {
27
+ "react": ">=19",
28
+ "react-dom": ">=19",
29
+ "i18next": ">=23"
30
+ }
31
+ }