@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,24 @@
1
+ <script>
2
+ import { activateGroup } from '../helpers/group';
3
+
4
+ /**
5
+ * CSS class name on the button.
6
+ * @type {String}
7
+ */
8
+ let className = '';
9
+
10
+ export { className as class };
11
+
12
+ /** @type {(HTMLElement|undefined)} */
13
+ export let element = undefined;
14
+ </script>
15
+
16
+ <div
17
+ role="grid"
18
+ class="sui grid {className}"
19
+ {...$$restProps}
20
+ bind:this={element}
21
+ use:activateGroup
22
+ >
23
+ <slot />
24
+ </div>
@@ -0,0 +1,31 @@
1
+ /** @typedef {typeof __propDef.props} GridProps */
2
+ /** @typedef {typeof __propDef.events} GridEvents */
3
+ /** @typedef {typeof __propDef.slots} GridSlots */
4
+ export default class Grid extends SvelteComponentTyped<{
5
+ [x: string]: any;
6
+ class?: string;
7
+ element?: HTMLElement;
8
+ }, {
9
+ [evt: string]: CustomEvent<any>;
10
+ }, {
11
+ default: {};
12
+ }> {
13
+ }
14
+ export type GridProps = typeof __propDef.props;
15
+ export type GridEvents = typeof __propDef.events;
16
+ export type GridSlots = typeof __propDef.slots;
17
+ import { SvelteComponentTyped } from "svelte";
18
+ declare const __propDef: {
19
+ props: {
20
+ [x: string]: any;
21
+ class?: string;
22
+ element?: (HTMLElement | undefined);
23
+ };
24
+ events: {
25
+ [evt: string]: CustomEvent<any>;
26
+ };
27
+ slots: {
28
+ default: {};
29
+ };
30
+ };
31
+ export {};
@@ -0,0 +1,63 @@
1
+ <!--
2
+ @component
3
+ @see https://w3c.github.io/aria/#listbox
4
+ @see https://w3c.github.io/aria-practices/#Listbox
5
+ -->
6
+ <svelte:options accessors={true} />
7
+
8
+ <script>
9
+ import { activateGroup } from '../helpers/group';
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 {(HTMLElement|undefined)} */
20
+ export let element = undefined;
21
+
22
+ export let multiple = false;
23
+ </script>
24
+
25
+ <div
26
+ class="sui listbox {className}"
27
+ role="listbox"
28
+ tabindex="0"
29
+ aria-multiselectable={multiple}
30
+ {...$$restProps}
31
+ bind:this={element}
32
+ on:click
33
+ on:select
34
+ use:activateGroup
35
+ >
36
+ <slot />
37
+ </div>
38
+
39
+ <style>[role=listbox] {
40
+ display: flex;
41
+ flex-direction: column;
42
+ color: inherit;
43
+ margin: 0;
44
+ border-width: 1px;
45
+ border-color: var(--control-border-color);
46
+ border-radius: 4px;
47
+ padding: 4px;
48
+ }
49
+ [role=listbox] :global([role="separator"]) {
50
+ margin: 4px;
51
+ }
52
+ [role=listbox] :global([role="group"]):not(:first-child) {
53
+ margin-top: 16px;
54
+ }
55
+ [role=listbox] :global([role="group"]):not(:last-child) {
56
+ margin-bottom: 16px;
57
+ }
58
+ [role=listbox] :global([role="group"]) :global(.title) {
59
+ margin: 0 8px 8px;
60
+ color: var(--secondary-foreground-color);
61
+ font-size: 11px;
62
+ text-transform: uppercase;
63
+ }</style>
@@ -0,0 +1,52 @@
1
+ /** @typedef {typeof __propDef.props} ListboxProps */
2
+ /** @typedef {typeof __propDef.events} ListboxEvents */
3
+ /** @typedef {typeof __propDef.slots} ListboxSlots */
4
+ /**
5
+ * @see https://w3c.github.io/aria/#listbox
6
+ * @see https://w3c.github.io/aria-practices/#Listbox
7
+ */
8
+ export default class Listbox extends SvelteComponentTyped<{
9
+ [x: string]: any;
10
+ class?: string;
11
+ element?: HTMLElement;
12
+ multiple?: boolean;
13
+ }, {
14
+ click: MouseEvent;
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 multiple(arg: boolean);
29
+ get multiple(): boolean;
30
+ }
31
+ export type ListboxProps = typeof __propDef.props;
32
+ export type ListboxEvents = typeof __propDef.events;
33
+ export type ListboxSlots = typeof __propDef.slots;
34
+ import { SvelteComponentTyped } from "svelte";
35
+ declare const __propDef: {
36
+ props: {
37
+ [x: string]: any;
38
+ class?: string;
39
+ element?: (HTMLElement | undefined);
40
+ multiple?: boolean;
41
+ };
42
+ events: {
43
+ click: MouseEvent;
44
+ select: Event;
45
+ } & {
46
+ [evt: string]: CustomEvent<any>;
47
+ };
48
+ slots: {
49
+ default: {};
50
+ };
51
+ };
52
+ export {};
@@ -0,0 +1,31 @@
1
+ <script>
2
+ import { getRandomId } from '../helpers/util';
3
+
4
+ /**
5
+ * CSS class name on the button.
6
+ * @type {String}
7
+ */
8
+ let className = '';
9
+
10
+ export { className as class };
11
+
12
+ export let title = '';
13
+
14
+ export let ariaLabel = '';
15
+
16
+ const id = getRandomId('group');
17
+ </script>
18
+
19
+ <div
20
+ class="sui menu-item-group {className}"
21
+ role="group"
22
+ {id}
23
+ aria-label={ariaLabel || undefined}
24
+ aria-labelledby={title ? '{id}-title' : undefined}
25
+ {...$$restProps}
26
+ >
27
+ {#if title}
28
+ <div class="title" id="{id}-title">{title}</div>
29
+ {/if}
30
+ <slot />
31
+ </div>
@@ -0,0 +1,33 @@
1
+ /** @typedef {typeof __propDef.props} MenuItemGroupProps */
2
+ /** @typedef {typeof __propDef.events} MenuItemGroupEvents */
3
+ /** @typedef {typeof __propDef.slots} MenuItemGroupSlots */
4
+ export default class MenuItemGroup extends SvelteComponentTyped<{
5
+ [x: string]: any;
6
+ class?: string;
7
+ title?: string;
8
+ ariaLabel?: string;
9
+ }, {
10
+ [evt: string]: CustomEvent<any>;
11
+ }, {
12
+ default: {};
13
+ }> {
14
+ }
15
+ export type MenuItemGroupProps = typeof __propDef.props;
16
+ export type MenuItemGroupEvents = typeof __propDef.events;
17
+ export type MenuItemGroupSlots = typeof __propDef.slots;
18
+ import { SvelteComponentTyped } from "svelte";
19
+ declare const __propDef: {
20
+ props: {
21
+ [x: string]: any;
22
+ class?: string;
23
+ title?: string;
24
+ ariaLabel?: string;
25
+ };
26
+ events: {
27
+ [evt: string]: CustomEvent<any>;
28
+ };
29
+ slots: {
30
+ default: {};
31
+ };
32
+ };
33
+ export {};
@@ -0,0 +1,44 @@
1
+ <!--
2
+ @component
3
+ @see https://w3c.github.io/aria/#menu
4
+ @see https://w3c.github.io/aria-practices/#menu
5
+ -->
6
+ <svelte:options accessors={true} />
7
+
8
+ <script>
9
+ import { activateGroup } from '../helpers/group';
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 {(HTMLElement|undefined)} */
20
+ export let element = undefined;
21
+ </script>
22
+
23
+ <div
24
+ class="sui menu {className}"
25
+ role="menu"
26
+ {...$$restProps}
27
+ bind:this={element}
28
+ use:activateGroup
29
+ >
30
+ <slot />
31
+ </div>
32
+
33
+ <style>.menu {
34
+ display: flex;
35
+ flex-direction: column;
36
+ margin: 0;
37
+ border-width: 1px;
38
+ border-color: var(--secondary-border-color);
39
+ border-radius: 4px;
40
+ padding: 4px;
41
+ }
42
+ .menu :global([role="separator"]) {
43
+ margin: 4px;
44
+ }</style>
@@ -0,0 +1,41 @@
1
+ /** @typedef {typeof __propDef.props} MenuProps */
2
+ /** @typedef {typeof __propDef.events} MenuEvents */
3
+ /** @typedef {typeof __propDef.slots} MenuSlots */
4
+ /**
5
+ * @see https://w3c.github.io/aria/#menu
6
+ * @see https://w3c.github.io/aria-practices/#menu
7
+ */
8
+ export default class Menu extends SvelteComponentTyped<{
9
+ [x: string]: any;
10
+ class?: string;
11
+ element?: HTMLElement;
12
+ }, {
13
+ [evt: string]: CustomEvent<any>;
14
+ }, {
15
+ default: {};
16
+ }> {
17
+ /**accessor*/
18
+ set class(arg: string);
19
+ get class(): string;
20
+ /**accessor*/
21
+ set element(arg: HTMLElement);
22
+ get element(): HTMLElement;
23
+ }
24
+ export type MenuProps = typeof __propDef.props;
25
+ export type MenuEvents = typeof __propDef.events;
26
+ export type MenuSlots = typeof __propDef.slots;
27
+ import { SvelteComponentTyped } from "svelte";
28
+ declare const __propDef: {
29
+ props: {
30
+ [x: string]: any;
31
+ class?: string;
32
+ element?: (HTMLElement | undefined);
33
+ };
34
+ events: {
35
+ [evt: string]: CustomEvent<any>;
36
+ };
37
+ slots: {
38
+ default: {};
39
+ };
40
+ };
41
+ export {};
@@ -0,0 +1,44 @@
1
+ <!--
2
+ @component
3
+ The container of `<RadioButton>`s.
4
+ @see https://w3c.github.io/aria/#radiogroup
5
+ @see https://w3c.github.io/aria-practices/#radiobutton
6
+ -->
7
+ <script>
8
+ import { activateGroup } from '../helpers/group';
9
+
10
+ /**
11
+ * CSS class name on the button.
12
+ * @type {String}
13
+ */
14
+ let className = '';
15
+
16
+ export { className as class };
17
+
18
+ /** @type {('horizontal'|'vertical')} */
19
+ export let orientation = 'horizontal';
20
+
21
+ /** @type {(HTMLElement|undefined)} */
22
+ export let element = undefined;
23
+ </script>
24
+
25
+ <div
26
+ class="sui radio-button-group {className} {orientation}"
27
+ role="radiogroup"
28
+ bind:this={element}
29
+ use:activateGroup
30
+ >
31
+ <slot />
32
+ </div>
33
+
34
+ <style>.radio-button-group {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ gap: 16px;
38
+ }
39
+ .radio-button-group.horizontal {
40
+ align-items: center;
41
+ }
42
+ .radio-button-group.vertical {
43
+ flex-direction: column;
44
+ }</style>
@@ -0,0 +1,36 @@
1
+ /** @typedef {typeof __propDef.props} RadioButtonGroupProps */
2
+ /** @typedef {typeof __propDef.events} RadioButtonGroupEvents */
3
+ /** @typedef {typeof __propDef.slots} RadioButtonGroupSlots */
4
+ /**
5
+ * The container of `<RadioButton>`s.
6
+ * @see https://w3c.github.io/aria/#radiogroup
7
+ * @see https://w3c.github.io/aria-practices/#radiobutton
8
+ */
9
+ export default class RadioButtonGroup extends SvelteComponentTyped<{
10
+ class?: string;
11
+ element?: HTMLElement;
12
+ orientation?: "vertical" | "horizontal";
13
+ }, {
14
+ [evt: string]: CustomEvent<any>;
15
+ }, {
16
+ default: {};
17
+ }> {
18
+ }
19
+ export type RadioButtonGroupProps = typeof __propDef.props;
20
+ export type RadioButtonGroupEvents = typeof __propDef.events;
21
+ export type RadioButtonGroupSlots = typeof __propDef.slots;
22
+ import { SvelteComponentTyped } from "svelte";
23
+ declare const __propDef: {
24
+ props: {
25
+ class?: string;
26
+ element?: (HTMLElement | undefined);
27
+ orientation?: ('horizontal' | 'vertical');
28
+ };
29
+ events: {
30
+ [evt: string]: CustomEvent<any>;
31
+ };
32
+ slots: {
33
+ default: {};
34
+ };
35
+ };
36
+ export {};
@@ -0,0 +1,69 @@
1
+ <!--
2
+ @component
3
+ A variant of `<RadioButtonGroup>`, looking like normal buttons.
4
+ @see https://w3c.github.io/aria/#radiogroup
5
+ @see https://w3c.github.io/aria-practices/#radiobutton
6
+ -->
7
+ <script>
8
+ import { createEventDispatcher } from 'svelte';
9
+ import { activateGroup } from '../helpers/group';
10
+
11
+ /**
12
+ * CSS class name on the button.
13
+ * @type {String}
14
+ */
15
+ let className = '';
16
+
17
+ export { className as class };
18
+
19
+ export let value = '';
20
+ export let ariaLabel = '';
21
+ export let disabled = false;
22
+
23
+ const dispatch = createEventDispatcher();
24
+
25
+ /** @type {(HTMLElement|undefined)} */
26
+ export let element = undefined;
27
+
28
+ $: {
29
+ dispatch('change', { value });
30
+ }
31
+ </script>
32
+
33
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
34
+ <div
35
+ class="sui select-button-group {className}"
36
+ role="radiogroup"
37
+ aria-label={ariaLabel || undefined}
38
+ aria-disabled={disabled ? true : undefined}
39
+ bind:this={element}
40
+ on:click={({ target }) => {
41
+ if (target.matches('[role="radio"]')) {
42
+ value = target.value;
43
+ }
44
+ }}
45
+ use:activateGroup
46
+ >
47
+ <slot />
48
+ </div>
49
+
50
+ <style>.select-button-group {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ }
54
+ .select-button-group :global(button) {
55
+ border-radius: 0;
56
+ }
57
+ .select-button-group :global(button):first-child {
58
+ border-radius: 4px 0 0 4px;
59
+ }
60
+ .select-button-group :global(button):not(:first-child) {
61
+ margin-left: -1px;
62
+ }
63
+ .select-button-group :global(button):last-child {
64
+ border-radius: 0 4px 4px 0;
65
+ }
66
+ .select-button-group :global(button[aria-checked="true"]) {
67
+ color: var(--highlight-foreground-color);
68
+ background-color: var(--highlight-background-color);
69
+ }</style>
@@ -0,0 +1,44 @@
1
+ /** @typedef {typeof __propDef.props} SelectButtonGroupProps */
2
+ /** @typedef {typeof __propDef.events} SelectButtonGroupEvents */
3
+ /** @typedef {typeof __propDef.slots} SelectButtonGroupSlots */
4
+ /**
5
+ * A variant of `<RadioButtonGroup>`, looking like normal buttons.
6
+ * @see https://w3c.github.io/aria/#radiogroup
7
+ * @see https://w3c.github.io/aria-practices/#radiobutton
8
+ */
9
+ export default class SelectButtonGroup extends SvelteComponentTyped<{
10
+ class?: string;
11
+ element?: HTMLElement;
12
+ disabled?: boolean;
13
+ value?: string;
14
+ ariaLabel?: string;
15
+ }, {
16
+ change: CustomEvent<any>;
17
+ } & {
18
+ [evt: string]: CustomEvent<any>;
19
+ }, {
20
+ default: {};
21
+ }> {
22
+ }
23
+ export type SelectButtonGroupProps = typeof __propDef.props;
24
+ export type SelectButtonGroupEvents = typeof __propDef.events;
25
+ export type SelectButtonGroupSlots = typeof __propDef.slots;
26
+ import { SvelteComponentTyped } from "svelte";
27
+ declare const __propDef: {
28
+ props: {
29
+ class?: string;
30
+ element?: (HTMLElement | undefined);
31
+ disabled?: boolean;
32
+ value?: string;
33
+ ariaLabel?: string;
34
+ };
35
+ events: {
36
+ change: CustomEvent<any>;
37
+ } & {
38
+ [evt: string]: CustomEvent<any>;
39
+ };
40
+ slots: {
41
+ default: {};
42
+ };
43
+ };
44
+ export {};
@@ -0,0 +1,34 @@
1
+ <!--
2
+ @component
3
+ A read-only variant of `<Combobox>`.
4
+ -->
5
+ <script>
6
+ import Combobox from './combobox.svelte';
7
+
8
+ /**
9
+ * CSS class name on the button.
10
+ * @type {String}
11
+ */
12
+ let className = '';
13
+
14
+ export { className as class };
15
+
16
+ export let label = '';
17
+
18
+ /**
19
+ * Selected option’s value.
20
+ * @type {(String|undefined)}
21
+ */
22
+ export let value = undefined;
23
+ </script>
24
+
25
+ <Combobox
26
+ bind:value
27
+ class="sui select {className}"
28
+ {label}
29
+ readOnly={true}
30
+ {...$$restProps}
31
+ on:change
32
+ >
33
+ <slot />
34
+ </Combobox>
@@ -0,0 +1,38 @@
1
+ /** @typedef {typeof __propDef.props} SelectProps */
2
+ /** @typedef {typeof __propDef.events} SelectEvents */
3
+ /** @typedef {typeof __propDef.slots} SelectSlots */
4
+ /** A read-only variant of `<Combobox>`. */
5
+ export default class Select extends SvelteComponentTyped<{
6
+ [x: string]: any;
7
+ class?: string;
8
+ label?: string;
9
+ value?: string;
10
+ }, {
11
+ change: CustomEvent<any>;
12
+ } & {
13
+ [evt: string]: CustomEvent<any>;
14
+ }, {
15
+ default: {};
16
+ }> {
17
+ }
18
+ export type SelectProps = typeof __propDef.props;
19
+ export type SelectEvents = typeof __propDef.events;
20
+ export type SelectSlots = typeof __propDef.slots;
21
+ import { SvelteComponentTyped } from "svelte";
22
+ declare const __propDef: {
23
+ props: {
24
+ [x: string]: any;
25
+ class?: string;
26
+ label?: string;
27
+ value?: (string | undefined);
28
+ };
29
+ events: {
30
+ change: CustomEvent<any>;
31
+ } & {
32
+ [evt: string]: CustomEvent<any>;
33
+ };
34
+ slots: {
35
+ default: {};
36
+ };
37
+ };
38
+ export {};
@@ -0,0 +1,76 @@
1
+ <!--
2
+ @component
3
+ @see https://w3c.github.io/aria/#tablist
4
+ @see https://w3c.github.io/aria-practices/#tabpanel
5
+ -->
6
+ <svelte:options accessors={true} />
7
+
8
+ <script>
9
+ import { activateGroup } from '../helpers/group';
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 {(HTMLElement|undefined)} */
20
+ export let element = undefined;
21
+
22
+ /** @type {('horizontal'|'vertical')} */
23
+ export let orientation = 'horizontal';
24
+
25
+ export let name = '';
26
+ </script>
27
+
28
+ <div
29
+ class="sui tab-list {className}"
30
+ role="tablist"
31
+ aria-orientation={orientation}
32
+ data-name={name || undefined}
33
+ {...$$restProps}
34
+ bind:this={element}
35
+ on:select
36
+ use:activateGroup
37
+ >
38
+ <slot />
39
+ </div>
40
+
41
+ <style>.tab-list {
42
+ display: flex;
43
+ align-items: center;
44
+ border-color: var(--control-border-color);
45
+ }
46
+ .tab-list:global([aria-orientation="horizontal"]) {
47
+ gap: 16px;
48
+ margin: 0 0 32px;
49
+ border-width: 0 0 1px;
50
+ padding: 0 16px;
51
+ }
52
+ .tab-list:global([aria-orientation="horizontal"]) :global(button) {
53
+ border-width: 0 0 2px 0;
54
+ }
55
+ .tab-list:global([aria-orientation="vertical"]) {
56
+ gap: 8px;
57
+ flex-direction: column;
58
+ margin: 0 32px 0 0;
59
+ border-width: 0 1px 0 0;
60
+ padding: 8px 0;
61
+ width: 240px;
62
+ }
63
+ .tab-list:global([aria-orientation="vertical"]) :global(button) {
64
+ border-width: 0 2px 0 0;
65
+ width: 100%;
66
+ }
67
+ .tab-list :global(button) {
68
+ justify-content: flex-start;
69
+ border-color: transparent;
70
+ padding: 0;
71
+ border-radius: 0;
72
+ height: var(--tab--medium--height);
73
+ }
74
+ .tab-list :global(button[aria-selected="true"]) {
75
+ border-color: var(--primary-accent-color-lighter);
76
+ }</style>