sveltekit-ui 1.1.86 → 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 CHANGED
@@ -1,24 +1,44 @@
1
1
  # Changelog
2
2
 
3
- ## 1.1.86 - 2026-10-02
3
+ ## 1.1.88 - 2026-10-16
4
4
 
5
- ### SvelteKit compatibility
5
+ ### Toolchain
6
6
 
7
- - Support SvelteKit 2.22.2 and newer alongside SvelteKit 3 while preserving the public component and manager APIs.
8
- - Use `esm-env` for browser flags and rewrite source `#lib` imports to relative paths when packaging.
9
- - Preserve native internal-link navigation, including static resources, modified clicks, and navigation cancellation.
10
- - Migrate the documentation app to SvelteKit 3, Vercel adapter 7, explicit public environment variables, and Vite plugin configuration.
11
- - Preserve documentation analytics using the generic Analytics API, with manual SvelteKit navigation tracking that does not depend on removed stores.
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
12
 
13
- ## Unreleased
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.
14
15
 
15
16
  ### Component fixes
16
17
 
18
+ - Default stored-media URLs and audio processing endpoints to the application's own `/api` routes, while preserving configurable endpoint overrides.
17
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.
18
20
  - Focus the image comparison slider before starting a drag so focus changes cannot cancel the new drag.
19
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.
20
22
  - Accept Apple's domain-restricted, non-expiring MapKit JS tokens while continuing to reject malformed and expired tokens.
21
23
 
24
+ ## 1.1.87 - 2026-10-03
25
+
26
+ ### Toolchain
27
+
28
+ - Require Node.js 24 or newer for the package and documentation development.
29
+ - Update Vite and Vitest, and respect peer dependencies and Node engine constraints during dependency upgrades.
30
+ - Preserve the public SvelteKit 2 and 3 component APIs; TypeScript 7 remains excluded by the current Svelte toolchain peers.
31
+
32
+ ## 1.1.86 - 2026-10-02
33
+
34
+ ### SvelteKit compatibility
35
+
36
+ - Support SvelteKit 2.22.2 and newer alongside SvelteKit 3 while preserving the public component and manager APIs.
37
+ - Use `esm-env` for browser flags and rewrite source `#lib` imports to relative paths when packaging.
38
+ - Preserve native internal-link navigation, including static resources, modified clicks, and navigation cancellation.
39
+ - Migrate the documentation app to SvelteKit 3, Vercel adapter 7, explicit public environment variables, and Vite plugin configuration.
40
+ - Preserve documentation analytics using the generic Analytics API, with manual SvelteKit navigation tracking that does not depend on removed stores.
41
+
22
42
  ## 1.1.84 - 2026-09-20
23
43
 
24
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. It supports SvelteKit 2 and 3 applications.
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 documentation app uses SvelteKit 3 and requires Node.js 22.17 or newer and TypeScript 6, even when writing JavaScript. The `.ncurc.js` configuration lets `ncu -u` update TypeScript within version 6 while other packages continue receiving normal updates.
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 2 and 3 consumers, run `node scripts/verify-kit-consumers.js /absolute/path/to/sveltekit-ui.tgz`. The consumers install their dependencies with normal peer validation, then compile the public components for server and browser use and check server-rendered pages.
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 2.22.2 or newer, or SvelteKit 3, is required because some components use SvelteKit navigation modules.
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
- // actually we'll prob do this server stuff diff like call config?.fetch_audio_read_tags() and handle in parent
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, "https://www.contibase.com/api/v1/storage/{storage_id}")
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/v1/storage/{storage_id}"))
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, "https://www.contibase.com/api/v1/storage/{storage_id}")
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
- storage_path: config?.storage_path,
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
- storage_path: config?.storage_path,
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"],
@@ -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, "https://www.contibase.com/api/v1/storage/{storage_id}")
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
- storage_path: config?.storage_path,
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
- storage_path: config?.storage_path,
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, "https://www.contibase.com/api/v1/storage/{storage_id}")
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
- storage_path: config?.storage_path,
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, "https://www.contibase.com/api/v1/storage/{storage_id}")
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.86",
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": "^2.22.2 || ^3.0.0",
52
+ "@sveltejs/kit": "^3.0.0",
53
53
  "svelte": "^5.0.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@sveltejs/adapter-vercel": "^7.0.0",
57
- "@sveltejs/kit": "^3.0.0",
58
- "@sveltejs/package": "^3.0.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.1",
62
- "svelte": "^5.57.1",
63
- "svelte-check": "^4.7.6",
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.1",
66
- "vitest": "^5.0.2"
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": ">=22.12.0"
77
+ "node": ">=24.15.0"
78
78
  },
79
79
  "publishConfig": {
80
80
  "access": "public"