@sveltia/ui 0.1.5 → 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 (70) hide show
  1. package/package/components/composite/calendar.svelte +5 -6
  2. package/package/components/composite/calendar.svelte.d.ts +8 -1
  3. package/package/components/composite/checkbox-group.svelte.d.ts +11 -1
  4. package/package/components/composite/combobox.svelte +21 -17
  5. package/package/components/composite/combobox.svelte.d.ts +16 -1
  6. package/package/components/composite/disclosure.svelte.d.ts +10 -1
  7. package/package/components/composite/grid.svelte.d.ts +10 -1
  8. package/package/components/composite/listbox.svelte +1 -1
  9. package/package/components/composite/listbox.svelte.d.ts +20 -7
  10. package/package/components/composite/menu-item-group.svelte.d.ts +11 -1
  11. package/package/components/composite/menu.svelte.d.ts +14 -5
  12. package/package/components/composite/radio-button-group.svelte.d.ts +10 -1
  13. package/package/components/composite/select-button-group.svelte.d.ts +14 -1
  14. package/package/components/composite/select.svelte.d.ts +14 -2
  15. package/package/components/composite/tab-list.svelte.d.ts +22 -9
  16. package/package/components/core/button.svelte +25 -14
  17. package/package/components/core/button.svelte.d.ts +50 -19
  18. package/package/components/core/checkbox.svelte +11 -1
  19. package/package/components/core/checkbox.svelte.d.ts +16 -1
  20. package/package/components/core/dialog.svelte +50 -36
  21. package/package/components/core/dialog.svelte.d.ts +29 -1
  22. package/package/components/core/drawer.svelte +338 -0
  23. package/package/components/core/drawer.svelte.d.ts +59 -0
  24. package/package/components/core/grid-cell.svelte.d.ts +9 -1
  25. package/package/components/core/group.svelte.d.ts +11 -1
  26. package/package/components/core/icon.svelte.d.ts +8 -1
  27. package/package/components/core/menu-button.svelte.d.ts +17 -1
  28. package/package/components/core/menu-item-checkbox.svelte.d.ts +12 -2
  29. package/package/components/core/menu-item-radio.svelte.d.ts +12 -2
  30. package/package/components/core/menu-item.svelte.d.ts +17 -2
  31. package/package/components/core/number-input.svelte +1 -1
  32. package/package/components/core/number-input.svelte.d.ts +17 -3
  33. package/package/components/core/option.svelte +6 -0
  34. package/package/components/core/option.svelte.d.ts +31 -6
  35. package/package/components/core/password-input.svelte +1 -1
  36. package/package/components/core/password-input.svelte.d.ts +15 -4
  37. package/package/components/core/radio-button.svelte +1 -1
  38. package/package/components/core/radio-button.svelte.d.ts +11 -1
  39. package/package/components/core/row-group.svelte.d.ts +9 -1
  40. package/package/components/core/row.svelte.d.ts +11 -1
  41. package/package/components/core/search-bar.svelte +3 -2
  42. package/package/components/core/search-bar.svelte.d.ts +25 -11
  43. package/package/components/core/select-button.svelte.d.ts +19 -2
  44. package/package/components/core/separator.svelte.d.ts +7 -1
  45. package/package/components/core/slider.svelte +2 -1
  46. package/package/components/core/slider.svelte.d.ts +17 -1
  47. package/package/components/core/spacer.svelte.d.ts +7 -1
  48. package/package/components/core/switch.svelte +6 -0
  49. package/package/components/core/switch.svelte.d.ts +11 -1
  50. package/package/components/core/tab-panel.svelte.d.ts +9 -1
  51. package/package/components/core/tab.svelte.d.ts +15 -1
  52. package/package/components/core/text-area.svelte.d.ts +25 -11
  53. package/package/components/core/text-input.svelte +3 -2
  54. package/package/components/core/text-input.svelte.d.ts +33 -15
  55. package/package/components/core/toolbar.svelte +3 -3
  56. package/package/components/core/toolbar.svelte.d.ts +10 -1
  57. package/package/components/editor/markdown.svelte +1 -1
  58. package/package/components/editor/markdown.svelte.d.ts +7 -1
  59. package/package/components/helpers/popup.d.ts +7 -2
  60. package/package/components/helpers/popup.js +11 -0
  61. package/package/components/util/app-shell.svelte +128 -58
  62. package/package/components/util/app-shell.svelte.d.ts +11 -1
  63. package/package/components/util/popup.svelte +24 -14
  64. package/package/components/util/popup.svelte.d.ts +24 -8
  65. package/package/components/util/portal.svelte.d.ts +8 -1
  66. package/package/index.d.ts +2 -0
  67. package/package/index.js +5 -5
  68. package/package/styles/core.scss +3 -3
  69. package/package/styles/variables.scss +127 -57
  70. package/package.json +23 -13
@@ -5,11 +5,25 @@
5
5
  * @see https://w3c.github.io/aria/#tab
6
6
  * @see https://w3c.github.io/aria-practices/#tabpanel
7
7
  */
8
- export default class Tab {
8
+ export default class Tab extends SvelteComponentTyped<{
9
+ [x: string]: any;
10
+ class?: string;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {
14
+ 'start-icon': {
15
+ slot: string;
16
+ };
17
+ default: {};
18
+ 'end-icon': {
19
+ slot: string;
20
+ };
21
+ }> {
9
22
  }
10
23
  export type TabProps = typeof __propDef.props;
11
24
  export type TabEvents = typeof __propDef.events;
12
25
  export type TabSlots = typeof __propDef.slots;
26
+ import { SvelteComponentTyped } from "svelte";
13
27
  declare const __propDef: {
14
28
  props: {
15
29
  [x: string]: any;
@@ -2,26 +2,40 @@
2
2
  /** @typedef {typeof __propDef.events} TextAreaEvents */
3
3
  /** @typedef {typeof __propDef.slots} TextAreaSlots */
4
4
  /** @see https://w3c.github.io/aria/#textbox */
5
- export default class TextArea {
5
+ export default class TextArea extends SvelteComponentTyped<{
6
+ [x: string]: any;
7
+ class?: string;
8
+ element?: HTMLTextAreaElement;
9
+ name?: string;
10
+ value?: string;
11
+ autoResize?: boolean;
12
+ }, {
13
+ click: MouseEvent;
14
+ input: Event;
15
+ keypress: KeyboardEvent;
16
+ } & {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {}> {
6
19
  /**accessor*/
7
- set class(arg: any);
8
- get class(): any;
20
+ set class(arg: string);
21
+ get class(): string;
9
22
  /**accessor*/
10
- set element(arg: any);
11
- get element(): any;
23
+ set element(arg: HTMLTextAreaElement);
24
+ get element(): HTMLTextAreaElement;
12
25
  /**accessor*/
13
- set name(arg: any);
14
- get name(): any;
26
+ set name(arg: string);
27
+ get name(): string;
15
28
  /**accessor*/
16
- set value(arg: any);
17
- get value(): any;
29
+ set value(arg: string);
30
+ get value(): string;
18
31
  /**accessor*/
19
- set autoResize(arg: any);
20
- get autoResize(): any;
32
+ set autoResize(arg: boolean);
33
+ get autoResize(): boolean;
21
34
  }
22
35
  export type TextAreaProps = typeof __propDef.props;
23
36
  export type TextAreaEvents = typeof __propDef.events;
24
37
  export type TextAreaSlots = typeof __propDef.slots;
38
+ import { SvelteComponentTyped } from "svelte";
25
39
  declare const __propDef: {
26
40
  props: {
27
41
  [x: string]: any;
@@ -51,6 +51,7 @@
51
51
  type="text"
52
52
  {role}
53
53
  name={name || undefined}
54
+ tabindex={disabled ? -1 : 0}
54
55
  {readOnly}
55
56
  aria-readonly={readOnly ? true : undefined}
56
57
  {disabled}
@@ -99,7 +100,7 @@ input:focus {
99
100
  border-color: var(--primary-accent-color);
100
101
  }
101
102
  input:read-only {
102
- color: var(--ternary-foreground-color);
103
+ color: var(--tertiary-foreground-color);
103
104
  border-color: var(--control-border-color) !important;
104
105
  }
105
106
  input:disabled {
@@ -122,7 +123,7 @@ input ~ :global(button):last-child {
122
123
  border-radius: 0 4px 4px 0;
123
124
  }
124
125
  input ~ :global(button) :global(.icon) {
125
- font-size: 20px;
126
+ font-size: var(--font-size--xx-large);
126
127
  }
127
128
 
128
129
  .label {
@@ -2,32 +2,50 @@
2
2
  /** @typedef {typeof __propDef.events} TextInputEvents */
3
3
  /** @typedef {typeof __propDef.slots} TextInputSlots */
4
4
  /** @see https://w3c.github.io/aria/#textbox */
5
- export default class TextInput {
5
+ export default class TextInput extends SvelteComponentTyped<{
6
+ [x: string]: any;
7
+ class?: string;
8
+ element?: HTMLInputElement;
9
+ role?: "textbox" | "searchbox" | "combobox" | "spinbutton";
10
+ disabled?: boolean;
11
+ name?: string;
12
+ value?: string;
13
+ readOnly?: boolean;
14
+ }, {
15
+ input: Event;
16
+ keydown: KeyboardEvent;
17
+ keyup: KeyboardEvent;
18
+ keypress: KeyboardEvent;
19
+ change: Event;
20
+ } & {
21
+ [evt: string]: CustomEvent<any>;
22
+ }, {}> {
6
23
  /**accessor*/
7
- set class(arg: any);
8
- get class(): any;
24
+ set class(arg: string);
25
+ get class(): string;
9
26
  /**accessor*/
10
- set element(arg: any);
11
- get element(): any;
27
+ set element(arg: HTMLInputElement);
28
+ get element(): HTMLInputElement;
12
29
  /**accessor*/
13
- set role(arg: any);
14
- get role(): any;
30
+ set role(arg: "textbox" | "searchbox" | "combobox" | "spinbutton");
31
+ get role(): "textbox" | "searchbox" | "combobox" | "spinbutton";
15
32
  /**accessor*/
16
- set readOnly(arg: any);
17
- get readOnly(): any;
33
+ set readOnly(arg: boolean);
34
+ get readOnly(): boolean;
18
35
  /**accessor*/
19
- set disabled(arg: any);
20
- get disabled(): any;
36
+ set disabled(arg: boolean);
37
+ get disabled(): boolean;
21
38
  /**accessor*/
22
- set name(arg: any);
23
- get name(): any;
39
+ set name(arg: string);
40
+ get name(): string;
24
41
  /**accessor*/
25
- set value(arg: any);
26
- get value(): any;
42
+ set value(arg: string);
43
+ get value(): string;
27
44
  }
28
45
  export type TextInputProps = typeof __propDef.props;
29
46
  export type TextInputEvents = typeof __propDef.events;
30
47
  export type TextInputSlots = typeof __propDef.slots;
48
+ import { SvelteComponentTyped } from "svelte";
31
49
  declare const __propDef: {
32
50
  props: {
33
51
  [x: string]: any;
@@ -42,7 +42,7 @@
42
42
  background-color: var(--secondary-background-color);
43
43
  }
44
44
  [role=toolbar].secondary {
45
- background-color: var(--ternary-background-color);
45
+ background-color: var(--tertiary-background-color);
46
46
  }
47
47
  [role=toolbar][aria-orientation=horizontal] {
48
48
  height: var(--toolbar-size);
@@ -65,10 +65,10 @@
65
65
  gap: 8px;
66
66
  margin: 0;
67
67
  padding: 0 8px;
68
- font-size: 16px;
68
+ font-size: var(--font-size--large);
69
69
  }
70
70
  [role=toolbar] :global(h2) :global(span) {
71
- font-size: 12px;
71
+ font-size: var(--font-size--small);
72
72
  font-weight: normal;
73
73
  opacity: 0.8;
74
74
  }</style>
@@ -5,11 +5,20 @@
5
5
  * @see https://w3c.github.io/aria/#toolbar
6
6
  * @see https://w3c.github.io/aria-practices/#toolbar
7
7
  */
8
- export default class Toolbar {
8
+ export default class Toolbar extends SvelteComponentTyped<{
9
+ [x: string]: any;
10
+ class?: string;
11
+ orientation?: "horizontal" | "vertical";
12
+ }, {
13
+ [evt: string]: CustomEvent<any>;
14
+ }, {
15
+ default: {};
16
+ }> {
9
17
  }
10
18
  export type ToolbarProps = typeof __propDef.props;
11
19
  export type ToolbarEvents = typeof __propDef.events;
12
20
  export type ToolbarSlots = typeof __propDef.slots;
21
+ import { SvelteComponentTyped } from "svelte";
13
22
  declare const __propDef: {
14
23
  props: {
15
24
  [x: string]: any;
@@ -65,7 +65,7 @@ div :global([role="toolbar"]) {
65
65
  gap: 8px;
66
66
  border-radius: 4px 4px 0 0;
67
67
  padding: 8px;
68
- background-color: var(--ternary-background-color);
68
+ background-color: var(--tertiary-background-color);
69
69
  }
70
70
  div :global([role="toolbar"]) :global(button) {
71
71
  flex: none;
@@ -1,11 +1,17 @@
1
1
  /** @typedef {typeof __propDef.props} MarkdownProps */
2
2
  /** @typedef {typeof __propDef.events} MarkdownEvents */
3
3
  /** @typedef {typeof __propDef.slots} MarkdownSlots */
4
- export default class Markdown {
4
+ export default class Markdown extends SvelteComponentTyped<{
5
+ disabled?: boolean;
6
+ value?: string;
7
+ }, {
8
+ [evt: string]: CustomEvent<any>;
9
+ }, {}> {
5
10
  }
6
11
  export type MarkdownProps = typeof __propDef.props;
7
12
  export type MarkdownEvents = typeof __propDef.events;
8
13
  export type MarkdownSlots = typeof __propDef.slots;
14
+ import { SvelteComponentTyped } from "svelte";
9
15
  declare const __propDef: {
10
16
  props: {
11
17
  disabled?: boolean;
@@ -11,8 +11,13 @@ declare class Popup {
11
11
  * @param {PopupPosition} position
12
12
  */
13
13
  constructor(anchorElement: HTMLElement, popupElement: HTMLElement, position: PopupPosition);
14
- open: any;
15
- style: any;
14
+ open: import("svelte/store").Writable<boolean>;
15
+ style: import("svelte/store").Writable<{
16
+ inset: any;
17
+ zIndex: any;
18
+ width: any;
19
+ height: any;
20
+ }>;
16
21
  observer: IntersectionObserver;
17
22
  anchorElement: HTMLElement;
18
23
  popupElement: HTMLElement;
@@ -98,6 +98,17 @@ class Popup {
98
98
  }
99
99
  });
100
100
 
101
+ this.anchorElement.addEventListener('keydown', (event) => {
102
+ const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
103
+
104
+ if (!ctrlKey && !metaKey && !shiftKey && !altKey) {
105
+ if (key === ' ' || key === 'Enter') {
106
+ event.stopPropagation();
107
+ this.open.set(!get(this.open));
108
+ }
109
+ }
110
+ });
111
+
101
112
  this.popupElement.addEventListener('click', (event) => {
102
113
  if (get(this.open) && event.target !== this.anchorElement) {
103
114
  this.open.set(false);
@@ -41,34 +41,144 @@
41
41
 
42
42
  <style global>@import url("https://fonts.googleapis.com/css2?family=Merriweather+Sans:ital,wght@0,300;0,600;1,300&family=Noto+Sans+Mono&display=swap");
43
43
  @import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block");
44
+ :global(:root[data-theme=light]) {
45
+ --foreground-color-1-hsl: var(--base-hue) 5% 0%;
46
+ --foreground-color-2-hsl: var(--base-hue) 5% 20%;
47
+ --foreground-color-3-hsl: var(--base-hue) 5% 40%;
48
+ --foreground-color-4-hsl: var(--base-hue) 5% 60%;
49
+ --border-color-1-hsl: var(--base-hue) 5% 75%;
50
+ --border-color-2-hsl: var(--base-hue) 5% 80%;
51
+ --background-color-1-hsl: var(--base-hue) 5% 100%;
52
+ --background-color-2-hsl: var(--base-hue) 5% 98%;
53
+ --background-color-3-hsl: var(--base-hue) 5% 94%;
54
+ --background-color-4-hsl: var(--base-hue) 5% 90%;
55
+ --background-color-5-hsl: var(--base-hue) 5% 86%;
56
+ --shadow-color: var(--base-hue) 10% 0%;
57
+ --primary-accent-color: hsl(var(--base-hue) 80% 45%);
58
+ --primary-accent-color-lighter: hsl(var(--base-hue) 80% 40%);
59
+ --primary-accent-color-darker: hsl(var(--base-hue) 80% 50%);
60
+ --primary-accent-color-foreground: hsl(var(--base-hue) 10% 100%);
61
+ --danger-color-hue: 0;
62
+ --warning-color-hue: 40;
63
+ --success-color-hue: 100;
64
+ --info-color-hue: 220;
65
+ --alert-foreground-color-saturation: 88%;
66
+ --alert-foreground-color-lightness: 28%;
67
+ --alert-background-color-saturation: 68%;
68
+ --alert-background-color-lightness: 88%;
69
+ --alert-border-color-saturation: 48%;
70
+ --alert-border-color-lightness: 68%;
71
+ }
72
+
73
+ :global(:root[data-theme=dark]) {
74
+ --foreground-color-1-hsl: var(--base-hue) 10% 100%;
75
+ --foreground-color-2-hsl: var(--base-hue) 10% 80%;
76
+ --foreground-color-3-hsl: var(--base-hue) 10% 60%;
77
+ --foreground-color-4-hsl: var(--base-hue) 10% 40%;
78
+ --border-color-1-hsl: var(--base-hue) 10% 25%;
79
+ --border-color-2-hsl: var(--base-hue) 10% 20%;
80
+ --background-color-1-hsl: var(--base-hue) 10% 10%;
81
+ --background-color-2-hsl: var(--base-hue) 10% 12%;
82
+ --background-color-3-hsl: var(--base-hue) 10% 16%;
83
+ --background-color-4-hsl: var(--base-hue) 10% 20%;
84
+ --background-color-5-hsl: var(--base-hue) 10% 24%;
85
+ --shadow-color: var(--base-hue) 10% 0%;
86
+ --primary-accent-color: hsl(var(--base-hue) 100% 45%);
87
+ --primary-accent-color-lighter: hsl(var(--base-hue) 100% 55%);
88
+ --primary-accent-color-darker: hsl(var(--base-hue) 100% 35%);
89
+ --primary-accent-color-foreground: hsl(var(--base-hue) 10% 100%);
90
+ --danger-color-hue: 0;
91
+ --warning-color-hue: 40;
92
+ --success-color-hue: 100;
93
+ --info-color-hue: 220;
94
+ --alert-foreground-color-saturation: 48%;
95
+ --alert-foreground-color-lightness: 68%;
96
+ --alert-background-color-saturation: 88%;
97
+ --alert-background-color-lightness: 8%;
98
+ --alert-border-color-saturation: 38%;
99
+ --alert-border-color-lightness: 18%;
100
+ }
101
+
44
102
  :global(:root) {
45
- --hue: 210;
103
+ --base-hue: 210;
46
104
  --highlight-foreground-color: hsl(var(--foreground-color-1-hsl));
47
105
  --primary-foreground-color: hsl(var(--foreground-color-2-hsl));
48
106
  --secondary-foreground-color: hsl(var(--foreground-color-3-hsl));
49
- --ternary-foreground-color: hsl(var(--foreground-color-3-hsl));
107
+ --tertiary-foreground-color: hsl(var(--foreground-color-3-hsl));
50
108
  --disabled-foreground-color: hsl(var(--foreground-color-4-hsl));
51
- --danger-foreground-color: hsl(var(--danger-color));
109
+ --danger-foreground-color: hsl(
110
+ var(--danger-color-hue) var(--alert-foreground-color-saturation)
111
+ var(--alert-foreground-color-lightness)
112
+ );
113
+ --warning-foreground-color: hsl(
114
+ var(--warning-color-hue) var(--alert-foreground-color-saturation)
115
+ var(--alert-foreground-color-lightness)
116
+ );
117
+ --success-foreground-color: hsl(
118
+ var(--success-color-hue) var(--alert-foreground-color-saturation)
119
+ var(--alert-foreground-color-lightness)
120
+ );
121
+ --info-foreground-color: hsl(
122
+ var(--info-color-hue) var(--alert-foreground-color-saturation)
123
+ var(--alert-foreground-color-lightness)
124
+ );
52
125
  --highlight-background-color: hsl(var(--background-color-5-hsl));
53
126
  --content-background-color: hsl(var(--background-color-1-hsl));
54
127
  --primary-background-color: hsl(var(--background-color-2-hsl));
128
+ --primary-background-color-translucent: hsl(var(--background-color-2-hsl) / 80%);
55
129
  --secondary-background-color: hsl(var(--background-color-3-hsl));
56
- --secondary-background-color-translucent: hsl(var(--background-color-3-hsl) / 88%);
57
- --ternary-background-color: hsl(var(--background-color-4-hsl));
130
+ --secondary-background-color-translucent: hsl(var(--background-color-3-hsl) / 80%);
131
+ --tertiary-background-color: hsl(var(--background-color-4-hsl));
132
+ --tertiary-background-color-translucent: hsl(var(--background-color-4-hsl) / 80%);
58
133
  --control-background-color: hsl(var(--background-color-1-hsl));
59
134
  --disabled-background-color: hsl(var(--background-color-4-hsl));
60
- --danger-background-color: hsl(var(--danger-color));
135
+ --danger-background-color: hsl(
136
+ var(--danger-color-hue) var(--alert-background-color-saturation)
137
+ var(--alert-background-color-lightness)
138
+ );
139
+ --warning-background-color: hsl(
140
+ var(--warning-color-hue) var(--alert-background-color-saturation)
141
+ var(--alert-background-color-lightness)
142
+ );
143
+ --success-background-color: hsl(
144
+ var(--success-color-hue) var(--alert-background-color-saturation)
145
+ var(--alert-background-color-lightness)
146
+ );
147
+ --info-background-color: hsl(
148
+ var(--info-color-hue) var(--alert-background-color-saturation)
149
+ var(--alert-background-color-lightness)
150
+ );
61
151
  --primary-border-color: hsl(var(--border-color-1-hsl));
62
152
  --secondary-border-color: hsl(var(--border-color-2-hsl));
63
153
  --control-border-color: hsl(var(--border-color-2-hsl));
154
+ --danger-border-color: hsl(
155
+ var(--danger-color-hue) var(--alert-border-color-saturation) var(--alert-border-color-lightness)
156
+ );
157
+ --warning-border-color: hsl(
158
+ var(--warning-color-hue) var(--alert-border-color-saturation)
159
+ var(--alert-border-color-lightness)
160
+ );
161
+ --success-border-color: hsl(
162
+ var(--success-color-hue) var(--alert-border-color-saturation)
163
+ var(--alert-border-color-lightness)
164
+ );
165
+ --info-border-color: hsl(
166
+ var(--info-color-hue) var(--alert-border-color-saturation) var(--alert-border-color-lightness)
167
+ );
64
168
  --popup-shadow-color: hsl(var(--shadow-color) / 40%);
65
169
  --popup-backdrop-color: hsl(var(--shadow-color) / 40%);
66
- --default-font-family: "Merriweather Sans", sans-serif;
67
- --default-font-size: 13px;
68
- --default-font-weight-regular: 300;
69
- --default-font-weight-bold: 600;
70
- --monospace-font-family: "Noto Sans Mono", monospace;
71
- --monospace-font-size: 13px;
170
+ --font-family--default: "Merriweather Sans", sans-serif;
171
+ --font-size--xxx-large: 24px;
172
+ --font-size--xx-large: 20px;
173
+ --font-size--x-large: 18px;
174
+ --font-size--large: 16px;
175
+ --font-size--default: 14px;
176
+ --font-size--small: 12px;
177
+ --font-size--x-small: 10px;
178
+ --font-weight--normal: 300;
179
+ --font-weight--bold: 600;
180
+ --font-family--monospace: "Noto Sans Mono", monospace;
181
+ --font-size--monospace: 13px;
72
182
  --control--small--border-width: 1px;
73
183
  --control--small--border-radius: 2px;
74
184
  --control--small--height: 24px;
@@ -101,46 +211,6 @@
101
211
  --tab--large--height: var(--control--large--height);
102
212
  }
103
213
 
104
- :global(:root[data-theme=light]) {
105
- --foreground-color-1-hsl: var(--hue) 5% 0%;
106
- --foreground-color-2-hsl: var(--hue) 5% 20%;
107
- --foreground-color-3-hsl: var(--hue) 5% 40%;
108
- --foreground-color-4-hsl: var(--hue) 5% 60%;
109
- --border-color-1-hsl: var(--hue) 5% 75%;
110
- --border-color-2-hsl: var(--hue) 5% 80%;
111
- --background-color-1-hsl: var(--hue) 5% 100%;
112
- --background-color-2-hsl: var(--hue) 5% 98%;
113
- --background-color-3-hsl: var(--hue) 5% 96%;
114
- --background-color-4-hsl: var(--hue) 5% 94%;
115
- --background-color-5-hsl: var(--hue) 5% 80%;
116
- --shadow-color: var(--hue) 10% 0%;
117
- --primary-accent-color: hsl(var(--hue) 80% 45%);
118
- --primary-accent-color-lighter: hsl(var(--hue) 80% 40%);
119
- --primary-accent-color-darker: hsl(var(--hue) 80% 50%);
120
- --primary-accent-color-foreground: hsl(var(--hue) 10% 100%);
121
- --danger-color: 0 68% 42%;
122
- }
123
-
124
- :global(:root[data-theme=dark]) {
125
- --foreground-color-1-hsl: var(--hue) 10% 100%;
126
- --foreground-color-2-hsl: var(--hue) 10% 80%;
127
- --foreground-color-3-hsl: var(--hue) 10% 60%;
128
- --foreground-color-4-hsl: var(--hue) 10% 40%;
129
- --border-color-1-hsl: var(--hue) 10% 25%;
130
- --border-color-2-hsl: var(--hue) 10% 20%;
131
- --background-color-1-hsl: var(--hue) 10% 8%;
132
- --background-color-2-hsl: var(--hue) 10% 10%;
133
- --background-color-3-hsl: var(--hue) 10% 12%;
134
- --background-color-4-hsl: var(--hue) 10% 14%;
135
- --background-color-5-hsl: var(--hue) 10% 18%;
136
- --shadow-color: var(--hue) 10% 0%;
137
- --primary-accent-color: hsl(var(--hue) 100% 45%);
138
- --primary-accent-color-lighter: hsl(var(--hue) 100% 50%);
139
- --primary-accent-color-darker: hsl(var(--hue) 100% 40%);
140
- --primary-accent-color-foreground: hsl(var(--hue) 10% 100%);
141
- --danger-color: 0 68% 42%;
142
- }
143
-
144
214
  :global(.material-symbols-outlined) {
145
215
  font-variation-settings: "FILL" 0, "wght" 300, "GRAD" 0, "opsz" 24;
146
216
  }
@@ -171,11 +241,11 @@
171
241
  :global(h5),
172
242
  :global(h6) {
173
243
  margin: 0;
174
- font-weight: var(--default-font-weight-bold);
244
+ font-weight: var(--font-weight--bold);
175
245
  }
176
246
 
177
247
  :global(strong) {
178
- font-weight: var(--default-font-weight-bold);
248
+ font-weight: var(--font-weight--bold);
179
249
  }
180
250
 
181
251
  :global(a) {
@@ -217,7 +287,7 @@
217
287
 
218
288
  :global(code),
219
289
  :global(pre) {
220
- font-family: var(--monospace-font-family);
290
+ font-family: var(--font-family--monospace);
221
291
  }
222
292
 
223
293
  :global(pre) {
@@ -273,9 +343,9 @@
273
343
  height: 100%;
274
344
  color: var(--primary-foreground-color);
275
345
  background-color: var(--primary-background-color);
276
- font-family: var(--default-font-family);
277
- font-size: var(--default-font-size);
278
- font-weight: var(--default-font-weight-regular);
346
+ font-family: var(--font-family--default);
347
+ font-size: var(--font-size--default);
348
+ font-weight: var(--font-weight--normal);
279
349
  -webkit-user-select: none;
280
350
  user-select: none;
281
351
  touch-action: none;
@@ -6,11 +6,21 @@
6
6
  * dark/light mode switching. This component has to be placed directly under `<body>` (or
7
7
  * `<div style="display:contents">` in a SvelteKit app).
8
8
  */
9
- export default class AppShell {
9
+ export default class AppShell extends SvelteComponentTyped<{
10
+ [x: string]: never;
11
+ }, {
12
+ dragover: DragEvent;
13
+ drop: DragEvent;
14
+ } & {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {
17
+ default: {};
18
+ }> {
10
19
  }
11
20
  export type AppShellProps = typeof __propDef.props;
12
21
  export type AppShellEvents = typeof __propDef.events;
13
22
  export type AppShellSlots = typeof __propDef.slots;
23
+ import { SvelteComponentTyped } from "svelte";
14
24
  declare const __propDef: {
15
25
  props: {
16
26
  [x: string]: never;
@@ -18,6 +18,12 @@
18
18
  */
19
19
  export let dialog = undefined;
20
20
 
21
+ /**
22
+ * Reference to the content element.
23
+ * @type {(HTMLElement|undefined)}
24
+ */
25
+ export let content = undefined;
26
+
21
27
  /**
22
28
  * Where to show the dropdown menu.
23
29
  * @type {PopupPosition}
@@ -29,7 +35,6 @@
29
35
  let showDialog = false;
30
36
  let showContent = false;
31
37
  let contentType;
32
- let closeDialogTimer = 0;
33
38
 
34
39
  let style = writable({
35
40
  inset: undefined,
@@ -46,27 +51,32 @@
46
51
  }
47
52
 
48
53
  const openDialog = () => {
49
- window.clearTimeout(closeDialogTimer);
50
54
  (document.querySelector('.sui.app-shell') || document.body).appendChild(dialog);
51
55
  showContent = true;
52
56
  dialog.showModal();
53
57
 
54
58
  window.requestAnimationFrame(() => {
55
59
  showDialog = true;
60
+
61
+ window.requestAnimationFrame(() => {
62
+ (dialog.querySelector('[tabindex]') || dialog).focus();
63
+ });
56
64
  });
57
65
  };
58
66
 
59
- const closeDialog = () => {
67
+ const closeDialog = async () => {
60
68
  showDialog = false;
61
69
 
62
- closeDialogTimer = window.setTimeout(() => {
63
- showContent = false;
64
- dialog?.close();
65
- dialog?.remove();
66
- }, 500);
70
+ await new Promise((resolve) => {
71
+ content.addEventListener('transitionend', () => resolve(), { once: true });
72
+ });
73
+
74
+ showContent = false;
75
+ dialog?.close();
76
+ dialog?.remove();
67
77
  };
68
78
 
69
- $: {
79
+ const toggleDialog = () => {
70
80
  if (dialog) {
71
81
  if ($open) {
72
82
  openDialog();
@@ -74,7 +84,10 @@
74
84
  closeDialog();
75
85
  }
76
86
  }
77
- }
87
+ };
88
+
89
+ // Call the function only when the `$open` prop is changed
90
+ $: toggleDialog($open);
78
91
 
79
92
  onMount(() => {
80
93
  dialog.remove();
@@ -88,11 +101,8 @@
88
101
  </script>
89
102
 
90
103
  <dialog class="sui popup" bind:this={dialog} class:open={showDialog} {...$$restProps}>
91
- <!-- Prevent the first item in the slot, e.g. a menu item, from being focused by adding `tabindex`
92
- to the container -->
93
- <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
94
104
  <div
95
- tabindex="0"
105
+ bind:this={content}
96
106
  class="content {contentType}"
97
107
  style:inset={$style.inset}
98
108
  style:z-index={$style.zIndex}