@warkypublic/svelix 0.1.44 → 0.1.47

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 (109) hide show
  1. package/README.md +93 -33
  2. package/dist/components/BetterMenu/BetterMenu.svelte +21 -37
  3. package/dist/components/BetterMenu/BetterMenuAsyncButton.svelte +21 -31
  4. package/dist/components/BetterMenu/BetterMenuPreview.svelte +27 -29
  5. package/dist/components/BetterMenu/MenuRenderer.svelte +40 -51
  6. package/dist/components/Boxer/Boxer.svelte +488 -602
  7. package/dist/components/Boxer/BoxerTarget.svelte +6 -46
  8. package/dist/components/Boxer/BoxerTarget.svelte.d.ts +1 -0
  9. package/dist/components/Boxer/types.d.ts +0 -1
  10. package/dist/components/Button.svelte +19 -43
  11. package/dist/components/ButtonPreview.svelte +2 -11
  12. package/dist/components/CardGrid/CardGrid.svelte +1141 -0
  13. package/dist/components/CardGrid/CardGrid.svelte.d.ts +61 -0
  14. package/dist/components/CardGrid/CardGridFilterPanel.svelte +320 -0
  15. package/dist/components/CardGrid/CardGridFilterPanel.svelte.d.ts +11 -0
  16. package/dist/components/CardGrid/DefaultCard.svelte +287 -0
  17. package/dist/components/CardGrid/DefaultCard.svelte.d.ts +10 -0
  18. package/dist/components/CardGrid/ImageCardStory.svelte +308 -0
  19. package/dist/components/CardGrid/ImageCardStory.svelte.d.ts +18 -0
  20. package/dist/components/CardGrid/cardGrid.d.ts +33 -0
  21. package/dist/components/CardGrid/cardGrid.js +21 -0
  22. package/dist/components/CardGrid/index.d.ts +4 -0
  23. package/dist/components/CardGrid/index.js +4 -0
  24. package/dist/components/ContentEditor/CollaboraInsertTextDemo.svelte +5 -10
  25. package/dist/components/ContentEditor/ContentEditor.svelte +24 -50
  26. package/dist/components/ContentEditor/subcomponents/AudioPlayer.svelte +17 -17
  27. package/dist/components/ContentEditor/subcomponents/CollaboraEditor.svelte +244 -309
  28. package/dist/components/ContentEditor/subcomponents/EmailViewer.svelte +2 -3
  29. package/dist/components/ContentEditor/subcomponents/ImageViewer.svelte +14 -15
  30. package/dist/components/ContentEditor/subcomponents/MarkdownViewer.svelte +74 -90
  31. package/dist/components/ContentEditor/subcomponents/MonacoEditor.svelte +75 -103
  32. package/dist/components/ContentEditor/subcomponents/Office365Editor.svelte +234 -297
  33. package/dist/components/ContentEditor/subcomponents/PdfViewer.svelte +14 -20
  34. package/dist/components/ContentEditor/subcomponents/TextEditor.svelte +122 -150
  35. package/dist/components/ContentEditor/subcomponents/UnknownFile.svelte +105 -126
  36. package/dist/components/ContentEditor/subcomponents/VideoPlayer.svelte +17 -17
  37. package/dist/components/ContentEditor/subcomponents/ZipViewer.svelte +2 -3
  38. package/dist/components/ErrorBoundary/ErrorBoundary.svelte +41 -58
  39. package/dist/components/ErrorBoundary/ErrorBoundaryPreview.svelte +8 -16
  40. package/dist/components/Former/Former.svelte +306 -424
  41. package/dist/components/Former/FormerButtonArea.svelte +17 -68
  42. package/dist/components/Former/FormerDrawer.svelte +26 -78
  43. package/dist/components/Former/FormerDrawerPreview.svelte +99 -89
  44. package/dist/components/Former/FormerModal.svelte +24 -70
  45. package/dist/components/Former/FormerModalPreview.svelte +99 -89
  46. package/dist/components/Former/FormerPreview.svelte +76 -78
  47. package/dist/components/Former/FormerRestApiPreview.svelte +55 -48
  48. package/dist/components/FormerControllers/ButtonCtrl.svelte +13 -44
  49. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrl.svelte +280 -445
  50. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlCalendar.svelte +95 -136
  51. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlPickerPanel.svelte +3 -62
  52. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlTimeFields.svelte +143 -217
  53. package/dist/components/FormerControllers/IconButtonCtrl.svelte +13 -42
  54. package/dist/components/FormerControllers/InlineWrapper.svelte +12 -41
  55. package/dist/components/FormerControllers/InlineWrapperPreview.svelte +4 -26
  56. package/dist/components/FormerControllers/NativeSelectCtrl.svelte +3 -29
  57. package/dist/components/FormerControllers/NumberInputCtrl.svelte +9 -35
  58. package/dist/components/FormerControllers/PasswordInputCtrl.svelte +4 -23
  59. package/dist/components/FormerControllers/SwitchCtrl.svelte +3 -20
  60. package/dist/components/FormerControllers/TextAreaCtrl.svelte +3 -24
  61. package/dist/components/FormerControllers/TextInputCtrl.svelte +3 -24
  62. package/dist/components/GlobalStateStore/GlobalStateStoreProvider.svelte +73 -120
  63. package/dist/components/Gridler/components/Gridler.svelte +338 -442
  64. package/dist/components/Gridler/components/GridlerCanvas.svelte +720 -1115
  65. package/dist/components/Gridler/components/GridlerEditor.svelte +2 -15
  66. package/dist/components/Gridler/components/GridlerFull.svelte +520 -841
  67. package/dist/components/Gridler/components/GridlerFull.svelte.d.ts +1 -1
  68. package/dist/components/Gridler/components/GridlerFullWithFormerPreview.svelte +194 -147
  69. package/dist/components/Gridler/components/GridlerSearch.svelte +7 -16
  70. package/dist/components/Gridler/components/GridlerSearchToggle.svelte +7 -19
  71. package/dist/components/Gridler/types.d.ts +1 -1
  72. package/dist/components/Icons/IconAdd.svelte +1 -3
  73. package/dist/components/Icons/IconAlertCircle.svelte +1 -3
  74. package/dist/components/Icons/IconAlertTriangle.svelte +1 -3
  75. package/dist/components/Icons/IconCamera.svelte +1 -3
  76. package/dist/components/Icons/IconClose.svelte +1 -3
  77. package/dist/components/Icons/IconEdit.svelte +1 -3
  78. package/dist/components/Icons/IconFilter.svelte +1 -3
  79. package/dist/components/Icons/IconSearch.svelte +1 -3
  80. package/dist/components/Icons/IconSort.svelte +1 -3
  81. package/dist/components/Icons/IconTrash.svelte +1 -3
  82. package/dist/components/Portal/Portal.svelte +14 -38
  83. package/dist/components/Screenshot/Screenshot.svelte +7 -13
  84. package/dist/components/Svark/Svark.svelte +680 -852
  85. package/dist/components/Svark/SvarkContextMenu.svelte +44 -63
  86. package/dist/components/Svark/SvarkInfiniteLoader.svelte +2 -6
  87. package/dist/components/Svark/SvarkPager.svelte +2 -28
  88. package/dist/components/Svark/SvarkSelectionDemo.svelte +4 -8
  89. package/dist/components/Svark/SvarkTopBar.svelte +9 -74
  90. package/dist/components/SvarkGrid/SvarkGrid.svelte +877 -1123
  91. package/dist/components/SvarkGrid/components/SvarkColumnFilterForm.svelte +45 -58
  92. package/dist/components/SvarkGrid/components/SvarkContextMenu.svelte +44 -63
  93. package/dist/components/SvarkGrid/components/SvarkHeaderFilterCell.svelte +41 -75
  94. package/dist/components/SvarkGrid/components/SvarkInfiniteLoader.svelte +2 -6
  95. package/dist/components/SvarkGrid/components/SvarkPager.svelte +2 -28
  96. package/dist/components/SvarkGrid/components/SvarkSearchPopover.svelte +8 -16
  97. package/dist/components/SvarkGrid/components/SvarkTopBar.svelte +6 -62
  98. package/dist/components/SvarkGrid/internal/SvarkGridView.svelte +345 -507
  99. package/dist/components/VTree/VTree.svelte +349 -431
  100. package/dist/components/VTree/VTreeContextMenu.svelte +21 -33
  101. package/dist/components/VTree/VTreeEventsDemo.svelte +48 -58
  102. package/dist/components/VTree/VTreeRow.svelte +13 -65
  103. package/dist/components/VTree/VTreeSearch.svelte +6 -13
  104. package/dist/components/VTree/VTreeVirtualViewport.svelte +37 -106
  105. package/dist/components/index.d.ts +1 -0
  106. package/dist/components/index.js +1 -0
  107. package/llm/COMPONENT_GUIDE.md +240 -0
  108. package/llm/plans/card_grid.plan.md +305 -0
  109. package/package.json +48 -46
@@ -0,0 +1,308 @@
1
+ <script lang="ts">import CardGrid from "./CardGrid.svelte";
2
+ const columns = [
3
+ {
4
+ id: "id",
5
+ title: "ID",
6
+ disableSearch: true,
7
+ disableFilter: true
8
+ },
9
+ {
10
+ id: "title",
11
+ title: "Title"
12
+ },
13
+ {
14
+ id: "photographer",
15
+ title: "Photographer"
16
+ },
17
+ {
18
+ id: "category",
19
+ title: "Category"
20
+ },
21
+ {
22
+ id: "likes",
23
+ title: "Likes",
24
+ format: "number"
25
+ },
26
+ {
27
+ id: "views",
28
+ title: "Views",
29
+ format: "number"
30
+ }
31
+ ];
32
+ const sortOptions = [
33
+ {
34
+ columnId: "title",
35
+ label: "Title"
36
+ },
37
+ {
38
+ columnId: "photographer",
39
+ label: "Photographer"
40
+ },
41
+ {
42
+ columnId: "likes",
43
+ label: "Likes"
44
+ }
45
+ ];
46
+ const CATEGORIES = [
47
+ "Architecture",
48
+ "Nature",
49
+ "People",
50
+ "Travel",
51
+ "Abstract",
52
+ "Animals"
53
+ ];
54
+ const PHOTOGRAPHERS = [
55
+ "Alice Monroe",
56
+ "Ben Carter",
57
+ "Cara Lee",
58
+ "Daniel Park",
59
+ "Emma Rios",
60
+ "Felix Braun"
61
+ ];
62
+ const TITLES = [
63
+ "Golden Hour",
64
+ "Morning Mist",
65
+ "Urban Jungle",
66
+ "Still Waters",
67
+ "First Light",
68
+ "Hidden Path",
69
+ "City Pulse",
70
+ "Wild Plains",
71
+ "Quiet Corner",
72
+ "Storm Front",
73
+ "Desert Bloom",
74
+ "Arctic Echo",
75
+ "Neon Drift",
76
+ "Forest Floor",
77
+ "Tidal Wave"
78
+ ];
79
+ const data = Array.from({ length: 60 }, (_, i) => ({
80
+ id: i + 1,
81
+ title: `${TITLES[i % TITLES.length]} ${Math.floor(i / TITLES.length) || ""}`.trim(),
82
+ photographer: PHOTOGRAPHERS[i % PHOTOGRAPHERS.length],
83
+ category: CATEGORIES[i % CATEGORIES.length],
84
+ likes: Math.floor(Math.random() * 4800 + 200),
85
+ views: Math.floor(Math.random() * 48e3 + 2e3),
86
+ imageUrl: `https://picsum.photos/seed/${i + 1}/400/260`
87
+ }));
88
+ </script>
89
+
90
+ <!-- cardMaxFrontColumns=3 splits: front=[id,title,photographer], back=[category,likes,views] -->
91
+ <CardGrid
92
+ {columns}
93
+ {sortOptions}
94
+ {data}
95
+ cardMinWidth={260}
96
+ cardMaxFrontColumns={3}
97
+ pageSize={20}
98
+ searchPlaceholder="Search photos…"
99
+ >
100
+ {#snippet card(record, _i, selected, _focused)}
101
+ <article class="ic-card" class:ic-selected={selected}>
102
+ <div class="ic-image-wrap">
103
+ <img
104
+ src={record.imageUrl as string}
105
+ alt={record.title as string}
106
+ class="ic-image"
107
+ loading="lazy"
108
+ />
109
+ <span class="ic-category">{record.category as string}</span>
110
+ </div>
111
+ <div class="ic-body">
112
+ <p class="ic-title">{record.title as string}</p>
113
+ <p class="ic-photographer">by {record.photographer as string}</p>
114
+ </div>
115
+ </article>
116
+ {/snippet}
117
+
118
+ {#snippet cardBack(record, _i, selected, _focused)}
119
+ <article class="ic-card ic-back" class:ic-selected={selected}>
120
+ <div class="ic-back-image-wrap">
121
+ <img
122
+ src={record.imageUrl as string}
123
+ alt={record.title as string}
124
+ class="ic-back-image"
125
+ loading="lazy"
126
+ />
127
+ <div class="ic-back-overlay">
128
+ <p class="ic-back-title">{record.title as string}</p>
129
+ <p class="ic-back-photographer">by {record.photographer as string}</p>
130
+ </div>
131
+ </div>
132
+ <div class="ic-body ic-back-body">
133
+ <div class="ic-back-stat">
134
+ <svg width="14" height="14" viewBox="0 0 20 20" fill="none" aria-hidden="true">
135
+ <path d="M3 7h14M3 10h10M3 13h6" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/>
136
+ </svg>
137
+ <span class="ic-back-label">Category</span>
138
+ <span class="ic-back-value">{record.category as string}</span>
139
+ </div>
140
+ <div class="ic-back-stat">
141
+ <svg width="14" height="14" viewBox="0 0 20 20" fill="none" aria-hidden="true">
142
+ <path d="M10 4C5 4 1 10 1 10s4 6 9 6 9-6 9-6-4-6-9-6Z" stroke="currentColor" stroke-width="1.6"/>
143
+ <circle cx="10" cy="10" r="3" stroke="currentColor" stroke-width="1.6"/>
144
+ </svg>
145
+ <span class="ic-back-label">Views</span>
146
+ <span class="ic-back-value">{(record.views as number).toLocaleString()}</span>
147
+ </div>
148
+ <div class="ic-back-stat">
149
+ <svg width="14" height="14" viewBox="0 0 20 20" fill="none" aria-hidden="true">
150
+ <path d="M10 17s-8-5-8-10a5 5 0 0 1 8-4 5 5 0 0 1 8 4c0 5-8 10-8 10Z" stroke="currentColor" stroke-width="1.6"/>
151
+ </svg>
152
+ <span class="ic-back-label">Likes</span>
153
+ <span class="ic-back-value">{(record.likes as number).toLocaleString()}</span>
154
+ </div>
155
+ </div>
156
+ </article>
157
+ {/snippet}
158
+ </CardGrid>
159
+
160
+ <style>
161
+ /* ── Shared ───────────────────────────────────────────────────────────── */
162
+
163
+ .ic-card {
164
+ display: flex;
165
+ flex-direction: column;
166
+ height: 100%;
167
+ overflow: hidden;
168
+ border-radius: 10px;
169
+ }
170
+
171
+ .ic-body {
172
+ padding: 12px 14px 14px;
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: 3px;
176
+ flex: 1;
177
+ }
178
+
179
+ /* ── Front face ───────────────────────────────────────────────────────── */
180
+
181
+ .ic-image-wrap {
182
+ position: relative;
183
+ overflow: hidden;
184
+ aspect-ratio: 16 / 10;
185
+ background: var(--cg-border-subtle, #f4f6f9);
186
+ flex-shrink: 0;
187
+ }
188
+
189
+ .ic-image {
190
+ width: 100%;
191
+ height: 100%;
192
+ object-fit: cover;
193
+ display: block;
194
+ transition: transform 300ms ease;
195
+ }
196
+
197
+ .ic-card:hover .ic-image {
198
+ transform: scale(1.04);
199
+ }
200
+
201
+ .ic-category {
202
+ position: absolute;
203
+ top: 10px;
204
+ left: 10px;
205
+ background: rgba(0, 0, 0, 0.48);
206
+ color: #fff;
207
+ font-size: 0.7rem;
208
+ font-weight: 600;
209
+ letter-spacing: 0.04em;
210
+ text-transform: uppercase;
211
+ padding: 3px 8px;
212
+ border-radius: 999px;
213
+ backdrop-filter: blur(4px);
214
+ }
215
+
216
+ .ic-title {
217
+ font-size: 0.9rem;
218
+ font-weight: 600;
219
+ color: var(--cg-text, #0f172a);
220
+ margin: 0;
221
+ white-space: nowrap;
222
+ overflow: hidden;
223
+ text-overflow: ellipsis;
224
+ }
225
+
226
+ .ic-photographer {
227
+ font-size: 0.78rem;
228
+ color: var(--cg-text-muted, #64748b);
229
+ margin: 0;
230
+ }
231
+
232
+ .ic-selected .ic-image-wrap::after {
233
+ content: '';
234
+ position: absolute;
235
+ inset: 0;
236
+ box-shadow: inset 0 0 0 3px var(--cg-accent, #6366f1);
237
+ }
238
+
239
+ /* ── Back face ────────────────────────────────────────────────────────── */
240
+
241
+ .ic-back-image-wrap {
242
+ position: relative;
243
+ overflow: hidden;
244
+ aspect-ratio: 16 / 10;
245
+ flex-shrink: 0;
246
+ }
247
+
248
+ .ic-back-image {
249
+ width: 100%;
250
+ height: 100%;
251
+ object-fit: cover;
252
+ display: block;
253
+ filter: brightness(0.45) saturate(0.7);
254
+ }
255
+
256
+ .ic-back-overlay {
257
+ position: absolute;
258
+ inset: 0;
259
+ display: flex;
260
+ flex-direction: column;
261
+ justify-content: flex-end;
262
+ padding: 12px 14px;
263
+ }
264
+
265
+ .ic-back-title {
266
+ font-size: 0.95rem;
267
+ font-weight: 700;
268
+ color: #fff;
269
+ margin: 0;
270
+ line-height: 1.3;
271
+ }
272
+
273
+ .ic-back-photographer {
274
+ font-size: 0.75rem;
275
+ color: rgba(255,255,255,.75);
276
+ margin: 0;
277
+ }
278
+
279
+ .ic-back-body {
280
+ gap: 10px;
281
+ justify-content: center;
282
+ }
283
+
284
+ .ic-back-stat {
285
+ display: flex;
286
+ align-items: center;
287
+ gap: 8px;
288
+ color: var(--cg-text-muted, #64748b);
289
+ }
290
+
291
+ .ic-back-label {
292
+ font-size: 0.78rem;
293
+ flex: 1;
294
+ }
295
+
296
+ .ic-back-value {
297
+ font-size: 0.82rem;
298
+ font-weight: 600;
299
+ color: var(--cg-text, #0f172a);
300
+ }
301
+
302
+ .ic-selected .ic-back-image-wrap::after {
303
+ content: '';
304
+ position: absolute;
305
+ inset: 0;
306
+ box-shadow: inset 0 0 0 3px var(--cg-accent, #6366f1);
307
+ }
308
+ </style>
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const ImageCardStory: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type ImageCardStory = InstanceType<typeof ImageCardStory>;
18
+ export default ImageCardStory;
@@ -0,0 +1,33 @@
1
+ import type { GridColumnFormat } from '../Types/generic_grid.js';
2
+ export type { GridColumnSortOrder, GridColumnFilters } from '../Types/generic_grid.js';
3
+ export type { GridlerAdapterConfig, GridlerPageResult } from '../Gridler/types.js';
4
+ export interface CardGridColumn {
5
+ id: string;
6
+ title: string;
7
+ /** Field path on the record; defaults to id. Supports dot notation. */
8
+ dataKey?: string;
9
+ format?: GridColumnFormat;
10
+ disableSort?: boolean;
11
+ disableFilter?: boolean;
12
+ disableSearch?: boolean;
13
+ }
14
+ export interface CardSortOption {
15
+ columnId: string;
16
+ label: string;
17
+ }
18
+ export interface CardGridContextMenuItem {
19
+ id: string;
20
+ label: string;
21
+ disabled?: boolean;
22
+ icon?: string;
23
+ kind?: 'item' | 'separator';
24
+ onselect?: (rowData?: Record<string, unknown>) => void;
25
+ }
26
+ /** Add or remove an item from the selection by uniqueID match. */
27
+ export declare function toggleItemInSelection(items: Record<string, unknown>[], item: Record<string, unknown>, uniqueID: string): Record<string, unknown>[];
28
+ /** Return all items between anchor and target indices, inclusive. */
29
+ export declare function rangeSelect(allItems: Record<string, unknown>[], anchorIndex: number, targetIndex: number): Record<string, unknown>[];
30
+ /** Returns true if item is in selectedItems by uniqueID. */
31
+ export declare function isItemSelected(selectedItems: Record<string, unknown>[], item: Record<string, unknown>, uniqueID: string): boolean;
32
+ /** Compute how many cards fit in a row given container width, min card width, and gap. */
33
+ export declare function computeColumnsInRow(containerWidth: number, cardMinWidth: number, gap: number): number;
@@ -0,0 +1,21 @@
1
+ /** Add or remove an item from the selection by uniqueID match. */
2
+ export function toggleItemInSelection(items, item, uniqueID) {
3
+ const idx = items.findIndex((i) => i[uniqueID] === item[uniqueID]);
4
+ if (idx === -1)
5
+ return [...items, item];
6
+ return items.filter((_, i) => i !== idx);
7
+ }
8
+ /** Return all items between anchor and target indices, inclusive. */
9
+ export function rangeSelect(allItems, anchorIndex, targetIndex) {
10
+ const start = Math.min(anchorIndex, targetIndex);
11
+ const end = Math.max(anchorIndex, targetIndex);
12
+ return allItems.slice(start, end + 1);
13
+ }
14
+ /** Returns true if item is in selectedItems by uniqueID. */
15
+ export function isItemSelected(selectedItems, item, uniqueID) {
16
+ return selectedItems.some((s) => s[uniqueID] === item[uniqueID]);
17
+ }
18
+ /** Compute how many cards fit in a row given container width, min card width, and gap. */
19
+ export function computeColumnsInRow(containerWidth, cardMinWidth, gap) {
20
+ return Math.max(1, Math.floor((containerWidth + gap) / (cardMinWidth + gap)));
21
+ }
@@ -0,0 +1,4 @@
1
+ export { default as CardGrid } from './CardGrid.svelte';
2
+ export { default as DefaultCard } from './DefaultCard.svelte';
3
+ export { default as CardGridFilterPanel } from './CardGridFilterPanel.svelte';
4
+ export * from './cardGrid.js';
@@ -0,0 +1,4 @@
1
+ export { default as CardGrid } from './CardGrid.svelte';
2
+ export { default as DefaultCard } from './DefaultCard.svelte';
3
+ export { default as CardGridFilterPanel } from './CardGridFilterPanel.svelte';
4
+ export * from './cardGrid.js';
@@ -1,13 +1,8 @@
1
- <script lang="ts">
2
- import type { ContentEditorProps } from "./types.js";
3
- import ContentEditor from "./ContentEditor.svelte";
4
-
5
- let { value, filename, wopiUrl, discoverUrl, adminKey, userid, username }: ContentEditorProps =
6
- $props();
7
-
8
- let insertText = $state<((text: string) => void) | undefined>();
9
- let insertHtml = $state<((html: string) => void) | undefined>();
10
- let inputText = $state("Hello from Storybook!");
1
+ <script lang="ts">import ContentEditor from "./ContentEditor.svelte";
2
+ let { value, filename, wopiUrl, discoverUrl, adminKey, userid, username } = $props();
3
+ let insertText = $state();
4
+ let insertHtml = $state();
5
+ let inputText = $state("Hello from Storybook!");
11
6
  </script>
12
7
 
13
8
  <div style="display:flex;flex-direction:column;height:100vh;">
@@ -1,53 +1,27 @@
1
- <script lang="ts">
2
- import type { ContentEditorProps } from "./types.js";
3
- import { getEditorType } from "./utils.js";
4
- import MonacoEditor from "./subcomponents/MonacoEditor.svelte";
5
- import ImageViewer from "./subcomponents/ImageViewer.svelte";
6
- import AudioPlayer from "./subcomponents/AudioPlayer.svelte";
7
- import VideoPlayer from "./subcomponents/VideoPlayer.svelte";
8
- import TextEditor from "./subcomponents/TextEditor.svelte";
9
- import MarkdownViewer from "./subcomponents/MarkdownViewer.svelte";
10
- import PdfViewer from "./subcomponents/PdfViewer.svelte";
11
- import EmailViewer from "./subcomponents/EmailViewer.svelte";
12
- import ZipViewer from "./subcomponents/ZipViewer.svelte";
13
- import CollaboraEditor from "./subcomponents/CollaboraEditor.svelte";
14
- import Office365Editor from "./subcomponents/Office365Editor.svelte";
15
- import UnknownFile from "./subcomponents/UnknownFile.svelte";
16
-
17
- let {
18
- value,
19
- filename,
20
- contentType,
21
- mode = "value",
22
- hideHeader = false,
23
- theme,
24
- colorScheme = "auto",
25
- readonly = false,
26
- onChange,
27
- onSave,
28
- onUpload,
29
- insertText = $bindable(),
30
- insertHtml = $bindable(),
31
- wopiUrl,
32
- discoverUrl,
33
- adminKey,
34
- userid,
35
- username,
36
- viewtype,
37
- officeSuite = "collabora",
38
- officeOnlineUrl,
39
- }: ContentEditorProps = $props();
40
-
41
- const editorType = $derived(getEditorType({ filename, contentType }));
42
- const forcedColorScheme = $derived(colorScheme === "auto" ? undefined : colorScheme);
43
-
44
- $effect(() => {
45
- if (mode === "filepointer") {
46
- console.warn(
47
- '[ContentEditor] mode="filepointer" is not yet implemented; falling back to value mode.',
48
- );
49
- }
50
- });
1
+ <script lang="ts">import { getEditorType } from "./utils.js";
2
+ import MonacoEditor from "./subcomponents/MonacoEditor.svelte";
3
+ import ImageViewer from "./subcomponents/ImageViewer.svelte";
4
+ import AudioPlayer from "./subcomponents/AudioPlayer.svelte";
5
+ import VideoPlayer from "./subcomponents/VideoPlayer.svelte";
6
+ import TextEditor from "./subcomponents/TextEditor.svelte";
7
+ import MarkdownViewer from "./subcomponents/MarkdownViewer.svelte";
8
+ import PdfViewer from "./subcomponents/PdfViewer.svelte";
9
+ import EmailViewer from "./subcomponents/EmailViewer.svelte";
10
+ import ZipViewer from "./subcomponents/ZipViewer.svelte";
11
+ import CollaboraEditor from "./subcomponents/CollaboraEditor.svelte";
12
+ import Office365Editor from "./subcomponents/Office365Editor.svelte";
13
+ import UnknownFile from "./subcomponents/UnknownFile.svelte";
14
+ let { value, filename, contentType, mode = "value", hideHeader = false, theme, colorScheme = "auto", readonly = false, onChange, onSave, onUpload, insertText = $bindable(), insertHtml = $bindable(), wopiUrl, discoverUrl, adminKey, userid, username, viewtype, officeSuite = "collabora", officeOnlineUrl } = $props();
15
+ const editorType = $derived(getEditorType({
16
+ filename,
17
+ contentType
18
+ }));
19
+ const forcedColorScheme = $derived(colorScheme === "auto" ? undefined : colorScheme);
20
+ $effect(() => {
21
+ if (mode === "filepointer") {
22
+ console.warn("[ContentEditor] mode=\"filepointer\" is not yet implemented; falling back to value mode.");
23
+ }
24
+ });
51
25
  </script>
52
26
 
53
27
  <div
@@ -1,20 +1,20 @@
1
- <script lang="ts">
2
- import type { AudioPlayerProps } from '../types.js';
3
- import IconAlertCircle from '../../Icons/IconAlertCircle.svelte';
4
- let { value, filename }: AudioPlayerProps = $props();
5
-
6
- let src = $state('');
7
- let srcType = $state<string | undefined>(undefined);
8
- let err = $state<string | null>(null);
9
-
10
- $effect(() => {
11
- if (!value) { src = ''; srcType = undefined; return; }
12
- err = null;
13
- const url = URL.createObjectURL(value);
14
- src = url;
15
- srcType = value.type || undefined;
16
- return () => URL.revokeObjectURL(url);
17
- });
1
+ <script lang="ts">import IconAlertCircle from "../../Icons/IconAlertCircle.svelte";
2
+ let { value, filename } = $props();
3
+ let src = $state("");
4
+ let srcType = $state(undefined);
5
+ let err = $state(null);
6
+ $effect(() => {
7
+ if (!value) {
8
+ src = "";
9
+ srcType = undefined;
10
+ return;
11
+ }
12
+ err = null;
13
+ const url = URL.createObjectURL(value);
14
+ src = url;
15
+ srcType = value.type || undefined;
16
+ return () => URL.revokeObjectURL(url);
17
+ });
18
18
  </script>
19
19
 
20
20
  <div class="flex h-full w-full flex-col items-center justify-center gap-4 p-6">