@sveltia/ui 0.2.4 → 0.3.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 (122) hide show
  1. package/package/components/{core → button}/button.svelte +2 -1
  2. package/package/components/{core → button}/button.svelte.d.ts +6 -5
  3. package/package/components/{composite → button}/select-button-group.svelte +8 -5
  4. package/package/components/{composite → button}/select-button-group.svelte.d.ts +6 -6
  5. package/package/components/{core → button}/select-button.svelte +2 -2
  6. package/package/components/{core → button}/select-button.svelte.d.ts +2 -2
  7. package/package/components/{composite → calendar}/calendar.svelte +9 -5
  8. package/package/components/{composite → calendar}/calendar.svelte.d.ts +1 -0
  9. package/package/components/{composite → checkbox}/checkbox-group.svelte +3 -2
  10. package/package/components/{composite → checkbox}/checkbox-group.svelte.d.ts +2 -2
  11. package/package/components/{core → checkbox}/checkbox.svelte +38 -17
  12. package/package/components/{core → checkbox}/checkbox.svelte.d.ts +7 -3
  13. package/package/components/{core → dialog}/dialog.svelte +5 -4
  14. package/package/components/{core → dialog}/dialog.svelte.d.ts +2 -1
  15. package/package/components/{composite → disclosure}/disclosure.svelte +5 -4
  16. package/package/components/{composite → disclosure}/disclosure.svelte.d.ts +2 -1
  17. package/package/components/{core/separator.svelte → divider/divider.svelte} +5 -4
  18. package/package/components/divider/divider.svelte.d.ts +29 -0
  19. package/package/components/{core → divider}/spacer.svelte +4 -0
  20. package/package/components/{core → divider}/spacer.svelte.d.ts +1 -0
  21. package/package/components/{core → drawer}/drawer.svelte +5 -4
  22. package/package/components/{core → drawer}/drawer.svelte.d.ts +2 -1
  23. package/package/components/{core → icon}/icon.svelte +5 -0
  24. package/package/components/{core → icon}/icon.svelte.d.ts +6 -2
  25. package/package/components/listbox/listbox.svelte +74 -0
  26. package/package/components/{composite → listbox}/listbox.svelte.d.ts +3 -1
  27. package/package/components/listbox/option-group.svelte +47 -0
  28. package/package/components/listbox/option-group.svelte.d.ts +38 -0
  29. package/package/components/{core → listbox}/option.svelte +34 -2
  30. package/package/components/{core → listbox}/option.svelte.d.ts +7 -3
  31. package/package/components/{core → menu}/menu-button.svelte +3 -17
  32. package/package/components/{core → menu}/menu-button.svelte.d.ts +4 -1
  33. package/package/components/{core → menu}/menu-item-checkbox.svelte +1 -0
  34. package/package/components/{core → menu}/menu-item-checkbox.svelte.d.ts +4 -1
  35. package/package/components/{composite → menu}/menu-item-group.svelte +5 -1
  36. package/package/components/{composite → menu}/menu-item-group.svelte.d.ts +1 -0
  37. package/package/components/{core → menu}/menu-item-radio.svelte +2 -0
  38. package/package/components/{core → menu}/menu-item-radio.svelte.d.ts +5 -1
  39. package/package/components/{core → menu}/menu-item.svelte +6 -6
  40. package/package/components/{core → menu}/menu-item.svelte.d.ts +4 -1
  41. package/package/components/{composite → menu}/menu.svelte +3 -2
  42. package/package/components/{composite → menu}/menu.svelte.d.ts +2 -1
  43. package/package/components/{composite/radio-button-group.svelte → radio/radio-group.svelte} +15 -10
  44. package/package/components/radio/radio-group.svelte.d.ts +40 -0
  45. package/package/components/{core/radio-button.svelte → radio/radio.svelte} +45 -18
  46. package/package/components/radio/radio.svelte.d.ts +43 -0
  47. package/package/components/{composite → select}/combobox.svelte +7 -6
  48. package/package/components/{composite → select}/combobox.svelte.d.ts +4 -3
  49. package/package/components/{composite → select}/select.svelte +3 -1
  50. package/package/components/{composite → select}/select.svelte.d.ts +7 -3
  51. package/package/components/{core → slider}/slider.svelte +82 -57
  52. package/package/components/{core → slider}/slider.svelte.d.ts +12 -10
  53. package/package/components/{core → switch}/switch.svelte +36 -19
  54. package/package/components/{core → switch}/switch.svelte.d.ts +4 -3
  55. package/package/components/table/table-body.svelte +23 -0
  56. package/package/components/table/table-body.svelte.d.ts +34 -0
  57. package/package/components/table/table-cell.svelte +23 -0
  58. package/package/components/table/table-cell.svelte.d.ts +34 -0
  59. package/package/components/table/table-col-header.svelte +23 -0
  60. package/package/components/table/table-col-header.svelte.d.ts +34 -0
  61. package/package/components/table/table-foot.svelte +23 -0
  62. package/package/components/table/table-foot.svelte.d.ts +34 -0
  63. package/package/components/table/table-head.svelte +23 -0
  64. package/package/components/table/table-head.svelte.d.ts +34 -0
  65. package/package/components/table/table-row-header.svelte +23 -0
  66. package/package/components/table/table-row-header.svelte.d.ts +34 -0
  67. package/package/components/table/table-row.svelte +23 -0
  68. package/package/components/table/table-row.svelte.d.ts +38 -0
  69. package/package/components/table/table.svelte +44 -0
  70. package/package/components/table/table.svelte.d.ts +36 -0
  71. package/package/components/{composite → tabs}/tab-list.svelte +3 -2
  72. package/package/components/{composite → tabs}/tab-list.svelte.d.ts +7 -6
  73. package/package/components/{core → tabs}/tab-panel.svelte +2 -1
  74. package/package/components/{core → tabs}/tab-panel.svelte.d.ts +2 -1
  75. package/package/components/{core → tabs}/tab.svelte +3 -2
  76. package/package/components/{core → tabs}/tab.svelte.d.ts +2 -1
  77. package/package/components/{editor/markdown.svelte → text-field/markdown-editor.svelte} +10 -6
  78. package/package/components/text-field/markdown-editor.svelte.d.ts +26 -0
  79. package/package/components/{core → text-field}/number-input.svelte +22 -12
  80. package/package/components/{core → text-field}/number-input.svelte.d.ts +7 -3
  81. package/package/components/{core → text-field}/password-input.svelte +5 -2
  82. package/package/components/{core → text-field}/password-input.svelte.d.ts +8 -3
  83. package/package/components/{core → text-field}/search-bar.svelte +5 -2
  84. package/package/components/{core → text-field}/search-bar.svelte.d.ts +8 -3
  85. package/package/components/{core → text-field}/text-area.svelte +2 -0
  86. package/package/components/{core → text-field}/text-area.svelte.d.ts +9 -5
  87. package/package/components/{core → text-field}/text-input.svelte +3 -1
  88. package/package/components/{core → text-field}/text-input.svelte.d.ts +11 -7
  89. package/package/components/{core → toolbar}/toolbar.svelte +2 -1
  90. package/package/components/{core → toolbar}/toolbar.svelte.d.ts +3 -2
  91. package/package/components/util/app-shell.svelte +10 -36
  92. package/package/components/util/group.js +305 -0
  93. package/package/components/{core → util}/group.svelte +5 -11
  94. package/package/components/{core → util}/group.svelte.d.ts +4 -2
  95. package/package/components/util/popup.d.ts +30 -0
  96. package/package/components/{helpers → util}/popup.js +36 -26
  97. package/package/components/util/popup.svelte +14 -5
  98. package/package/components/util/{misc.d.ts → util.d.ts} +1 -0
  99. package/package/components/util/{misc.js → util.js} +15 -0
  100. package/package/index.d.ts +46 -41
  101. package/package/index.js +48 -83
  102. package/package/styles/core.scss +5 -34
  103. package/package/styles/variables.scss +5 -4
  104. package/package.json +362 -328
  105. package/package/components/composite/grid.svelte +0 -24
  106. package/package/components/composite/grid.svelte.d.ts +0 -31
  107. package/package/components/composite/listbox.svelte +0 -63
  108. package/package/components/composite/radio-button-group.svelte.d.ts +0 -36
  109. package/package/components/core/grid-cell.svelte +0 -13
  110. package/package/components/core/grid-cell.svelte.d.ts +0 -29
  111. package/package/components/core/radio-button.svelte.d.ts +0 -37
  112. package/package/components/core/row-group.svelte +0 -13
  113. package/package/components/core/row-group.svelte.d.ts +0 -29
  114. package/package/components/core/row.svelte +0 -13
  115. package/package/components/core/row.svelte.d.ts +0 -33
  116. package/package/components/core/separator.svelte.d.ts +0 -26
  117. package/package/components/editor/markdown.svelte.d.ts +0 -25
  118. package/package/components/helpers/group.js +0 -251
  119. package/package/components/helpers/popup.d.ts +0 -30
  120. package/package/components/helpers/util.d.ts +0 -1
  121. package/package/components/helpers/util.js +0 -14
  122. /package/package/components/{helpers → util}/group.d.ts +0 -0
@@ -0,0 +1,74 @@
1
+ <!--
2
+ @component
3
+ A list widget with selectable options. The equivalent of the HTML `<select multiple>` element.
4
+ @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select
5
+ @see https://w3c.github.io/aria/#listbox
6
+ @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/
7
+ -->
8
+ <svelte:options accessors={true} />
9
+
10
+ <script>
11
+ import { activateGroup } from '../util/group';
12
+
13
+ /**
14
+ * CSS class name on the button.
15
+ * @type {string}
16
+ */
17
+ let className = '';
18
+
19
+ export { className as class };
20
+
21
+ /** @type {HTMLElement?} */
22
+ export let element = undefined;
23
+
24
+ export let multiple = false;
25
+ </script>
26
+
27
+ <div
28
+ class="sui listbox {className}"
29
+ tabindex="0"
30
+ role="listbox"
31
+ aria-multiselectable={multiple}
32
+ {...$$restProps}
33
+ bind:this={element}
34
+ on:click
35
+ on:select
36
+ use:activateGroup
37
+ >
38
+ <slot />
39
+ </div>
40
+
41
+ <style>[role=listbox] {
42
+ display: flex;
43
+ flex-direction: column;
44
+ color: inherit;
45
+ margin: 0;
46
+ border-width: 1px;
47
+ border-color: var(--control-border-color);
48
+ border-radius: 4px;
49
+ padding: 4px;
50
+ min-width: 160px;
51
+ }
52
+ [role=listbox] :global([role="separator"]) {
53
+ margin: 4px;
54
+ }
55
+ [role=listbox]:global(.tabs) {
56
+ padding: 0;
57
+ border-width: 0 1px 0 0;
58
+ border-color: var(--control-border-color);
59
+ }
60
+ [role=listbox]:global(.tabs) :global(.option button) {
61
+ justify-content: flex-start;
62
+ border-width: 0 2px 0 0;
63
+ border-color: transparent;
64
+ padding: 0 12px;
65
+ border-top-right-radius: 0;
66
+ border-bottom-right-radius: 0;
67
+ height: var(--tab--medium--height);
68
+ }
69
+ [role=listbox]:global(.tabs) :global(.option button) :global(.icon) {
70
+ display: none;
71
+ }
72
+ [role=listbox]:global(.tabs) :global(.option button[aria-selected="true"]) {
73
+ border-color: var(--primary-accent-color-lighter);
74
+ }</style>
@@ -2,8 +2,10 @@
2
2
  /** @typedef {typeof __propDef.events} ListboxEvents */
3
3
  /** @typedef {typeof __propDef.slots} ListboxSlots */
4
4
  /**
5
+ * A list widget with selectable options. The equivalent of the HTML `<select multiple>` element.
6
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select
5
7
  * @see https://w3c.github.io/aria/#listbox
6
- * @see https://w3c.github.io/aria-practices/#Listbox
8
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/
7
9
  */
8
10
  export default class Listbox extends SvelteComponentTyped<{
9
11
  [x: string]: any;
@@ -0,0 +1,47 @@
1
+ <!--
2
+ @component
3
+ A group within a `<Listbox>`. The equivalent of the HTML `<optgroup>` element. It can contain one
4
+ or more `<Option>`s.
5
+ @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup
6
+ @see https://w3c.github.io/aria/#listbox
7
+ @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-grouped/
8
+ -->
9
+ <script>
10
+ import { getRandomId } from '../util/util';
11
+
12
+ /**
13
+ * CSS class name on the group.
14
+ * @type {string}
15
+ */
16
+ let className = '';
17
+
18
+ export { className as class };
19
+
20
+ /**
21
+ * The group’s label to be displayed above the child `<Option>`s.
22
+ */
23
+ export let label = '';
24
+
25
+ const id = getRandomId('optgroup');
26
+ </script>
27
+
28
+ <div
29
+ {id}
30
+ class="sui optgroup {className}"
31
+ role="group"
32
+ aria-labelledby="{id}-label"
33
+ {...$$restProps}
34
+ >
35
+ <div id="{id}-label" class="label" role="none">{label}</div>
36
+ <slot />
37
+ </div>
38
+
39
+ <style>.optgroup:not(:first-child) {
40
+ margin: 12px 0 0;
41
+ }
42
+
43
+ .label {
44
+ margin: 8px;
45
+ color: var(--secondary-foreground-color);
46
+ font-size: var(--font-size--small);
47
+ }</style>
@@ -0,0 +1,38 @@
1
+ /** @typedef {typeof __propDef.props} OptionGroupProps */
2
+ /** @typedef {typeof __propDef.events} OptionGroupEvents */
3
+ /** @typedef {typeof __propDef.slots} OptionGroupSlots */
4
+ /**
5
+ * A group within a `<Listbox>`. The equivalent of the HTML `<optgroup>` element. It can contain one
6
+ * or more `<Option>`s.
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup
8
+ * @see https://w3c.github.io/aria/#listbox
9
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-grouped/
10
+ */
11
+ export default class OptionGroup extends SvelteComponentTyped<{
12
+ [x: string]: any;
13
+ label?: string;
14
+ class?: string;
15
+ }, {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {
18
+ default: {};
19
+ }> {
20
+ }
21
+ export type OptionGroupProps = typeof __propDef.props;
22
+ export type OptionGroupEvents = typeof __propDef.events;
23
+ export type OptionGroupSlots = typeof __propDef.slots;
24
+ import { SvelteComponentTyped } from "svelte";
25
+ declare const __propDef: {
26
+ props: {
27
+ [x: string]: any;
28
+ label?: string;
29
+ class?: string;
30
+ };
31
+ events: {
32
+ [evt: string]: CustomEvent<any>;
33
+ };
34
+ slots: {
35
+ default: {};
36
+ };
37
+ };
38
+ export {};
@@ -1,10 +1,13 @@
1
1
  <!--
2
2
  @component
3
+ An option within the `<Listbox>` widget. The equivalent of the HTML `<option>` element.
4
+ @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option
3
5
  @see https://w3c.github.io/aria/#option
4
6
  -->
5
7
  <script>
6
- import Button from './button.svelte';
7
- import Icon from './icon.svelte';
8
+ import { onMount } from 'svelte';
9
+ import Button from '../button/button.svelte';
10
+ import Icon from '../icon/icon.svelte';
8
11
 
9
12
  /**
10
13
  * CSS class name on the button.
@@ -17,10 +20,35 @@
17
20
  export let label = '';
18
21
  export let value = undefined;
19
22
  export let selected = false;
23
+
24
+ /**
25
+ * @type {Button}
26
+ */
27
+ let buttonComponent;
28
+
29
+ /**
30
+ * Event listener for the `select` event fired in `group.js`.
31
+ * @param {CustomEvent} event `select` event.
32
+ */
33
+ const listener = ({ type }) => {
34
+ selected = type === 'select';
35
+ };
36
+
37
+ onMount(() => {
38
+ buttonComponent.element.addEventListener('select', listener);
39
+ buttonComponent.element.addEventListener('unselect', listener);
40
+
41
+ return () => {
42
+ buttonComponent.element.removeEventListener('select', listener);
43
+ buttonComponent.element.removeEventListener('unselect', listener);
44
+ };
45
+ });
20
46
  </script>
21
47
 
22
48
  <div class="sui option {className}">
23
49
  <Button
50
+ bind:this={buttonComponent}
51
+ tabindex="-1"
24
52
  role="option"
25
53
  aria-selected={selected}
26
54
  {label}
@@ -45,6 +73,9 @@
45
73
  <style>.option {
46
74
  display: contents;
47
75
  }
76
+ .option:focus-visible {
77
+ outline-width: 0 !important;
78
+ }
48
79
  .option :global([role="option"]) {
49
80
  flex: none;
50
81
  display: flex;
@@ -56,6 +87,7 @@
56
87
  height: var(--option--medium--height);
57
88
  white-space: nowrap;
58
89
  }
90
+ .option :global(.focused),
59
91
  .option :global([role="option"]:hover) {
60
92
  color: var(--highlight-foreground-color);
61
93
  background-color: var(--highlight-background-color);
@@ -1,12 +1,16 @@
1
1
  /** @typedef {typeof __propDef.props} OptionProps */
2
2
  /** @typedef {typeof __propDef.events} OptionEvents */
3
3
  /** @typedef {typeof __propDef.slots} OptionSlots */
4
- /** @see https://w3c.github.io/aria/#option */
4
+ /**
5
+ * An option within the `<Listbox>` widget. The equivalent of the HTML `<option>` element.
6
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option
7
+ * @see https://w3c.github.io/aria/#option
8
+ */
5
9
  export default class Option extends SvelteComponentTyped<{
6
10
  [x: string]: any;
7
11
  label?: string;
8
- class?: string;
9
12
  value?: any;
13
+ class?: string;
10
14
  selected?: boolean;
11
15
  }, {
12
16
  click: MouseEvent;
@@ -34,8 +38,8 @@ declare const __propDef: {
34
38
  props: {
35
39
  [x: string]: any;
36
40
  label?: string;
37
- class?: string;
38
41
  value?: any;
42
+ class?: string;
39
43
  selected?: boolean;
40
44
  };
41
45
  events: {
@@ -1,10 +1,11 @@
1
1
  <!--
2
2
  @component
3
- @see https://w3c.github.io/aria-practices/#menubutton
3
+ A button to open a `<Menu>` widget.
4
+ @see https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/
4
5
  -->
5
6
  <script>
7
+ import Button from '../button/button.svelte';
6
8
  import Popup from '../util/popup.svelte';
7
- import Button from './button.svelte';
8
9
 
9
10
  /**
10
11
  * CSS class name on the button.
@@ -31,21 +32,6 @@
31
32
  aria-haspopup="menu"
32
33
  {...$$restProps}
33
34
  bind:this={buttonComponent}
34
- on:keydown={(event) => {
35
- const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
36
-
37
- if (['ArrowUp', 'ArrowDown'].includes(key) && !ctrlKey && !metaKey && !shiftKey && !altKey) {
38
- event.preventDefault();
39
-
40
- const members = [
41
- ...popupComponent.dialog.querySelectorAll('[role^="menuitem"]:not([aria-disabled="true"])'),
42
- ];
43
-
44
- if (members.length) {
45
- /** @type {HTMLElement} */ (key === 'ArrowUp' ? members.pop() : members.shift()).focus();
46
- }
47
- }
48
- }}
49
35
  >
50
36
  <slot name="start-icon" slot="start-icon" />
51
37
  <slot />
@@ -1,7 +1,10 @@
1
1
  /** @typedef {typeof __propDef.props} MenuButtonProps */
2
2
  /** @typedef {typeof __propDef.events} MenuButtonEvents */
3
3
  /** @typedef {typeof __propDef.slots} MenuButtonSlots */
4
- /** @see https://w3c.github.io/aria-practices/#menubutton */
4
+ /**
5
+ * A button to open a `<Menu>` widget.
6
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/
7
+ */
5
8
  export default class MenuButton extends SvelteComponentTyped<{
6
9
  [x: string]: any;
7
10
  class?: string;
@@ -1,5 +1,6 @@
1
1
  <!--
2
2
  @component
3
+ A menu item widget with a checkbox.
3
4
  @see https://w3c.github.io/aria/#menuitemcheckbox
4
5
  -->
5
6
  <script>
@@ -1,7 +1,10 @@
1
1
  /** @typedef {typeof __propDef.props} MenuItemCheckboxProps */
2
2
  /** @typedef {typeof __propDef.events} MenuItemCheckboxEvents */
3
3
  /** @typedef {typeof __propDef.slots} MenuItemCheckboxSlots */
4
- /** @see https://w3c.github.io/aria/#menuitemcheckbox */
4
+ /**
5
+ * A menu item widget with a checkbox.
6
+ * @see https://w3c.github.io/aria/#menuitemcheckbox
7
+ */
5
8
  export default class MenuItemCheckbox extends SvelteComponentTyped<{
6
9
  [x: string]: any;
7
10
  class?: string;
@@ -1,5 +1,9 @@
1
+ <!--
2
+ @component
3
+ A menu item group.
4
+ -->
1
5
  <script>
2
- import { getRandomId } from '../helpers/util';
6
+ import { getRandomId } from '../util/util';
3
7
 
4
8
  /**
5
9
  * CSS class name on the button.
@@ -1,6 +1,7 @@
1
1
  /** @typedef {typeof __propDef.props} MenuItemGroupProps */
2
2
  /** @typedef {typeof __propDef.events} MenuItemGroupEvents */
3
3
  /** @typedef {typeof __propDef.slots} MenuItemGroupSlots */
4
+ /** A menu item group. */
4
5
  export default class MenuItemGroup extends SvelteComponentTyped<{
5
6
  [x: string]: any;
6
7
  title?: string;
@@ -1,5 +1,7 @@
1
1
  <!--
2
2
  @component
3
+ A menu item widget with a radio. Only one item can be selected within the parent `<Menu>` or
4
+ `<MenuItemGroup>` component.
3
5
  @see https://w3c.github.io/aria/#menuitemradio
4
6
  -->
5
7
  <script>
@@ -1,7 +1,11 @@
1
1
  /** @typedef {typeof __propDef.props} MenuItemRadioProps */
2
2
  /** @typedef {typeof __propDef.events} MenuItemRadioEvents */
3
3
  /** @typedef {typeof __propDef.slots} MenuItemRadioSlots */
4
- /** @see https://w3c.github.io/aria/#menuitemradio */
4
+ /**
5
+ * A menu item widget with a radio. Only one item can be selected within the parent `<Menu>` or
6
+ * `<MenuItemGroup>` component.
7
+ * @see https://w3c.github.io/aria/#menuitemradio
8
+ */
5
9
  export default class MenuItemRadio extends SvelteComponentTyped<{
6
10
  [x: string]: any;
7
11
  class?: string;
@@ -1,13 +1,14 @@
1
1
  <!--
2
2
  @component
3
+ A menu item widget.
3
4
  @see https://w3c.github.io/aria/#menuitem
4
5
  -->
5
6
  <script>
6
7
  import { writable } from 'svelte/store';
7
- import Menu from '../composite/menu.svelte';
8
+ import Button from '../button/button.svelte';
9
+ import Icon from '../icon/icon.svelte';
8
10
  import Popup from '../util/popup.svelte';
9
- import Button from './button.svelte';
10
- import Icon from './icon.svelte';
11
+ import Menu from './menu.svelte';
11
12
 
12
13
  let className = '';
13
14
 
@@ -36,7 +37,7 @@
36
37
  {role}
37
38
  aria-checked={checked}
38
39
  aria-haspopup={hasChildren ? 'menu' : undefined}
39
- aria-expanded={$isPopupOpen ? true : undefined}
40
+ aria-expanded={hasChildren && $isPopupOpen ? true : undefined}
40
41
  {...$$restProps}
41
42
  bind:this={buttonComponent}
42
43
  on:click
@@ -90,8 +91,7 @@
90
91
  .menuitem :global(button[aria-checked="true"]) :global(.icon) {
91
92
  color: var(--primary-accent-color-lighter);
92
93
  }
93
- .menuitem :global(button:hover),
94
- .menuitem :global(button:focus) {
94
+ .menuitem :global(button:hover) {
95
95
  color: var(--highlight-foreground-color);
96
96
  background-color: var(--highlight-background-color);
97
97
  }
@@ -1,7 +1,10 @@
1
1
  /** @typedef {typeof __propDef.props} MenuItemProps */
2
2
  /** @typedef {typeof __propDef.events} MenuItemEvents */
3
3
  /** @typedef {typeof __propDef.slots} MenuItemSlots */
4
- /** @see https://w3c.github.io/aria/#menuitem */
4
+ /**
5
+ * A menu item widget.
6
+ * @see https://w3c.github.io/aria/#menuitem
7
+ */
5
8
  export default class MenuItem extends SvelteComponentTyped<{
6
9
  [x: string]: any;
7
10
  label?: string;
@@ -1,12 +1,13 @@
1
1
  <!--
2
2
  @component
3
+ A menu widget.
3
4
  @see https://w3c.github.io/aria/#menu
4
- @see https://w3c.github.io/aria-practices/#menu
5
+ @see https://www.w3.org/WAI/ARIA/apg/patterns/menubar/
5
6
  -->
6
7
  <svelte:options accessors={true} />
7
8
 
8
9
  <script>
9
- import { activateGroup } from '../helpers/group';
10
+ import { activateGroup } from '../util/group';
10
11
 
11
12
  /**
12
13
  * CSS class name on the button.
@@ -2,8 +2,9 @@
2
2
  /** @typedef {typeof __propDef.events} MenuEvents */
3
3
  /** @typedef {typeof __propDef.slots} MenuSlots */
4
4
  /**
5
+ * A menu widget.
5
6
  * @see https://w3c.github.io/aria/#menu
6
- * @see https://w3c.github.io/aria-practices/#menu
7
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/menubar/
7
8
  */
8
9
  export default class Menu extends SvelteComponentTyped<{
9
10
  [x: string]: any;
@@ -1,11 +1,11 @@
1
1
  <!--
2
2
  @component
3
- The container of `<RadioButton>`s.
3
+ The container of `<Radio>`s.
4
4
  @see https://w3c.github.io/aria/#radiogroup
5
- @see https://w3c.github.io/aria-practices/#radiobutton
5
+ @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/
6
6
  -->
7
7
  <script>
8
- import { activateGroup } from '../helpers/group';
8
+ import { activateGroup } from '../util/group';
9
9
 
10
10
  /**
11
11
  * CSS class name on the button.
@@ -23,23 +23,28 @@
23
23
  </script>
24
24
 
25
25
  <div
26
- class="sui radio-button-group {className} {orientation}"
26
+ class="sui radio-group {className} {orientation}"
27
+ tabindex="-1"
27
28
  role="radiogroup"
28
- tabindex="0"
29
+ aria-orientation={orientation}
29
30
  bind:this={element}
31
+ on:select
30
32
  use:activateGroup
31
33
  >
32
34
  <slot />
33
35
  </div>
34
36
 
35
- <style>.radio-button-group {
37
+ <style>.radio-group {
36
38
  display: inline-flex;
37
- align-items: center;
38
- gap: 16px;
39
39
  }
40
- .radio-button-group.horizontal {
40
+ .radio-group:focus-visible {
41
+ outline-width: 0 !important;
42
+ }
43
+ .radio-group.horizontal {
44
+ gap: 16px;
41
45
  align-items: center;
42
46
  }
43
- .radio-button-group.vertical {
47
+ .radio-group.vertical {
48
+ gap: 8px;
44
49
  flex-direction: column;
45
50
  }</style>
@@ -0,0 +1,40 @@
1
+ /** @typedef {typeof __propDef.props} RadioGroupProps */
2
+ /** @typedef {typeof __propDef.events} RadioGroupEvents */
3
+ /** @typedef {typeof __propDef.slots} RadioGroupSlots */
4
+ /**
5
+ * The container of `<Radio>`s.
6
+ * @see https://w3c.github.io/aria/#radiogroup
7
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/
8
+ */
9
+ export default class RadioGroup extends SvelteComponentTyped<{
10
+ class?: string;
11
+ element?: HTMLElement;
12
+ orientation?: "vertical" | "horizontal";
13
+ }, {
14
+ select: Event;
15
+ } & {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {
18
+ default: {};
19
+ }> {
20
+ }
21
+ export type RadioGroupProps = typeof __propDef.props;
22
+ export type RadioGroupEvents = typeof __propDef.events;
23
+ export type RadioGroupSlots = typeof __propDef.slots;
24
+ import { SvelteComponentTyped } from "svelte";
25
+ declare const __propDef: {
26
+ props: {
27
+ class?: string;
28
+ element?: HTMLElement | null;
29
+ orientation?: ('horizontal' | 'vertical');
30
+ };
31
+ events: {
32
+ select: Event;
33
+ } & {
34
+ [evt: string]: CustomEvent<any>;
35
+ };
36
+ slots: {
37
+ default: {};
38
+ };
39
+ };
40
+ export {};