@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 +77 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/module-ui.d.ts +36 -0
- package/dist/module-ui.d.ts.map +1 -0
- package/dist/module-ui.js +5 -0
- package/dist/module-ui.js.map +1 -0
- package/dist/registry.d.ts +23 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +43 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +31 -0
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.
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/registry.js
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|