@sveltia/ui 0.43.0 → 0.44.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.
@@ -290,7 +290,7 @@
290
290
  .resizable-handle:focus-visible, .resizable-handle:hover, .resizable-handle.dragging {
291
291
  outline: none;
292
292
  z-index: 1;
293
- background-color: var(--sui-primary-accent-color-translucent);
293
+ background-color: var(--sui-primary-accent-color-translucent-light);
294
294
  }
295
295
  .resizable-handle:focus-visible .handle-bar, .resizable-handle:hover .handle-bar, .resizable-handle.dragging .handle-bar {
296
296
  background-color: var(--sui-primary-accent-color);
@@ -283,8 +283,7 @@
283
283
  outline: none;
284
284
  }
285
285
  .select-tags span[draggable]:focus-within {
286
- outline: var(--sui-focus-ring-width) solid var(--sui-primary-accent-color-translucent);
287
- outline-offset: 1px;
286
+ outline: var(--sui-focus-ring-width) solid var(--sui-focus-ring-color);
288
287
  }
289
288
  .select-tags span[draggable].drag-source {
290
289
  opacity: 0.4;
@@ -310,6 +309,9 @@
310
309
  .select-tags span[draggable] .label {
311
310
  outline: none;
312
311
  }
312
+ .select-tags span[draggable] :global(button) {
313
+ outline-offset: -2px;
314
+ }
313
315
  .select-tags span[draggable] :global(.icon) {
314
316
  font-size: var(--sui-font-size-large);
315
317
  }</style>
@@ -117,7 +117,7 @@ button:focus-visible {
117
117
  outline: 0;
118
118
  }
119
119
  button:focus-visible span {
120
- outline-color: var(--sui-primary-accent-color-translucent);
120
+ outline-color: var(--sui-focus-ring-color);
121
121
  }
122
122
  button[aria-checked=true] span {
123
123
  background-color: var(--sui-primary-accent-color);
@@ -119,7 +119,12 @@
119
119
 
120
120
  <style>.code-editor {
121
121
  margin: var(--sui-focus-ring-width);
122
+ border-radius: var(--sui-textbox-border-radius);
122
123
  width: calc(100% - var(--sui-focus-ring-width) * 2);
124
+ transition: all 200ms;
125
+ }
126
+ .code-editor:focus-within {
127
+ outline: var(--sui-focus-ring-width) solid var(--sui-focus-ring-color);
123
128
  }
124
129
  .code-editor.flex:not([hidden]) {
125
130
  display: block;
@@ -133,7 +133,12 @@
133
133
 
134
134
  <style>.text-editor {
135
135
  margin: var(--sui-focus-ring-width);
136
+ border-radius: var(--sui-textbox-border-radius);
136
137
  width: calc(100% - var(--sui-focus-ring-width) * 2);
138
+ transition: all 200ms;
139
+ }
140
+ .text-editor:focus-within {
141
+ outline: var(--sui-focus-ring-width) solid var(--sui-focus-ring-color);
137
142
  }
138
143
  .text-editor.flex:not([hidden]) {
139
144
  display: block;
@@ -123,7 +123,6 @@
123
123
  transition-duration: 0ms;
124
124
  }
125
125
  :is(textarea, .clone):focus {
126
- border-color: var(--sui-textbox-border-color-focus, var(--sui-primary-accent-color));
127
126
  color: var(--sui-textbox-foreground-color-focus, var(--sui-textbox-foreground-color));
128
127
  background-color: var(--sui-textbox-background-color-focus, var(--sui-textbox-background-color));
129
128
  }
@@ -172,7 +172,6 @@ input {
172
172
  transition: all 200ms;
173
173
  }
174
174
  input:focus {
175
- border-color: var(--sui-textbox-border-color-focus, var(--sui-primary-accent-color));
176
175
  color: var(--sui-textbox-foreground-color-focus, var(--sui-textbox-foreground-color));
177
176
  background-color: var(--sui-textbox-background-color-focus, var(--sui-textbox-background-color));
178
177
  }
@@ -178,7 +178,8 @@
178
178
  var(--sui-success-color-hue) var(--sui-alert-background-color-saturation)
179
179
  var(--sui-alert-background-color-lightness)
180
180
  );
181
- --sui-focus-ring-width: 4px;
181
+ --sui-focus-ring-width: 2px;
182
+ --sui-focus-ring-color: var(--sui-primary-accent-color-translucent);
182
183
  --sui-primary-border-color: hsl(var(--sui-border-color-2-hsl));
183
184
  --sui-secondary-border-color: hsl(var(--sui-border-color-3-hsl));
184
185
  --sui-error-border-color: hsl(
@@ -324,7 +325,8 @@
324
325
  --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);
325
326
  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);
326
327
  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);
327
- --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);
328
+ --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 60%);
329
+ --sui-primary-accent-color-translucent-light: hsl(var(--sui-base-hue) 80% 50% / 40%);
328
330
  --sui-error-color-hue: 0;
329
331
  --sui-warning-color-hue: 40;
330
332
  --sui-info-color-hue: 210;
@@ -358,7 +360,8 @@
358
360
  --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);
359
361
  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);
360
362
  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);
361
- --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);
363
+ --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 60%);
364
+ --sui-primary-accent-color-translucent-light: hsl(var(--sui-base-hue) 80% 50% / 40%);
362
365
  --sui-error-color-hue: 0;
363
366
  --sui-warning-color-hue: 40;
364
367
  --sui-info-color-hue: 210;
@@ -393,7 +396,8 @@
393
396
  --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);
394
397
  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);
395
398
  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);
396
- --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);
399
+ --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 60%);
400
+ --sui-primary-accent-color-translucent-light: hsl(var(--sui-base-hue) 80% 50% / 40%);
397
401
  --sui-error-color-hue: 0;
398
402
  --sui-warning-color-hue: 40;
399
403
  --sui-info-color-hue: 210;
@@ -429,7 +433,8 @@
429
433
  --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);
430
434
  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);
431
435
  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);
432
- --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);
436
+ --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 60%);
437
+ --sui-primary-accent-color-translucent-light: hsl(var(--sui-base-hue) 80% 50% / 40%);
433
438
  --sui-error-color-hue: 0;
434
439
  --sui-warning-color-hue: 40;
435
440
  --sui-info-color-hue: 210;
@@ -469,7 +474,7 @@
469
474
  }
470
475
  }
471
476
  :global(::selection) {
472
- background-color: var(--sui-primary-accent-color-translucent);
477
+ background-color: var(--sui-primary-accent-color-translucent-light);
473
478
  }
474
479
  :global(*) {
475
480
  -webkit-tap-highlight-color: transparent;
@@ -479,7 +484,7 @@
479
484
  outline-width: 0;
480
485
  }
481
486
  :global(:focus-visible) {
482
- outline-color: var(--sui-primary-accent-color-translucent);
487
+ outline-color: var(--sui-focus-ring-color);
483
488
  z-index: 2;
484
489
  }
485
490
  :global(h1) {
package/dist/index.d.ts CHANGED
@@ -78,4 +78,4 @@ export { default as EmptyState } from "./components/util/empty-state.svelte";
78
78
  export { default as Group } from "./components/util/group.svelte";
79
79
  export { default as Modal } from "./components/util/modal.svelte";
80
80
  export * from "./typedefs.js";
81
- export { initLocales, resources } from "./services/i18n.js";
81
+ export { initLocales, strings } from "./services/i18n.js";
package/dist/index.js CHANGED
@@ -77,7 +77,7 @@ export { default as AppShell } from './components/util/app-shell.svelte';
77
77
  export { default as EmptyState } from './components/util/empty-state.svelte';
78
78
  export { default as Group } from './components/util/group.svelte';
79
79
  export { default as Modal } from './components/util/modal.svelte';
80
- export { initLocales, resources } from './services/i18n.js';
80
+ export { initLocales, strings } from './services/i18n.js';
81
81
 
82
82
  // eslint-disable-next-line import/export
83
83
  export * from './typedefs.js';
@@ -3,7 +3,7 @@
3
3
  * strings as values.
4
4
  * @type {Record<string, Record<string, string>>}
5
5
  */
6
- export const resources: Record<string, Record<string, string>>;
6
+ export const strings: Record<string, Record<string, string>>;
7
7
  export function initLocales({ fallbackLocale, initialLocale }?: {
8
8
  fallbackLocale?: string | undefined;
9
9
  initialLocale?: string | undefined;
@@ -1,21 +1,21 @@
1
1
  import { addMessages, init } from '@sveltia/i18n';
2
2
 
3
- const rawResources = import.meta.glob('../locales/*.yaml', { eager: true, import: 'default' });
3
+ const resources = import.meta.glob('../locales/*.yaml', { eager: true, import: 'default' });
4
4
 
5
5
  /**
6
6
  * Object containing all the locale resources, with the locale names as keys and the corresponding
7
7
  * strings as values.
8
8
  * @type {Record<string, Record<string, string>>}
9
9
  */
10
- export const resources = Object.fromEntries(
11
- Object.entries(rawResources).map(([path, resource]) => [
10
+ export const strings = Object.fromEntries(
11
+ Object.entries(resources).map(([path, resource]) => [
12
12
  /** @type {string} */ (path.match(/.+\/(?<locale>.+?)\.yaml$/)?.groups?.locale),
13
13
  /** @type {Record<string, string>} */ (resource),
14
14
  ]),
15
15
  );
16
16
 
17
17
  /**
18
- * Load strings and initialize the locales. Consumers can use this function or {@link resources} to
18
+ * Load strings and initialize the locales. Consumers can use this function or {@link strings} to
19
19
  * load the localized strings for their application.
20
20
  * @param {object} [init] Initialize options.
21
21
  * @param {string} [init.fallbackLocale] Fallback locale.
@@ -24,7 +24,7 @@ export const resources = Object.fromEntries(
24
24
  * @see https://vitejs.dev/guide/features.html#glob-import
25
25
  */
26
26
  export const initLocales = ({ fallbackLocale = 'en', initialLocale = 'en' } = {}) => {
27
- Object.entries(resources).forEach(([locale, resource]) => {
27
+ Object.entries(strings).forEach(([locale, resource]) => {
28
28
  // Add `_sui` suffix to avoid collision with app localization
29
29
  addMessages(locale, { _sui: resource });
30
30
  });
@@ -29,8 +29,11 @@ class Popup {
29
29
  if (value) {
30
30
  this.checkPosition();
31
31
  } else if (this.anchorElement.getAttribute('aria-expanded') === 'true') {
32
- this.anchorElement.focus();
33
- this.anchorElement.removeAttribute('aria-controls');
32
+ // Wait for the popup to close before focusing the anchor, otherwise the focus will be lost
33
+ window.requestAnimationFrame(() => {
34
+ this.anchorElement.focus();
35
+ this.anchorElement.removeAttribute('aria-controls');
36
+ });
34
37
  }
35
38
 
36
39
  this.anchorElement.setAttribute('aria-expanded', String(value));
@@ -31,7 +31,7 @@
31
31
  }
32
32
 
33
33
  ::selection {
34
- background-color: var(--sui-primary-accent-color-translucent);
34
+ background-color: var(--sui-primary-accent-color-translucent-light);
35
35
  }
36
36
 
37
37
  * {
@@ -44,7 +44,7 @@
44
44
  }
45
45
 
46
46
  :focus-visible {
47
- outline-color: var(--sui-primary-accent-color-translucent);
47
+ outline-color: var(--sui-focus-ring-color);
48
48
  z-index: 2;
49
49
  }
50
50
 
@@ -20,7 +20,8 @@
20
20
  --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);
21
21
  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);
22
22
  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%); // white
23
- --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);
23
+ --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 60%);
24
+ --sui-primary-accent-color-translucent-light: hsl(var(--sui-base-hue) 80% 50% / 40%);
24
25
  // Alerts
25
26
  --sui-error-color-hue: 0;
26
27
  --sui-warning-color-hue: 40;
@@ -56,7 +57,8 @@
56
57
  --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);
57
58
  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);
58
59
  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%); // white
59
- --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);
60
+ --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 60%);
61
+ --sui-primary-accent-color-translucent-light: hsl(var(--sui-base-hue) 80% 50% / 40%);
60
62
  // Alerts
61
63
  --sui-error-color-hue: 0;
62
64
  --sui-warning-color-hue: 40;
@@ -127,7 +129,8 @@
127
129
  var(--sui-alert-background-color-lightness)
128
130
  );
129
131
  // Outline
130
- --sui-focus-ring-width: 4px;
132
+ --sui-focus-ring-width: 2px;
133
+ --sui-focus-ring-color: var(--sui-primary-accent-color-translucent);
131
134
  // Borders
132
135
  --sui-primary-border-color: hsl(var(--sui-border-color-2-hsl));
133
136
  --sui-secondary-border-color: hsl(var(--sui-border-color-3-hsl));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltia/ui",
3
- "version": "0.43.0",
3
+ "version": "0.44.1",
4
4
  "description": "A collection of Svelte components and utilities for building user interfaces.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,42 +33,42 @@
33
33
  "!dist/**/*.test.*"
34
34
  ],
35
35
  "dependencies": {
36
- "@lexical/code": "^0.47.0",
37
- "@lexical/code-prism": "^0.47.0",
38
- "@lexical/dragon": "^0.47.0",
39
- "@lexical/extension": "^0.47.0",
40
- "@lexical/history": "^0.47.0",
41
- "@lexical/link": "^0.47.0",
42
- "@lexical/list": "^0.47.0",
43
- "@lexical/markdown": "^0.47.0",
44
- "@lexical/rich-text": "^0.47.0",
45
- "@lexical/selection": "^0.47.0",
46
- "@lexical/table": "^0.47.0",
47
- "@lexical/utils": "^0.47.0",
36
+ "@lexical/code": "^0.48.0",
37
+ "@lexical/code-prism": "^0.48.0",
38
+ "@lexical/dragon": "^0.48.0",
39
+ "@lexical/extension": "^0.48.0",
40
+ "@lexical/history": "^0.48.0",
41
+ "@lexical/link": "^0.48.0",
42
+ "@lexical/list": "^0.48.0",
43
+ "@lexical/markdown": "^0.48.0",
44
+ "@lexical/rich-text": "^0.48.0",
45
+ "@lexical/selection": "^0.48.0",
46
+ "@lexical/table": "^0.48.0",
47
+ "@lexical/utils": "^0.48.0",
48
48
  "@sveltia/i18n": "^1.1.3",
49
49
  "@sveltia/utils": "^0.10.7",
50
- "lexical": "^0.47.0",
50
+ "lexical": "^0.48.0",
51
51
  "prismjs": "^1.30.0"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@rollup/plugin-yaml": "^5.0.0",
55
55
  "@sveltejs/adapter-auto": "^7.0.1",
56
- "@sveltejs/kit": "^2.69.2",
56
+ "@sveltejs/kit": "^2.69.3",
57
57
  "@sveltejs/package": "^2.5.8",
58
58
  "@sveltejs/vite-plugin-svelte": "^7.2.0",
59
59
  "@vitest/coverage-v8": "^4.1.10",
60
60
  "cspell": "^10.0.1",
61
61
  "eslint": "^9.39.5",
62
- "eslint-config-airbnb-extended": "^3.1.0",
62
+ "eslint-config-airbnb-extended": "^3.1.1",
63
63
  "eslint-config-prettier": "^10.1.8",
64
64
  "eslint-plugin-import": "^2.32.0",
65
65
  "eslint-plugin-jsdoc": "^63.0.13",
66
- "eslint-plugin-package-json": "^1.5.0",
66
+ "eslint-plugin-package-json": "^1.6.0",
67
67
  "eslint-plugin-svelte": "^3.20.0",
68
68
  "globals": "^17.7.0",
69
69
  "happy-dom": "^20.10.6",
70
- "oxlint": "^1.73.0",
71
- "postcss": "^8.5.16",
70
+ "oxlint": "^1.74.0",
71
+ "postcss": "^8.5.19",
72
72
  "postcss-html": "^1.8.1",
73
73
  "prettier": "^3.9.5",
74
74
  "prettier-plugin-svelte": "^4.1.1",
@@ -76,8 +76,8 @@
76
76
  "stylelint": "^17.14.0",
77
77
  "stylelint-config-recommended-scss": "^17.0.1",
78
78
  "stylelint-scss": "^7.2.0",
79
- "svelte": "^5.56.4",
80
- "svelte-check": "^4.7.2",
79
+ "svelte": "^5.56.5",
80
+ "svelte-check": "^4.7.3",
81
81
  "svelte-preprocess": "^6.0.5",
82
82
  "tslib": "^2.8.1",
83
83
  "vite": "^8.1.4",