sveltekit-ui 1.1.87 → 1.1.88
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.
- package/CHANGELOG.md +21 -9
- package/README.md +18 -6
- package/dist/Components/AudioEditor/index.svelte.js +4 -3
- package/dist/Components/Content/index.svelte.js +1 -1
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte.js +3 -4
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte.js +3 -4
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte.js +2 -2
- package/dist/Components/ContentInput/index.svelte.js +1 -1
- package/dist/Components/StoragePicker/index.svelte.js +1 -1
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.88 - 2026-10-16
|
|
4
|
+
|
|
5
|
+
### Toolchain
|
|
6
|
+
|
|
7
|
+
- Update the documentation and package toolchain to SvelteKit 3.1.0, Vercel adapter 7.0.1, Svelte package 3.0.1, Svelte Check 4.7.7, Vite 8.3.4, Vitest 5.0.5, and jsdom 30.1.3.
|
|
8
|
+
- Require Node.js 24.15 or newer to satisfy the updated test toolchain.
|
|
9
|
+
- Keep TypeScript 6.0.3 and Analytics 1.3.2 because current stable Svelte tooling excludes TypeScript 7 and Analytics 2 excludes SvelteKit 3.
|
|
10
|
+
|
|
11
|
+
### SvelteKit compatibility
|
|
12
|
+
|
|
13
|
+
- Target SvelteKit 3 for new installs, documentation, and packed-consumer verification. Svelte 5 remains required.
|
|
14
|
+
- Verify the documentation app and packed consumer with SvelteKit 3.1.0 and Svelte 5.57.2.
|
|
15
|
+
|
|
16
|
+
### Component fixes
|
|
17
|
+
|
|
18
|
+
- Default stored-media URLs and audio processing endpoints to the application's own `/api` routes, while preserving configurable endpoint overrides.
|
|
19
|
+
- Preserve natural popover height in Safari by giving the scrolling content container a content-based flex basis, while retaining fixed-height and scrolling layouts.
|
|
20
|
+
- Focus the image comparison slider before starting a drag so focus changes cannot cancel the new drag.
|
|
21
|
+
- Preserve native button activation, including popover toggles and form submission, when an `on_click` callback starts an async loading state, while still blocking repeated actions until it settles.
|
|
22
|
+
- Accept Apple's domain-restricted, non-expiring MapKit JS tokens while continuing to reject malformed and expired tokens.
|
|
23
|
+
|
|
3
24
|
## 1.1.87 - 2026-10-03
|
|
4
25
|
|
|
5
26
|
### Toolchain
|
|
@@ -18,15 +39,6 @@
|
|
|
18
39
|
- Migrate the documentation app to SvelteKit 3, Vercel adapter 7, explicit public environment variables, and Vite plugin configuration.
|
|
19
40
|
- Preserve documentation analytics using the generic Analytics API, with manual SvelteKit navigation tracking that does not depend on removed stores.
|
|
20
41
|
|
|
21
|
-
## Unreleased
|
|
22
|
-
|
|
23
|
-
### Component fixes
|
|
24
|
-
|
|
25
|
-
- Preserve natural popover height in Safari by giving the scrolling content container a content-based flex basis, while retaining fixed-height and scrolling layouts.
|
|
26
|
-
- Focus the image comparison slider before starting a drag so focus changes cannot cancel the new drag.
|
|
27
|
-
- Preserve native button activation, including popover toggles and form submission, when an `on_click` callback starts an async loading state, while still blocking repeated actions until it settles.
|
|
28
|
-
- Accept Apple's domain-restricted, non-expiring MapKit JS tokens while continuing to reject malformed and expired tokens.
|
|
29
|
-
|
|
30
42
|
## 1.1.84 - 2026-09-20
|
|
31
43
|
|
|
32
44
|
### Icons
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SvelteKit UI
|
|
2
2
|
|
|
3
|
-
SvelteKit UI is a Svelte 5 component library built around paired components and reactive manager functions
|
|
3
|
+
SvelteKit UI is a Svelte 5 component library built around paired components and reactive manager functions for SvelteKit 3 applications.
|
|
4
4
|
|
|
5
5
|
The component documentation and interactive examples live at [sveltekit-ui.com](https://www.sveltekit-ui.com).
|
|
6
6
|
|
|
@@ -28,6 +28,20 @@ Import the shared styles once in your root layout:
|
|
|
28
28
|
|
|
29
29
|
Most interactive components expose a `create_*_manager` function. The manager owns state and behavior; the Svelte component renders that manager. Components that depend on browser APIs should be initialized or used in the browser, while imports remain safe during SvelteKit server rendering.
|
|
30
30
|
|
|
31
|
+
## Use with AI
|
|
32
|
+
|
|
33
|
+
Give Codex or another coding agent the [Use with AI guide](https://www.sveltekit-ui.com/ai). It explains installation, paired feature components/managers, live inputs, Button navigation/icons, adaptive themes, root sizing, lifecycle cleanup, backend boundaries, and verification. It includes a starting prompt and a short section to add to a consumer project's existing `AGENTS.md`.
|
|
34
|
+
|
|
35
|
+
Agents can fetch the [component index](https://www.sveltekit-ui.com/llms.txt) or the [complete reference](https://www.sveltekit-ui.com/llms-full.txt) directly. The complete reference is generated from the same API definitions and public-import examples as the website, including configuration, methods, returned state, required values, allowed options, and component notes. Homepage, guide, and component URLs also serve Markdown when requested with `Accept: text/markdown`.
|
|
36
|
+
|
|
37
|
+
Documentation source lives in `src/lib/client/docs` and `src/routes/_docs/ai-guide.js`. Keep the shared component inventory, definitions, and examples in agreement; documentation tests check coverage against public component exports. Do not hand-maintain a separate full-reference snapshot.
|
|
38
|
+
|
|
39
|
+
## Media services
|
|
40
|
+
|
|
41
|
+
Stored-media examples default to the same-origin URL template `/api/storage/{storage_id}`. `AudioEditor` defaults to `/api` for its API prefix, posting metadata requests to `/api/tools/audio/read_tags` and audio processing requests to `/api/tools/audio`.
|
|
42
|
+
|
|
43
|
+
These endpoints belong to your application's backend. Implement them in your app or configure the managers to use your existing service. `AudioEditor` accepts `api_prefix`, `fetch_path_audio_read_tags`, `fetch_path_audio_post`, `file_prefix`, and `storage_src` overrides; `StoragePicker` accepts `storage_src`; `Content` and `ContentInput` accept `storage_path`.
|
|
44
|
+
|
|
31
45
|
## Starter project
|
|
32
46
|
|
|
33
47
|
To create a new site using the library:
|
|
@@ -45,7 +59,7 @@ npm run dev
|
|
|
45
59
|
|
|
46
60
|
Copy `.env.example` to `.env` and provide `PUBLIC_APPLE_MAPKIT_JS_API_KEY` if you want to run the MapKit showcases locally.
|
|
47
61
|
|
|
48
|
-
The package and documentation app require Node.js 24 or newer. The documentation app uses SvelteKit 3 and TypeScript 6, even when writing JavaScript. The `.ncurc.js` configuration updates development and runtime dependencies while respecting peer dependencies and the current Node engine. TypeScript 7
|
|
62
|
+
The package and documentation app require Node.js 24.15 or newer. The documentation app uses SvelteKit 3 and TypeScript 6, even when writing JavaScript. The `.ncurc.js` configuration updates development and runtime dependencies while respecting peer dependencies and the current Node engine. TypeScript 7 remains incompatible with the peer requirements of SvelteKit 3.1, `svelte-check` 4.7, and `@sveltejs/package` 3.0. Analytics remains pinned at 1.3.2 because Analytics 2.0.1's SvelteKit peer range excludes SvelteKit 3. These compatibility constraints were checked against npm on October 16, 2026.
|
|
49
63
|
|
|
50
64
|
Before publishing, run the complete verification suite:
|
|
51
65
|
|
|
@@ -55,7 +69,7 @@ npm run verify
|
|
|
55
69
|
|
|
56
70
|
This checks the Svelte source, runs tests, generates and verifies the distributable package, and builds the documentation site.
|
|
57
71
|
|
|
58
|
-
To verify a packed release in clean SvelteKit
|
|
72
|
+
To verify a packed release in a clean SvelteKit 3 consumer, run `node scripts/verify-kit-consumers.js /absolute/path/to/sveltekit-ui.tgz`. The consumer installs its dependencies with normal peer validation, then compiles the public components for server and browser use and checks server-rendered pages.
|
|
59
73
|
|
|
60
74
|
Publish with `npm run publish:npm`. It checks npm for the newest published release, selects the next patch version when needed, keeps `package.json` and `package-lock.json` in sync, and runs verification before publishing. A prepared version that is newer than the published releases is reused, so retrying a failed publish does not skip another version.
|
|
61
75
|
|
|
@@ -68,8 +82,6 @@ npm run version:available -- --dry-run
|
|
|
68
82
|
## Compatibility and releases
|
|
69
83
|
|
|
70
84
|
- Svelte 5 is required.
|
|
71
|
-
- SvelteKit
|
|
85
|
+
- SvelteKit 3 is required because some components use SvelteKit navigation modules.
|
|
72
86
|
- Browser flags use `esm-env`. Source `#lib` imports are rewritten to relative imports in the published package; consumers do not need to configure the library's source alias.
|
|
73
87
|
- Public API changes are documented with package releases. Consumers should review release notes before adopting a new minor version.
|
|
74
|
-
|
|
75
|
-
The experimental Contibase code generator is available at [contibase.com/code_generator](https://www.contibase.com/code_generator).
|
|
@@ -293,10 +293,9 @@ export function create_audio_editor_manager(config) {
|
|
|
293
293
|
let generation_abort_controller = null
|
|
294
294
|
let success_timeout_id = null
|
|
295
295
|
|
|
296
|
-
|
|
297
|
-
let api_prefix = $derived(set_closurable(config?.api_prefix, "https://www.contibase.com/api/v1"))
|
|
296
|
+
let api_prefix = $derived(set_closurable(config?.api_prefix, "/api"))
|
|
298
297
|
let storage_src = $derived(
|
|
299
|
-
set_closurable(config?.storage_src,
|
|
298
|
+
set_closurable(config?.storage_src, `${api_prefix}/storage/{storage_id}`)
|
|
300
299
|
)
|
|
301
300
|
let fetch_path_audio_read_tags = $derived(
|
|
302
301
|
set_closurable(config?.fetch_path_audio_read_tags, `${api_prefix}/tools/audio/read_tags`)
|
|
@@ -770,6 +769,7 @@ export function create_audio_editor_manager(config) {
|
|
|
770
769
|
storage: storage,
|
|
771
770
|
default_folder_path: config?.storage_default_folder_path,
|
|
772
771
|
locally_uploaded_files: () => locally_uploaded_files,
|
|
772
|
+
storage_src: () => storage_src,
|
|
773
773
|
accept: ["image/png", "image/jpeg", "image/webp", "image/gif"],
|
|
774
774
|
is_multiselect: false,
|
|
775
775
|
mb: 1,
|
|
@@ -849,6 +849,7 @@ export function create_audio_editor_manager(config) {
|
|
|
849
849
|
storage: storage,
|
|
850
850
|
default_folder_path: config?.storage_default_folder_path,
|
|
851
851
|
locally_uploaded_files: () => locally_uploaded_files,
|
|
852
|
+
storage_src: () => storage_src,
|
|
852
853
|
accept: ["audio/mpeg"],
|
|
853
854
|
is_multiselect: false,
|
|
854
855
|
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
@@ -40,7 +40,7 @@ export function create_content_manager(config) {
|
|
|
40
40
|
const id = create_unique_id(null, 20)
|
|
41
41
|
let definition_stack = $state([])
|
|
42
42
|
let is_dark_theme = $derived(set_closurable(config?.is_dark_theme, false))
|
|
43
|
-
let storage_path = $derived(set_closurable(config?.storage_path, "/api/
|
|
43
|
+
let storage_path = $derived(set_closurable(config?.storage_path, "/api/storage/{storage_id}"))
|
|
44
44
|
let mapkit_js_token = $derived(set_closurable(config?.mapkit_js_token, null))
|
|
45
45
|
let val_prepped = $state(null)
|
|
46
46
|
|
|
@@ -25,7 +25,7 @@ export function create_audio_config_manager(config) {
|
|
|
25
25
|
let image_aspect_ratio_text_input_manager = $state(null)
|
|
26
26
|
|
|
27
27
|
let storage_src = $derived(
|
|
28
|
-
set_closurable(config?.storage_src, "
|
|
28
|
+
set_closurable(config?.storage_src, set_closurable(config?.storage_path, "/api/storage/{storage_id}"))
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
let val = $derived({
|
|
@@ -80,13 +80,12 @@ export function create_audio_config_manager(config) {
|
|
|
80
80
|
audio_storage_picker_manager = create_storage_picker_manager({
|
|
81
81
|
storage: config?.storage,
|
|
82
82
|
default_folder_path: config?.storage_default_folder_path,
|
|
83
|
-
|
|
83
|
+
storage_src: () => storage_src,
|
|
84
84
|
storage_origins: ["storage"],
|
|
85
85
|
is_drop_zone: false,
|
|
86
86
|
accept: ["audio/mpeg"],
|
|
87
87
|
is_multiselect: false,
|
|
88
88
|
on_finish: async (input) => {
|
|
89
|
-
const src = storage_src.replace("{storage_id}", input?.id)
|
|
90
89
|
storage_id_text_input_manager.set_val(input?.id ?? null)
|
|
91
90
|
is_storage_id_public_checkbox_manager.set_val(input?.is_public ?? null)
|
|
92
91
|
src_text_input_manager.set_val(null)
|
|
@@ -131,7 +130,7 @@ export function create_audio_config_manager(config) {
|
|
|
131
130
|
image_storage_picker_manager = create_storage_picker_manager({
|
|
132
131
|
storage: config?.storage,
|
|
133
132
|
default_folder_path: config?.storage_default_folder_path,
|
|
134
|
-
|
|
133
|
+
storage_src: () => storage_src,
|
|
135
134
|
storage_origins: ["storage"],
|
|
136
135
|
is_drop_zone: false,
|
|
137
136
|
accept: ["image/png", "image/jpeg", "image/webp", "image/gif"],
|
package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte.js
CHANGED
|
@@ -25,7 +25,7 @@ export function create_audio_advanced_config_manager(config) {
|
|
|
25
25
|
let image_aspect_ratio_text_input_manager = $state(null)
|
|
26
26
|
|
|
27
27
|
let storage_src = $derived(
|
|
28
|
-
set_closurable(config?.storage_src, "
|
|
28
|
+
set_closurable(config?.storage_src, set_closurable(config?.storage_path, "/api/storage/{storage_id}"))
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
let val = $derived({
|
|
@@ -80,13 +80,12 @@ export function create_audio_advanced_config_manager(config) {
|
|
|
80
80
|
audio_storage_picker_manager = create_storage_picker_manager({
|
|
81
81
|
storage: config?.storage,
|
|
82
82
|
default_folder_path: config?.storage_default_folder_path,
|
|
83
|
-
|
|
83
|
+
storage_src: () => storage_src,
|
|
84
84
|
storage_origins: ["storage"],
|
|
85
85
|
is_drop_zone: false,
|
|
86
86
|
accept: ["audio/mpeg"],
|
|
87
87
|
is_multiselect: false,
|
|
88
88
|
on_finish: async (input) => {
|
|
89
|
-
const src = storage_src.replace("{storage_id}", input?.id)
|
|
90
89
|
storage_id_text_input_manager.set_val(input?.id ?? null)
|
|
91
90
|
is_storage_id_public_checkbox_manager.set_val(input?.is_public ?? null)
|
|
92
91
|
src_text_input_manager.set_val(null)
|
|
@@ -131,7 +130,7 @@ export function create_audio_advanced_config_manager(config) {
|
|
|
131
130
|
image_storage_picker_manager = create_storage_picker_manager({
|
|
132
131
|
storage: config?.storage,
|
|
133
132
|
default_folder_path: config?.storage_default_folder_path,
|
|
134
|
-
|
|
133
|
+
storage_src: () => storage_src,
|
|
135
134
|
storage_origins: ["storage"],
|
|
136
135
|
is_drop_zone: false,
|
|
137
136
|
accept: ["image/png", "image/jpeg", "image/webp", "image/gif"],
|
|
@@ -22,7 +22,7 @@ export function create_image_config_manager(config) {
|
|
|
22
22
|
let bg_img_opacity_slider_manager = $state(null)
|
|
23
23
|
|
|
24
24
|
let storage_src = $derived(
|
|
25
|
-
set_closurable(config?.storage_src, "
|
|
25
|
+
set_closurable(config?.storage_src, set_closurable(config?.storage_path, "/api/storage/{storage_id}"))
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
let val = $derived({
|
|
@@ -63,7 +63,7 @@ export function create_image_config_manager(config) {
|
|
|
63
63
|
storage_picker_manager = create_storage_picker_manager({
|
|
64
64
|
storage: config?.storage,
|
|
65
65
|
default_folder_path: config?.storage_default_folder_path,
|
|
66
|
-
|
|
66
|
+
storage_src: () => storage_src,
|
|
67
67
|
storage_origins: ["storage"],
|
|
68
68
|
is_drop_zone: false,
|
|
69
69
|
accept: ["image/png", "image/jpeg", "image/webp", "image/gif"],
|
|
@@ -990,7 +990,7 @@ export function create_content_input_manager(config) {
|
|
|
990
990
|
versions = [config?.val]
|
|
991
991
|
storage = config?.storage
|
|
992
992
|
storage_default_folder_path = config?.storage_default_folder_path
|
|
993
|
-
storage_path = config?.storage_path
|
|
993
|
+
storage_path = set_closurable(config?.storage_path, "/api/storage/{storage_id}")
|
|
994
994
|
preempt_add_first_element_button_manager = create_button_manager({
|
|
995
995
|
type: "outlined",
|
|
996
996
|
support_icon: "edit",
|
|
@@ -53,7 +53,7 @@ export function create_storage_picker_manager(config) {
|
|
|
53
53
|
let is_show_button = $derived(set_closurable(config?.is_show_button, true))
|
|
54
54
|
let is_show_file_view_toggle = $derived(set_closurable(config?.is_show_file_view_toggle, true))
|
|
55
55
|
let storage_src = $derived(
|
|
56
|
-
set_closurable(config?.storage_src, "
|
|
56
|
+
set_closurable(config?.storage_src, "/api/storage/{storage_id}")
|
|
57
57
|
)
|
|
58
58
|
let max_selected_files = $derived.by(() => {
|
|
59
59
|
const configured_max = set_closurable(config?.max_selected_files, null)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sveltekit-ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.88",
|
|
4
4
|
"description": "A SvelteKit UI component library for building modern web applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -49,21 +49,21 @@
|
|
|
49
49
|
"qr-code-styling": "^1.9.2"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@sveltejs/kit": "^
|
|
52
|
+
"@sveltejs/kit": "^3.0.0",
|
|
53
53
|
"svelte": "^5.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@sveltejs/adapter-vercel": "^7.0.
|
|
57
|
-
"@sveltejs/kit": "^3.
|
|
58
|
-
"@sveltejs/package": "^3.0.
|
|
56
|
+
"@sveltejs/adapter-vercel": "^7.0.1",
|
|
57
|
+
"@sveltejs/kit": "^3.1.0",
|
|
58
|
+
"@sveltejs/package": "^3.0.1",
|
|
59
59
|
"@sveltejs/vite-plugin-svelte": "^7.3.1",
|
|
60
60
|
"@vercel/analytics": "1.3.2",
|
|
61
|
-
"jsdom": "^30.1.
|
|
62
|
-
"svelte": "^5.57.
|
|
63
|
-
"svelte-check": "^4.7.
|
|
61
|
+
"jsdom": "^30.1.3",
|
|
62
|
+
"svelte": "^5.57.2",
|
|
63
|
+
"svelte-check": "^4.7.7",
|
|
64
64
|
"typescript": "^6.0.3",
|
|
65
|
-
"vite": "^8.3.
|
|
66
|
-
"vitest": "^5.0.
|
|
65
|
+
"vite": "^8.3.4",
|
|
66
|
+
"vitest": "^5.0.5"
|
|
67
67
|
},
|
|
68
68
|
"homepage": "https://www.sveltekit-ui.com",
|
|
69
69
|
"keywords": [
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"library"
|
|
75
75
|
],
|
|
76
76
|
"engines": {
|
|
77
|
-
"node": ">=24.
|
|
77
|
+
"node": ">=24.15.0"
|
|
78
78
|
},
|
|
79
79
|
"publishConfig": {
|
|
80
80
|
"access": "public"
|