@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 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 | 186 | Engine logic, reducers, AST serializers, i18n, variable nodes |
612
- | E2E | Playwright | 118 | Full user flows — typing, formatting, pagination, header/footer, variables, theme, i18n |
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-commands';
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,oCAAoC,CAAC;AAYpE,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
+ {"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,KAA2C,MAAM,OAAO,CAAC;AAqEhE,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAoa3B,CAAC"}
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;AAuBtD,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,CAsa5D,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"}