@sveltia/ui 0.1.0

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 (104) hide show
  1. package/LICENSE.txt +21 -0
  2. package/package/components/composite/calendar.svelte +240 -0
  3. package/package/components/composite/calendar.svelte.d.ts +27 -0
  4. package/package/components/composite/checkbox-group.svelte +43 -0
  5. package/package/components/composite/checkbox-group.svelte.d.ts +34 -0
  6. package/package/components/composite/combobox.svelte +179 -0
  7. package/package/components/composite/combobox.svelte.d.ts +47 -0
  8. package/package/components/composite/disclosure.svelte +60 -0
  9. package/package/components/composite/disclosure.svelte.d.ts +35 -0
  10. package/package/components/composite/grid.svelte +24 -0
  11. package/package/components/composite/grid.svelte.d.ts +31 -0
  12. package/package/components/composite/listbox.svelte +63 -0
  13. package/package/components/composite/listbox.svelte.d.ts +52 -0
  14. package/package/components/composite/menu-item-group.svelte +31 -0
  15. package/package/components/composite/menu-item-group.svelte.d.ts +33 -0
  16. package/package/components/composite/menu.svelte +44 -0
  17. package/package/components/composite/menu.svelte.d.ts +41 -0
  18. package/package/components/composite/radio-button-group.svelte +44 -0
  19. package/package/components/composite/radio-button-group.svelte.d.ts +36 -0
  20. package/package/components/composite/select-button-group.svelte +69 -0
  21. package/package/components/composite/select-button-group.svelte.d.ts +44 -0
  22. package/package/components/composite/select.svelte +34 -0
  23. package/package/components/composite/select.svelte.d.ts +38 -0
  24. package/package/components/composite/tab-list.svelte +76 -0
  25. package/package/components/composite/tab-list.svelte.d.ts +55 -0
  26. package/package/components/core/button.svelte +209 -0
  27. package/package/components/core/button.svelte.d.ts +113 -0
  28. package/package/components/core/checkbox.svelte +105 -0
  29. package/package/components/core/checkbox.svelte.d.ts +43 -0
  30. package/package/components/core/dialog.svelte +258 -0
  31. package/package/components/core/dialog.svelte.d.ts +73 -0
  32. package/package/components/core/grid-cell.svelte +14 -0
  33. package/package/components/core/grid-cell.svelte.d.ts +29 -0
  34. package/package/components/core/group.svelte +31 -0
  35. package/package/components/core/group.svelte.d.ts +33 -0
  36. package/package/components/core/icon.svelte +21 -0
  37. package/package/components/core/icon.svelte.d.ts +27 -0
  38. package/package/components/core/menu-button.svelte +65 -0
  39. package/package/components/core/menu-button.svelte.d.ts +36 -0
  40. package/package/components/core/menu-item-checkbox.svelte +24 -0
  41. package/package/components/core/menu-item-checkbox.svelte.d.ts +34 -0
  42. package/package/components/core/menu-item-radio.svelte +19 -0
  43. package/package/components/core/menu-item-radio.svelte.d.ts +34 -0
  44. package/package/components/core/menu-item.svelte +113 -0
  45. package/package/components/core/menu-item.svelte.d.ts +44 -0
  46. package/package/components/core/number-input.svelte +109 -0
  47. package/package/components/core/number-input.svelte.d.ts +40 -0
  48. package/package/components/core/option.svelte +57 -0
  49. package/package/components/core/option.svelte.d.ts +44 -0
  50. package/package/components/core/password-input.svelte +76 -0
  51. package/package/components/core/password-input.svelte.d.ts +36 -0
  52. package/package/components/core/radio-button.svelte +91 -0
  53. package/package/components/core/radio-button.svelte.d.ts +37 -0
  54. package/package/components/core/row-group.svelte +14 -0
  55. package/package/components/core/row-group.svelte.d.ts +29 -0
  56. package/package/components/core/row.svelte +14 -0
  57. package/package/components/core/row.svelte.d.ts +33 -0
  58. package/package/components/core/search-bar.svelte +90 -0
  59. package/package/components/core/search-bar.svelte.d.ts +49 -0
  60. package/package/components/core/select-button.svelte +29 -0
  61. package/package/components/core/select-button.svelte.d.ts +40 -0
  62. package/package/components/core/separator.svelte +28 -0
  63. package/package/components/core/separator.svelte.d.ts +26 -0
  64. package/package/components/core/spacer.svelte +22 -0
  65. package/package/components/core/spacer.svelte.d.ts +25 -0
  66. package/package/components/core/switch.svelte +80 -0
  67. package/package/components/core/switch.svelte.d.ts +37 -0
  68. package/package/components/core/tab-panel.svelte +23 -0
  69. package/package/components/core/tab-panel.svelte.d.ts +33 -0
  70. package/package/components/core/tab.svelte +20 -0
  71. package/package/components/core/tab.svelte.d.ts +33 -0
  72. package/package/components/core/text-area.svelte +90 -0
  73. package/package/components/core/text-area.svelte.d.ts +57 -0
  74. package/package/components/core/text-input.svelte +145 -0
  75. package/package/components/core/text-input.svelte.d.ts +71 -0
  76. package/package/components/core/toolbar.svelte +74 -0
  77. package/package/components/core/toolbar.svelte.d.ts +35 -0
  78. package/package/components/editor/markdown.svelte +75 -0
  79. package/package/components/editor/markdown.svelte.d.ts +25 -0
  80. package/package/components/helpers/group.d.ts +37 -0
  81. package/package/components/helpers/group.js +246 -0
  82. package/package/components/helpers/popup.d.ts +31 -0
  83. package/package/components/helpers/popup.js +134 -0
  84. package/package/components/helpers/util.d.ts +1 -0
  85. package/package/components/helpers/util.js +8 -0
  86. package/package/components/util/app-shell.svelte +282 -0
  87. package/package/components/util/app-shell.svelte.d.ts +38 -0
  88. package/package/components/util/misc.d.ts +2 -0
  89. package/package/components/util/misc.js +22 -0
  90. package/package/components/util/popup.svelte +110 -0
  91. package/package/components/util/popup.svelte.d.ts +46 -0
  92. package/package/components/util/portal.svelte +34 -0
  93. package/package/components/util/portal.svelte.d.ts +28 -0
  94. package/package/index.d.ts +40 -0
  95. package/package/index.js +65 -0
  96. package/package/locales/en.d.ts +42 -0
  97. package/package/locales/en.js +41 -0
  98. package/package/locales/ja.d.ts +42 -0
  99. package/package/locales/ja.js +41 -0
  100. package/package/styles/core.scss +134 -0
  101. package/package/styles/variables.scss +113 -0
  102. package/package/typedef.d.ts +0 -0
  103. package/package/typedef.js +0 -0
  104. package/package.json +461 -0
@@ -0,0 +1,55 @@
1
+ /** @typedef {typeof __propDef.props} TabListProps */
2
+ /** @typedef {typeof __propDef.events} TabListEvents */
3
+ /** @typedef {typeof __propDef.slots} TabListSlots */
4
+ /**
5
+ * @see https://w3c.github.io/aria/#tablist
6
+ * @see https://w3c.github.io/aria-practices/#tabpanel
7
+ */
8
+ export default class TabList extends SvelteComponentTyped<{
9
+ [x: string]: any;
10
+ class?: string;
11
+ name?: string;
12
+ element?: HTMLElement;
13
+ orientation?: "vertical" | "horizontal";
14
+ }, {
15
+ select: Event;
16
+ } & {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {
19
+ default: {};
20
+ }> {
21
+ /**accessor*/
22
+ set class(arg: string);
23
+ get class(): string;
24
+ /**accessor*/
25
+ set element(arg: HTMLElement);
26
+ get element(): HTMLElement;
27
+ /**accessor*/
28
+ set orientation(arg: "vertical" | "horizontal");
29
+ get orientation(): "vertical" | "horizontal";
30
+ /**accessor*/
31
+ set name(arg: string);
32
+ get name(): string;
33
+ }
34
+ export type TabListProps = typeof __propDef.props;
35
+ export type TabListEvents = typeof __propDef.events;
36
+ export type TabListSlots = typeof __propDef.slots;
37
+ import { SvelteComponentTyped } from "svelte";
38
+ declare const __propDef: {
39
+ props: {
40
+ [x: string]: any;
41
+ class?: string;
42
+ name?: string;
43
+ element?: (HTMLElement | undefined);
44
+ orientation?: ('horizontal' | 'vertical');
45
+ };
46
+ events: {
47
+ select: Event;
48
+ } & {
49
+ [evt: string]: CustomEvent<any>;
50
+ };
51
+ slots: {
52
+ default: {};
53
+ };
54
+ };
55
+ export {};
@@ -0,0 +1,209 @@
1
+ <!--
2
+ @component
3
+ @see https://w3c.github.io/aria/#button
4
+ @see https://w3c.github.io/aria-practices/#button
5
+ -->
6
+ <svelte:options accessors={true} />
7
+
8
+ <script>
9
+ import Icon from './icon.svelte';
10
+
11
+ /**
12
+ * CSS class name on the button.
13
+ * @type {String}
14
+ */
15
+ let className = '';
16
+
17
+ export { className as class };
18
+
19
+ /**
20
+ * Reference to the button element.
21
+ * @type {(HTMLButtonElement|undefined)}
22
+ */
23
+ export let element = undefined;
24
+
25
+ /**
26
+ * The `type` attribute on the button element.
27
+ * @type {('button'|'submit'|'reset')}
28
+ */
29
+ export let type = 'button';
30
+
31
+ /**
32
+ * The `role` attribute on the button element.
33
+ * @type {String}
34
+ */
35
+ export let role = 'button';
36
+
37
+ /**
38
+ * The height of the button.
39
+ * @type {('small'|'medium'|'large')}
40
+ */
41
+ export let size = 'medium';
42
+
43
+ /**
44
+ * Whether the button is hidden.
45
+ * @type {Boolean}
46
+ */
47
+ export let hidden = false;
48
+
49
+ /**
50
+ * Whether the button is disabled.
51
+ * @type {Boolean}
52
+ */
53
+ export let disabled = false;
54
+
55
+ /**
56
+ * The `aria-pressed` attribute on the button element.
57
+ * @type {(Boolean|String|undefined)}
58
+ */
59
+ export let pressed = undefined;
60
+
61
+ /**
62
+ * Text label displayed on the button.
63
+ * @type {String}
64
+ */
65
+ export let label = '';
66
+
67
+ /**
68
+ * The name of the Material Symbols icon on the button.
69
+ */
70
+ export let iconName = '';
71
+
72
+ /**
73
+ * The accessible label on the icon. It can be omitted of a visible `label` is defined.
74
+ */
75
+ export let iconLabel = '';
76
+
77
+ /**
78
+ * Where the icon is displayed.
79
+ * @type {('start'|'end')}
80
+ */
81
+ export let iconPosition = 'start';
82
+ </script>
83
+
84
+ <button
85
+ {type}
86
+ {role}
87
+ hidden={hidden ? 'hidden' : undefined}
88
+ disabled={disabled ? 'disabled' : undefined}
89
+ class="sui button {size} {className}"
90
+ aria-hidden={hidden ? true : undefined}
91
+ aria-disabled={disabled ? true : undefined}
92
+ aria-pressed={pressed}
93
+ {...$$restProps}
94
+ on:mouseenter
95
+ on:mouseleave
96
+ on:click
97
+ on:dragover
98
+ on:dragleave
99
+ on:dragend
100
+ on:drop
101
+ on:keydown
102
+ on:keyup
103
+ on:keypress
104
+ bind:this={element}
105
+ >
106
+ {#if iconName && iconPosition === 'start'}
107
+ <Icon name={iconName} label={iconLabel} />
108
+ {/if}
109
+ {#if label}
110
+ <span class="label">{label}</span>
111
+ {/if}
112
+ <slot />
113
+ {#if iconName && iconPosition === 'end'}
114
+ <Icon name={iconName} label={iconLabel} />
115
+ {/if}
116
+ </button>
117
+
118
+ <style>button {
119
+ display: inline-flex;
120
+ align-items: center;
121
+ gap: 4px;
122
+ border-width: 0;
123
+ border-style: solid;
124
+ border-color: transparent;
125
+ padding: 0;
126
+ color: inherit;
127
+ background-color: transparent;
128
+ box-shadow: none;
129
+ font: inherit;
130
+ text-align: left;
131
+ cursor: pointer;
132
+ transition: all 200ms;
133
+ }
134
+ button > :global(*) {
135
+ pointer-events: none;
136
+ }
137
+ button:global(:not(:disabled):focus-visible) {
138
+ z-index: 1;
139
+ }
140
+ button:global([hidden]) {
141
+ display: none !important;
142
+ }
143
+ button:global([disabled]) {
144
+ opacity: 0.4;
145
+ cursor: default;
146
+ pointer-events: none;
147
+ }
148
+ button:global(.primary), button:global(.secondary), button:global(.ternary) {
149
+ justify-content: center;
150
+ border-radius: var(--button--medium--border-radius);
151
+ padding: 0 8px;
152
+ height: var(--button--medium--height);
153
+ }
154
+ button:global(.primary) :global(.label:only-child), button:global(.secondary) :global(.label:only-child), button:global(.ternary) :global(.label:only-child) {
155
+ padding: 0 4px;
156
+ }
157
+ button:global(.primary) {
158
+ border-width: 1px;
159
+ border-color: var(--control-border-color);
160
+ color: var(--primary-accent-color-foreground);
161
+ background-color: var(--primary-accent-color);
162
+ }
163
+ button:global(.primary):hover {
164
+ background-color: var(--primary-accent-color-lighter);
165
+ }
166
+ button:global(.primary):active {
167
+ background-color: var(--primary-accent-color-darker);
168
+ }
169
+ button:global(.secondary) {
170
+ border-width: 1px;
171
+ border-color: var(--control-border-color);
172
+ color: var(--highlight-foreground-color);
173
+ background-color: var(--ternary-background-color);
174
+ }
175
+ button:global(.secondary):global([aria-pressed="true"]) {
176
+ background-color: var(--primary-accent-color);
177
+ }
178
+ button:global(.ternary) {
179
+ color: var(--primary-foreground-color);
180
+ padding: 0 8px;
181
+ }
182
+ button:global(.ternary):global([aria-pressed="true"]) {
183
+ background-color: var(--highlight-background-color);
184
+ }
185
+ button:global(.danger) {
186
+ background-color: var(--danger-background-color);
187
+ }
188
+ button:global(.large) {
189
+ height: var(--button--large--height);
190
+ }
191
+ button:global(.small) {
192
+ padding: 0 4px;
193
+ height: var(--button--small--height);
194
+ font-size: 12px;
195
+ }
196
+ button:global(.small) :global(.icon) {
197
+ font-size: 16px;
198
+ }
199
+ button:global(.link) {
200
+ color: var(--primary-accent-color-lighter);
201
+ }
202
+ button:global(.iconic) {
203
+ justify-content: center;
204
+ border-radius: 4px;
205
+ aspect-ratio: 1/1;
206
+ }
207
+ button :global(.label) {
208
+ padding: 0 4px;
209
+ }</style>
@@ -0,0 +1,113 @@
1
+ /** @typedef {typeof __propDef.props} ButtonProps */
2
+ /** @typedef {typeof __propDef.events} ButtonEvents */
3
+ /** @typedef {typeof __propDef.slots} ButtonSlots */
4
+ /**
5
+ * @see https://w3c.github.io/aria/#button
6
+ * @see https://w3c.github.io/aria-practices/#button
7
+ */
8
+ export default class Button extends SvelteComponentTyped<{
9
+ [x: string]: any;
10
+ class?: string;
11
+ label?: string;
12
+ element?: HTMLButtonElement;
13
+ type?: "button" | "submit" | "reset";
14
+ role?: string;
15
+ size?: "small" | "medium" | "large";
16
+ hidden?: boolean;
17
+ disabled?: boolean;
18
+ pressed?: string | boolean;
19
+ iconName?: string;
20
+ iconLabel?: string;
21
+ iconPosition?: "start" | "end";
22
+ }, {
23
+ mouseenter: MouseEvent;
24
+ mouseleave: MouseEvent;
25
+ click: MouseEvent;
26
+ dragover: DragEvent;
27
+ dragleave: DragEvent;
28
+ dragend: DragEvent;
29
+ drop: DragEvent;
30
+ keydown: KeyboardEvent;
31
+ keyup: KeyboardEvent;
32
+ keypress: KeyboardEvent;
33
+ } & {
34
+ [evt: string]: CustomEvent<any>;
35
+ }, {
36
+ default: {};
37
+ }> {
38
+ /**accessor*/
39
+ set class(arg: string);
40
+ get class(): string;
41
+ /**accessor*/
42
+ set element(arg: HTMLButtonElement);
43
+ get element(): HTMLButtonElement;
44
+ /**accessor*/
45
+ set type(arg: "button" | "submit" | "reset");
46
+ get type(): "button" | "submit" | "reset";
47
+ /**accessor*/
48
+ set role(arg: string);
49
+ get role(): string;
50
+ /**accessor*/
51
+ set size(arg: "small" | "medium" | "large");
52
+ get size(): "small" | "medium" | "large";
53
+ /**accessor*/
54
+ set hidden(arg: boolean);
55
+ get hidden(): boolean;
56
+ /**accessor*/
57
+ set disabled(arg: boolean);
58
+ get disabled(): boolean;
59
+ /**accessor*/
60
+ set pressed(arg: string | boolean);
61
+ get pressed(): string | boolean;
62
+ /**accessor*/
63
+ set label(arg: string);
64
+ get label(): string;
65
+ /**accessor*/
66
+ set iconName(arg: string);
67
+ get iconName(): string;
68
+ /**accessor*/
69
+ set iconLabel(arg: string);
70
+ get iconLabel(): string;
71
+ /**accessor*/
72
+ set iconPosition(arg: "start" | "end");
73
+ get iconPosition(): "start" | "end";
74
+ }
75
+ export type ButtonProps = typeof __propDef.props;
76
+ export type ButtonEvents = typeof __propDef.events;
77
+ export type ButtonSlots = typeof __propDef.slots;
78
+ import { SvelteComponentTyped } from "svelte";
79
+ declare const __propDef: {
80
+ props: {
81
+ [x: string]: any;
82
+ class?: string;
83
+ label?: string;
84
+ element?: (HTMLButtonElement | undefined);
85
+ type?: ('button' | 'submit' | 'reset');
86
+ role?: string;
87
+ size?: ('small' | 'medium' | 'large');
88
+ hidden?: boolean;
89
+ disabled?: boolean;
90
+ pressed?: (boolean | string | undefined);
91
+ iconName?: string;
92
+ iconLabel?: string;
93
+ iconPosition?: ('start' | 'end');
94
+ };
95
+ events: {
96
+ mouseenter: MouseEvent;
97
+ mouseleave: MouseEvent;
98
+ click: MouseEvent;
99
+ dragover: DragEvent;
100
+ dragleave: DragEvent;
101
+ dragend: DragEvent;
102
+ drop: DragEvent;
103
+ keydown: KeyboardEvent;
104
+ keyup: KeyboardEvent;
105
+ keypress: KeyboardEvent;
106
+ } & {
107
+ [evt: string]: CustomEvent<any>;
108
+ };
109
+ slots: {
110
+ default: {};
111
+ };
112
+ };
113
+ export {};
@@ -0,0 +1,105 @@
1
+ <!--
2
+ @component
3
+ @see https://w3c.github.io/aria/#checkbox
4
+ @see https://w3c.github.io/aria-practices/#checkbox
5
+ -->
6
+ <script>
7
+ import { createEventDispatcher } from 'svelte';
8
+ import { getRandomId } from '../helpers/util';
9
+ import Button from './button.svelte';
10
+
11
+ /**
12
+ * CSS class name on the button.
13
+ * @type {String}
14
+ */
15
+ let className = '';
16
+
17
+ export { className as class };
18
+
19
+ /** @type {String} */
20
+ export let name = '';
21
+
22
+ /** @type {(String|undefined)} */
23
+ export let value = undefined;
24
+
25
+ /** @type {(Boolean|String|undefined)} */
26
+ export let checked = false;
27
+
28
+ /** @type {Boolean} */
29
+ export let indeterminate = false;
30
+
31
+ const dispatch = createEventDispatcher();
32
+ const id = getRandomId('checkbox');
33
+ /** @type {Button} */
34
+ let button;
35
+
36
+ $: {
37
+ dispatch('change', { checked });
38
+ }
39
+ </script>
40
+
41
+ {#if name && value && checked && !indeterminate}
42
+ <input type="hidden" {name} {value} />
43
+ {/if}
44
+
45
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
46
+ <label
47
+ class="sui checkbox {className}"
48
+ on:click|preventDefault|stopPropagation={(event) => {
49
+ if (!event.target.matches('button')) {
50
+ button.element.click();
51
+ }
52
+ }}
53
+ >
54
+ <Button
55
+ {id}
56
+ iconName={indeterminate ? 'remove' : 'check'}
57
+ role="checkbox"
58
+ aria-checked={indeterminate ? 'mixed' : checked}
59
+ aria-labelledby="{id}-label"
60
+ bind:this={button}
61
+ on:click={(event) => {
62
+ event.preventDefault();
63
+ event.stopPropagation();
64
+ checked = indeterminate ? true : !checked;
65
+ indeterminate = false;
66
+ }}
67
+ />
68
+ {#if $$slots.default}
69
+ <label id="{id}-label">
70
+ <slot />
71
+ </label>
72
+ {/if}
73
+ </label>
74
+
75
+ <style>.checkbox {
76
+ display: inline-flex;
77
+ align-items: center;
78
+ gap: 8px;
79
+ color: inherit;
80
+ cursor: pointer;
81
+ -webkit-user-select: none;
82
+ user-select: none;
83
+ }
84
+ .checkbox :global(button) {
85
+ align-items: center;
86
+ justify-content: center;
87
+ overflow: hidden;
88
+ border-width: 2px;
89
+ border-color: var(--control-border-color);
90
+ border-radius: 4px;
91
+ width: 24px;
92
+ height: 24px;
93
+ color: var(--primary-accent-color-lighter);
94
+ transition: all 200ms;
95
+ }
96
+ .checkbox :global(button) :global(.icon) {
97
+ font-size: 20px;
98
+ }
99
+ .checkbox :global(button[aria-checked="true"]),
100
+ .checkbox :global(button[aria-checked="mixed"]) {
101
+ color: var(--primary-accent-color-lighter);
102
+ }
103
+ .checkbox :global(button[aria-checked="false"]) {
104
+ color: transparent;
105
+ }</style>
@@ -0,0 +1,43 @@
1
+ /** @typedef {typeof __propDef.props} CheckboxProps */
2
+ /** @typedef {typeof __propDef.events} CheckboxEvents */
3
+ /** @typedef {typeof __propDef.slots} CheckboxSlots */
4
+ /**
5
+ * @see https://w3c.github.io/aria/#checkbox
6
+ * @see https://w3c.github.io/aria-practices/#checkbox
7
+ */
8
+ export default class Checkbox extends SvelteComponentTyped<{
9
+ class?: string;
10
+ name?: string;
11
+ value?: string;
12
+ checked?: string | boolean;
13
+ indeterminate?: boolean;
14
+ }, {
15
+ change: CustomEvent<any>;
16
+ } & {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {
19
+ default: {};
20
+ }> {
21
+ }
22
+ export type CheckboxProps = typeof __propDef.props;
23
+ export type CheckboxEvents = typeof __propDef.events;
24
+ export type CheckboxSlots = typeof __propDef.slots;
25
+ import { SvelteComponentTyped } from "svelte";
26
+ declare const __propDef: {
27
+ props: {
28
+ class?: string;
29
+ name?: string;
30
+ value?: (string | undefined);
31
+ checked?: (boolean | string | undefined);
32
+ indeterminate?: boolean;
33
+ };
34
+ events: {
35
+ change: CustomEvent<any>;
36
+ } & {
37
+ [evt: string]: CustomEvent<any>;
38
+ };
39
+ slots: {
40
+ default: {};
41
+ };
42
+ };
43
+ export {};