@segnavia/format 0.12.0 → 0.14.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.
@@ -0,0 +1,11 @@
1
+ import { Board, BoardItem } from "./board.js";
2
+ import { Point } from "./deck.js";
3
+ //#region src/board-edit.d.ts
4
+ export declare const MIN_BOARD_ITEM_WIDTH = 16;
5
+ export type BoardItemAnchor = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
6
+ export declare function moveItems(board: Board, ids: readonly string[], delta: Point): Board;
7
+ export declare function moveSection(board: Board, sectionId: string, delta: Point): Board;
8
+ export declare function resizeItem(board: Board, id: string, width: number, anchor: BoardItemAnchor, heightAt: (width: number) => number): Board;
9
+ export declare function removeItems(board: Board, ids: readonly string[]): Board;
10
+ export declare function addItem(board: Board, item: BoardItem): Board;
11
+ //#endregion
@@ -0,0 +1,66 @@
1
+ import { Board } from "./board.js";
2
+ //#region src/board-edit.ts
3
+ const MIN_BOARD_ITEM_WIDTH = 16;
4
+ function moveItems(board, ids, delta) {
5
+ const moved = new Set(ids);
6
+ return {
7
+ ...board,
8
+ items: board.items.map((item) => moved.has(item.id) ? {
9
+ ...item,
10
+ x: item.x + delta.x,
11
+ y: item.y + delta.y
12
+ } : item)
13
+ };
14
+ }
15
+ function moveSection(board, sectionId, delta) {
16
+ const section = board.sections.find((entry) => entry.id === sectionId);
17
+ if (!section) return board;
18
+ const moved = moveItems(board, section.items, delta);
19
+ return {
20
+ ...moved,
21
+ sections: moved.sections.map((entry) => entry.id === sectionId ? {
22
+ ...entry,
23
+ rectangle: {
24
+ ...entry.rectangle,
25
+ x: entry.rectangle.x + delta.x,
26
+ y: entry.rectangle.y + delta.y
27
+ }
28
+ } : entry)
29
+ };
30
+ }
31
+ function resizeItem(board, id, width, anchor, heightAt) {
32
+ const nextWidth = Math.max(16, width);
33
+ return {
34
+ ...board,
35
+ items: board.items.map((item) => {
36
+ if (item.id !== id) return item;
37
+ const oldHeight = heightAt(item.width);
38
+ const newHeight = heightAt(nextWidth);
39
+ return {
40
+ ...item,
41
+ width: nextWidth,
42
+ x: anchor.endsWith("right") ? item.x + item.width - nextWidth : item.x,
43
+ y: anchor.startsWith("bottom") ? item.y + oldHeight - newHeight : item.y
44
+ };
45
+ })
46
+ };
47
+ }
48
+ function removeItems(board, ids) {
49
+ const removed = new Set(ids);
50
+ return {
51
+ ...board,
52
+ items: board.items.filter((item) => !removed.has(item.id)),
53
+ sections: board.sections.map((section) => ({
54
+ ...section,
55
+ items: section.items.filter((id) => !removed.has(id))
56
+ }))
57
+ };
58
+ }
59
+ function addItem(board, item) {
60
+ return Board.parse({
61
+ ...board,
62
+ items: [...board.items, item]
63
+ });
64
+ }
65
+ //#endregion
66
+ export { MIN_BOARD_ITEM_WIDTH, addItem, moveItems, moveSection, removeItems, resizeItem };
@@ -0,0 +1,18 @@
1
+ import { Board, BoardSection } from "./board.js";
2
+ import { Point } from "./deck.js";
3
+ import { BoardShapes } from "./board-geometry.js";
4
+ //#region src/board-sections.d.ts
5
+ export declare const SECTION_PADDING = 24;
6
+ export declare const SECTION_TITLE_ROOM = 32;
7
+ export declare const SECTION_MIN_SIZE: {
8
+ readonly width: 240;
9
+ readonly height: 160;
10
+ };
11
+ export declare const SECTION_GAP = 16;
12
+ export declare const MAKE_ROOM_LIMIT = 50;
13
+ export declare function fitSection(board: Board, shapes: BoardShapes, sectionId: string): Board;
14
+ export declare function assignMembership(board: Board, shapes: BoardShapes, ids: readonly string[], point: Point, startingSections?: readonly BoardSection[]): Board;
15
+ export declare function makeRoom(board: Board, shapes: BoardShapes, changed: readonly string[]): Board;
16
+ export declare function fitTouchedSections(previous: Board, board: Board, shapes: BoardShapes, touched: readonly string[]): Board;
17
+ export declare function settleBoard(previous: Board, board: Board, shapes: BoardShapes, touched: readonly string[]): Board;
18
+ //#endregion
@@ -0,0 +1,210 @@
1
+ import { moveItems, moveSection } from "./board-edit.js";
2
+ import { itemHeight } from "./board-geometry.js";
3
+ //#region src/board-sections.ts
4
+ const SECTION_PADDING = 24;
5
+ const SECTION_TITLE_ROOM = 32;
6
+ const SECTION_MIN_SIZE = {
7
+ width: 240,
8
+ height: 160
9
+ };
10
+ const SECTION_GAP = 16;
11
+ const MAKE_ROOM_LIMIT = 50;
12
+ function itemRectangle(board, shapes, id) {
13
+ const item = board.items.find((entry) => entry.id === id);
14
+ if (!item) return void 0;
15
+ const shape = shapes.items[id];
16
+ if (!shape) throw new Error(`item "${id}" has no supplied shape; supply shapes.items["${id}"]`);
17
+ return {
18
+ x: item.x,
19
+ y: item.y,
20
+ width: item.width,
21
+ height: itemHeight(item, shape)
22
+ };
23
+ }
24
+ function fittedRectangle(board, shapes, sectionId, excluded = /* @__PURE__ */ new Set()) {
25
+ const section = board.sections.find((entry) => entry.id === sectionId);
26
+ if (!section) return void 0;
27
+ const members = section.items.filter((id) => !excluded.has(id)).map((id) => itemRectangle(board, shapes, id)).filter((rectangle) => rectangle !== void 0);
28
+ if (members.length === 0) return {
29
+ x: section.rectangle.x,
30
+ y: section.rectangle.y,
31
+ ...SECTION_MIN_SIZE
32
+ };
33
+ const left = Math.min(...members.map((rectangle) => rectangle.x));
34
+ const top = Math.min(...members.map((rectangle) => rectangle.y));
35
+ const right = Math.max(...members.map((rectangle) => rectangle.x + rectangle.width));
36
+ const bottom = Math.max(...members.map((rectangle) => rectangle.y + rectangle.height));
37
+ return {
38
+ x: left - 24,
39
+ y: top - 24 - 32,
40
+ width: right - left + 48,
41
+ height: bottom - top + 48 + 32
42
+ };
43
+ }
44
+ function fitSection(board, shapes, sectionId) {
45
+ const rectangle = fittedRectangle(board, shapes, sectionId);
46
+ if (!rectangle) return board;
47
+ return {
48
+ ...board,
49
+ sections: board.sections.map((section) => section.id === sectionId ? {
50
+ ...section,
51
+ rectangle
52
+ } : section)
53
+ };
54
+ }
55
+ function contains(rectangle, point) {
56
+ return point.x >= rectangle.x && point.x <= rectangle.x + rectangle.width && point.y >= rectangle.y && point.y <= rectangle.y + rectangle.height;
57
+ }
58
+ function assignMembership(board, shapes, ids, point, startingSections = []) {
59
+ const moved = new Set(ids.filter((id) => board.items.some((item) => item.id === id)));
60
+ let target;
61
+ for (const section of board.sections) {
62
+ const rectangle = fittedRectangle(board, shapes, section.id, moved);
63
+ if (rectangle && contains(rectangle, point)) target = section.id;
64
+ }
65
+ const assignments = /* @__PURE__ */ new Map();
66
+ for (const id of moved) {
67
+ const starting = startingSections.find((section) => section.items.includes(id));
68
+ assignments.set(id, starting && contains(starting.rectangle, point) ? starting.id : target);
69
+ }
70
+ return {
71
+ ...board,
72
+ sections: board.sections.map((section) => {
73
+ const items = section.items.filter((id) => !moved.has(id) || assignments.get(id) === section.id);
74
+ const existing = new Set(items);
75
+ const appended = ids.filter((id, index) => moved.has(id) && assignments.get(id) === section.id && !existing.has(id) && ids.indexOf(id) === index);
76
+ return {
77
+ ...section,
78
+ items: [...items, ...appended]
79
+ };
80
+ })
81
+ };
82
+ }
83
+ function overlaps(a, b) {
84
+ return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;
85
+ }
86
+ function clearingDelta(anchor, neighbor) {
87
+ return [
88
+ {
89
+ x: anchor.x - 16 - (neighbor.x + neighbor.width),
90
+ y: 0
91
+ },
92
+ {
93
+ x: anchor.x + anchor.width + 16 - neighbor.x,
94
+ y: 0
95
+ },
96
+ {
97
+ x: 0,
98
+ y: anchor.y - 16 - (neighbor.y + neighbor.height)
99
+ },
100
+ {
101
+ x: 0,
102
+ y: anchor.y + anchor.height + 16 - neighbor.y
103
+ }
104
+ ].reduce((best, candidate) => Math.abs(candidate.x) + Math.abs(candidate.y) < Math.abs(best.x) + Math.abs(best.y) ? candidate : best);
105
+ }
106
+ function entityRectangle(board, shapes, entity) {
107
+ if (entity.kind === "section") return board.sections.find((section) => section.id === entity.id)?.rectangle;
108
+ if (entity.kind === "item") return itemRectangle(board, shapes, entity.id);
109
+ const label = board.labels.find((entry) => entry.id === entity.id);
110
+ if (!label) return void 0;
111
+ const shape = shapes.labels[entity.id];
112
+ if (!shape) throw new Error(`label "${entity.id}" has no supplied shape; supply shapes.labels["${entity.id}"]`);
113
+ return {
114
+ x: label.x,
115
+ y: label.y,
116
+ ...shape
117
+ };
118
+ }
119
+ function moveEntity(board, entity, delta) {
120
+ if (entity.kind === "item") return moveItems(board, [entity.id], delta);
121
+ if (entity.kind === "label") return {
122
+ ...board,
123
+ labels: board.labels.map((label) => label.id === entity.id ? {
124
+ ...label,
125
+ x: label.x + delta.x,
126
+ y: label.y + delta.y
127
+ } : label)
128
+ };
129
+ return moveSection(board, entity.id, delta);
130
+ }
131
+ function neighbors(board) {
132
+ return [
133
+ ...board.sections.map((section) => ({
134
+ kind: "section",
135
+ id: section.id
136
+ })),
137
+ ...board.items.map((item) => ({
138
+ kind: "item",
139
+ id: item.id
140
+ })),
141
+ ...board.labels.map((label) => ({
142
+ kind: "label",
143
+ id: label.id
144
+ }))
145
+ ];
146
+ }
147
+ function clearAround(board, shapes, anchor, context) {
148
+ const anchorRectangle = entityRectangle(board, shapes, anchor);
149
+ if (!anchorRectangle) return {
150
+ board,
151
+ moved: []
152
+ };
153
+ const anchorMembers = new Set(anchor.kind === "section" ? board.sections.find((section) => section.id === anchor.id)?.items : []);
154
+ let next = board;
155
+ const moved = [];
156
+ for (const neighbor of neighbors(board)) {
157
+ if (neighbor.kind === anchor.kind && neighbor.id === anchor.id) continue;
158
+ if (neighbor.kind === "section" && context.changedSections.has(neighbor.id)) continue;
159
+ if (neighbor.kind === "item" && (context.protectedItems.has(neighbor.id) || anchorMembers.has(neighbor.id))) continue;
160
+ const rectangle = entityRectangle(next, shapes, neighbor);
161
+ if (!rectangle || !overlaps(anchorRectangle, rectangle)) continue;
162
+ next = moveEntity(next, neighbor, clearingDelta(anchorRectangle, rectangle));
163
+ moved.push(neighbor);
164
+ }
165
+ return {
166
+ board: next,
167
+ moved
168
+ };
169
+ }
170
+ function makeRoom(board, shapes, changed) {
171
+ const changedSections = new Set(changed.filter((id) => board.sections.some((section) => section.id === id)));
172
+ const context = {
173
+ changedSections,
174
+ protectedItems: new Set(board.sections.filter((section) => changedSections.has(section.id)).flatMap((section) => section.items))
175
+ };
176
+ let next = board;
177
+ let frontier = [...changedSections].map((id) => ({
178
+ kind: "section",
179
+ id
180
+ }));
181
+ for (let pass = 0; pass < 50 && frontier.length > 0; pass += 1) {
182
+ const following = [];
183
+ for (const anchor of frontier) {
184
+ const cleared = clearAround(next, shapes, anchor, context);
185
+ next = cleared.board;
186
+ following.push(...cleared.moved);
187
+ }
188
+ frontier = following.length > 0 ? [...[...changedSections].map((id) => ({
189
+ kind: "section",
190
+ id
191
+ })), ...following] : [];
192
+ }
193
+ return next;
194
+ }
195
+ function touchedSections(previous, board, touched) {
196
+ const touchedIds = new Set(touched);
197
+ return [...previous.sections, ...board.sections].filter((section) => touchedIds.has(section.id) || section.items.some((id) => touchedIds.has(id))).map((section) => section.id).filter((id, index, ids) => ids.indexOf(id) === index);
198
+ }
199
+ function fitSections(board, shapes, sectionIds) {
200
+ return sectionIds.reduce((value, id) => fitSection(value, shapes, id), board);
201
+ }
202
+ function fitTouchedSections(previous, board, shapes, touched) {
203
+ return fitSections(board, shapes, touchedSections(previous, board, touched));
204
+ }
205
+ function settleBoard(previous, board, shapes, touched) {
206
+ const sectionIds = touchedSections(previous, board, touched);
207
+ return makeRoom(fitSections(board, shapes, sectionIds), shapes, sectionIds);
208
+ }
209
+ //#endregion
210
+ export { MAKE_ROOM_LIMIT, SECTION_GAP, SECTION_MIN_SIZE, SECTION_PADDING, SECTION_TITLE_ROOM, assignMembership, fitSection, fitTouchedSections, makeRoom, settleBoard };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { Board, BoardInput, BoardItem, BoardLabel, BoardSection } from "./board.js";
2
2
  import { Annotation, Box, Cue, DECK_SIZE, Deck, DeckInput, DeckLimits, ImageFit, Manifest, Narration, Point, PublishedShot, SHOT_KEY, Shot, Size, Slide, SlideContent, Word, annotationCueIssues, exceedsLimits } from "./deck.js";
3
+ import { BoardItemAnchor, MIN_BOARD_ITEM_WIDTH, addItem, moveItems, moveSection, removeItems, resizeItem } from "./board-edit.js";
3
4
  import { ArrangeOptions, BoardShapes, BoardView, MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, ZoomBounds, arrange, boardBounds, boardToScreen, itemAt, itemHeight, revealView, screenToBoard, visibleItems, zoomAt, zoomToFit } from "./board-geometry.js";
4
5
  import { BoardListingGroup, boardListing, boardListingIsEmpty, foldForSearch, nameMatches } from "./board-listing.js";
6
+ import { MAKE_ROOM_LIMIT, SECTION_GAP, SECTION_MIN_SIZE, SECTION_PADDING, SECTION_TITLE_ROOM, assignMembership, fitSection, fitTouchedSections, makeRoom, settleBoard } from "./board-sections.js";
5
7
  import { Book, BookContents, BookFrontMatterEntry, BookInput, BookMode, BookPage, BookSection, BookView, BookViewInput, Chapter, isBookContents, isHebrew, noteMarkerIssues } from "./book.js";
6
8
  import { DeckFromSlidesOptions, SlideRow, deckFromSlides } from "./deck-from-slides.js";
7
9
  import { Direction, TextDirection, firstStrongDirection, languageDirection, resolveDirection } from "./direction.js";
@@ -720,4 +722,4 @@ export declare function jsonSchemas(): {
720
722
  }, z.core.$strip>>;
721
723
  };
722
724
  //#endregion
723
- export { Annotation, type ArrangeOptions, Board, type BoardInput, BoardItem, BoardLabel, type BoardListingGroup, BoardSection, type BoardShapes, type BoardView, Book, BookContents, BookFrontMatterEntry, type BookInput, BookMode, BookPage, BookSection, BookView, type BookViewInput, Box, Chapter, Cue, DECK_SIZE, DEFAULT_TRANSITION_DURATION_MS, Deck, type DeckFromSlidesOptions, type DeckInput, type DeckLimits, Direction, ImageFit, type Imposed, Lexicon, MARK_GAP_MM, MARK_LENGTH_MM, MAX_BOARD_ZOOM, MAX_SLIDE_TIMING_MS, MAX_TRANSITION_DURATION_MS, MIN_BOARD_ZOOM, MIN_TRANSITION_DURATION_MS, MM_PER_PT, Manifest, type MillimeterEdges, NAMED_PAPERS, Narration, NoteMarker, NumberSystem, PAPER_MM, PX_PER_MM, type PageFit, type PagePlacementKind, type PagePlacementLayout, Paper, type PaperBox, type Placement, Point, PronunciationEntry, PublishedShot, SHOT_KEY, Scripts, Shot, type ShotUse, Size, Slide, SlideContent, type SlideRow, TextDirection, Transition, TransitionInput, Word, type ZoomBounds, annotationCueIssues, arrange, boardBounds, boardListing, boardListingIsEmpty, boardToScreen, deckFromSlides, exceedsLimits, firstStrongDirection, fitPage, foldForSearch, formatNumber, impose, isBookContents, isHebrew, itemAt, itemHeight, languageDirection, lexiconVersion, mirrorPlacement, nameMatches, noteMarker, noteMarkerIssues, pagePlacementLayout, printBoxes, printPadding, printProperties, resolveDirection, revealView, roundMillimeters, screenToBoard, sheetMm, shotsUsed, toMillimeters, visibleItems, zoomAt, zoomToFit };
725
+ export { Annotation, type ArrangeOptions, Board, type BoardInput, BoardItem, type BoardItemAnchor, BoardLabel, type BoardListingGroup, BoardSection, type BoardShapes, type BoardView, Book, BookContents, BookFrontMatterEntry, type BookInput, BookMode, BookPage, BookSection, BookView, type BookViewInput, Box, Chapter, Cue, DECK_SIZE, DEFAULT_TRANSITION_DURATION_MS, Deck, type DeckFromSlidesOptions, type DeckInput, type DeckLimits, Direction, ImageFit, type Imposed, Lexicon, MAKE_ROOM_LIMIT, MARK_GAP_MM, MARK_LENGTH_MM, MAX_BOARD_ZOOM, MAX_SLIDE_TIMING_MS, MAX_TRANSITION_DURATION_MS, MIN_BOARD_ITEM_WIDTH, MIN_BOARD_ZOOM, MIN_TRANSITION_DURATION_MS, MM_PER_PT, Manifest, type MillimeterEdges, NAMED_PAPERS, Narration, NoteMarker, NumberSystem, PAPER_MM, PX_PER_MM, type PageFit, type PagePlacementKind, type PagePlacementLayout, Paper, type PaperBox, type Placement, Point, PronunciationEntry, PublishedShot, SECTION_GAP, SECTION_MIN_SIZE, SECTION_PADDING, SECTION_TITLE_ROOM, SHOT_KEY, Scripts, Shot, type ShotUse, Size, Slide, SlideContent, type SlideRow, TextDirection, Transition, TransitionInput, Word, type ZoomBounds, addItem, annotationCueIssues, arrange, assignMembership, boardBounds, boardListing, boardListingIsEmpty, boardToScreen, deckFromSlides, exceedsLimits, firstStrongDirection, fitPage, fitSection, fitTouchedSections, foldForSearch, formatNumber, impose, isBookContents, isHebrew, itemAt, itemHeight, languageDirection, lexiconVersion, makeRoom, mirrorPlacement, moveItems, moveSection, nameMatches, noteMarker, noteMarkerIssues, pagePlacementLayout, printBoxes, printPadding, printProperties, removeItems, resizeItem, resolveDirection, revealView, roundMillimeters, screenToBoard, settleBoard, sheetMm, shotsUsed, toMillimeters, visibleItems, zoomAt, zoomToFit };
package/dist/index.js CHANGED
@@ -8,8 +8,10 @@ import { NoteMarker, NumberSystem, formatNumber, noteMarker } from "./numbering.
8
8
  import { MARK_GAP_MM, MARK_LENGTH_MM, MM_PER_PT, NAMED_PAPERS, PAPER_MM, PX_PER_MM, Paper, printBoxes, printPadding, printProperties, roundMillimeters, sheetMm, toMillimeters } from "./paper.js";
9
9
  import { Book, BookContents, BookFrontMatterEntry, BookMode, BookPage, BookSection, BookShape, BookView, Chapter, isBookContents, isHebrew, noteMarkerIssues } from "./book.js";
10
10
  import { Lexicon, PronunciationEntry, lexiconVersion } from "./lexicon.js";
11
+ import { MIN_BOARD_ITEM_WIDTH, addItem, moveItems, moveSection, removeItems, resizeItem } from "./board-edit.js";
11
12
  import { MAX_BOARD_ZOOM, MIN_BOARD_ZOOM, arrange, boardBounds, boardToScreen, itemAt, itemHeight, revealView, screenToBoard, visibleItems, zoomAt, zoomToFit } from "./board-geometry.js";
12
13
  import { boardListing, boardListingIsEmpty, foldForSearch, nameMatches } from "./board-listing.js";
14
+ import { MAKE_ROOM_LIMIT, SECTION_GAP, SECTION_MIN_SIZE, SECTION_PADDING, SECTION_TITLE_ROOM, assignMembership, fitSection, fitTouchedSections, makeRoom, settleBoard } from "./board-sections.js";
13
15
  import { deckFromSlides } from "./deck-from-slides.js";
14
16
  import { fitPage, impose, mirrorPlacement, pagePlacementLayout } from "./imposition.js";
15
17
  import { shotsUsed } from "./shots-used.js";
@@ -155,4 +157,4 @@ function jsonSchemas() {
155
157
  };
156
158
  }
157
159
  //#endregion
158
- export { Annotation, Board, BoardItem, BoardLabel, BoardSection, Book, BookContents, BookFrontMatterEntry, BookMode, BookPage, BookSection, BookView, Box, Chapter, Cue, DECK_SIZE, DEFAULT_TRANSITION_DURATION_MS, Deck, Direction, ImageFit, Imposition, Lexicon, MARK_GAP_MM, MARK_LENGTH_MM, MAX_BOARD_ZOOM, MAX_IMPOSITION_CELLS, MAX_SLIDE_TIMING_MS, MAX_TRANSITION_DURATION_MS, MIN_BOARD_ZOOM, MIN_TRANSITION_DURATION_MS, MM_PER_PT, Manifest, Margin, NAMED_PAPERS, Narration, NoteMarker, NumberSystem, PAPER_MM, PX_PER_MM, Page, PageSize, Paper, Point, Print, PronunciationEntry, PublishedShot, SHOT_KEY, Scripts, Shot, Size, Slide, SlideContent, TextDirection, Transition, Word, annotationCueIssues, arrange, boardBounds, boardListing, boardListingIsEmpty, boardToScreen, deckFromSlides, exceedsLimits, firstStrongDirection, fitPage, foldForSearch, formatNumber, impose, isBookContents, isHebrew, itemAt, itemHeight, jsonSchemas, languageDirection, lexiconVersion, mirrorPlacement, nameMatches, noteMarker, noteMarkerIssues, pagePlacementLayout, printBoxes, printPadding, printProperties, resolveDirection, revealView, roundMillimeters, screenToBoard, sheetMm, shotsUsed, toMillimeters, visibleItems, zoomAt, zoomToFit };
160
+ export { Annotation, Board, BoardItem, BoardLabel, BoardSection, Book, BookContents, BookFrontMatterEntry, BookMode, BookPage, BookSection, BookView, Box, Chapter, Cue, DECK_SIZE, DEFAULT_TRANSITION_DURATION_MS, Deck, Direction, ImageFit, Imposition, Lexicon, MAKE_ROOM_LIMIT, MARK_GAP_MM, MARK_LENGTH_MM, MAX_BOARD_ZOOM, MAX_IMPOSITION_CELLS, MAX_SLIDE_TIMING_MS, MAX_TRANSITION_DURATION_MS, MIN_BOARD_ITEM_WIDTH, MIN_BOARD_ZOOM, MIN_TRANSITION_DURATION_MS, MM_PER_PT, Manifest, Margin, NAMED_PAPERS, Narration, NoteMarker, NumberSystem, PAPER_MM, PX_PER_MM, Page, PageSize, Paper, Point, Print, PronunciationEntry, PublishedShot, SECTION_GAP, SECTION_MIN_SIZE, SECTION_PADDING, SECTION_TITLE_ROOM, SHOT_KEY, Scripts, Shot, Size, Slide, SlideContent, TextDirection, Transition, Word, addItem, annotationCueIssues, arrange, assignMembership, boardBounds, boardListing, boardListingIsEmpty, boardToScreen, deckFromSlides, exceedsLimits, firstStrongDirection, fitPage, fitSection, fitTouchedSections, foldForSearch, formatNumber, impose, isBookContents, isHebrew, itemAt, itemHeight, jsonSchemas, languageDirection, lexiconVersion, makeRoom, mirrorPlacement, moveItems, moveSection, nameMatches, noteMarker, noteMarkerIssues, pagePlacementLayout, printBoxes, printPadding, printProperties, removeItems, resizeItem, resolveDirection, revealView, roundMillimeters, screenToBoard, settleBoard, sheetMm, shotsUsed, toMillimeters, visibleItems, zoomAt, zoomToFit };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@segnavia/format",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {