sveltekit-ui 1.1.82 → 1.1.84

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
@@ -4,9 +4,25 @@
4
4
 
5
5
  ### Component fixes
6
6
 
7
+ - Preserve natural popover height in Safari by giving the scrolling content container a content-based flex basis, while retaining fixed-height and scrolling layouts.
8
+ - Focus the image comparison slider before starting a drag so focus changes cannot cancel the new drag.
7
9
  - 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.
8
10
  - Accept Apple's domain-restricted, non-expiring MapKit JS tokens while continuing to reject malformed and expired tokens.
9
11
 
12
+ ## 1.1.84 - 2026-09-20
13
+
14
+ ### Icons
15
+
16
+ - Add `users`, `bell`, `ticket`, `credit_card`, `user_check`, `filter`, `repeat`, `receipt`, `globe`, `shield_check`, `list_clock`, `file_signature`, and `bot`.
17
+ - Replace the three-dot menu and nine-dot drag grip with larger filled circles that follow the configured icon color and stroke width.
18
+ - Expose the additions in the icon documentation, showcase, and default icon picker options.
19
+ - Preserve existing icon geometry and runtime styling while importing optimized SVG artwork.
20
+
21
+ ### Maintenance
22
+
23
+ - Run `ncu -u`; all dependencies already match the configured update targets, including TypeScript 6.
24
+ - Limit test discovery to source and test directories so synced build artifacts do not stall verification.
25
+
10
26
  ## 1.1.75 - 2026-07-25
11
27
 
12
28
  ### Security and resilience
@@ -62,10 +62,15 @@
62
62
  d="M146.7 212.2h135M146.7 292.7h135M146.7 373.3h135M426.8 82.5V356a12 12 0 01-12 12h-71.5V156a12 12 0 00-12-12H168.7V82.5a12 12 0 0112-12h234.1a12 12 0 0112 12z"
63
63
  />
64
64
  {:else if manager?.icon_id === "drag_grip"}
65
- <path d="M97 97h0M97 415h0M415 97h0M415 415h0" />
66
- <path d="M256 97h0" />
67
- <path d="M256 415h0M415 256h0M97 256h0" />
68
- <path d="M256 256h0" />
65
+ <circle cx="97" cy="97" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
66
+ <circle cx="256" cy="97" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
67
+ <circle cx="415" cy="97" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
68
+ <circle cx="97" cy="256" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
69
+ <circle cx="256" cy="256" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
70
+ <circle cx="415" cy="256" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
71
+ <circle cx="97" cy="415" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
72
+ <circle cx="256" cy="415" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
73
+ <circle cx="415" cy="415" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
69
74
  {:else if manager?.icon_id === "edit"}
70
75
  <path d="M390.4 251.4v129.1a40 40 0 01-40 40H133.6a40 40 0 01-40-40V164a40 40 0 0140-40h124.6" />
71
76
  <path
@@ -109,12 +114,9 @@
109
114
  {:else if manager?.icon_id === "x"}
110
115
  <path d="M75 437 437 75M75 75l362 362" />
111
116
  {:else if manager?.icon_id === "three_dots"}
112
- <line x1="256" y1="96" x2="256" y2="96" /><line x1="256" y1="415" x2="256" y2="415" /><line
113
- x1="256"
114
- y1="256"
115
- x2="256"
116
- y2="256"
117
- />
117
+ <circle cx="256" cy="96" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
118
+ <circle cx="256" cy="256" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
119
+ <circle cx="256" cy="415" r={Number(manager?.sw) / 2 + 6} fill={manager?.color} stroke="none" />
118
120
  {:else if manager?.icon_id === "clock"}
119
121
  <circle cx="256" cy="256" r="212.9" />
120
122
  <path d="M256 125v131l66.1 66.1" />
@@ -361,6 +363,52 @@
361
363
  <path
362
364
  d="M209 154.6v190.2c0 58.4 89.5 58.5 89.5 0V112.2c0-89.4-146-85.6-146 0V376c0 110.1 200.7 110.1 200.7 0V154.6"
363
365
  />
366
+ {:else if manager?.icon_id === "users"}
367
+ <circle cx="176" cy="150" r="60" />
368
+ <circle cx="360" cy="166" r="50" />
369
+ <path d="M76 420v-32c0-55.23 44.77-100 100-100s100 44.77 100 100v32" />
370
+ <path d="M352 290c46.39 0 84 37.61 84 84v46" />
371
+ {:else if manager?.icon_id === "bell"}
372
+ <path d="M256 80v28" />
373
+ <path d="M112 344h288l-32-48v-72c0-61.86-50.14-112-112-112s-112 50.14-112 112v72l-32 48Z" />
374
+ <path d="M220 416c8 10 21 16 36 16s28-6 36-16" />
375
+ {:else if manager?.icon_id === "ticket"}
376
+ <path d="M108 116h296a32 32 0 0 1 32 32v56a52 52 0 0 0 0 104v56a32 32 0 0 1-32 32H108a32 32 0 0 1-32-32v-56a52 52 0 0 0 0-104v-56a32 32 0 0 1 32-32Z" />
377
+ <path d="M316 180v32m0 88v32" />
378
+ {:else if manager?.icon_id === "credit_card"}
379
+ <rect width="360" height="280" x="76" y="116" rx="48" />
380
+ <path d="M76 212h360M140 316h72" />
381
+ {:else if manager?.icon_id === "user_check"}
382
+ <circle cx="184" cy="150" r="60" />
383
+ <path d="M80 420v-28c0-57 47-104 104-104 26 0 50 10 68 26" />
384
+ <path d="m300 378 44 44 92-108" />
385
+ {:else if manager?.icon_id === "filter"}
386
+ <path d="M76 108h360L296 276v120l-80 36V276L76 108Z" />
387
+ {:else if manager?.icon_id === "repeat"}
388
+ <path d="M104 240v-28c0-37.56 30.44-68 68-68h236m-64-64 64 64-64 64" />
389
+ <path d="M408 272v28c0 37.56-30.44 68-68 68H104m64-64-64 64 64 64" />
390
+ {:else if manager?.icon_id === "receipt"}
391
+ <path d="M116 436V112a36 36 0 0 1 36-36h208a36 36 0 0 1 36 36v324l-70-36-70 36-70-36-70 36Z" />
392
+ <path d="M184 168h144m-144 76h144m-144 76h88" />
393
+ {:else if manager?.icon_id === "globe"}
394
+ <circle cx="256" cy="256" r="184" />
395
+ <ellipse cx="256" cy="256" rx="76" ry="184" />
396
+ <path d="M72 256h368" />
397
+ {:else if manager?.icon_id === "shield_check"}
398
+ <path d="m256 80 144 56v100c0 90-56 160-144 196-88-36-144-106-144-196V136l144-56Z" />
399
+ <path d="m184 252 48 48 96-96" />
400
+ {:else if manager?.icon_id === "list_clock"}
401
+ <path d="M76 112h316M76 224h104M76 336h68" />
402
+ <circle cx="336" cy="328" r="112" />
403
+ <path d="M336 282v46l32 24" />
404
+ {:else if manager?.icon_id === "file_signature"}
405
+ <path d="M168 436h-28a36 36 0 0 1-36-36V112a36 36 0 0 1 36-36h96l96 96v24M236 76v96h96" />
406
+ <path d="M168 224h68m-68 80h32" />
407
+ <path d="m238 438 20-80 116-116a20 20 0 0 1 28 0l28 28a20 20 0 0 1 0 28L314 414l-76 24Z" />
408
+ {:else if manager?.icon_id === "bot"}
409
+ <rect width="280" height="236" x="116" y="184" rx="62" />
410
+ <circle cx="256" cy="100" r="28" />
411
+ <path d="M256 128v56M64 268v68m384-68v68m-232-58v40m80-40v40" />
364
412
  {/if}
365
413
  </svg>
366
414
  </div>
@@ -64,6 +64,19 @@ export function create_icon_input_manager(config) {
64
64
  { key: "rotate", name: "Rotate" },
65
65
  { key: "refresh", name: "Refresh" },
66
66
  { key: "opposing_arrows", name: "Opposing Arrows" },
67
+ { key: "users", name: "Users" },
68
+ { key: "bell", name: "Bell" },
69
+ { key: "ticket", name: "Ticket" },
70
+ { key: "credit_card", name: "Credit Card" },
71
+ { key: "user_check", name: "User Check" },
72
+ { key: "filter", name: "Filter" },
73
+ { key: "repeat", name: "Repeat" },
74
+ { key: "receipt", name: "Receipt" },
75
+ { key: "globe", name: "Globe" },
76
+ { key: "shield_check", name: "Shield Check" },
77
+ { key: "list_clock", name: "List Clock" },
78
+ { key: "file_signature", name: "File Signature" },
79
+ { key: "bot", name: "Bot" },
67
80
  ]
68
81
 
69
82
  let icons_prepped = $state(null)
@@ -79,9 +79,9 @@ export function create_image_slider_manager(config) {
79
79
  const container_rect = container_el?.getBoundingClientRect()
80
80
  if (!container_rect?.width) return
81
81
  if (type == "down") {
82
+ event.currentTarget?.focus?.({ preventScroll: true })
82
83
  is_dragging = true
83
84
  active_pointer_id = event.pointerId ?? null
84
- event.currentTarget?.focus?.({ preventScroll: true })
85
85
  }
86
86
  event.preventDefault()
87
87
  touch_start_x = event.clientX
@@ -379,7 +379,7 @@
379
379
  display: flex;
380
380
  flex-direction: column;
381
381
  justify-content: space-between;
382
- flex: 1;
382
+ flex: 1 1 auto;
383
383
  width: 100%;
384
384
  overflow: scroll;
385
385
  }
@@ -43,6 +43,25 @@ export function get_mapkit_api() {
43
43
  return Reflect.get(globalThis, "mapkit") ?? Reflect.get(globalThis.window ?? {}, "mapkit") ?? null
44
44
  }
45
45
 
46
+ function mapkit_libraries_are_ready(mapkit_api) {
47
+ // The core SDK's unloaded constructor getters throw. Its library list is safe to read.
48
+ const loaded_libraries = mapkit_api?.loadedLibraries
49
+ if (Array.isArray(loaded_libraries)) {
50
+ const has_full_map = loaded_libraries.includes("full-map") ||
51
+ ["map", "annotations", "overlays", "user-location"].every((name) => loaded_libraries.includes(name))
52
+ return has_full_map && loaded_libraries.includes("services")
53
+ }
54
+
55
+ // The full SDK has no library list; inspect values without invoking property getters.
56
+ return ["Map", "Search", "PlaceLookup"].every((name) => {
57
+ for (let object = mapkit_api; object; object = Object.getPrototypeOf(object)) {
58
+ const descriptor = Object.getOwnPropertyDescriptor(object, name)
59
+ if (descriptor) return typeof descriptor.value === "function"
60
+ }
61
+ return false
62
+ })
63
+ }
64
+
46
65
  export function load_mapkit_script(token) {
47
66
  const window_ref = globalThis.window
48
67
  const document_ref = globalThis.document
@@ -51,7 +70,7 @@ export function load_mapkit_script(token) {
51
70
  }
52
71
 
53
72
  const ready_api = get_mapkit_api()
54
- if (ready_api) return Promise.resolve(ready_api)
73
+ if (mapkit_libraries_are_ready(ready_api)) return Promise.resolve(ready_api)
55
74
  if (shared_mapkit_load_promise) return shared_mapkit_load_promise
56
75
 
57
76
  const token_error = get_mapkit_token_error(token)
@@ -74,7 +93,7 @@ export function load_mapkit_script(token) {
74
93
 
75
94
  const finish_if_ready = () => {
76
95
  const mapkit_api = get_mapkit_api()
77
- if (!mapkit_api) return false
96
+ if (!mapkit_libraries_are_ready(mapkit_api)) return false
78
97
  window_ref.init_map_kit_loaded = true
79
98
  cleanup()
80
99
  resolve(mapkit_api)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sveltekit-ui",
3
- "version": "1.1.82",
3
+ "version": "1.1.84",
4
4
  "description": "A SvelteKit UI component library for building modern web applications",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -57,12 +57,12 @@
57
57
  "@sveltejs/package": "^2.5.8",
58
58
  "@sveltejs/vite-plugin-svelte": "^7.3.0",
59
59
  "@vercel/analytics": "^2.0.1",
60
- "jsdom": "^30.0.1",
61
- "svelte": "^5.57.0",
60
+ "jsdom": "^30.1.0",
61
+ "svelte": "^5.57.1",
62
62
  "svelte-check": "^4.7.6",
63
63
  "typescript": "^6.0.3",
64
- "vite": "^8.2.2",
65
- "vitest": "^5.0.0"
64
+ "vite": "^8.3.0",
65
+ "vitest": "^5.0.1"
66
66
  },
67
67
  "homepage": "https://www.sveltekit-ui.com",
68
68
  "keywords": [
@@ -79,7 +79,7 @@
79
79
  "access": "public"
80
80
  },
81
81
  "overrides": {
82
- "brace-expansion": "^5.0.8",
82
+ "brace-expansion": "^5.0.12",
83
83
  "cookie": "^0.7.2",
84
84
  "tar": "^7.5.22"
85
85
  }