textmode.export.js 1.5.2 → 1.6.0-beta.2

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.
Files changed (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -152
  3. package/dist/textmode.export.esm.js +1 -5890
  4. package/dist/textmode.export.umd.js +1 -68
  5. package/dist/types/augmentations/index.d.ts +0 -1
  6. package/dist/types/augmentations/textmode.d.ts +0 -1
  7. package/dist/types/exporters/base/CharacterResolver.d.ts +0 -1
  8. package/dist/types/exporters/base/DataExtractor.d.ts +0 -1
  9. package/dist/types/exporters/base/FileHandler.d.ts +0 -1
  10. package/dist/types/exporters/base/FramePreparation.d.ts +10 -0
  11. package/dist/types/exporters/base/LayerTarget.d.ts +4 -3
  12. package/dist/types/exporters/base/index.d.ts +1 -1
  13. package/dist/types/exporters/gif/GIFEncoderWorker.d.ts +1 -0
  14. package/dist/types/exporters/gif/GIFExporter.d.ts +7 -27
  15. package/dist/types/exporters/gif/GIFRecorder.d.ts +0 -1
  16. package/dist/types/exporters/gif/GIFWorkerClient.d.ts +15 -0
  17. package/dist/types/exporters/gif/index.d.ts +0 -1
  18. package/dist/types/exporters/gif/types.d.ts +19 -1
  19. package/dist/types/exporters/image/ImageExporter.d.ts +2 -1
  20. package/dist/types/exporters/image/index.d.ts +0 -1
  21. package/dist/types/exporters/image/types.d.ts +2 -1
  22. package/dist/types/exporters/json/JSONDataExtractor.d.ts +0 -1
  23. package/dist/types/exporters/json/JSONExporter.d.ts +0 -1
  24. package/dist/types/exporters/json/index.d.ts +0 -1
  25. package/dist/types/exporters/json/types.d.ts +8 -1
  26. package/dist/types/exporters/svg/SVGContentGenerator.d.ts +0 -1
  27. package/dist/types/exporters/svg/SVGDataExtractor.d.ts +0 -1
  28. package/dist/types/exporters/svg/SVGExporter.d.ts +0 -1
  29. package/dist/types/exporters/svg/SVGPathGenerator.d.ts +0 -1
  30. package/dist/types/exporters/svg/index.d.ts +0 -1
  31. package/dist/types/exporters/svg/types.d.ts +2 -1
  32. package/dist/types/exporters/txt/TXTExporter.d.ts +0 -1
  33. package/dist/types/exporters/txt/index.d.ts +0 -1
  34. package/dist/types/exporters/txt/types.d.ts +2 -1
  35. package/dist/types/exporters/video/VideoExporter.d.ts +2 -2
  36. package/dist/types/exporters/video/VideoFrameDriver.d.ts +0 -1
  37. package/dist/types/exporters/video/VideoRecorder.d.ts +0 -1
  38. package/dist/types/exporters/video/errors.d.ts +0 -1
  39. package/dist/types/exporters/video/index.d.ts +0 -1
  40. package/dist/types/exporters/video/types.d.ts +27 -1
  41. package/dist/types/exporters/video/withAbortableTimeout.d.ts +0 -1
  42. package/dist/types/index.d.ts +16 -56
  43. package/dist/types/overlay/blades/Blade.d.ts +9 -3
  44. package/dist/types/overlay/blades/GIFBlade.d.ts +1 -1
  45. package/dist/types/overlay/blades/ImageBlade.d.ts +1 -1
  46. package/dist/types/overlay/blades/JSONBlade.d.ts +1 -1
  47. package/dist/types/overlay/blades/RecordingBlade.d.ts +7 -0
  48. package/dist/types/overlay/blades/SVGBlade.d.ts +1 -1
  49. package/dist/types/overlay/blades/TextBlade.d.ts +1 -1
  50. package/dist/types/overlay/blades/VideoBlade.d.ts +1 -1
  51. package/dist/types/overlay/blades/index.d.ts +3 -1
  52. package/dist/types/overlay/components/actions/Button.d.ts +0 -1
  53. package/dist/types/overlay/components/base/Component.d.ts +0 -1
  54. package/dist/types/overlay/components/base/Container.d.ts +0 -1
  55. package/dist/types/overlay/components/base/Field.d.ts +0 -1
  56. package/dist/types/overlay/components/display/Header.d.ts +3 -1
  57. package/dist/types/overlay/components/display/StatusDisplay.d.ts +0 -1
  58. package/dist/types/overlay/components/inputs/CheckboxInput.d.ts +0 -1
  59. package/dist/types/overlay/components/inputs/LayerTargetSelect.d.ts +0 -1
  60. package/dist/types/overlay/components/inputs/NumberInput.d.ts +0 -1
  61. package/dist/types/overlay/components/inputs/RangeInput.d.ts +0 -1
  62. package/dist/types/overlay/components/inputs/SelectInput.d.ts +0 -1
  63. package/dist/types/overlay/components/inputs/TextInput.d.ts +0 -1
  64. package/dist/types/overlay/config/DefaultsStore.d.ts +11 -0
  65. package/dist/types/overlay/config/ExportDefaults.d.ts +3 -0
  66. package/dist/types/overlay/core/EventBus.d.ts +0 -1
  67. package/dist/types/overlay/core/OverlayController.d.ts +29 -6
  68. package/dist/types/overlay/core/StateManager.d.ts +0 -1
  69. package/dist/types/overlay/formatRegistry.d.ts +3 -2
  70. package/dist/types/overlay/index.d.ts +0 -2
  71. package/dist/types/overlay/models/FormatDefinition.d.ts +0 -1
  72. package/dist/types/overlay/models/OverlayEvents.d.ts +0 -1
  73. package/dist/types/overlay/models/OverlayState.d.ts +1 -2
  74. package/dist/types/overlay/services/ClipboardService.d.ts +1 -5
  75. package/dist/types/overlay/services/ExportService.d.ts +0 -2
  76. package/dist/types/overlay/services/OverlayPositionStorage.d.ts +12 -0
  77. package/dist/types/overlay/services/PositionService.d.ts +33 -3
  78. package/dist/types/overlay/types.d.ts +36 -2
  79. package/dist/types/overlay/utils/classes.d.ts +3 -1
  80. package/dist/types/types.d.ts +273 -34
  81. package/dist/types/utils/pixels.d.ts +0 -1
  82. package/dist/types/version.d.ts +0 -1
  83. package/package.json +87 -53
  84. package/dist/types/augmentations/index.d.ts.map +0 -1
  85. package/dist/types/augmentations/textmode.d.ts.map +0 -1
  86. package/dist/types/augmentations/textmode.test.d.ts +0 -2
  87. package/dist/types/augmentations/textmode.test.d.ts.map +0 -1
  88. package/dist/types/exporters/base/CharacterResolver.d.ts.map +0 -1
  89. package/dist/types/exporters/base/DataExtractor.d.ts.map +0 -1
  90. package/dist/types/exporters/base/FileHandler.d.ts.map +0 -1
  91. package/dist/types/exporters/base/LayerTarget.d.ts.map +0 -1
  92. package/dist/types/exporters/base/index.d.ts.map +0 -1
  93. package/dist/types/exporters/gif/GIFExporter.d.ts.map +0 -1
  94. package/dist/types/exporters/gif/GIFRecorder.d.ts.map +0 -1
  95. package/dist/types/exporters/gif/index.d.ts.map +0 -1
  96. package/dist/types/exporters/gif/types.d.ts.map +0 -1
  97. package/dist/types/exporters/image/ImageExporter.d.ts.map +0 -1
  98. package/dist/types/exporters/image/index.d.ts.map +0 -1
  99. package/dist/types/exporters/image/types.d.ts.map +0 -1
  100. package/dist/types/exporters/json/JSONDataExtractor.d.ts.map +0 -1
  101. package/dist/types/exporters/json/JSONExporter.d.ts.map +0 -1
  102. package/dist/types/exporters/json/JSONExporter.test.d.ts +0 -2
  103. package/dist/types/exporters/json/JSONExporter.test.d.ts.map +0 -1
  104. package/dist/types/exporters/json/index.d.ts.map +0 -1
  105. package/dist/types/exporters/json/types.d.ts.map +0 -1
  106. package/dist/types/exporters/svg/SVGContentGenerator.d.ts.map +0 -1
  107. package/dist/types/exporters/svg/SVGDataExtractor.d.ts.map +0 -1
  108. package/dist/types/exporters/svg/SVGExporter.d.ts.map +0 -1
  109. package/dist/types/exporters/svg/SVGExporter.test.d.ts +0 -2
  110. package/dist/types/exporters/svg/SVGExporter.test.d.ts.map +0 -1
  111. package/dist/types/exporters/svg/SVGPathGenerator.d.ts.map +0 -1
  112. package/dist/types/exporters/svg/index.d.ts.map +0 -1
  113. package/dist/types/exporters/svg/types.d.ts.map +0 -1
  114. package/dist/types/exporters/txt/TXTExporter.d.ts.map +0 -1
  115. package/dist/types/exporters/txt/TXTExporter.test.d.ts +0 -2
  116. package/dist/types/exporters/txt/TXTExporter.test.d.ts.map +0 -1
  117. package/dist/types/exporters/txt/index.d.ts.map +0 -1
  118. package/dist/types/exporters/txt/types.d.ts.map +0 -1
  119. package/dist/types/exporters/video/VideoExporter.d.ts.map +0 -1
  120. package/dist/types/exporters/video/VideoExporter.test.d.ts +0 -2
  121. package/dist/types/exporters/video/VideoExporter.test.d.ts.map +0 -1
  122. package/dist/types/exporters/video/VideoFrameDriver.d.ts.map +0 -1
  123. package/dist/types/exporters/video/VideoFrameDriver.test.d.ts +0 -2
  124. package/dist/types/exporters/video/VideoFrameDriver.test.d.ts.map +0 -1
  125. package/dist/types/exporters/video/VideoRecorder.d.ts.map +0 -1
  126. package/dist/types/exporters/video/VideoRecorder.test.d.ts +0 -2
  127. package/dist/types/exporters/video/VideoRecorder.test.d.ts.map +0 -1
  128. package/dist/types/exporters/video/errors.d.ts.map +0 -1
  129. package/dist/types/exporters/video/index.d.ts.map +0 -1
  130. package/dist/types/exporters/video/types.d.ts.map +0 -1
  131. package/dist/types/exporters/video/withAbortableTimeout.d.ts.map +0 -1
  132. package/dist/types/index.d.ts.map +0 -1
  133. package/dist/types/overlay/blades/Blade.d.ts.map +0 -1
  134. package/dist/types/overlay/blades/GIFBlade.d.ts.map +0 -1
  135. package/dist/types/overlay/blades/ImageBlade.d.ts.map +0 -1
  136. package/dist/types/overlay/blades/JSONBlade.d.ts.map +0 -1
  137. package/dist/types/overlay/blades/SVGBlade.d.ts.map +0 -1
  138. package/dist/types/overlay/blades/TextBlade.d.ts.map +0 -1
  139. package/dist/types/overlay/blades/VideoBlade.d.ts.map +0 -1
  140. package/dist/types/overlay/blades/index.d.ts.map +0 -1
  141. package/dist/types/overlay/components/actions/Button.d.ts.map +0 -1
  142. package/dist/types/overlay/components/base/Component.d.ts.map +0 -1
  143. package/dist/types/overlay/components/base/Container.d.ts.map +0 -1
  144. package/dist/types/overlay/components/base/Field.d.ts.map +0 -1
  145. package/dist/types/overlay/components/display/Header.d.ts.map +0 -1
  146. package/dist/types/overlay/components/display/StatusDisplay.d.ts.map +0 -1
  147. package/dist/types/overlay/components/inputs/CheckboxInput.d.ts.map +0 -1
  148. package/dist/types/overlay/components/inputs/LayerTargetSelect.d.ts.map +0 -1
  149. package/dist/types/overlay/components/inputs/NumberInput.d.ts.map +0 -1
  150. package/dist/types/overlay/components/inputs/RangeInput.d.ts.map +0 -1
  151. package/dist/types/overlay/components/inputs/SelectInput.d.ts.map +0 -1
  152. package/dist/types/overlay/components/inputs/TextInput.d.ts.map +0 -1
  153. package/dist/types/overlay/core/EventBus.d.ts.map +0 -1
  154. package/dist/types/overlay/core/OverlayController.d.ts.map +0 -1
  155. package/dist/types/overlay/core/StateManager.d.ts.map +0 -1
  156. package/dist/types/overlay/formatRegistry.d.ts.map +0 -1
  157. package/dist/types/overlay/formatRegistry.test.d.ts +0 -2
  158. package/dist/types/overlay/formatRegistry.test.d.ts.map +0 -1
  159. package/dist/types/overlay/index.d.ts.map +0 -1
  160. package/dist/types/overlay/models/FormatDefinition.d.ts.map +0 -1
  161. package/dist/types/overlay/models/OverlayEvents.d.ts.map +0 -1
  162. package/dist/types/overlay/models/OverlayState.d.ts.map +0 -1
  163. package/dist/types/overlay/services/ClipboardService.d.ts.map +0 -1
  164. package/dist/types/overlay/services/ExportService.d.ts.map +0 -1
  165. package/dist/types/overlay/services/PositionService.d.ts.map +0 -1
  166. package/dist/types/overlay/types.d.ts.map +0 -1
  167. package/dist/types/overlay/utils/classes.d.ts.map +0 -1
  168. package/dist/types/types.d.ts.map +0 -1
  169. package/dist/types/utils/pixels.d.ts.map +0 -1
  170. package/dist/types/version.d.ts.map +0 -1
@@ -5,6 +5,11 @@ interface ManagedComponent {
5
5
  unmount(): void;
6
6
  destroy(): void;
7
7
  }
8
+ export interface BladeCapabilities {
9
+ clipboard: boolean;
10
+ layerTarget: boolean;
11
+ recording: boolean;
12
+ }
8
13
  export interface BladeConfig<TOptions> {
9
14
  label: string;
10
15
  supportsClipboard: boolean;
@@ -13,15 +18,16 @@ export interface BladeConfig<TOptions> {
13
18
  layerTargetProvider?: LayerTargetProvider;
14
19
  }
15
20
  export declare abstract class Blade<TOptions> extends Component<void> {
16
- protected readonly _config: BladeConfig<TOptions>;
21
+ readonly capabilities: BladeCapabilities;
22
+ protected _config: BladeConfig<TOptions>;
17
23
  private readonly _managedComponents;
18
- constructor(config: BladeConfig<TOptions>);
24
+ constructor(config: BladeConfig<TOptions>, capabilities?: Partial<BladeCapabilities>);
19
25
  abstract getOptions(): TOptions;
20
26
  abstract reset(): void;
21
27
  abstract validate(): boolean;
28
+ abstract setDefaults(values: Partial<TOptions>): void;
22
29
  protected _manageComponent<TComponent extends ManagedComponent>(component: TComponent): TComponent;
23
30
  protected _onUnmount(): void;
24
31
  protected _onDestroy(): void;
25
32
  }
26
33
  export {};
27
- //# sourceMappingURL=Blade.d.ts.map
@@ -11,6 +11,7 @@ export declare class GIFBlade extends Blade<GIFExportOptions> {
11
11
  constructor(config: BladeConfig<GIFExportOptions>);
12
12
  render(): HTMLElement;
13
13
  getOptions(): GIFExportOptions;
14
+ setDefaults(values: Partial<GIFExportOptions>): void;
14
15
  reset(): void;
15
16
  validate(): boolean;
16
17
  isRecording(): boolean;
@@ -20,4 +21,3 @@ export declare class GIFBlade extends Blade<GIFExportOptions> {
20
21
  private safeParseInt;
21
22
  private safeParseFloat;
22
23
  }
23
- //# sourceMappingURL=GIFBlade.d.ts.map
@@ -7,8 +7,8 @@ export declare class ImageBlade extends Blade<ImageExportOptions> {
7
7
  constructor(config: BladeConfig<ImageExportOptions>);
8
8
  render(): HTMLElement;
9
9
  getOptions(): ImageExportOptions;
10
+ setDefaults(values: Partial<ImageExportOptions>): void;
10
11
  reset(): void;
11
12
  validate(): boolean;
12
13
  private applyDefaults;
13
14
  }
14
- //# sourceMappingURL=ImageBlade.d.ts.map
@@ -11,10 +11,10 @@ export declare class JSONBlade extends Blade<JSONExportOptions> {
11
11
  constructor(config: BladeConfig<JSONExportOptions>);
12
12
  render(): HTMLElement;
13
13
  getOptions(): JSONExportOptions;
14
+ setDefaults(values: Partial<JSONExportOptions>): void;
14
15
  reset(): void;
15
16
  validate(): boolean;
16
17
  refreshLayerTargets(): void;
17
18
  private applyDefaults;
18
19
  private updateLayerTargetVisibility;
19
20
  }
20
- //# sourceMappingURL=JSONBlade.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { Blade } from './Blade';
2
+ export interface RecordingBladeLike {
3
+ isRecording(): boolean;
4
+ setRecordingState(state: string, progress?: unknown): void;
5
+ handleProgress(progress: unknown): void;
6
+ }
7
+ export declare function isRecordingBlade(blade: Blade<unknown>): blade is Blade<unknown> & RecordingBladeLike;
@@ -9,10 +9,10 @@ export declare class SVGBlade extends Blade<SVGExportOptions> {
9
9
  constructor(config: BladeConfig<SVGExportOptions>);
10
10
  render(): HTMLElement;
11
11
  getOptions(): SVGExportOptions;
12
+ setDefaults(values: Partial<SVGExportOptions>): void;
12
13
  reset(): void;
13
14
  validate(): boolean;
14
15
  refreshLayerTargets(): void;
15
16
  private updateStrokeControls;
16
17
  private applyDefaults;
17
18
  }
18
- //# sourceMappingURL=SVGBlade.d.ts.map
@@ -8,9 +8,9 @@ export declare class TextBlade extends Blade<TXTExportOptions> {
8
8
  constructor(config: BladeConfig<TXTExportOptions>);
9
9
  render(): HTMLElement;
10
10
  getOptions(): TXTExportOptions;
11
+ setDefaults(values: Partial<TXTExportOptions>): void;
11
12
  reset(): void;
12
13
  validate(): boolean;
13
14
  refreshLayerTargets(): void;
14
15
  private applyDefaults;
15
16
  }
16
- //# sourceMappingURL=TextBlade.d.ts.map
@@ -16,6 +16,7 @@ export declare class VideoBlade extends Blade<VideoExportOptions> {
16
16
  constructor(config: BladeConfig<VideoExportOptions>);
17
17
  render(): HTMLElement;
18
18
  getOptions(): VideoExportOptions;
19
+ setDefaults(values: Partial<VideoExportOptions>): void;
19
20
  reset(): void;
20
21
  validate(): boolean;
21
22
  isRecording(): boolean;
@@ -28,4 +29,3 @@ export declare class VideoBlade extends Blade<VideoExportOptions> {
28
29
  private readonly handleFormatChange;
29
30
  private syncTransparencyAvailability;
30
31
  }
31
- //# sourceMappingURL=VideoBlade.d.ts.map
@@ -1,8 +1,10 @@
1
1
  export { Blade } from './Blade';
2
+ export type { BladeCapabilities, BladeConfig } from './Blade';
2
3
  export { TextBlade } from './TextBlade';
3
4
  export { JSONBlade } from './JSONBlade';
4
5
  export { ImageBlade } from './ImageBlade';
5
6
  export { SVGBlade } from './SVGBlade';
6
7
  export { GIFBlade } from './GIFBlade';
7
8
  export { VideoBlade } from './VideoBlade';
8
- //# sourceMappingURL=index.d.ts.map
9
+ export { isRecordingBlade } from './RecordingBlade';
10
+ export type { RecordingBladeLike } from './RecordingBlade';
@@ -16,4 +16,3 @@ export declare class Button extends Component<ButtonProps> {
16
16
  setDisabled(disabled: boolean): void;
17
17
  protected onUpdate(props: ButtonProps): void;
18
18
  }
19
- //# sourceMappingURL=Button.d.ts.map
@@ -15,4 +15,3 @@ export declare abstract class Component<TProps = void> {
15
15
  get root(): HTMLElement;
16
16
  isMounted(): boolean;
17
17
  }
18
- //# sourceMappingURL=Component.d.ts.map
@@ -6,4 +6,3 @@ export declare class Container extends Component<void> {
6
6
  constructor(variant?: ContainerVariant, additionalClasses?: string[]);
7
7
  render(): HTMLElement;
8
8
  }
9
- //# sourceMappingURL=Container.d.ts.map
@@ -14,4 +14,3 @@ export declare class Field extends Component<FieldProps> {
14
14
  protected onUpdate(props: FieldProps): void;
15
15
  private applyVariant;
16
16
  }
17
- //# sourceMappingURL=Field.d.ts.map
@@ -1,8 +1,10 @@
1
1
  import { Component } from '../base/Component';
2
2
  export declare class Header extends Component<void> {
3
3
  private static readonly _iconNamespace;
4
+ private _dragHandle?;
5
+ get dragHandleElement(): HTMLButtonElement;
4
6
  render(): HTMLElement;
7
+ private _createButton;
5
8
  private _createLink;
6
9
  private _createIcon;
7
10
  }
8
- //# sourceMappingURL=Header.d.ts.map
@@ -16,4 +16,3 @@ export declare class StatusDisplay extends Component<StatusDisplayProps> {
16
16
  protected onUpdate(props: StatusDisplayProps): void;
17
17
  private applyVariant;
18
18
  }
19
- //# sourceMappingURL=StatusDisplay.d.ts.map
@@ -17,4 +17,3 @@ export declare class CheckboxInput extends Component<CheckboxInputProps> {
17
17
  protected _onUnmount(): void;
18
18
  protected onUpdate(props: CheckboxInputProps): void;
19
19
  }
20
- //# sourceMappingURL=CheckboxInput.d.ts.map
@@ -17,4 +17,3 @@ export declare class LayerTargetSelect extends Component<void> {
17
17
  protected _onUnmount(): void;
18
18
  protected _onDestroy(): void;
19
19
  }
20
- //# sourceMappingURL=LayerTargetSelect.d.ts.map
@@ -29,4 +29,3 @@ export declare class NumberInput extends Component<NumberInputProps> {
29
29
  private updateDisplay;
30
30
  private clearHoldTimers;
31
31
  }
32
- //# sourceMappingURL=NumberInput.d.ts.map
@@ -32,4 +32,3 @@ export declare class RangeInput extends Component<RangeInputProps> {
32
32
  private getMax;
33
33
  private getCurrentValue;
34
34
  }
35
- //# sourceMappingURL=RangeInput.d.ts.map
@@ -22,4 +22,3 @@ export declare class SelectInput<TValue extends string = string> extends Compone
22
22
  update(partial: Partial<SelectInputProps<TValue>>): void;
23
23
  private populateOptions;
24
24
  }
25
- //# sourceMappingURL=SelectInput.d.ts.map
@@ -16,4 +16,3 @@ export declare class TextInput extends Component<TextInputProps> {
16
16
  protected _onUnmount(): void;
17
17
  protected onUpdate(props: TextInputProps): void;
18
18
  }
19
- //# sourceMappingURL=TextInput.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type { ExportDefaults, ExportDefaultsPatch, ExportFormat } from '../types';
2
+ export type ExportDefaultsResetTarget = ExportFormat | 'format';
3
+ export declare class DefaultsStore {
4
+ private _defaults;
5
+ constructor();
6
+ get current(): Readonly<ExportDefaults>;
7
+ snapshot(): ExportDefaults;
8
+ get<TFormat extends ExportFormat>(format: TFormat): ExportDefaults[TFormat];
9
+ merge(patch: ExportDefaultsPatch): void;
10
+ reset(target?: ExportDefaultsResetTarget): void;
11
+ }
@@ -0,0 +1,3 @@
1
+ import type { ExportDefaults } from '../types';
2
+ export declare const CURATED_DEFAULTS: Readonly<ExportDefaults>;
3
+ export declare function createExportDefaults(): ExportDefaults;
@@ -8,4 +8,3 @@ export declare class EventBus<TEvents extends EventMap> {
8
8
  $clear(): void;
9
9
  }
10
10
  export {};
11
- //# sourceMappingURL=EventBus.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import type { Textmodifier } from 'textmode.js';
2
2
  import type { TextmodeExportAPI } from '../../types';
3
- import { EventBus } from './EventBus';
4
- import { StateManager } from './StateManager';
5
- import type { OverlayEvents } from '../models/OverlayEvents';
6
- import type { OverlayState } from '../models/OverlayState';
3
+ import type { ExportDefaults, ExportDefaultsPatch } from '../types';
7
4
  import type { FormatDefinition } from '../models/FormatDefinition';
5
+ import { type OverlayPosition } from '../services/PositionService';
6
+ import { DefaultsStore } from '../config/DefaultsStore';
8
7
  export declare class OverlayController {
9
8
  private readonly _textmodifier;
9
+ private readonly _defaultsStore;
10
10
  private readonly _state;
11
11
  private readonly _events;
12
12
  private readonly _exportService;
@@ -30,15 +30,39 @@ export declare class OverlayController {
30
30
  private readonly _handleFormatSelectChange;
31
31
  private readonly _handleExportClickSafe;
32
32
  private readonly _handleCopyClickSafe;
33
- constructor(textmodifier: Textmodifier, exportAPI: TextmodeExportAPI, state: StateManager<OverlayState>, events: EventBus<OverlayEvents>, definitions: ReadonlyArray<FormatDefinition>);
33
+ constructor(textmodifier: Textmodifier, exportAPI: TextmodeExportAPI, defaultsStore: DefaultsStore, definitions: ReadonlyArray<FormatDefinition>);
34
34
  $mount(): void;
35
35
  show(): void;
36
36
  hide(): void;
37
37
  toggle(): void;
38
38
  isVisible(): boolean;
39
39
  refreshLayerTargets(): void;
40
+ resetPosition(): void;
41
+ getPosition(): Readonly<OverlayPosition>;
42
+ setPosition(position: Pick<OverlayPosition, 'offsetX' | 'offsetY'>): void;
43
+ /**
44
+ * Override the curated per-format defaults at runtime.
45
+ *
46
+ * Merges the supplied patch into the internal defaults store and
47
+ * pushes the new values into every mounted blade. The currently
48
+ * visible blade is updated immediately; other formats pick up
49
+ * the new defaults when the user switches to them.
50
+ */
51
+ setDefaults(patch: ExportDefaultsPatch): void;
52
+ /**
53
+ * Read the current effective defaults for every format.
54
+ */
55
+ getDefaults(): Readonly<ExportDefaults>;
56
+ /**
57
+ * Restore one or all formats to the library's curated defaults.
58
+ */
59
+ resetDefaults(target?: keyof ExportDefaults): void;
40
60
  $dispose(): void;
61
+ private _resetAffectedBlades;
41
62
  private _initializeFormatMap;
63
+ private _resolveInitialFormat;
64
+ private _getFormatKeys;
65
+ private _assertKnownFormat;
42
66
  private _createOverlay;
43
67
  private _renderStaticContent;
44
68
  private _prepareFormatOptions;
@@ -50,4 +74,3 @@ export declare class OverlayController {
50
74
  private _handleCopyClick;
51
75
  private _updateExportButton;
52
76
  }
53
- //# sourceMappingURL=OverlayController.d.ts.map
@@ -8,4 +8,3 @@ export declare class StateManager<TState extends object> {
8
8
  $subscribe(listener: StateListener<TState>): () => void;
9
9
  $reset(state: TState): void;
10
10
  }
11
- //# sourceMappingURL=StateManager.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import type { ExportFormat } from './types';
2
2
  import type { FormatDefinition } from './models/FormatDefinition';
3
3
  import type { LayerTargetProvider } from '../exporters/base';
4
- export declare function getExportFormatDefinitions(layerTargetProvider?: LayerTargetProvider): ReadonlyArray<FormatDefinition<ExportFormat>>;
5
- //# sourceMappingURL=formatRegistry.d.ts.map
4
+ import type { ExportDefaults } from './types';
5
+ export type ExportDefaultsProvider = <TFormat extends ExportFormat>(format: TFormat) => ExportDefaults[TFormat];
6
+ export declare function getExportFormatDefinitions(layerTargetProvider?: LayerTargetProvider, getDefaults?: ExportDefaultsProvider): ReadonlyArray<FormatDefinition<ExportFormat>>;
@@ -2,7 +2,6 @@ import type { Textmodifier } from 'textmode.js';
2
2
  import type { TextmodeExportAPI } from '../types';
3
3
  import type { LayerTargetProvider } from '../exporters/base';
4
4
  import { OverlayController } from './core/OverlayController';
5
- export type { ExportFormat } from './types';
6
5
  /**
7
6
  * Creates an export overlay controller.
8
7
  *
@@ -12,4 +11,3 @@ export type { ExportFormat } from './types';
12
11
  * @returns The overlay controller instance.
13
12
  */
14
13
  export declare function createExportOverlay(textmodifier: Textmodifier, exportAPI: TextmodeExportAPI, layerTargetProvider?: LayerTargetProvider): OverlayController;
15
- //# sourceMappingURL=index.d.ts.map
@@ -6,4 +6,3 @@ export interface FormatDefinition<TFormat extends ExportFormat = ExportFormat> {
6
6
  readonly supportsClipboard: boolean;
7
7
  createBlade(): Blade<ExportOptionsMap[TFormat]>;
8
8
  }
9
- //# sourceMappingURL=FormatDefinition.d.ts.map
@@ -23,4 +23,3 @@ export interface OverlayEvents extends Record<string, unknown> {
23
23
  format: ExportFormat;
24
24
  };
25
25
  }
26
- //# sourceMappingURL=OverlayEvents.d.ts.map
@@ -12,5 +12,4 @@ export interface OverlayState {
12
12
  videoProgress?: VideoExportProgress;
13
13
  error?: Error;
14
14
  }
15
- export declare const createInitialOverlayState: (defaultFormat: ExportFormat) => OverlayState;
16
- //# sourceMappingURL=OverlayState.d.ts.map
15
+ export declare const createInitialOverlayState: (initialFormat: ExportFormat) => OverlayState;
@@ -4,11 +4,7 @@ type ClipboardExportFormat = Extract<ExportFormat, 'txt' | 'json' | 'svg' | 'ima
4
4
  export declare class ClipboardService {
5
5
  private readonly api;
6
6
  constructor(api: TextmodeExportAPI);
7
- $copy(format: 'txt', options: ExportOptionsMap['txt']): Promise<void>;
8
- $copy(format: 'json', options: ExportOptionsMap['json']): Promise<void>;
9
- $copy(format: 'svg', options: ExportOptionsMap['svg']): Promise<void>;
10
- $copy(format: 'image', options: ExportOptionsMap['image']): Promise<void>;
11
7
  $copy(format: ClipboardExportFormat, options: ExportOptionsMap[ClipboardExportFormat]): Promise<void>;
8
+ static isClipboardFormat(format: ExportFormat): format is ClipboardExportFormat;
12
9
  }
13
10
  export {};
14
- //# sourceMappingURL=ClipboardService.d.ts.map
@@ -13,6 +13,4 @@ export declare class ExportService {
13
13
  private readonly events;
14
14
  constructor(api: TextmodeExportAPI, events: EventBus<OverlayEvents>);
15
15
  $requestExport(format: ExportFormat, options: unknown, hooks?: ExportHooks): Promise<void>;
16
- private _execute;
17
16
  }
18
- //# sourceMappingURL=ExportService.d.ts.map
@@ -0,0 +1,12 @@
1
+ export interface StoredOverlayPosition {
2
+ version: 1;
3
+ offsetX: number;
4
+ offsetY: number;
5
+ }
6
+ export declare class OverlayPositionStorage {
7
+ private readonly key;
8
+ constructor(key?: string);
9
+ load(): StoredOverlayPosition | undefined;
10
+ save(offsetX: number, offsetY: number): void;
11
+ clear(): void;
12
+ }
@@ -1,14 +1,44 @@
1
1
  import type { Textmodifier } from 'textmode.js';
2
+ import { OverlayPositionStorage } from './OverlayPositionStorage';
3
+ export interface OverlayPosition {
4
+ mode: 'auto' | 'custom';
5
+ offsetX: number;
6
+ offsetY: number;
7
+ }
8
+ interface SetPositionOptions {
9
+ persist?: boolean;
10
+ }
2
11
  export declare class PositionService {
3
12
  private readonly modifier;
4
- private readonly overlay;
13
+ private readonly host;
14
+ private readonly surface;
15
+ private readonly storage;
5
16
  private animationFrameId;
6
17
  private readonly handleUpdate;
7
18
  private bound;
8
- constructor(modifier: Textmodifier, overlay: HTMLElement);
19
+ private dragHandle?;
20
+ private dragState?;
21
+ private position;
22
+ private renderedOffset;
23
+ private readonly handlePointerDown;
24
+ private readonly handlePointerMove;
25
+ private readonly handlePointerUp;
26
+ private readonly handleKeyDown;
27
+ constructor(modifier: Textmodifier, host: HTMLElement, surface?: HTMLElement, storage?: OverlayPositionStorage);
28
+ getPosition(): Readonly<OverlayPosition>;
29
+ setPosition(position: Pick<OverlayPosition, 'offsetX' | 'offsetY'>, options?: SetPositionOptions): void;
30
+ resetPosition(): void;
9
31
  scheduleUpdate(): void;
10
32
  bind(): void;
33
+ attachDragHandle(handle: HTMLElement): void;
34
+ private detachDragHandle;
35
+ private onPointerDown;
36
+ private onPointerMove;
37
+ private onPointerUp;
38
+ private onKeyDown;
11
39
  private update;
40
+ private clampToViewport;
41
+ private clamp;
12
42
  dispose(): void;
13
43
  }
14
- //# sourceMappingURL=PositionService.d.ts.map
44
+ export {};
@@ -2,7 +2,7 @@ import type { ImageExportOptions } from '../exporters/image';
2
2
  import type { TXTExportOptions } from '../exporters/txt';
3
3
  import type { SVGExportOptions } from '../exporters/svg';
4
4
  import type { GIFExportOptions } from '../exporters/gif';
5
- import type { VideoExportOptions } from '../exporters/video';
5
+ import type { VideoBitratePreset, VideoExportOptions } from '../exporters/video';
6
6
  import type { JSONExportOptions } from '../exporters/json';
7
7
  export type ExportFormat = 'txt' | 'json' | 'image' | 'gif' | 'video' | 'svg';
8
8
  export type ExportOptionsMap = {
@@ -13,4 +13,38 @@ export type ExportOptionsMap = {
13
13
  video: VideoExportOptions;
14
14
  svg: SVGExportOptions;
15
15
  };
16
- //# sourceMappingURL=types.d.ts.map
16
+ export type TXTOverlayDefaults = Pick<TXTExportOptions, 'preserveTrailingSpaces' | 'emptyCharacter'>;
17
+ export type JSONOverlayDefaults = Pick<JSONExportOptions, 'target' | 'pretty' | 'includeMetadata' | 'colorMode'>;
18
+ export type ImageOverlayDefaults = Pick<ImageExportOptions, 'format' | 'scale'>;
19
+ export type SVGOverlayDefaults = Pick<SVGExportOptions, 'includeBackgroundRectangles' | 'drawMode' | 'strokeWidth'>;
20
+ export type GIFOverlayDefaults = Pick<GIFExportOptions, 'frameCount' | 'frameRate' | 'scale' | 'repeat'>;
21
+ export type VideoOverlayDefaults = Pick<VideoExportOptions, 'format' | 'frameCount' | 'frameRate' | 'bitrateMode' | 'latencyMode' | 'hardwareAcceleration' | 'keyFrameInterval' | 'transparent'> & {
22
+ bitrate?: VideoBitratePreset;
23
+ };
24
+ /**
25
+ * Curated default options for every export format.
26
+ *
27
+ * Each sub-object contains the library-chosen default values for the fields
28
+ * that the overlay exposes as inputs. These are the values applied when the
29
+ * overlay first mounts and after a {@link OverlayController.resetDefaults}.
30
+ */
31
+ export type ExportDefaults = {
32
+ format: ExportFormat;
33
+ txt: TXTOverlayDefaults;
34
+ json: JSONOverlayDefaults;
35
+ image: ImageOverlayDefaults;
36
+ svg: SVGOverlayDefaults;
37
+ gif: GIFOverlayDefaults;
38
+ video: VideoOverlayDefaults;
39
+ };
40
+ /**
41
+ * Partial patch accepted by {@link OverlayController.setDefaults}.
42
+ *
43
+ * Every supplied sub-object is deep-merged into the corresponding format's
44
+ * curated defaults. Omitted keys keep their current value.
45
+ */
46
+ export type ExportDefaultsPatch = {
47
+ format?: ExportFormat;
48
+ } & {
49
+ [K in ExportFormat]?: Partial<ExportDefaults[K]>;
50
+ };
@@ -6,7 +6,10 @@ export declare const overlayClasses: {
6
6
  readonly section: "textmode-export-overlay__section";
7
7
  readonly header: "textmode-export-overlay__header";
8
8
  readonly headerTitleRow: "textmode-export-overlay__header-title-row";
9
+ readonly headerIdentity: "textmode-export-overlay__header-identity";
9
10
  readonly headerLinks: "textmode-export-overlay__header-links";
11
+ readonly grabHandle: "textmode-export-overlay__grab-handle";
12
+ readonly rootDragging: "textmode-export-overlay--dragging";
10
13
  readonly row: "textmode-export-overlay__row";
11
14
  readonly label: "textmode-export-overlay__label";
12
15
  readonly field: "textmode-export-overlay__field";
@@ -32,4 +35,3 @@ export declare const overlayClasses: {
32
35
  readonly supportIcon: "textmode-export-overlay__support-icon";
33
36
  readonly linkIcon: "textmode-export-overlay__link-icon";
34
37
  };
35
- //# sourceMappingURL=classes.d.ts.map