@openleaf-editor/ui 0.1.0-beta.1 → 0.1.0-beta.3

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 (82) hide show
  1. package/README.md +85 -0
  2. package/dist/block-type.d.ts +5 -0
  3. package/dist/block-type.d.ts.map +1 -0
  4. package/dist/block-type.js +133 -0
  5. package/dist/block-type.js.map +1 -0
  6. package/dist/content-css.d.ts +31 -0
  7. package/dist/content-css.d.ts.map +1 -0
  8. package/dist/content-css.js +272 -0
  9. package/dist/content-css.js.map +1 -0
  10. package/dist/css.d.ts +23 -0
  11. package/dist/css.d.ts.map +1 -0
  12. package/dist/css.js +813 -0
  13. package/dist/css.js.map +1 -0
  14. package/dist/dialog.d.ts +158 -18
  15. package/dist/dialog.d.ts.map +1 -1
  16. package/dist/dialog.js +605 -130
  17. package/dist/dialog.js.map +1 -1
  18. package/dist/floating.d.ts +29 -0
  19. package/dist/floating.d.ts.map +1 -0
  20. package/dist/floating.js +130 -0
  21. package/dist/floating.js.map +1 -0
  22. package/dist/help.d.ts +9 -0
  23. package/dist/help.d.ts.map +1 -0
  24. package/dist/help.js +97 -0
  25. package/dist/help.js.map +1 -0
  26. package/dist/i18n.d.ts +39 -0
  27. package/dist/i18n.d.ts.map +1 -0
  28. package/dist/i18n.js +114 -0
  29. package/dist/i18n.js.map +1 -0
  30. package/dist/icons.d.ts +7 -1
  31. package/dist/icons.d.ts.map +1 -1
  32. package/dist/icons.js +10 -2
  33. package/dist/icons.js.map +1 -1
  34. package/dist/index.d.ts +15 -7
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +14 -6
  37. package/dist/index.js.map +1 -1
  38. package/dist/items.d.ts +2 -1
  39. package/dist/items.d.ts.map +1 -1
  40. package/dist/items.js +263 -17
  41. package/dist/items.js.map +1 -1
  42. package/dist/live.d.ts +42 -0
  43. package/dist/live.d.ts.map +1 -0
  44. package/dist/live.js +83 -0
  45. package/dist/live.js.map +1 -0
  46. package/dist/menu.d.ts +85 -0
  47. package/dist/menu.d.ts.map +1 -0
  48. package/dist/menu.js +500 -0
  49. package/dist/menu.js.map +1 -0
  50. package/dist/openleaf.css +325 -7
  51. package/dist/overflow.d.ts +44 -0
  52. package/dist/overflow.d.ts.map +1 -0
  53. package/dist/overflow.js +323 -0
  54. package/dist/overflow.js.map +1 -0
  55. package/dist/pickers.d.ts +43 -0
  56. package/dist/pickers.d.ts.map +1 -0
  57. package/dist/pickers.js +52 -0
  58. package/dist/pickers.js.map +1 -0
  59. package/dist/registry.d.ts +72 -18
  60. package/dist/registry.d.ts.map +1 -1
  61. package/dist/registry.js +7 -6
  62. package/dist/registry.js.map +1 -1
  63. package/dist/skins.d.ts.map +1 -1
  64. package/dist/skins.js +48 -14
  65. package/dist/skins.js.map +1 -1
  66. package/dist/styles.d.ts +61 -1
  67. package/dist/styles.d.ts.map +1 -1
  68. package/dist/styles.js +77 -421
  69. package/dist/styles.js.map +1 -1
  70. package/dist/testing.d.ts +3 -0
  71. package/dist/testing.d.ts.map +1 -0
  72. package/dist/testing.js +3 -0
  73. package/dist/testing.js.map +1 -0
  74. package/dist/toolbar.d.ts +91 -12
  75. package/dist/toolbar.d.ts.map +1 -1
  76. package/dist/toolbar.js +459 -127
  77. package/dist/toolbar.js.map +1 -1
  78. package/dist/upload.d.ts +11 -0
  79. package/dist/upload.d.ts.map +1 -1
  80. package/dist/upload.js +15 -1
  81. package/dist/upload.js.map +1 -1
  82. package/package.json +17 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../src/css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,MAAM,WAAW,GAAG;;;;;;;;;;;CAWnB,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mEAiDgD,WAAW;;;0DAGpB,WAAW;;qCAEhC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkpB/C,CAAA"}
package/dist/dialog.d.ts CHANGED
@@ -22,42 +22,182 @@
22
22
  import { type ImageUploadResult } from './upload.js';
23
23
  export interface LinkResult {
24
24
  href: string;
25
+ title: string | null;
25
26
  target: string | null;
26
27
  rel: string | null;
28
+ id: string | null;
27
29
  }
28
30
  export interface ImageResult {
29
31
  src: string;
30
32
  /** `''` means explicitly decorative. `null` is never returned. */
31
33
  alt: string;
34
+ title: string | null;
32
35
  /** Intrinsic size, when an uploader reported one. */
33
36
  width: string | null;
34
37
  height: string | null;
38
+ className: string | null;
39
+ align: 'left' | 'right' | 'center' | null;
40
+ caption: string | null;
35
41
  }
42
+ export interface FieldOption {
43
+ value: string;
44
+ label: string;
45
+ }
46
+ export interface FieldSpec {
47
+ name: string;
48
+ label: string;
49
+ type?: string;
50
+ value?: string;
51
+ required?: boolean;
52
+ hint?: string;
53
+ /** For `type: 'file'`: the accept list. */
54
+ accept?: string;
55
+ /** When set, the field is a `<select>` rather than an input. */
56
+ options?: readonly FieldOption[];
57
+ /**
58
+ * The field this control writes into when it changes.
59
+ *
60
+ * A chooser that only *contributed* its value could never change a field that
61
+ * was already filled in: editing a link or an image prefills the address, so
62
+ * picking from the list lost to it every time and the list worked only for new
63
+ * insertions. Writing into the field it fills keeps one source of truth, and
64
+ * shows the author what they picked so they can still edit it.
65
+ */
66
+ fills?: string;
67
+ }
68
+ /**
69
+ * A commit failure.
70
+ *
71
+ * `field` names the control the message is about, when there is one. Without it
72
+ * a failed submit could only mark the FIRST field invalid and focus it, which is
73
+ * a guess -- and a wrong `aria-invalid` is worse for a screen reader user than
74
+ * none, because it sends them to correct a field that was already right.
75
+ */
76
+ export interface CommitError {
77
+ error: string;
78
+ field?: string;
79
+ }
80
+ /**
81
+ * Install the dialog sheet.
82
+ *
83
+ * Delegates to `registerStyles` rather than repeating the constructable-sheet
84
+ * dance, which also removes this file's `<style>`-element fallback. That
85
+ * fallback contradicted the invariant argued at the top of `styles.ts`: a
86
+ * `<style>` element is blocked by exactly the `style-src 'self'` policies that
87
+ * would need it, and it fails silently. `registerStyles` warns instead, once,
88
+ * naming the stylesheet to link.
89
+ *
90
+ * It also deduplicates per *document* by the CSS text, where the flag this used
91
+ * to keep was module-global -- so a second document (an iframe, a print view)
92
+ * previously got the dialog markup with none of its styles.
93
+ */
94
+ export declare function ensureDialogStyles(doc: Document): void;
95
+ export interface PromptFormOptions {
96
+ extraCheckbox?: {
97
+ name: string;
98
+ label: string;
99
+ hint?: string;
100
+ checked?: boolean;
101
+ };
102
+ note?: string;
103
+ busyLabel?: string;
104
+ /** The editor's own `lang`, so two editors on a page do not share a language. */
105
+ locale?: string | null;
106
+ /**
107
+ * The editor the dialog belongs to. Pass it: the dialog is mounted inside
108
+ * this element so the skin's tokens reach it, and without it the dialog is
109
+ * painted in the default light palette whatever the editor looks like.
110
+ */
111
+ host?: HTMLElement;
112
+ }
113
+ /**
114
+ * A generic modal form, used by table property dialogs and anything else that
115
+ * is a handful of labelled fields rather than a specialised prompt.
116
+ */
117
+ export declare function promptFields<T>(doc: Document, title: string, fields: FieldSpec[], options: PromptFormOptions, commit: (values: Record<string, string>, files: Record<string, File | undefined>) => Promise<{
118
+ value: T;
119
+ } | {
120
+ error: string;
121
+ }> | {
122
+ value: T;
123
+ } | {
124
+ error: string;
125
+ }): Promise<T | null>;
36
126
  export declare function promptForLink(doc: Document, existing?: {
37
127
  href?: string;
128
+ title?: string | null;
38
129
  target?: string | null;
39
- }): Promise<LinkResult | null>;
130
+ rel?: string | null;
131
+ id?: string | null;
132
+ }, host?: HTMLElement): Promise<LinkResult | null>;
40
133
  export interface ImagePromptOptions {
41
- /**
42
- * A file the author has already chosen, by dropping or pasting it.
43
- *
44
- * When present the dialog does not offer a picker or an address field: the
45
- * source is settled and the only open question is the description.
46
- */
47
134
  file?: File;
48
- /** Uploads a file and reports where it landed. Absent means URL-only. */
49
135
  upload?: (file: File) => Promise<ImageUploadResult>;
136
+ host?: HTMLElement;
137
+ existing?: {
138
+ src?: string;
139
+ alt?: string | null;
140
+ title?: string | null;
141
+ className?: string | null;
142
+ align?: 'left' | 'right' | 'center' | null;
143
+ caption?: string | null;
144
+ width?: string | null;
145
+ height?: string | null;
146
+ };
147
+ }
148
+ export declare function promptForImage(doc: Document, options?: ImagePromptOptions): Promise<ImageResult | null>;
149
+ /** One alternative address the author gave the player. */
150
+ export interface MediaSourceResult {
151
+ src: string;
152
+ type: string | null;
153
+ }
154
+ export interface MediaResult {
155
+ /** Empty when the player carries all its addresses in `sources`. */
156
+ src: string;
157
+ title: string | null;
158
+ poster: string | null;
159
+ width: string | null;
160
+ height: string | null;
161
+ sources: MediaSourceResult[];
162
+ }
163
+ export interface MediaPromptOptions {
164
+ host?: HTMLElement;
165
+ /** Prefilled state, when editing a player already in the document. */
166
+ existing?: {
167
+ /**
168
+ * What the selected node is. An `<iframe>` accepts only the addresses the
169
+ * embed allowlist permits, and the form has to say so itself: the update
170
+ * command declines anything else, and by then this dialog has closed, so a
171
+ * rejected address looked like a save that did nothing.
172
+ */
173
+ kind?: 'video' | 'audio' | 'iframe';
174
+ src?: string | null;
175
+ title?: string | null;
176
+ poster?: string | null;
177
+ width?: string | null;
178
+ height?: string | null;
179
+ sources?: readonly MediaSourceResult[];
180
+ };
50
181
  }
51
182
  /**
52
- * Ask for an image.
53
- *
54
- * The alternative text is asked for in the same dialog as the file, and this is
55
- * the reason the upload happens on submit rather than on selection: one dialog
56
- * means one decision point, and there is no path through it that inserts an
57
- * image nobody described. A drop that uploaded immediately and asked afterwards
58
- * would leave an undescribed image in the document every time somebody cancelled
59
- * -- and OpenLeaf has no image-editing dialog yet, so "afterwards" would mean
60
- * never.
183
+ * The insert-media dialog.
184
+ *
185
+ * Two spare alternative-source rows, because that is the shape the format is
186
+ * actually used in: a `<video>` with a `.webm` and an `.mp4` covers every
187
+ * current browser, and offering a single alternative makes the common case the
188
+ * one the author has to work around. Not a growable list with add and remove
189
+ * controls, which would owe keyboard semantics and a reordering story.
190
+ *
191
+ * But the rows are spare capacity *on top of* what the player already has, never
192
+ * a cap on it. A fixed two rows silently deleted the third and later encodings
193
+ * of any player that had them, on a save the author made to change the title --
194
+ * because what this form returns is what replaces the stored sources. Every
195
+ * existing source gets a row, so the form cannot lose one it was never shown.
196
+ *
197
+ * The type hints are separate fields rather than guessed from the extension. A
198
+ * guess is wrong for exactly the addresses that need it -- a signed URL, or a
199
+ * stream with no extension at all -- and being wrong here means the browser
200
+ * downloads a format it cannot play before finding out.
61
201
  */
62
- export declare function promptForImage(doc: Document, options?: ImagePromptOptions): Promise<ImageResult | null>;
202
+ export declare function promptForMedia(doc: Document, options?: MediaPromptOptions): Promise<MediaResult | null>;
63
203
  //# sourceMappingURL=dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE7E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAA;IACX,qDAAqD;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AA8TD,wBAAsB,aAAa,CACjC,GAAG,EAAE,QAAQ,EACb,QAAQ,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAuC5B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,yEAAyE;IACzE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACpD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgF7B"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"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"}