@warkypublic/svelix 0.1.46 → 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 (97) 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 +443 -614
  13. package/dist/components/CardGrid/CardGridFilterPanel.svelte +111 -90
  14. package/dist/components/CardGrid/DefaultCard.svelte +80 -96
  15. package/dist/components/CardGrid/ImageCardStory.svelte +87 -36
  16. package/dist/components/ContentEditor/CollaboraInsertTextDemo.svelte +5 -10
  17. package/dist/components/ContentEditor/ContentEditor.svelte +24 -50
  18. package/dist/components/ContentEditor/subcomponents/AudioPlayer.svelte +17 -17
  19. package/dist/components/ContentEditor/subcomponents/CollaboraEditor.svelte +244 -309
  20. package/dist/components/ContentEditor/subcomponents/EmailViewer.svelte +2 -3
  21. package/dist/components/ContentEditor/subcomponents/ImageViewer.svelte +14 -15
  22. package/dist/components/ContentEditor/subcomponents/MarkdownViewer.svelte +74 -90
  23. package/dist/components/ContentEditor/subcomponents/MonacoEditor.svelte +75 -103
  24. package/dist/components/ContentEditor/subcomponents/Office365Editor.svelte +234 -297
  25. package/dist/components/ContentEditor/subcomponents/PdfViewer.svelte +14 -20
  26. package/dist/components/ContentEditor/subcomponents/TextEditor.svelte +122 -150
  27. package/dist/components/ContentEditor/subcomponents/UnknownFile.svelte +105 -126
  28. package/dist/components/ContentEditor/subcomponents/VideoPlayer.svelte +17 -17
  29. package/dist/components/ContentEditor/subcomponents/ZipViewer.svelte +2 -3
  30. package/dist/components/ErrorBoundary/ErrorBoundary.svelte +41 -58
  31. package/dist/components/ErrorBoundary/ErrorBoundaryPreview.svelte +8 -16
  32. package/dist/components/Former/Former.svelte +306 -424
  33. package/dist/components/Former/FormerButtonArea.svelte +17 -68
  34. package/dist/components/Former/FormerDrawer.svelte +26 -78
  35. package/dist/components/Former/FormerDrawerPreview.svelte +99 -89
  36. package/dist/components/Former/FormerModal.svelte +24 -70
  37. package/dist/components/Former/FormerModalPreview.svelte +99 -89
  38. package/dist/components/Former/FormerPreview.svelte +76 -78
  39. package/dist/components/Former/FormerRestApiPreview.svelte +55 -48
  40. package/dist/components/FormerControllers/ButtonCtrl.svelte +13 -44
  41. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrl.svelte +280 -445
  42. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlCalendar.svelte +95 -136
  43. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlPickerPanel.svelte +3 -62
  44. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlTimeFields.svelte +143 -217
  45. package/dist/components/FormerControllers/IconButtonCtrl.svelte +13 -42
  46. package/dist/components/FormerControllers/InlineWrapper.svelte +12 -41
  47. package/dist/components/FormerControllers/InlineWrapperPreview.svelte +4 -26
  48. package/dist/components/FormerControllers/NativeSelectCtrl.svelte +3 -29
  49. package/dist/components/FormerControllers/NumberInputCtrl.svelte +9 -35
  50. package/dist/components/FormerControllers/PasswordInputCtrl.svelte +4 -23
  51. package/dist/components/FormerControllers/SwitchCtrl.svelte +3 -20
  52. package/dist/components/FormerControllers/TextAreaCtrl.svelte +3 -24
  53. package/dist/components/FormerControllers/TextInputCtrl.svelte +3 -24
  54. package/dist/components/GlobalStateStore/GlobalStateStoreProvider.svelte +73 -120
  55. package/dist/components/Gridler/components/Gridler.svelte +338 -442
  56. package/dist/components/Gridler/components/GridlerCanvas.svelte +720 -1115
  57. package/dist/components/Gridler/components/GridlerEditor.svelte +2 -15
  58. package/dist/components/Gridler/components/GridlerFull.svelte +520 -841
  59. package/dist/components/Gridler/components/GridlerFull.svelte.d.ts +1 -1
  60. package/dist/components/Gridler/components/GridlerFullWithFormerPreview.svelte +194 -147
  61. package/dist/components/Gridler/components/GridlerSearch.svelte +7 -16
  62. package/dist/components/Gridler/components/GridlerSearchToggle.svelte +7 -19
  63. package/dist/components/Gridler/types.d.ts +1 -1
  64. package/dist/components/Icons/IconAdd.svelte +1 -3
  65. package/dist/components/Icons/IconAlertCircle.svelte +1 -3
  66. package/dist/components/Icons/IconAlertTriangle.svelte +1 -3
  67. package/dist/components/Icons/IconCamera.svelte +1 -3
  68. package/dist/components/Icons/IconClose.svelte +1 -3
  69. package/dist/components/Icons/IconEdit.svelte +1 -3
  70. package/dist/components/Icons/IconFilter.svelte +1 -3
  71. package/dist/components/Icons/IconSearch.svelte +1 -3
  72. package/dist/components/Icons/IconSort.svelte +1 -3
  73. package/dist/components/Icons/IconTrash.svelte +1 -3
  74. package/dist/components/Portal/Portal.svelte +14 -38
  75. package/dist/components/Screenshot/Screenshot.svelte +7 -13
  76. package/dist/components/Svark/Svark.svelte +680 -852
  77. package/dist/components/Svark/SvarkContextMenu.svelte +44 -63
  78. package/dist/components/Svark/SvarkInfiniteLoader.svelte +2 -6
  79. package/dist/components/Svark/SvarkPager.svelte +2 -28
  80. package/dist/components/Svark/SvarkSelectionDemo.svelte +4 -8
  81. package/dist/components/Svark/SvarkTopBar.svelte +9 -74
  82. package/dist/components/SvarkGrid/SvarkGrid.svelte +877 -1123
  83. package/dist/components/SvarkGrid/components/SvarkColumnFilterForm.svelte +45 -58
  84. package/dist/components/SvarkGrid/components/SvarkContextMenu.svelte +44 -63
  85. package/dist/components/SvarkGrid/components/SvarkHeaderFilterCell.svelte +41 -75
  86. package/dist/components/SvarkGrid/components/SvarkInfiniteLoader.svelte +2 -6
  87. package/dist/components/SvarkGrid/components/SvarkPager.svelte +2 -28
  88. package/dist/components/SvarkGrid/components/SvarkSearchPopover.svelte +8 -16
  89. package/dist/components/SvarkGrid/components/SvarkTopBar.svelte +6 -62
  90. package/dist/components/SvarkGrid/internal/SvarkGridView.svelte +345 -507
  91. package/dist/components/VTree/VTree.svelte +349 -431
  92. package/dist/components/VTree/VTreeContextMenu.svelte +21 -33
  93. package/dist/components/VTree/VTreeEventsDemo.svelte +48 -58
  94. package/dist/components/VTree/VTreeRow.svelte +13 -65
  95. package/dist/components/VTree/VTreeSearch.svelte +6 -13
  96. package/dist/components/VTree/VTreeVirtualViewport.svelte +37 -106
  97. package/package.json +30 -29
@@ -1,93 +1,77 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte';
3
- import { Carta, Markdown, MarkdownEditor } from 'carta-md';
4
- import { code } from '@cartamd/plugin-code';
5
- import { anchor } from '@cartamd/plugin-anchor';
6
- import { attachment } from '@cartamd/plugin-attachment';
7
- import { emoji } from '@cartamd/plugin-emoji';
8
- import { math } from '@cartamd/plugin-math';
9
- import { sanitize } from 'isomorphic-dompurify';
10
- import 'carta-md/default.css';
11
- import '@cartamd/plugin-code/default.css';
12
- import '@cartamd/plugin-anchor/default.css';
13
- import '@cartamd/plugin-emoji/default.css';
14
- import '@cartamd/plugin-attachment/default.css';
15
- import 'katex/dist/katex.min.css';
16
- import 'github-markdown-css/github-markdown.css';
17
- import { blobToString, watchSkeletonDarkMode } from '../utils.js';
18
- import type { MarkdownViewerProps } from '../types.js';
19
-
20
- let { value, readonly = false, onChange, onUpload, insertText = $bindable(), insertHtml = $bindable() }: MarkdownViewerProps = $props();
21
-
22
- let carta = $state<Carta | undefined>(undefined);
23
- let hostEl = $state<HTMLDivElement | undefined>(undefined);
24
- let isDark = $state(false);
25
-
26
- onMount(() => {
27
- carta = new Carta({
28
- sanitizer: sanitize,
29
- extensions: [
30
- code(),
31
- anchor(),
32
- emoji(),
33
- math(),
34
- ...(onUpload ? [attachment({ upload: onUpload })] : []),
35
- ],
36
- });
37
- });
38
-
39
- onMount(() => {
40
- const stopWatchingTheme = watchSkeletonDarkMode(hostEl, (nextIsDark) => {
41
- isDark = nextIsDark;
42
- });
43
- return () => stopWatchingTheme();
44
- });
45
-
46
- let text = $state('');
47
- let lastBlobText = $state('');
48
-
49
- $effect(() => {
50
- blobToString(value).then((v) => {
51
- lastBlobText = v;
52
- if (text !== v) text = v;
53
- });
54
- });
55
-
56
- $effect(() => {
57
- if (!readonly && text !== lastBlobText) {
58
- onChange?.(new Blob([text]));
59
- }
60
- });
61
-
62
- $effect(() => {
63
- if (!carta) {
64
- insertText = undefined;
65
- insertHtml = undefined;
66
- return;
67
- }
68
- type EditorViewLike = {
69
- state: { selection: { main: { from: number; to: number } } };
70
- dispatch: (payload: {
71
- changes: { from: number; to: number; insert: string };
72
- selection: { anchor: number };
73
- }) => void;
74
- focus: () => void;
75
- };
76
- type CartaEditorLike = Carta & { editor?: { editorView?: EditorViewLike } };
77
-
78
- function insertAtCursor(content: string): void {
79
- const view = (carta as CartaEditorLike).editor?.editorView;
80
- if (!view) return;
81
- const { from, to } = view.state.selection.main;
82
- view.dispatch({
83
- changes: { from, to, insert: content },
84
- selection: { anchor: from + content.length },
85
- });
86
- view.focus();
87
- }
88
- insertText = insertAtCursor;
89
- insertHtml = insertAtCursor;
90
- });
1
+ <script lang="ts">import { onMount } from "svelte";
2
+ import { Carta, Markdown, MarkdownEditor } from "carta-md";
3
+ import { code } from "@cartamd/plugin-code";
4
+ import { anchor } from "@cartamd/plugin-anchor";
5
+ import { attachment } from "@cartamd/plugin-attachment";
6
+ import { emoji } from "@cartamd/plugin-emoji";
7
+ import { math } from "@cartamd/plugin-math";
8
+ import { sanitize } from "isomorphic-dompurify";
9
+ import "carta-md/default.css";
10
+ import "@cartamd/plugin-code/default.css";
11
+ import "@cartamd/plugin-anchor/default.css";
12
+ import "@cartamd/plugin-emoji/default.css";
13
+ import "@cartamd/plugin-attachment/default.css";
14
+ import "katex/dist/katex.min.css";
15
+ import "github-markdown-css/github-markdown.css";
16
+ import { blobToString, watchSkeletonDarkMode } from "../utils.js";
17
+ let { value, readonly = false, onChange, onUpload, insertText = $bindable(), insertHtml = $bindable() } = $props();
18
+ let carta = $state(undefined);
19
+ let hostEl = $state(undefined);
20
+ let isDark = $state(false);
21
+ onMount(() => {
22
+ carta = new Carta({
23
+ sanitizer: sanitize,
24
+ extensions: [
25
+ code(),
26
+ anchor(),
27
+ emoji(),
28
+ math(),
29
+ ...onUpload ? [attachment({ upload: onUpload })] : []
30
+ ]
31
+ });
32
+ });
33
+ onMount(() => {
34
+ const stopWatchingTheme = watchSkeletonDarkMode(hostEl, (nextIsDark) => {
35
+ isDark = nextIsDark;
36
+ });
37
+ return () => stopWatchingTheme();
38
+ });
39
+ let text = $state("");
40
+ let lastBlobText = $state("");
41
+ $effect(() => {
42
+ blobToString(value).then((v) => {
43
+ lastBlobText = v;
44
+ if (text !== v) text = v;
45
+ });
46
+ });
47
+ $effect(() => {
48
+ if (!readonly && text !== lastBlobText) {
49
+ onChange?.(new Blob([text]));
50
+ }
51
+ });
52
+ $effect(() => {
53
+ if (!carta) {
54
+ insertText = undefined;
55
+ insertHtml = undefined;
56
+ return;
57
+ }
58
+ function insertAtCursor(content) {
59
+ const view = carta.editor?.editorView;
60
+ if (!view) return;
61
+ const { from, to } = view.state.selection.main;
62
+ view.dispatch({
63
+ changes: {
64
+ from,
65
+ to,
66
+ insert: content
67
+ },
68
+ selection: { anchor: from + content.length }
69
+ });
70
+ view.focus();
71
+ }
72
+ insertText = insertAtCursor;
73
+ insertHtml = insertAtCursor;
74
+ });
91
75
  </script>
92
76
 
93
77
  <div
@@ -1,106 +1,78 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte';
3
- import * as monaco from 'monaco-editor';
4
- import {
5
- getLangFromExt,
6
- getExtFromFilename,
7
- blobToString,
8
- watchSkeletonDarkMode,
9
- } from '../utils.js';
10
- import type { MonacoEditorProps } from '../types.js';
11
-
12
- let {
13
- value,
14
- filename,
15
- language,
16
- readonly = false,
17
- height = '100%',
18
- onChange,
19
- onSave,
20
- insertText = $bindable(),
21
- insertHtml = $bindable(),
22
- }: MonacoEditorProps = $props();
23
-
24
- let container = $state<HTMLDivElement | undefined>(undefined);
25
- let editor: monaco.editor.IStandaloneCodeEditor | undefined;
26
- let changeGuard = false;
27
- let isDark = $state(false);
28
-
29
- const lang = $derived(
30
- language ?? getLangFromExt(filename ? getExtFromFilename(filename) : '') ?? 'plaintext'
31
- );
32
-
33
- onMount(() => {
34
- const stopWatchingTheme = watchSkeletonDarkMode(container, (nextIsDark) => {
35
- isDark = nextIsDark;
36
- });
37
-
38
- if (!container) return;
39
- editor = monaco.editor.create(container, {
40
- value: '',
41
- language: lang,
42
- readOnly: readonly,
43
- theme: isDark ? 'vs-dark' : 'vs',
44
- automaticLayout: true,
45
- });
46
-
47
- const createdEditor = editor;
48
- createdEditor.onDidChangeModelContent(() => {
49
- if (changeGuard) return;
50
- const content = createdEditor.getValue();
51
- onChange?.(new Blob([content]));
52
- });
53
-
54
- createdEditor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, () => {
55
- if (!onSave) return;
56
- onSave(new Blob([createdEditor.getValue()]));
57
- });
58
-
59
- function doInsertText(text: string): void {
60
- const sel = editor?.getSelection();
61
- if (!sel) return;
62
- editor?.executeEdits('insertText', [{ range: sel, text, forceMoveMarkers: true }]);
63
- editor?.focus();
64
- }
65
- insertText = doInsertText;
66
- insertHtml = (html: string) => doInsertText(html.replace(/<[^>]+>/g, ''));
67
-
68
- return () => {
69
- stopWatchingTheme();
70
- insertText = undefined;
71
- insertHtml = undefined;
72
- editor?.dispose();
73
- };
74
- });
75
-
76
- // Sync incoming Blob → editor text
77
- $effect(() => {
78
- if (!editor || !value) return;
79
- const currentEditor = editor;
80
- blobToString(value).then((text) => {
81
- if (currentEditor.getValue() !== text) {
82
- changeGuard = true;
83
- currentEditor.setValue(text);
84
- changeGuard = false;
85
- }
86
- });
87
- });
88
-
89
- // Sync language
90
- $effect(() => {
91
- const model = editor?.getModel();
92
- if (model && lang) monaco.editor.setModelLanguage(model, lang);
93
- });
94
-
95
- // Sync readonly
96
- $effect(() => {
97
- editor?.updateOptions({ readOnly: readonly });
98
- });
99
-
100
- // Sync theme
101
- $effect(() => {
102
- monaco.editor.setTheme(isDark ? 'vs-dark' : 'vs');
103
- });
1
+ <script lang="ts">import { onMount } from "svelte";
2
+ import * as monaco from "monaco-editor";
3
+ import { getLangFromExt, getExtFromFilename, blobToString, watchSkeletonDarkMode } from "../utils.js";
4
+ let { value, filename, language, readonly = false, height = "100%", onChange, onSave, insertText = $bindable(), insertHtml = $bindable() } = $props();
5
+ let container = $state(undefined);
6
+ let editor;
7
+ let changeGuard = false;
8
+ let isDark = $state(false);
9
+ const lang = $derived(language ?? getLangFromExt(filename ? getExtFromFilename(filename) : "") ?? "plaintext");
10
+ onMount(() => {
11
+ const stopWatchingTheme = watchSkeletonDarkMode(container, (nextIsDark) => {
12
+ isDark = nextIsDark;
13
+ });
14
+ if (!container) return;
15
+ editor = monaco.editor.create(container, {
16
+ value: "",
17
+ language: lang,
18
+ readOnly: readonly,
19
+ theme: isDark ? "vs-dark" : "vs",
20
+ automaticLayout: true
21
+ });
22
+ const createdEditor = editor;
23
+ createdEditor.onDidChangeModelContent(() => {
24
+ if (changeGuard) return;
25
+ const content = createdEditor.getValue();
26
+ onChange?.(new Blob([content]));
27
+ });
28
+ createdEditor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, () => {
29
+ if (!onSave) return;
30
+ onSave(new Blob([createdEditor.getValue()]));
31
+ });
32
+ function doInsertText(text) {
33
+ const sel = editor?.getSelection();
34
+ if (!sel) return;
35
+ editor?.executeEdits("insertText", [{
36
+ range: sel,
37
+ text,
38
+ forceMoveMarkers: true
39
+ }]);
40
+ editor?.focus();
41
+ }
42
+ insertText = doInsertText;
43
+ insertHtml = (html) => doInsertText(html.replace(/<[^>]+>/g, ""));
44
+ return () => {
45
+ stopWatchingTheme();
46
+ insertText = undefined;
47
+ insertHtml = undefined;
48
+ editor?.dispose();
49
+ };
50
+ });
51
+ // Sync incoming Blob → editor text
52
+ $effect(() => {
53
+ if (!editor || !value) return;
54
+ const currentEditor = editor;
55
+ blobToString(value).then((text) => {
56
+ if (currentEditor.getValue() !== text) {
57
+ changeGuard = true;
58
+ currentEditor.setValue(text);
59
+ changeGuard = false;
60
+ }
61
+ });
62
+ });
63
+ // Sync language
64
+ $effect(() => {
65
+ const model = editor?.getModel();
66
+ if (model && lang) monaco.editor.setModelLanguage(model, lang);
67
+ });
68
+ // Sync readonly
69
+ $effect(() => {
70
+ editor?.updateOptions({ readOnly: readonly });
71
+ });
72
+ // Sync theme
73
+ $effect(() => {
74
+ monaco.editor.setTheme(isDark ? "vs-dark" : "vs");
75
+ });
104
76
  </script>
105
77
 
106
78
  <div