@lofcz/pptist 2.0.7 → 2.0.8

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.
@@ -1,3 +1,4 @@
1
+ export declare const EASTERN_EXTRAS_FONT_VALUES: string[];
1
2
  export declare const FONTS: {
2
3
  label: import("typesafe-i18n").LocalizedString;
3
4
  value: string;
@@ -0,0 +1,28 @@
1
+ import type { TranslationFunctions } from '../i18n/i18n-types';
2
+ import type { Slide, SlideTheme } from '../types/slides';
3
+ export interface StarterPresentationOptions {
4
+ title?: string;
5
+ titlePlaceholder?: string;
6
+ subtitlePlaceholder?: string;
7
+ bodyPlaceholder?: string;
8
+ /** Title-slide (cover) title size. PowerPoint default ≈ 40. */
9
+ titleFontSize?: number;
10
+ /** Title-slide (cover) subtitle size. PowerPoint default ≈ 20. */
11
+ subtitleFontSize?: number;
12
+ /** Content-slide title size. PowerPoint default ≈ 28. */
13
+ contentTitleFontSize?: number;
14
+ /** Content-slide body (level 1) size. PowerPoint default ≈ 20. */
15
+ bodyFontSize?: number;
16
+ placeholderColor?: string;
17
+ fontName?: string;
18
+ fontColor?: string;
19
+ backgroundColor?: string;
20
+ }
21
+ export interface StarterPresentationDocument {
22
+ title: string;
23
+ slides: Slide[];
24
+ theme?: Partial<SlideTheme>;
25
+ }
26
+ export declare const buildTitleSlide: (LL: TranslationFunctions, options?: StarterPresentationOptions) => Slide;
27
+ export declare const buildContentSlide: (LL: TranslationFunctions, options?: StarterPresentationOptions) => Slide;
28
+ export declare const buildStarterPresentation: (LL: TranslationFunctions, options?: StarterPresentationOptions) => StarterPresentationDocument;
@@ -0,0 +1 @@
1
+ export declare const resolveTemplateAssetUrl: (asset: string) => string;
@@ -0,0 +1,20 @@
1
+ import type { TranslationFunctions } from '../i18n/i18n-types';
2
+ import type { Slide, SlideTheme } from '../types/slides';
3
+ export type BuiltInTemplateId = 'template_1' | 'template_2' | 'template_3' | 'template_4' | 'template_5' | 'template_6' | 'template_7' | 'template_8';
4
+ export interface TemplatePayload {
5
+ title?: string;
6
+ width?: number;
7
+ height?: number;
8
+ slides: Slide[];
9
+ theme?: Partial<SlideTheme>;
10
+ }
11
+ export type TemplatePayloadLoader = () => Promise<TemplatePayload | Slide[]>;
12
+ export interface TemplateNormalizationConfig {
13
+ stripFontFamiliesWhenExtrasDisabled: string[];
14
+ }
15
+ export declare const setCustomTemplateLoaders: (loaders?: Record<string, TemplatePayloadLoader>) => void;
16
+ export declare const TEMPLATE_NORMALIZATION_CONFIG: TemplateNormalizationConfig;
17
+ export declare const isBuiltInTemplateId: (id: string) => id is BuiltInTemplateId;
18
+ export declare const loadBuiltInTemplate: (id: string) => Promise<TemplatePayload | null>;
19
+ export declare const loadConfiguredTemplate: (id: string) => Promise<Slide[] | TemplatePayload | null>;
20
+ export declare const normalizeTemplatePayload: (payload: TemplatePayload | Slide[], LL: TranslationFunctions, config?: TemplateNormalizationConfig) => TemplatePayload;
@@ -1,5 +1,5 @@
1
1
  export { mountPptist, unmountPptist } from './mount';
2
- export type { PptistController, PptistDocument, PptistMountOptions, PptistMountResult, } from './types';
2
+ export type { PptistController, PptistDocument, PptistMountOptions, PptistMountResult, PptistDocumentLoader, PptistStarterPresentationOptions, PptistTemplateLoader, PptistTemplatePayload, } from './types';
3
3
  export type * from './agentic/types';
4
4
  export type { Locales as PptistLocales } from '../i18n/locale';
5
5
  export type { ChartData, ChartOptions, ChartType, Note, NoteReply, PPTAnimation, PPTAudioElement, PPTChartElement, PPTElement, PPTElementLink, PPTImageElement, PPTLatexElement, PPTLineElement, PPTShapeElement, PPTTableElement, PPTTextElement, PPTVideoElement, ShapeText, Slide, SlideBackground, SlideTemplate, SlideTheme, TableCell, TableCellStyle, TextAlign, TurningMode, } from '../types/slides';
@@ -1,6 +1,29 @@
1
1
  import type { Locales } from '../i18n/locale';
2
2
  import type { Slide, SlideTheme, SlideTemplate } from '../types/slides';
3
3
  import type { PptistAgentApi, PptistSlideReference } from './agentic/types';
4
+ export interface PptistTemplatePayload {
5
+ title?: string;
6
+ width?: number;
7
+ height?: number;
8
+ slides: Slide[];
9
+ theme?: Partial<SlideTheme>;
10
+ }
11
+ export type PptistTemplateLoader = () => Promise<PptistTemplatePayload | Slide[]>;
12
+ export type PptistDocumentLoader = () => Promise<PptistDocument | null | undefined>;
13
+ export interface PptistStarterPresentationOptions {
14
+ title?: string;
15
+ titlePlaceholder?: string;
16
+ subtitlePlaceholder?: string;
17
+ bodyPlaceholder?: string;
18
+ titleFontSize?: number;
19
+ subtitleFontSize?: number;
20
+ contentTitleFontSize?: number;
21
+ bodyFontSize?: number;
22
+ placeholderColor?: string;
23
+ fontName?: string;
24
+ fontColor?: string;
25
+ backgroundColor?: string;
26
+ }
4
27
  /** Serializable deck passed between sciobot-next and PPTist. */
5
28
  export interface PptistDocument {
6
29
  title: string;
@@ -10,21 +33,24 @@ export interface PptistDocument {
10
33
  export interface PptistMountOptions {
11
34
  /** UI locale — same union as sciobot-next (`cs` | `en` | `sk` | `pl`). */
12
35
  locale?: Locales;
13
- /** Initial deck; when omitted, mock slides are loaded if `loadMockOnEmpty` is true. */
36
+ /** Initial deck; takes precedence over `loadDocument` and the starter slide. */
14
37
  document?: PptistDocument;
15
- /** When no `document`, fetch `mocks/slides.json` from `assetBaseUrl` (default: `/`). */
38
+ /** Optional async document loader for hosts that resolve a deck from the current URL/session. */
39
+ loadDocument?: PptistDocumentLoader;
40
+ /** Legacy demo behavior: when explicitly true, load `mocks/slides.json` instead of the starter slide. */
16
41
  loadMockOnEmpty?: boolean;
17
- /**
18
- * Base URL for runtime assets (template covers, mocks).
19
- * Dev: `http://127.0.0.1:5173` while PPTist dev server runs, or sciobot proxy path.
20
- */
42
+ /** Customize the default one-slide starter deck used when no existing document is loaded. */
43
+ starterPresentation?: PptistStarterPresentationOptions;
44
+ /** Base URL for runtime image/font assets and fallback mock decks. */
21
45
  assetBaseUrl?: string;
22
46
  /**
23
- * Style/template catalog shown in the design picker. Each entry's `id` maps to
24
- * a `mocks/<id>.json` payload resolved against `assetBaseUrl`. Omit to use the
25
- * bundled defaults (which fall back to the demo deck when a file is missing).
47
+ * Style/template catalog shown in the design picker. Built-in template ids are
48
+ * loaded from lazy bundled JSON chunks. Custom ids can be resolved with
49
+ * `templateLoaders`, or as a fallback from `mocks/<id>.json` at `assetBaseUrl`.
26
50
  */
27
51
  templates?: SlideTemplate[];
52
+ /** Optional custom template payload loaders keyed by `templates[].id`. */
53
+ templateLoaders?: Record<string, PptistTemplateLoader>;
28
54
  /** Fired when title, slides, or theme change (debounced). */
29
55
  onChange?: (document: PptistDocument) => void;
30
56
  onChangeDebounceMs?: number;
@@ -3495,6 +3495,18 @@ export type NamespaceEditorTranslation = {
3495
3495
  * U​n​t​i​t​l​e​d​ ​p​r​e​s​e​n​t​a​t​i​o​n
3496
3496
  */
3497
3497
  untitled: string;
3498
+ /**
3499
+ * C​l​i​c​k​ ​t​o​ ​a​d​d​ ​t​i​t​l​e
3500
+ */
3501
+ clickToAddTitle: string;
3502
+ /**
3503
+ * C​l​i​c​k​ ​t​o​ ​a​d​d​ ​s​u​b​t​i​t​l​e
3504
+ */
3505
+ clickToAddSubtitle: string;
3506
+ /**
3507
+ * C​l​i​c​k​ ​t​o​ ​a​d​d​ ​t​e​x​t
3508
+ */
3509
+ clickToAddText: string;
3498
3510
  };
3499
3511
  templates: {
3500
3512
  /**
@@ -3588,14 +3600,63 @@ export type NamespaceEditorTranslation = {
3588
3600
  * T​e​m​p​l​a​t​e​ ​c​o​v​e​r​ ​s​u​b​t​i​t​l​e
3589
3601
  */
3590
3602
  coverSubtitle: string;
3603
+ /**
3604
+ * B​r​i​e​f​ ​p​r​e​s​e​n​t​a​t​i​o​n​ ​s​u​m​m​a​r​y
3605
+ */
3606
+ coverDescription: string;
3607
+ /**
3608
+ * P​r​e​s​e​n​t​e​r​:​ ​X​X​X
3609
+ */
3610
+ presenter: string;
3611
+ /**
3612
+ * D​a​t​e​:​ ​X​X​X
3613
+ */
3614
+ date: string;
3615
+ /**
3616
+ * T​i​m​e​:​ ​X​X​X
3617
+ */
3618
+ time: string;
3619
+ /**
3620
+ * B​u​s​i​n​e​s​s​ ​r​e​p​o​r​t​ ​|​ ​W​o​r​k​ ​s​u​m​m​a​r​y​ ​|​ ​W​o​r​k​ ​p​l​a​n
3621
+ */
3622
+ businessReport: string;
3591
3623
  /**
3592
3624
  * C​o​n​t​e​n​t​s
3593
3625
  */
3594
3626
  contentsTitle: string;
3627
+ /**
3628
+ * S​e​c​t​i​o​n​ ​{​i​n​d​e​x​}
3629
+ * @param {unknown} index
3630
+ */
3631
+ contentsItem: RequiredParams<'index'>;
3595
3632
  /**
3596
3633
  * S​e​c​t​i​o​n​ ​t​i​t​l​e
3597
3634
  */
3598
3635
  sectionTitle: string;
3636
+ /**
3637
+ * B​r​i​e​f​ ​s​e​c​t​i​o​n​ ​i​n​t​r​o​d​u​c​t​i​o​n
3638
+ */
3639
+ sectionBody: string;
3640
+ /**
3641
+ * C​o​n​t​e​n​t​ ​p​a​g​e​ ​t​i​t​l​e
3642
+ */
3643
+ contentTitle: string;
3644
+ /**
3645
+ * K​e​y​ ​p​o​i​n​t
3646
+ */
3647
+ itemTitle: string;
3648
+ /**
3649
+ * S​u​p​p​o​r​t​i​n​g​ ​d​e​t​a​i​l
3650
+ */
3651
+ itemBody: string;
3652
+ /**
3653
+ * T​h​a​n​k​ ​y​o​u
3654
+ */
3655
+ thankYou: string;
3656
+ /**
3657
+ * W​e​l​c​o​m​e
3658
+ */
3659
+ welcome: string;
3599
3660
  /**
3600
3661
  * T​i​t​l​e​ ​1
3601
3662
  */
@@ -7980,6 +8041,18 @@ export type TranslationFunctions = {
7980
8041
  * Untitled presentation
7981
8042
  */
7982
8043
  untitled: () => LocalizedString;
8044
+ /**
8045
+ * Click to add title
8046
+ */
8047
+ clickToAddTitle: () => LocalizedString;
8048
+ /**
8049
+ * Click to add subtitle
8050
+ */
8051
+ clickToAddSubtitle: () => LocalizedString;
8052
+ /**
8053
+ * Click to add text
8054
+ */
8055
+ clickToAddText: () => LocalizedString;
7983
8056
  };
7984
8057
  templates: {
7985
8058
  /**
@@ -8073,14 +8146,64 @@ export type TranslationFunctions = {
8073
8146
  * Template cover subtitle
8074
8147
  */
8075
8148
  coverSubtitle: () => LocalizedString;
8149
+ /**
8150
+ * Brief presentation summary
8151
+ */
8152
+ coverDescription: () => LocalizedString;
8153
+ /**
8154
+ * Presenter: XXX
8155
+ */
8156
+ presenter: () => LocalizedString;
8157
+ /**
8158
+ * Date: XXX
8159
+ */
8160
+ date: () => LocalizedString;
8161
+ /**
8162
+ * Time: XXX
8163
+ */
8164
+ time: () => LocalizedString;
8165
+ /**
8166
+ * Business report | Work summary | Work plan
8167
+ */
8168
+ businessReport: () => LocalizedString;
8076
8169
  /**
8077
8170
  * Contents
8078
8171
  */
8079
8172
  contentsTitle: () => LocalizedString;
8173
+ /**
8174
+ * Section {index}
8175
+ */
8176
+ contentsItem: (arg: {
8177
+ index: unknown;
8178
+ }) => LocalizedString;
8080
8179
  /**
8081
8180
  * Section title
8082
8181
  */
8083
8182
  sectionTitle: () => LocalizedString;
8183
+ /**
8184
+ * Brief section introduction
8185
+ */
8186
+ sectionBody: () => LocalizedString;
8187
+ /**
8188
+ * Content page title
8189
+ */
8190
+ contentTitle: () => LocalizedString;
8191
+ /**
8192
+ * Key point
8193
+ */
8194
+ itemTitle: () => LocalizedString;
8195
+ /**
8196
+ * Supporting detail
8197
+ */
8198
+ itemBody: () => LocalizedString;
8199
+ /**
8200
+ * Thank you
8201
+ */
8202
+ thankYou: () => LocalizedString;
8203
+ /**
8204
+ * Welcome
8205
+ */
8206
+ welcome: () => LocalizedString;
8084
8207
  /**
8085
8208
  * Title 1
8086
8209
  */
@@ -153,6 +153,10 @@ export declare const useMainStore: import("pinia").StoreDefinition<"main", MainS
153
153
  content: string;
154
154
  defaultFontName: string;
155
155
  defaultColor: string;
156
+ placeholder?: string | undefined;
157
+ placeholderFontSize?: number | undefined;
158
+ placeholderColor?: string | undefined;
159
+ placeholderAlign?: import("../embed").TextAlign | undefined;
156
160
  outline?: {
157
161
  style?: import("../types/slides").LineStyleType | undefined;
158
162
  width?: number | undefined;
@@ -576,6 +580,10 @@ export declare const useMainStore: import("pinia").StoreDefinition<"main", MainS
576
580
  content: string;
577
581
  defaultFontName: string;
578
582
  defaultColor: string;
583
+ placeholder?: string | undefined;
584
+ placeholderFontSize?: number | undefined;
585
+ placeholderColor?: string | undefined;
586
+ placeholderAlign?: import("../embed").TextAlign | undefined;
579
587
  outline?: {
580
588
  style?: import("../types/slides").LineStyleType | undefined;
581
589
  width?: number | undefined;
@@ -49,6 +49,10 @@ export declare const useSlidesStore: import("pinia").StoreDefinition<"slides", S
49
49
  content: string;
50
50
  defaultFontName: string;
51
51
  defaultColor: string;
52
+ placeholder?: string | undefined;
53
+ placeholderFontSize?: number | undefined;
54
+ placeholderColor?: string | undefined;
55
+ placeholderAlign?: import("../types/slides").TextAlign | undefined;
52
56
  outline?: {
53
57
  style?: import("../types/slides").LineStyleType | undefined;
54
58
  width?: number | undefined;
@@ -418,6 +422,10 @@ export declare const useSlidesStore: import("pinia").StoreDefinition<"slides", S
418
422
  content: string;
419
423
  defaultFontName: string;
420
424
  defaultColor: string;
425
+ placeholder?: string | undefined;
426
+ placeholderFontSize?: number | undefined;
427
+ placeholderColor?: string | undefined;
428
+ placeholderAlign?: import("../types/slides").TextAlign | undefined;
421
429
  outline?: {
422
430
  style?: import("../types/slides").LineStyleType | undefined;
423
431
  width?: number | undefined;
@@ -797,6 +805,10 @@ export declare const useSlidesStore: import("pinia").StoreDefinition<"slides", S
797
805
  content: string;
798
806
  defaultFontName: string;
799
807
  defaultColor: string;
808
+ placeholder?: string | undefined;
809
+ placeholderFontSize?: number | undefined;
810
+ placeholderColor?: string | undefined;
811
+ placeholderAlign?: import("../types/slides").TextAlign | undefined;
800
812
  outline?: {
801
813
  style?: import("../types/slides").LineStyleType | undefined;
802
814
  width?: number | undefined;
@@ -1193,6 +1205,10 @@ export declare const useSlidesStore: import("pinia").StoreDefinition<"slides", S
1193
1205
  content: string;
1194
1206
  defaultFontName: string;
1195
1207
  defaultColor: string;
1208
+ placeholder?: string | undefined;
1209
+ placeholderFontSize?: number | undefined;
1210
+ placeholderColor?: string | undefined;
1211
+ placeholderAlign?: import("../types/slides").TextAlign | undefined;
1196
1212
  outline?: {
1197
1213
  style?: import("../types/slides").LineStyleType | undefined;
1198
1214
  width?: number | undefined;
@@ -170,6 +170,10 @@ export interface PPTTextElement extends PPTBaseElement {
170
170
  content: string;
171
171
  defaultFontName: string;
172
172
  defaultColor: string;
173
+ placeholder?: string;
174
+ placeholderFontSize?: number;
175
+ placeholderColor?: string;
176
+ placeholderAlign?: TextAlign;
173
177
  outline?: PPTElementOutline;
174
178
  fill?: string;
175
179
  lineHeight?: number;
@@ -91,6 +91,10 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
91
91
  content: string;
92
92
  defaultFontName: string;
93
93
  defaultColor: string;
94
+ placeholder?: string;
95
+ placeholderFontSize?: number;
96
+ placeholderColor?: string;
97
+ placeholderAlign?: import("../types/slides").TextAlign;
94
98
  outline?: import("../types/slides").PPTElementOutline;
95
99
  fill?: string;
96
100
  lineHeight?: number;
@@ -16,6 +16,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
16
16
  value: string;
17
17
  ignore: boolean;
18
18
  }) => any;
19
+ emptyChange: (empty: boolean) => any;
19
20
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
20
21
  onBlur?: (() => any) | undefined;
21
22
  onFocus?: (() => any) | undefined;
@@ -24,6 +25,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
24
25
  value: string;
25
26
  ignore: boolean;
26
27
  }) => any) | undefined;
28
+ onEmptyChange?: ((empty: boolean) => any) | undefined;
27
29
  }>, {
28
30
  editable: boolean;
29
31
  autoFocus: boolean;
@@ -0,0 +1,17 @@
1
+ import type { TextAlign, TextType } from '../../../../types/slides';
2
+ type __VLS_Props = {
3
+ label: string;
4
+ contentType: TextType;
5
+ fontSize: number;
6
+ color: string;
7
+ align?: TextAlign;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
10
+ activate: (payload: MouseEvent) => any;
11
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ onActivate?: ((payload: MouseEvent) => any) | undefined;
13
+ }>, {
14
+ align: TextAlign;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lofcz/pptist",
3
- "version": "2.0.7",
3
+ "version": "2.0.8",
4
4
  "description": "PPTist presentation editor embed bundle with a typed agentic bridge.",
5
5
  "type": "module",
6
6
  "main": "dist/embed/pptist-embed.js",