@warkypublic/svelix 0.1.46 → 0.2.1

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 (129) 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 +492 -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 +489 -614
  13. package/dist/components/CardGrid/CardGrid.svelte.d.ts +4 -0
  14. package/dist/components/CardGrid/CardGridFilterPanel.svelte +111 -90
  15. package/dist/components/CardGrid/DefaultCard.svelte +86 -97
  16. package/dist/components/CardGrid/DefaultCard.svelte.d.ts +1 -0
  17. package/dist/components/CardGrid/ImageCardStory.svelte +87 -36
  18. package/dist/components/CardGrid/cardGrid.d.ts +24 -0
  19. package/dist/components/CardGrid/cardGrid.js +20 -0
  20. package/dist/components/ContentEditor/CollaboraInsertTextDemo.svelte +5 -10
  21. package/dist/components/ContentEditor/ContentEditor.svelte +24 -50
  22. package/dist/components/ContentEditor/subcomponents/AudioPlayer.svelte +17 -17
  23. package/dist/components/ContentEditor/subcomponents/CollaboraEditor.svelte +244 -309
  24. package/dist/components/ContentEditor/subcomponents/EmailViewer.svelte +2 -3
  25. package/dist/components/ContentEditor/subcomponents/ImageViewer.svelte +14 -15
  26. package/dist/components/ContentEditor/subcomponents/MarkdownViewer.svelte +74 -90
  27. package/dist/components/ContentEditor/subcomponents/MonacoEditor.svelte +75 -103
  28. package/dist/components/ContentEditor/subcomponents/Office365Editor.svelte +234 -297
  29. package/dist/components/ContentEditor/subcomponents/PdfViewer.svelte +14 -20
  30. package/dist/components/ContentEditor/subcomponents/TextEditor.svelte +122 -150
  31. package/dist/components/ContentEditor/subcomponents/UnknownFile.svelte +105 -126
  32. package/dist/components/ContentEditor/subcomponents/VideoPlayer.svelte +17 -17
  33. package/dist/components/ContentEditor/subcomponents/ZipViewer.svelte +2 -3
  34. package/dist/components/ErrorBoundary/ErrorBoundary.svelte +41 -58
  35. package/dist/components/ErrorBoundary/ErrorBoundaryPreview.svelte +8 -16
  36. package/dist/components/Former/Former.svelte +306 -424
  37. package/dist/components/Former/FormerButtonArea.svelte +17 -68
  38. package/dist/components/Former/FormerDrawer.svelte +16 -80
  39. package/dist/components/Former/FormerDrawerPreview.svelte +99 -89
  40. package/dist/components/Former/FormerModal.svelte +16 -74
  41. package/dist/components/Former/FormerModalPreview.svelte +99 -89
  42. package/dist/components/Former/FormerPreview.svelte +76 -78
  43. package/dist/components/Former/FormerRestApiPreview.svelte +55 -48
  44. package/dist/components/Former/formerOverlayHelpers.svelte.d.ts +11 -0
  45. package/dist/components/Former/formerOverlayHelpers.svelte.js +38 -0
  46. package/dist/components/Former/index.d.ts +1 -0
  47. package/dist/components/Former/index.js +1 -0
  48. package/dist/components/FormerControllers/ButtonCtrl.svelte +13 -49
  49. package/dist/components/FormerControllers/CtrlFieldShell.svelte +15 -0
  50. package/dist/components/FormerControllers/CtrlFieldShell.svelte.d.ts +12 -0
  51. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrl.svelte +285 -457
  52. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlCalendar.svelte +95 -136
  53. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlPickerPanel.svelte +3 -62
  54. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlTimeFields.svelte +143 -217
  55. package/dist/components/FormerControllers/IconButtonCtrl.svelte +13 -47
  56. package/dist/components/FormerControllers/InlineWrapper.svelte +12 -41
  57. package/dist/components/FormerControllers/InlineWrapperPreview.svelte +4 -26
  58. package/dist/components/FormerControllers/NativeSelectCtrl.svelte +7 -39
  59. package/dist/components/FormerControllers/NumberInputCtrl.svelte +21 -43
  60. package/dist/components/FormerControllers/PasswordInputCtrl.svelte +8 -33
  61. package/dist/components/FormerControllers/SwitchCtrl.svelte +4 -20
  62. package/dist/components/FormerControllers/TextAreaCtrl.svelte +7 -34
  63. package/dist/components/FormerControllers/TextInputCtrl.svelte +7 -34
  64. package/dist/components/FormerControllers/ctrlLoading.svelte.d.ts +8 -0
  65. package/dist/components/FormerControllers/ctrlLoading.svelte.js +43 -0
  66. package/dist/components/FormerControllers/index.d.ts +2 -0
  67. package/dist/components/FormerControllers/index.js +2 -0
  68. package/dist/components/FormerControllers/utils.d.ts +1 -0
  69. package/dist/components/FormerControllers/utils.js +3 -0
  70. package/dist/components/GlobalStateStore/GlobalStateStoreProvider.svelte +73 -120
  71. package/dist/components/Gridler/components/Gridler.svelte +344 -442
  72. package/dist/components/Gridler/components/GridlerCanvas.svelte +720 -1115
  73. package/dist/components/Gridler/components/GridlerEditor.svelte +2 -15
  74. package/dist/components/Gridler/components/GridlerFull.svelte +521 -841
  75. package/dist/components/Gridler/components/GridlerFull.svelte.d.ts +1 -1
  76. package/dist/components/Gridler/components/GridlerFullWithFormerPreview.svelte +194 -147
  77. package/dist/components/Gridler/components/GridlerSearch.svelte +7 -16
  78. package/dist/components/Gridler/components/GridlerSearchToggle.svelte +7 -19
  79. package/dist/components/Gridler/types.d.ts +1 -1
  80. package/dist/components/Gridler/utils/serverPaging.d.ts +1 -0
  81. package/dist/components/Gridler/utils/serverPaging.js +7 -0
  82. package/dist/components/Icons/IconAdd.svelte +1 -3
  83. package/dist/components/Icons/IconAlertCircle.svelte +1 -3
  84. package/dist/components/Icons/IconAlertTriangle.svelte +1 -3
  85. package/dist/components/Icons/IconCamera.svelte +1 -3
  86. package/dist/components/Icons/IconClose.svelte +1 -3
  87. package/dist/components/Icons/IconEdit.svelte +1 -3
  88. package/dist/components/Icons/IconFilter.svelte +1 -3
  89. package/dist/components/Icons/IconSearch.svelte +1 -3
  90. package/dist/components/Icons/IconSort.svelte +1 -3
  91. package/dist/components/Icons/IconTrash.svelte +1 -3
  92. package/dist/components/Portal/Portal.svelte +14 -38
  93. package/dist/components/Screenshot/Screenshot.svelte +7 -13
  94. package/dist/components/Svark/Svark.svelte +680 -852
  95. package/dist/components/Svark/SvarkContextMenu.svelte +44 -63
  96. package/dist/components/Svark/SvarkInfiniteLoader.svelte +2 -6
  97. package/dist/components/Svark/SvarkPager.svelte +2 -28
  98. package/dist/components/Svark/SvarkSelectionDemo.svelte +4 -8
  99. package/dist/components/Svark/SvarkTopBar.svelte +9 -74
  100. package/dist/components/SvarkGrid/SvarkGrid.svelte +877 -1123
  101. package/dist/components/SvarkGrid/components/SvarkColumnFilterForm.svelte +45 -58
  102. package/dist/components/SvarkGrid/components/SvarkContextMenu.svelte +44 -63
  103. package/dist/components/SvarkGrid/components/SvarkHeaderFilterCell.svelte +41 -75
  104. package/dist/components/SvarkGrid/components/SvarkInfiniteLoader.svelte +2 -6
  105. package/dist/components/SvarkGrid/components/SvarkPager.svelte +2 -28
  106. package/dist/components/SvarkGrid/components/SvarkSearchPopover.svelte +8 -16
  107. package/dist/components/SvarkGrid/components/SvarkTopBar.svelte +6 -62
  108. package/dist/components/SvarkGrid/internal/SvarkGridView.svelte +345 -507
  109. package/dist/components/VTree/VTree.svelte +454 -431
  110. package/dist/components/VTree/VTree.utils.d.ts +23 -0
  111. package/dist/components/VTree/VTree.utils.js +73 -0
  112. package/dist/components/VTree/VTreeContextMenu.svelte +21 -33
  113. package/dist/components/VTree/VTreeControlledSelectionDemo.svelte +20 -0
  114. package/dist/components/VTree/VTreeControlledSelectionDemo.svelte.d.ts +18 -0
  115. package/dist/components/VTree/VTreeCustomizationDemo.svelte +23 -0
  116. package/dist/components/VTree/VTreeCustomizationDemo.svelte.d.ts +18 -0
  117. package/dist/components/VTree/VTreeEventsDemo.svelte +48 -58
  118. package/dist/components/VTree/VTreeInteractionDemo.svelte +29 -0
  119. package/dist/components/VTree/VTreeInteractionDemo.svelte.d.ts +18 -0
  120. package/dist/components/VTree/VTreeMultiSelectDemo.svelte +27 -0
  121. package/dist/components/VTree/VTreeMultiSelectDemo.svelte.d.ts +18 -0
  122. package/dist/components/VTree/VTreeRow.svelte +77 -115
  123. package/dist/components/VTree/VTreeRow.svelte.d.ts +34 -18
  124. package/dist/components/VTree/VTreeSearch.svelte +6 -13
  125. package/dist/components/VTree/VTreeVirtualViewport.svelte +54 -143
  126. package/dist/components/VTree/VTreeVirtualViewport.svelte.d.ts +35 -18
  127. package/dist/components/VTree/types.d.ts +39 -1
  128. package/llm/COMPONENT_GUIDE.md +25 -0
  129. package/package.json +51 -50
@@ -130,6 +130,30 @@ The project now contains a mix of simple components, folder-based component modu
130
130
  </script>
131
131
  ```
132
132
 
133
+ **⚠️ Guardrail — never read and write the same `$state` inside one effect**
134
+
135
+ ```svelte
136
+ <script lang="ts">
137
+ // ❌ Infinite loop: .filter() always returns a NEW array reference, even
138
+ // when nothing was removed. The effect tracks its own write target, sees
139
+ // a "changed" value on every run, and reruns forever — Svelte throws
140
+ // effect_update_depth_exceeded ("reads and writes the same piece of state").
141
+ $effect(() => {
142
+ selected = selected.filter((item) => validIds.has(item.id));
143
+ });
144
+
145
+ // ✅ Read the current value via untrack() so the effect doesn't depend on
146
+ // its own write target, and only write when something actually changed.
147
+ $effect(() => {
148
+ const current = untrack(() => selected);
149
+ const next = current.filter((item) => validIds.has(item.id));
150
+ if (next.length !== current.length) selected = next;
151
+ });
152
+ </script>
153
+ ```
154
+
155
+ Same hazard applies to any derived-and-reassigned value, not just `.filter()`: object/array spreads (`{...x}`, `[...x]`), `new Set(x)` / `new Map(x)`, `.map()`, `.sort()` copies — anything producing a new reference even when the content is unchanged. Real-world case: `CardGrid.svelte`'s "Reconcile selection" effect.
156
+
133
157
  #### Snippet - Children/Slots
134
158
  ```svelte
135
159
  <script lang="ts">
@@ -1211,6 +1235,7 @@ Before considering a component complete:
1211
1235
  - [ ] Focus management is correct
1212
1236
  - [ ] Documented in stories (autodocs)
1213
1237
  - [ ] Re-exported from `src/lib/components/index.ts` and therefore reachable from `src/lib/index.ts`
1238
+ - [ ] No `$effect` reads and writes the same `$state` without `untrack()` / a change-guard (see $effect Guardrail above)
1214
1239
 
1215
1240
  ## Advanced Patterns
1216
1241
 
package/package.json CHANGED
@@ -1,26 +1,8 @@
1
1
  {
2
2
  "name": "@warkypublic/svelix",
3
- "version": "0.1.46",
3
+ "version": "0.2.1",
4
4
  "description": "Svelte 5 component library with Skeleton UI and Tailwind CSS",
5
5
  "license": "Apache-2.0",
6
- "scripts": {
7
- "dev": "vite dev",
8
- "build": "vite build && pnpm run package",
9
- "preview": "vite preview",
10
- "package": "svelte-kit sync && svelte-package && mkdir -p dist/css && cp src/lib/css/tailwind-source.css dist/css/tailwind-source.css && publint",
11
- "prepublishOnly": "npm run package",
12
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
13
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
14
- "storybook": "storybook dev -p 6006",
15
- "build-storybook": "storybook build",
16
- "lint": "eslint .",
17
- "lint:fix": "eslint . --fix",
18
- "test": "vitest run --project unit",
19
- "test:unit": "vitest run --project unit",
20
- "test:watch": "vitest --project unit",
21
- "test:e2e": "playwright test",
22
- "test:e2e:ui": "playwright test --ui"
23
- },
24
6
  "exports": {
25
7
  ".": {
26
8
  "types": "./dist/index.d.ts",
@@ -43,44 +25,45 @@
43
25
  "svelte": "^5.0.0"
44
26
  },
45
27
  "devDependencies": {
46
- "@changesets/cli": "^2.31.0",
28
+ "@changesets/cli": "^2.31.1",
47
29
  "@chromatic-com/storybook": "^5.2.1",
48
30
  "@eslint/compat": "^2.1.0",
49
31
  "@eslint/js": "^10.0.1",
50
- "@playwright/test": "^1.60.0",
51
- "@sentry/svelte": "^10.53.1",
32
+ "@playwright/test": "^1.61.1",
33
+ "@sentry/svelte": "^10.66.0",
52
34
  "@skeletonlabs/skeleton": "^4.15.2",
53
35
  "@skeletonlabs/skeleton-svelte": "^4.15.2",
54
- "@storybook/addon-a11y": "^10.4.0",
55
- "@storybook/addon-docs": "^10.4.0",
36
+ "@storybook/addon-a11y": "^10.5.2",
37
+ "@storybook/addon-docs": "^10.5.2",
56
38
  "@storybook/addon-svelte-csf": "^5.1.2",
57
- "@storybook/addon-vitest": "^10.4.0",
58
- "@storybook/sveltekit": "^10.4.0",
39
+ "@storybook/addon-vitest": "^10.5.2",
40
+ "@storybook/sveltekit": "^10.5.2",
59
41
  "@storybook/test": "^8.6.15",
60
42
  "@sveltejs/adapter-auto": "^7.0.1",
61
- "@sveltejs/kit": "^2.60.1",
62
- "@sveltejs/package": "^2.5.7",
63
- "@sveltejs/vite-plugin-svelte": "^7.1.2",
64
- "@tailwindcss/vite": "^4.3.0",
65
- "@tanstack/svelte-virtual": "^3.13.24",
66
- "@types/node": "^25.8.0",
67
- "@vitest/browser-playwright": "^4.1.6",
68
- "@vitest/coverage-v8": "^4.1.6",
69
- "eslint": "^10.4.0",
70
- "eslint-plugin-svelte": "^3.17.1",
71
- "globals": "^17.6.0",
72
- "playwright": "^1.60.0",
43
+ "@sveltejs/kit": "^2.69.3",
44
+ "@sveltejs/package": "^2.5.8",
45
+ "@sveltejs/vite-plugin-svelte": "^7.2.0",
46
+ "@tailwindcss/vite": "^4.3.3",
47
+ "@tanstack/svelte-virtual": "^3.13.32",
48
+ "@types/node": "^26.1.1",
49
+ "@vitest/browser-playwright": "^4.1.10",
50
+ "@vitest/coverage-v8": "^4.1.10",
51
+ "esbuild": "^0.28.1",
52
+ "eslint": "^10.7.0",
53
+ "eslint-plugin-svelte": "^3.20.0",
54
+ "globals": "^17.7.0",
55
+ "playwright": "^1.61.1",
73
56
  "publint": "^0.3.21",
74
- "storybook": "^10.4.0",
75
- "svelte": "^5.55.7",
76
- "svelte-check": "^4.4.8",
77
- "tailwindcss": "^4.3.0",
57
+ "storybook": "^10.5.2",
58
+ "svelte": "^5.56.5",
59
+ "svelte-check": "^4.7.3",
60
+ "tailwindcss": "^4.3.3",
78
61
  "tslib": "^2.8.1",
79
62
  "typescript": "^6.0.3",
80
- "typescript-eslint": "^8.59.3",
81
- "vite": "^8.0.13",
63
+ "typescript-eslint": "^8.64.0",
64
+ "vite": "^8.1.5",
82
65
  "vite-plugin-monaco-editor": "^1.1.0",
83
- "vitest": "^4.1.6"
66
+ "vitest": "^4.1.10"
84
67
  },
85
68
  "svelte": "./dist/index.js",
86
69
  "types": "./dist/index.d.ts",
@@ -92,15 +75,33 @@
92
75
  "@cartamd/plugin-component": "^1.1.1",
93
76
  "@cartamd/plugin-emoji": "^4.3.0",
94
77
  "@cartamd/plugin-math": "^4.3.1",
95
- "@friendofsvelte/tipex": "^0.1.1",
78
+ "@friendofsvelte/tipex": "^0.2.0",
96
79
  "@js-temporal/polyfill": "^0.5.1",
97
- "@svar-ui/svelte-grid": "^2.6.2",
98
- "@warkypublic/resolvespec-js": "^1.0.1",
80
+ "@svar-ui/svelte-grid": "^2.7.1",
99
81
  "@warkypublic/artemis-kit": "^1.0.10",
82
+ "@warkypublic/resolvespec-js": "^1.0.1",
100
83
  "carta-md": "^4.11.2",
101
84
  "github-markdown-css": "^5.9.0",
102
- "isomorphic-dompurify": "^3.13.0",
103
- "katex": "^0.16.47",
85
+ "isomorphic-dompurify": "^3.18.0",
86
+ "katex": "^0.17.0",
104
87
  "monaco-editor": "^0.55.1"
88
+ },
89
+ "scripts": {
90
+ "dev": "vite dev",
91
+ "build": "vite build && pnpm run package",
92
+ "preview": "vite preview",
93
+ "package": "svelte-kit sync && svelte-package && mkdir -p dist/css && cp src/lib/css/tailwind-source.css dist/css/tailwind-source.css && publint",
94
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
95
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
96
+ "storybook": "storybook dev -p 6006",
97
+ "build-storybook": "storybook build",
98
+ "lint": "eslint .",
99
+ "lint:fix": "eslint . --fix",
100
+ "test": "vitest run --project unit",
101
+ "test:unit": "vitest run --project unit",
102
+ "test:watch": "vitest --project unit",
103
+ "test:e2e": "playwright test && playwright test --config=playwright.storybook.config.ts",
104
+ "test:e2e:ui": "playwright test --ui",
105
+ "test:storybook": "playwright test --config=playwright.storybook.config.ts"
105
106
  }
106
107
  }