shadcn@4.21.0
- #11758
c257f688cf4de7ec10cc1be84cad29cd4631182cThanks @shadcn! - installcnand generateexport { cn } from "cn"forlib/utilson init. Registry components now importcnfrom thecnpackage.
8720dec73f5aebed9f649ea58636f54599fdedf1Thanks @shadcn! - usetwMergefromcninstead oftailwind-mergeinternally.
@docx-editor.dev/editor-api@2.15.0
- Updated dependencies [5284df5]
- Updated dependencies [e9baf4d]
- Updated dependencies [087bb78]
- Updated dependencies [0d81033]
- Updated dependencies [a3819aa]
- Updated dependencies [a53f75c]
- Updated dependencies [36c1f04]
- Updated dependencies [8e6133f]
- Updated dependencies [678fe91]
- Updated dependencies [cfe3fe1]
- Updated dependencies [0e1360d]
- Updated dependencies [2a8e57e]
- @docx-editor.dev/core@2.15.0
@docx-editor.dev/react@2.15.0
- Updated dependencies [5284df5]
- Updated dependencies [e9baf4d]
- Updated dependencies [087bb78]
- Updated dependencies [0d81033]
- Updated dependencies [a3819aa]
- Updated dependencies [a53f75c]
- Updated dependencies [36c1f04]
- Updated dependencies [8e6133f]
- Updated dependencies [678fe91]
- Updated dependencies [cfe3fe1]
- Updated dependencies [0e1360d]
- Updated dependencies [2a8e57e]
- @docx-editor.dev/core@2.15.0
- @docx-editor.dev/i18n@2.15.0
@docx-editor.dev/pro@2.15.0
- 7dc8b22: Preserve concurrent text edits when another collaborator formats the same run. Fixes #590.
- Updated dependencies [5284df5]
- Updated dependencies [e9baf4d]
- Updated dependencies [087bb78]
- Updated dependencies [0d81033]
- Updated dependencies [a3819aa]
- Updated dependencies [a53f75c]
- Updated dependencies [36c1f04]
- Updated dependencies [8e6133f]
- Updated dependencies [678fe91]
- Updated dependencies [cfe3fe1]
- Updated dependencies [0e1360d]
- Updated dependencies [2a8e57e]
- @docx-editor.dev/core@2.15.0
- @docx-editor.dev/react@2.15.0
- @docx-editor.dev/vue@2.15.0
@docx-editor.dev/vue@2.15.0
- Updated dependencies [5284df5]
- Updated dependencies [e9baf4d]
- Updated dependencies [087bb78]
- Updated dependencies [0d81033]
- Updated dependencies [a3819aa]
- Updated dependencies [a53f75c]
- Updated dependencies [36c1f04]
- Updated dependencies [8e6133f]
- Updated dependencies [678fe91]
- Updated dependencies [cfe3fe1]
- Updated dependencies [0e1360d]
- Updated dependencies [2a8e57e]
- @docx-editor.dev/core@2.15.0
- @docx-editor.dev/i18n@2.15.0
@docx-editor.dev/fonts@2.15.0
- 0d81033: Export
FONT_ASSET_ROOTso hosts can confine packaged-font reads to the fonts package without guessing its install path.
- 5284df5: Preserve one literal asset URL per packaged font face in the ESM browser build so Next.js with Turbopack, Vite, and webpack resolve every requested filename instead of collapsing dynamic URLs to one font. Keep the CommonJS build resolving the same packaged files in Node.
@docx-editor.dev/core@2.15.0
- 5284df5: Add the DOM-free
@docx-editor.dev/core/exportsession with immutable export-ready semantic layouts and shared shaping and resource settlement. Exporters consume the same layout coordinator and semantic records as the browser engine, including page-scoped, exporter-neutral comment and tracked-change provenance that future Markdown, PDF, and other exporters can bind to their own output coordinates. Document-aware font-backed sessions also retain immutable resolution evidence so every exporter can report the exact direct, substituted, incomplete, and failed font origins behind pagination. - 0d81033: Add session-owned font resources, exact shaped text, embedded document fonts, document metadata, internal destinations, and review occurrence geometry to semantic export sessions.
- 8e6133f: Apply live author, mode, translation, and locale changes without rebuilding the editor. Keep Vue root and packaged editor props reactive after mount. A locale catalog change no longer rebuilds the editor. Fixes #695 and #561.
- e9baf4d: Search headers, footers, footnotes, endnotes, table cells, and saved field results. Fixes #703, fixes #694
- 087bb78: Position page- and margin-anchored floating tables at
tblpYwithout advancing body flow. PreservebtLrcell text, built-up bar fractions, and inline pictures in later columns. Keep automatic line spacing from scaling built-up equations and changing pagination. Fixes #662. - a3819aa: Reflow long unbroken words continuously across tracked-insertion run boundaries while typing in Suggesting mode, without splitting Unicode graphemes. Fixes #716.
- a53f75c: Hyperlinks in headers, footers, and anchored text boxes now resolve through their owning OOXML part and paint as link anchors. You can edit or remove header and footer links with Ctrl+K while editing their story; secondary-story anchors remain inert. Fixes #643.
- 36c1f04: Keep table-hosted text-box list markers current while reducing repeated layout work for their host paragraphs. Fixes #639.
- 678fe91: Group every tracked field control into the review card beside it, so a struck or inserted field is one decision instead of one card per control. Fixes #718
- cfe3fe1: Treat empty on-demand font resolver fragments like an undefined result instead of reporting a missing-font configuration.
- 0e1360d: Keep underlined trailing spaces and underscore tab leaders as single rules that reach the line margin.
- 2a8e57e: Show tracked field controls with their adjacent replacement instead of separate Deleted cards.
- @docx-editor.dev/i18n@2.15.0
v2.10.0
- New
duplicatesoption on theimport*()methods of the filesystem API, set to"throw","keep-first"or"keep-last". A zip file stores a flat list of filenames while the filesystem API indexes the entries by path, so two entries can claim the same node of the tree: they can hold the same filename, hold filenames differing only by the path components ignored when building the tree such as"a/b.txt"and"./a/b.txt", or one can be a file and the other a directory holding it such as"a"and"a/b.txt". The three cases are now governed by one option instead of aborting the import in every case. The default stays"throw", an archive holding the same name twice being also the shape making an extractor and a scanner disagree on the file they see."keep-last"is the behavior of most zip tools, verified against Info-ZIP, 7-Zip, libarchive,ditto, Pythonzipfile, fflate and JSZip - The name passed to an
add*()method of the filesystem API is now split into path components, like the filename of an imported entry already was.addText("a/b.txt", text)adds"b.txt"to the"a"directory and creates that directory when it does not exist, instead of adding one entry whose name holds a"/". The directories created that way are implicit, they are not written when the tree is exported, so the exported zip file is unchanged.rename()splits the name the same way and moves the entry accordingly - New
ERR_DUPLICATE_IMPORTED_ENTRYandERR_INVALID_DUPLICATESerrors, and newZipDirectoryEntryImportOptionstype.ERR_DUPLICATE_IMPORTED_ENTRYreplacesERR_ENTRY_EXISTSwhen an import is refused, the former reading as an error made by the caller while the caller only passed a zip file
- A failed import no longer modifies the filesystem. The entries created before the error are removed, and the content the
ZipFSinstance held before the import is restored instead of being discarded before the first entry is read - The
replace*()methods of the filesystem API now update the size of the entry, which kept describing the content held before the call. The archive was written correctly, onlygetExportedSize()was affected: replacing 1 byte of text with 5000 bytes predicted 127 bytes for an export of 5126.replaceReadable()reports an undetermined size, likeaddReadable()does, instead of returning a prediction it cannot make. The five methods also clear the pass-through state of an entry imported with thepassThroughoption, the bytes copied verbatim being gone ZipFS#find()no longer throws aTypeErrorwhen a component of the path it is given is a file entry rather than a directory- Renaming an entry to the name it already has is no longer refused as a collision with itself
- New
Hello world with the filesystem APIexample in the README. The filesystem API needs a single import, infers the Reader and the Writer from the type of the data, and reaches an entry from its name, which is what the five other examples never showed - The encoding limitations of the filename options are now documented
- The conditions making
getExportedSize()unable to predict a size mention that a name holding"/"builds a nested tree
- New tests covering the duplicate filename policies, the rollback of a failed import, the path components built from a name, and the size of an entry whose content is replaced
- The size prediction tests cover the names holding
"/", the two duplicate policies and the entries whose imported content is replaced - The CP437 table is now checked by a test instead of at runtime, and the characters it decodes are written as characters in that test