@yurikilian/lex4 1.6.0 → 1.8.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 +4 -2
- package/dist/components/BlockTypePicker.d.ts +1 -1
- package/dist/components/BlockTypePicker.d.ts.map +1 -1
- package/dist/components/Toolbar.d.ts.map +1 -1
- package/dist/context/document-provider.d.ts.map +1 -1
- package/dist/context/toolbar-style-snapshot.d.ts +4 -0
- package/dist/context/toolbar-style-snapshot.d.ts.map +1 -0
- package/dist/context/toolbar-style-store.d.ts +28 -0
- package/dist/context/toolbar-style-store.d.ts.map +1 -0
- package/dist/lex4-editor.cjs +544 -161
- package/dist/lex4-editor.cjs.map +1 -1
- package/dist/lex4-editor.js +547 -164
- package/dist/lex4-editor.js.map +1 -1
- package/dist/lexical/commands/block-commands.d.ts +1 -1
- package/dist/lexical/commands/block-commands.d.ts.map +1 -1
- package/dist/lexical/commands/block-types.d.ts +2 -0
- package/dist/lexical/commands/block-types.d.ts.map +1 -0
- package/dist/style.css +31 -27
- package/dist/utils/text-style.d.ts +6 -0
- package/dist/utils/text-style.d.ts.map +1 -1
- package/dist/variables/variable-formatting.d.ts +1 -0
- package/dist/variables/variable-formatting.d.ts.map +1 -1
- package/dist/variables/variable-node.d.ts.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -31,6 +31,7 @@ A paginated document editor built as a **reusable React library** on top of [Met
|
|
|
31
31
|
- **True A4 pagination** — every page is exactly 794 × 1123 CSS pixels (210 mm × 297 mm at 96 DPI)
|
|
32
32
|
- **Automatic content flow** — overflow splits at block boundaries with mid-block splitting for oversized paragraphs and lists
|
|
33
33
|
- **Rich text formatting** — bold, italic, underline, strikethrough, alignment, lists, indentation
|
|
34
|
+
- **Selection-aware formatting** — toolbar pressed state follows the caret, partial same-line block restyling is preserved, and selected variable chips can be promoted to headings
|
|
34
35
|
- **Headers & footers** — global toggle with per-page editable regions and page counters
|
|
35
36
|
- **Multiple font families** — Inter, Arial, Times New Roman, Courier New, Georgia, Verdana and more
|
|
36
37
|
- **Font size control** — per-selection font size with AST-level preservation
|
|
@@ -225,6 +226,7 @@ Also adds:
|
|
|
225
226
|
- **Toolbar button** — variable picker dropdown for inserting variables inline
|
|
226
227
|
- **Host-controlled side panel** — opens a searchable variable panel on the right, which can also be controlled from app chrome via the handle methods above
|
|
227
228
|
- **Variable node** — custom Lexical node rendered as a non-editable chip
|
|
229
|
+
- **Selection formatting** — selected chips participate in toolbar inline/block formatting and keep heading/paragraph styling in sync with export
|
|
228
230
|
|
|
229
231
|
```tsx
|
|
230
232
|
const variables: VariableDefinition[] = [
|
|
@@ -608,8 +610,8 @@ pnpm --filter e2e test:ui
|
|
|
608
610
|
|
|
609
611
|
| Category | Framework | Count | Description |
|
|
610
612
|
|----------|-----------|-------|-------------|
|
|
611
|
-
| Unit | Vitest |
|
|
612
|
-
| E2E | Playwright |
|
|
613
|
+
| Unit | Vitest | 221 | Engine logic, reducers, AST serializers, i18n, variable nodes |
|
|
614
|
+
| E2E | Playwright | 129 | Full user flows — typing, formatting, pagination, header/footer, variables, theme, i18n |
|
|
613
615
|
|
|
614
616
|
## 🔧 Build & Bundle
|
|
615
617
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { Lex4Translations } from '../i18n';
|
|
3
|
-
import { BlockType } from '../lexical/commands/block-
|
|
3
|
+
import { BlockType } from '../lexical/commands/block-types';
|
|
4
4
|
export declare function getBlockTypeLabel(t: Lex4Translations, blockType: BlockType): string;
|
|
5
5
|
interface BlockTypePickerProps {
|
|
6
6
|
value: BlockType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockTypePicker.d.ts","sourceRoot":"","sources":["../../src/components/BlockTypePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"BlockTypePicker.d.ts","sourceRoot":"","sources":["../../src/components/BlockTypePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAYjE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAiBnF;AAMD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAkG1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AA4DtD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAmY3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-provider.d.ts","sourceRoot":"","sources":["../../src/context/document-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"document-provider.d.ts","sourceRoot":"","sources":["../../src/context/document-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAwBtD,UAAU,qBAAqB;IAC7B,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAqPD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAwa5D,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LexicalEditor, EditorState } from 'lexical';
|
|
2
|
+
import { ToolbarStyleSnapshot } from './toolbar-style-store';
|
|
3
|
+
export declare function readToolbarStyleSnapshot(editor: LexicalEditor, editorState?: EditorState): ToolbarStyleSnapshot;
|
|
4
|
+
//# sourceMappingURL=toolbar-style-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar-style-snapshot.d.ts","sourceRoot":"","sources":["../../src/context/toolbar-style-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEjB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAuFlE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,WAAW,GAAE,WAAqC,GACjD,oBAAoB,CAuDtB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { ElementFormatType } from 'lexical';
|
|
3
|
+
import { StoreApi } from 'zustand/vanilla';
|
|
4
|
+
import { BlockType } from '../lexical/commands/block-types';
|
|
5
|
+
import { FontFamily } from '../lexical/plugins/font-plugin';
|
|
6
|
+
export interface ToolbarStyleSnapshot {
|
|
7
|
+
blockType: BlockType;
|
|
8
|
+
fontFamily: FontFamily;
|
|
9
|
+
fontSize: number;
|
|
10
|
+
alignment: ElementFormatType;
|
|
11
|
+
isBold: boolean;
|
|
12
|
+
isItalic: boolean;
|
|
13
|
+
isUnderline: boolean;
|
|
14
|
+
isStrikethrough: boolean;
|
|
15
|
+
hasSelectedVariable: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const DEFAULT_TOOLBAR_STYLE_SNAPSHOT: ToolbarStyleSnapshot;
|
|
18
|
+
export interface ToolbarStyleStoreState extends ToolbarStyleSnapshot {
|
|
19
|
+
setSnapshot: (snapshot: ToolbarStyleSnapshot) => void;
|
|
20
|
+
reset: () => void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createToolbarStyleStore(initialSnapshot?: ToolbarStyleSnapshot): StoreApi<ToolbarStyleStoreState>;
|
|
23
|
+
export declare const ToolbarStyleStoreProvider: React.FC<{
|
|
24
|
+
children: React.ReactNode;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function useToolbarStyleStore<T>(selector: (state: ToolbarStyleStoreState) => T): T;
|
|
27
|
+
export declare function useToolbarStyleStoreApi(): StoreApi<ToolbarStyleStoreState>;
|
|
28
|
+
//# sourceMappingURL=toolbar-style-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar-style-store.d.ts","sourceRoot":"","sources":["../../src/context/toolbar-style-store.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAGjE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAU5C,CAAC;AAEF,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,WAAW,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CACrC,eAAe,GAAE,oBAAqD,GACrE,QAAQ,CAAC,sBAAsB,CAAC,CAMlC;AAID,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAY7E,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,CAAC,GAAG,CAAC,CAMzF;AAED,wBAAgB,uBAAuB,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAM1E"}
|