@sveltia/ui 0.7.5 → 0.8.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 (112) hide show
  1. package/package/components/alert/alert.svelte +4 -4
  2. package/package/components/alert/alert.svelte.d.ts +2 -2
  3. package/package/components/button/button.svelte +5 -3
  4. package/package/components/button/button.svelte.d.ts +6 -4
  5. package/package/components/button/select-button-group.svelte +9 -5
  6. package/package/components/button/select-button.svelte +5 -4
  7. package/package/components/button/select-button.svelte.d.ts +2 -0
  8. package/package/components/calendar/calendar.svelte +20 -14
  9. package/package/components/checkbox/checkbox-group.svelte +6 -5
  10. package/package/components/checkbox/checkbox.svelte +6 -4
  11. package/package/components/checkbox/checkbox.svelte.d.ts +2 -2
  12. package/package/components/dialog/alert-dialog.svelte +50 -0
  13. package/package/components/dialog/alert-dialog.svelte.d.ts +55 -0
  14. package/package/components/dialog/confirmation-dialog.svelte +55 -0
  15. package/package/components/dialog/confirmation-dialog.svelte.d.ts +57 -0
  16. package/package/components/dialog/dialog.svelte +165 -221
  17. package/package/components/dialog/dialog.svelte.d.ts +20 -12
  18. package/package/components/dialog/prompt-dialog.svelte +78 -0
  19. package/package/components/dialog/prompt-dialog.svelte.d.ts +72 -0
  20. package/package/components/disclosure/disclosure.svelte +3 -2
  21. package/package/components/divider/divider.svelte +1 -1
  22. package/package/components/divider/spacer.svelte +1 -12
  23. package/package/components/divider/spacer.svelte.d.ts +0 -2
  24. package/package/components/drawer/drawer.svelte +119 -209
  25. package/package/components/drawer/drawer.svelte.d.ts +13 -9
  26. package/package/components/grid/grid-body.svelte +51 -0
  27. package/package/components/grid/grid-body.svelte.d.ts +36 -0
  28. package/package/components/grid/grid-cell.svelte +22 -0
  29. package/package/components/grid/grid-cell.svelte.d.ts +34 -0
  30. package/package/components/grid/grid-col-header.svelte +22 -0
  31. package/package/components/grid/grid-col-header.svelte.d.ts +34 -0
  32. package/package/components/grid/grid-foot.svelte +27 -0
  33. package/package/components/grid/grid-foot.svelte.d.ts +34 -0
  34. package/package/components/grid/grid-head.svelte +27 -0
  35. package/package/components/grid/grid-head.svelte.d.ts +34 -0
  36. package/package/components/grid/grid-row-header.svelte +23 -0
  37. package/package/components/grid/grid-row-header.svelte.d.ts +34 -0
  38. package/package/components/grid/grid-row.svelte +37 -0
  39. package/package/components/grid/grid-row.svelte.d.ts +44 -0
  40. package/package/components/grid/grid.svelte +52 -0
  41. package/package/components/grid/grid.svelte.d.ts +42 -0
  42. package/package/components/icon/icon.svelte +6 -7
  43. package/package/components/icon/icon.svelte.d.ts +0 -2
  44. package/package/components/listbox/listbox.svelte +3 -3
  45. package/package/components/listbox/option-group.svelte +6 -5
  46. package/package/components/listbox/option.svelte +7 -28
  47. package/package/components/listbox/option.svelte.d.ts +2 -0
  48. package/package/components/menu/menu-button.svelte +26 -16
  49. package/package/components/menu/menu-button.svelte.d.ts +2 -2
  50. package/package/components/menu/menu-item-checkbox.svelte +5 -4
  51. package/package/components/menu/menu-item-checkbox.svelte.d.ts +2 -0
  52. package/package/components/menu/menu-item-group.svelte +4 -3
  53. package/package/components/menu/menu-item-radio.svelte +5 -4
  54. package/package/components/menu/menu-item-radio.svelte.d.ts +2 -0
  55. package/package/components/menu/menu-item.svelte +7 -5
  56. package/package/components/menu/menu-item.svelte.d.ts +4 -2
  57. package/package/components/menu/menu.svelte +1 -1
  58. package/package/components/radio/radio-group.svelte +5 -5
  59. package/package/components/radio/radio.svelte +5 -2
  60. package/package/components/radio/radio.svelte.d.ts +2 -0
  61. package/package/components/select/combobox.svelte +11 -9
  62. package/package/components/slider/slider.svelte +12 -5
  63. package/package/components/switch/switch.svelte +3 -2
  64. package/package/components/switch/switch.svelte.d.ts +2 -2
  65. package/package/components/table/table-body.svelte +31 -3
  66. package/package/components/table/table-body.svelte.d.ts +2 -0
  67. package/package/components/table/table-cell.svelte +3 -4
  68. package/package/components/table/table-cell.svelte.d.ts +1 -1
  69. package/package/components/table/table-col-header.svelte +1 -2
  70. package/package/components/table/table-foot.svelte +7 -3
  71. package/package/components/table/table-head.svelte +7 -3
  72. package/package/components/table/table-row-header.svelte +1 -2
  73. package/package/components/table/table-row.svelte +1 -14
  74. package/package/components/table/table-row.svelte.d.ts +0 -8
  75. package/package/components/table/table.svelte +5 -17
  76. package/package/components/table/table.svelte.d.ts +1 -7
  77. package/package/components/tabs/tab-list.svelte +7 -5
  78. package/package/components/tabs/tab-panel.svelte +1 -1
  79. package/package/components/tabs/tab.svelte +2 -1
  80. package/package/components/tabs/tab.svelte.d.ts +2 -0
  81. package/package/components/text-field/markdown-editor.svelte +30 -6
  82. package/package/components/text-field/markdown-editor.svelte.d.ts +2 -0
  83. package/package/components/text-field/number-input.svelte +36 -6
  84. package/package/components/text-field/number-input.svelte.d.ts +2 -0
  85. package/package/components/text-field/password-input.svelte +34 -8
  86. package/package/components/text-field/password-input.svelte.d.ts +2 -0
  87. package/package/components/text-field/search-bar.svelte +39 -11
  88. package/package/components/text-field/search-bar.svelte.d.ts +5 -0
  89. package/package/components/text-field/text-area.svelte +21 -2
  90. package/package/components/text-field/text-area.svelte.d.ts +2 -0
  91. package/package/components/text-field/text-input.svelte +22 -4
  92. package/package/components/text-field/text-input.svelte.d.ts +7 -2
  93. package/package/components/toast/toast.svelte +6 -16
  94. package/package/components/toast/toast.svelte.d.ts +2 -2
  95. package/package/components/toolbar/toolbar.svelte +3 -4
  96. package/package/components/util/app-shell.svelte +26 -27
  97. package/package/components/util/group.svelte +2 -2
  98. package/package/components/util/modal.svelte +220 -0
  99. package/package/components/util/modal.svelte.d.ts +83 -0
  100. package/package/components/util/popup.svelte +81 -127
  101. package/package/components/util/popup.svelte.d.ts +22 -18
  102. package/package/components/util/portal.svelte +1 -1
  103. package/package/index.d.ts +12 -0
  104. package/package/index.js +12 -0
  105. package/package/locales/en.d.ts +1 -0
  106. package/package/locales/en.js +1 -0
  107. package/package/locales/ja.d.ts +1 -0
  108. package/package/locales/ja.js +1 -0
  109. package/package/services/group.js +51 -13
  110. package/package/styles/core.scss +9 -26
  111. package/package/styles/variables.scss +12 -0
  112. package/package.json +97 -1
@@ -42,16 +42,17 @@
42
42
  </script>
43
43
 
44
44
  <div
45
+ role="group"
45
46
  {id}
46
47
  class="sui disclosure {className}"
47
- role="group"
48
48
  hidden={hidden || undefined}
49
49
  aria-hidden={hidden}
50
50
  aria-disabled={disabled}
51
51
  aria-labelledby="{id}-header"
52
+ aria-roledescription="disclosure"
52
53
  {...$$restProps}
53
54
  >
54
- <div class="inner" inert={disabled}>
55
+ <div role="none" class="inner" inert={disabled}>
55
56
  <Button
56
57
  class="header"
57
58
  id="{id}-header"
@@ -23,8 +23,8 @@
23
23
  </script>
24
24
 
25
25
  <div
26
- class="sui divider {className}"
27
26
  role="separator"
27
+ class="sui divider {className}"
28
28
  hidden={hidden || undefined}
29
29
  aria-hidden={hidden}
30
30
  aria-orientation={orientation}
@@ -9,11 +9,6 @@
9
9
  */
10
10
  let className = '';
11
11
  export { className as class };
12
- /**
13
- * Whether to hide the widget. An alias of the `aria-hidden` attribute.
14
- * @type {boolean | undefined}
15
- */
16
- export let hidden = undefined;
17
12
  /**
18
13
  * Whether to make the spacer flexible.
19
14
  * @type {boolean}
@@ -21,13 +16,7 @@
21
16
  export let flex = false;
22
17
  </script>
23
18
 
24
- <div
25
- class="sui spacer {className}"
26
- class:flex
27
- hidden={hidden || undefined}
28
- aria-hidden={hidden}
29
- {...$$restProps}
30
- />
19
+ <div role="none" class="sui spacer {className}" class:flex {...$$restProps} />
31
20
 
32
21
  <style>.spacer.flex {
33
22
  flex: auto;
@@ -5,7 +5,6 @@
5
5
  export default class Spacer extends SvelteComponent<{
6
6
  [x: string]: any;
7
7
  class?: string;
8
- hidden?: boolean;
9
8
  flex?: boolean;
10
9
  }, {
11
10
  [evt: string]: CustomEvent<any>;
@@ -19,7 +18,6 @@ declare const __propDef: {
19
18
  props: {
20
19
  [x: string]: any;
21
20
  class?: string;
22
- hidden?: boolean | undefined;
23
21
  flex?: boolean;
24
22
  };
25
23
  events: {
@@ -5,332 +5,242 @@
5
5
  @see https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/
6
6
  -->
7
7
  <script>
8
- import { createEventDispatcher, onMount } from 'svelte';
9
8
  import { _ } from 'svelte-i18n';
9
+ import { getRandomId } from '../../services/util';
10
10
  import Button from '../button/button.svelte';
11
11
  import Spacer from '../divider/spacer.svelte';
12
12
  import Icon from '../icon/icon.svelte';
13
+ import Modal from '../util/modal.svelte';
13
14
 
14
15
  /**
15
- * CSS class name on the button.
16
+ * The `class` attribute on the content element.
16
17
  * @type {string}
17
18
  */
18
19
  let className = '';
19
-
20
20
  export { className as class };
21
-
22
21
  /**
23
22
  * Whether to open the drawer.
23
+ * @type {boolean}
24
24
  */
25
25
  export let open = false;
26
-
27
26
  /**
28
27
  * Title text displayed on the header.
28
+ * @type {string}
29
29
  */
30
30
  export let title = '';
31
-
32
31
  /**
33
32
  * Position of the drawer.
34
- * @type {('top'|'right'|'bottom'|'left')}
33
+ * @type {'top' | 'right' | 'bottom' | 'left'}
35
34
  */
36
35
  export let position = 'right';
37
-
38
36
  /**
39
37
  * Width or height of the drawer.
40
- * @type {('small'|'medium'|'large'|'x-large')}
38
+ * @type {'small' | 'medium' | 'large' | 'x-large'}
41
39
  */
42
40
  export let size = 'small';
43
-
44
41
  /**
45
42
  * Whether to show the Close button.
46
- * @type {('inside'|'outside'|false)}
43
+ * @type {'inside' | 'outside' | false}
47
44
  */
48
45
  export let showClose = 'outside';
49
-
50
46
  /**
51
- * Whether to close the drawer when the backdrop (outside of the drawer) is clicked.
47
+ * Whether to close the modal when the backdrop (outside of the modal) is clicked.
48
+ * @type {boolean}
52
49
  */
53
- export let closeOnBackdropClick = false;
54
-
50
+ export let lightDismiss = false;
55
51
  /**
56
- * Whether to keep the content when the dialog is not displayed.
52
+ * Whether to keep the content in the DOM tree when the modal is not displayed.
53
+ * @type {boolean}
57
54
  */
58
55
  export let keepContent = false;
59
56
 
60
- const dispatch = createEventDispatcher();
61
- /** @type {?HTMLDialogElement} */
62
- let dialog;
63
- /** @type {?HTMLFormElement} */
64
- let form;
65
- let showDialog = false;
66
- let showContent = false;
67
-
68
- $: orientation = position === 'right' || position === 'left' ? 'vertical' : 'horizontal';
69
-
70
57
  /**
71
- *
58
+ * The ID of the drawer.
59
+ * @type {string}
72
60
  */
73
- const openDialog = async () => {
74
- (document.querySelector('.sui.app-shell') ?? document.body).appendChild(dialog);
75
- showContent = true;
76
- dialog.showModal();
77
-
78
- window.requestAnimationFrame(() => {
79
- showDialog = true;
80
- });
81
- };
82
-
61
+ const id = getRandomId('drawer');
83
62
  /**
84
- *
63
+ * A reference to the modal component.
64
+ * @type {Modal}
85
65
  */
86
- const closeDialog = async () => {
87
- showDialog = false;
88
-
89
- if (dialog.returnValue === 'ok') {
90
- dispatch('ok');
91
- }
92
-
93
- if (dialog.returnValue === 'cancel') {
94
- dispatch('cancel');
95
- }
66
+ let modal;
96
67
 
97
- dispatch('close', dialog.returnValue);
98
-
99
- await new Promise((resolve) => {
100
- form.addEventListener('transitionend', () => resolve(), { once: true });
101
- });
102
-
103
- showContent = false;
104
- dialog?.close();
105
- dialog?.remove();
106
- };
107
-
108
- /**
109
- *
110
- */
111
- const toggleDialog = () => {
112
- if (dialog) {
113
- if (open) {
114
- openDialog();
115
- } else {
116
- closeDialog();
117
- }
118
- }
119
- };
120
-
121
- $: {
122
- void open;
123
- toggleDialog();
124
- }
125
-
126
- onMount(() => {
127
- dialog.remove();
128
-
129
- // onUnmount
130
- return () => {
131
- dialog?.close();
132
- dialog?.remove();
133
- };
134
- });
68
+ $: orientation = position === 'right' || position === 'left' ? 'vertical' : 'horizontal';
135
69
  </script>
136
70
 
137
- <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
138
- <dialog
139
- bind:this={dialog}
140
- class="sui dialog {className} {size} {position} {orientation}"
141
- class:open={showDialog}
71
+ <Modal
72
+ {id}
73
+ class="drawer"
74
+ bind:open
75
+ showBackdrop
76
+ {lightDismiss}
77
+ {keepContent}
142
78
  {...$$restProps}
143
- on:click={({ target }) => {
144
- if (closeOnBackdropClick && /** @type {HTMLElement?} */ (target)?.matches('dialog')) {
145
- dialog.returnValue = 'cancel';
146
- open = false;
147
- }
148
- }}
149
- on:cancel|preventDefault={() => {
150
- // Cancelled with the Escape key
151
- open = false;
152
- }}
79
+ bind:this={modal}
80
+ on:opening
81
+ on:open
82
+ on:ok
83
+ on:cancel
84
+ on:closing
85
+ on:close
153
86
  >
154
- <form method="dialog" bind:this={form} on:submit|preventDefault>
155
- <div class="extra-control">
87
+ <div role="none" class="content {className} {size} {position} {orientation}">
88
+ <div role="none" class="extra-control">
156
89
  {#if showClose === 'outside'}
157
90
  <Button
158
91
  variant="ghost"
159
92
  iconic
160
93
  class="close"
94
+ aria-label={$_('_sui.close')}
95
+ aria-controls={id}
161
96
  on:click={() => {
162
- dialog.returnValue = 'close';
163
- open = false;
97
+ modal.close('close');
164
98
  }}
165
99
  >
166
- <Icon slot="start-icon" name="close" label={$_('_sui.close')} />
100
+ <Icon slot="start-icon" name="close" />
167
101
  </Button>
168
102
  {/if}
169
103
  </div>
170
- {#if keepContent || showContent}
171
- {#if title || showClose === 'inside' || $$slots.header || $$slots['header-extra']}
172
- <div class="header">
173
- {#if $$slots.header}
174
- <slot name="header" />
175
- {:else}
176
- <div class="title">
177
- {title}
178
- </div>
179
- <Spacer flex={true} />
180
- {#if $$slots['header-extra']}
181
- <slot name="header-extra" />
182
- {/if}
183
- {#if showClose === 'inside'}
184
- <Button
185
- variant="ghost"
186
- iconic
187
- class="close"
188
- on:click={() => {
189
- dialog.returnValue = 'close';
190
- open = false;
191
- }}
192
- >
193
- <Icon slot="start-icon" name="close" label={$_('_sui.close')} />
194
- </Button>
195
- {/if}
104
+ {#if title || showClose === 'inside' || $$slots.header || $$slots['header-extra']}
105
+ <div role="none" class="header">
106
+ {#if $$slots.header}
107
+ <slot name="header" />
108
+ {:else}
109
+ <div role="none" class="title">
110
+ {title}
111
+ </div>
112
+ <Spacer flex={true} />
113
+ {#if $$slots['header-extra']}
114
+ <slot name="header-extra" />
196
115
  {/if}
197
- </div>
198
- {/if}
199
- <div class="main">
200
- <slot />
116
+ {#if showClose === 'inside'}
117
+ <Button
118
+ variant="ghost"
119
+ iconic
120
+ class="close"
121
+ aria-label={$_('_sui.close')}
122
+ aria-controls={id}
123
+ on:click={() => {
124
+ modal.close('close');
125
+ }}
126
+ >
127
+ <Icon slot="start-icon" name="close" />
128
+ </Button>
129
+ {/if}
130
+ {/if}
201
131
  </div>
202
- {#if $$slots.footer}
203
- <div class="footer">
204
- <slot name="footer" />
205
- </div>
206
- {/if}
207
132
  {/if}
208
- </form>
209
- </dialog>
133
+ <div role="none" class="main">
134
+ <slot />
135
+ </div>
136
+ {#if $$slots.footer}
137
+ <div role="none" class="footer">
138
+ <slot name="footer" />
139
+ </div>
140
+ {/if}
141
+ </div>
142
+ </Modal>
210
143
 
211
- <style>dialog {
212
- overflow: hidden;
213
- outline: 0;
214
- background-color: var(--sui-popup-backdrop-color);
215
- }
216
- dialog.open form {
217
- opacity: 1;
218
- transform: translateX(0%);
219
- transition-duration: 100ms;
220
- }
221
- dialog:not(.open) {
222
- pointer-events: none !important;
223
- }
224
- dialog:not(.open) form {
225
- opacity: 0;
226
- transform: translateX(105%);
227
- pointer-events: none;
228
- transition-duration: 200ms;
229
- }
230
- dialog:not(.open) :global(*) {
231
- pointer-events: none !important;
232
- }
233
- dialog :global(a),
234
- dialog :global(input),
235
- dialog :global(textarea),
236
- dialog :global(button),
237
- dialog :global([tabindex="0"]) {
238
- pointer-events: all;
239
- }
240
- dialog form {
144
+ <style>.content {
241
145
  position: absolute;
242
146
  display: flex;
243
147
  flex-direction: column;
244
148
  border-radius: 4px;
245
- max-width: 100vw;
246
- max-height: 100vh;
149
+ max-width: 100dvw;
150
+ max-height: 100dvh;
247
151
  background-color: var(--sui-secondary-background-color-translucent);
248
- -webkit-backdrop-filter: blur(32px);
249
- backdrop-filter: blur(32px);
250
152
  box-shadow: 0 8px 16px var(--sui-popup-shadow-color);
251
- will-change: opacity, transform;
252
- transition-property: opacity, transform;
153
+ -webkit-backdrop-filter: blur(16px);
154
+ backdrop-filter: blur(16px);
155
+ transition-property: transform;
253
156
  }
254
- dialog form .extra-control {
157
+ .content .extra-control {
255
158
  position: absolute;
256
159
  }
257
- dialog form .extra-control :global(button.close) {
160
+ .content .extra-control :global(button.close) {
258
161
  margin: 8px;
259
162
  }
260
- dialog.right form {
163
+ :global(dialog.open) .content {
164
+ transition-duration: 150ms;
165
+ transform: translateX(0%);
166
+ }
167
+ :global(dialog:not(.open)) .content {
168
+ transition-duration: 300ms;
169
+ }
170
+ .content.right {
261
171
  inset: 0 0 0 auto;
262
172
  }
263
- dialog.right form .extra-control {
173
+ .content.right .extra-control {
264
174
  inset: 0 100% auto auto;
265
175
  }
266
- dialog.right:not(.open) form {
176
+ :global(dialog:not(.open)) .content.right {
267
177
  transform: translateX(105%);
268
178
  }
269
- dialog.left form {
179
+ .content.left {
270
180
  inset: 0 auto 0 0;
271
181
  }
272
- dialog.left form .extra-control {
182
+ .content.left .extra-control {
273
183
  inset: 0 auto auto 100%;
274
184
  }
275
- dialog.left:not(.open) form {
185
+ :global(dialog:not(.open)) .content.left {
276
186
  transform: translateX(-105%);
277
187
  }
278
- dialog.vertical {
188
+ .content.vertical {
279
189
  height: 100%;
280
- max-width: 100vw;
190
+ max-width: 100dvw;
281
191
  }
282
- dialog.vertical.open form {
283
- max-width: calc(100vw - 56px);
192
+ :global(dialog.open) .content.vertical {
193
+ max-width: calc(100dvw - 56px);
284
194
  transform: translateX(0%);
285
195
  }
286
- dialog.vertical.small form {
196
+ .content.vertical.small {
287
197
  width: 400px;
288
198
  }
289
- dialog.vertical.medium form {
199
+ .content.vertical.medium {
290
200
  width: 600px;
291
201
  }
292
- dialog.vertical.large form {
202
+ .content.vertical.large {
293
203
  width: 800px;
294
204
  }
295
- dialog.vertical.x-large form {
205
+ .content.vertical.x-large {
296
206
  width: 1000px;
297
207
  }
298
- dialog.top form {
208
+ .content.top {
299
209
  inset: 0 0 auto 0;
300
210
  }
301
- dialog.top form .extra-control {
211
+ .content.top .extra-control {
302
212
  inset: 100% 0 auto auto;
303
213
  }
304
- dialog.top:not(.open) form {
214
+ :global(dialog:not(.open)) .content.top {
305
215
  transform: translateY(-105%);
306
216
  }
307
- dialog.bottom form {
217
+ .content.bottom {
308
218
  inset: auto 0 0 0;
309
219
  }
310
- dialog.bottom form .extra-control {
220
+ .content.bottom .extra-control {
311
221
  inset: auto 0 100% auto;
312
222
  }
313
- dialog.bottom:not(.open) form {
223
+ :global(dialog:not(.open)) .content.bottom {
314
224
  transform: translateY(105%);
315
225
  }
316
- dialog.horizontal {
226
+ .content.horizontal {
317
227
  width: 100%;
318
- max-height: 100vh;
228
+ max-height: 100dvh;
319
229
  }
320
- dialog.horizontal.open form {
321
- max-height: calc(100vh - 56px);
230
+ :global(dialog.open) .content.horizontal {
231
+ max-height: calc(100dvh - 56px);
322
232
  transform: translateY(0%);
323
233
  }
324
- dialog.horizontal.small form {
234
+ .content.horizontal.small {
325
235
  height: 400px;
326
236
  }
327
- dialog.horizontal.medium form {
237
+ .content.horizontal.medium {
328
238
  height: 600px;
329
239
  }
330
- dialog.horizontal.large form {
240
+ .content.horizontal.large {
331
241
  height: 800px;
332
242
  }
333
- dialog.horizontal.x-large form {
243
+ .content.horizontal.x-large {
334
244
  height: 1000px;
335
245
  }
336
246
 
@@ -12,14 +12,16 @@ export default class Drawer extends SvelteComponent<{
12
12
  title?: string;
13
13
  size?: "small" | "medium" | "large" | "x-large";
14
14
  position?: "top" | "right" | "bottom" | "left";
15
- keepContent?: boolean;
16
15
  open?: boolean;
16
+ lightDismiss?: boolean;
17
+ keepContent?: boolean;
17
18
  showClose?: false | "inside" | "outside";
18
- closeOnBackdropClick?: boolean;
19
19
  }, {
20
- submit: SubmitEvent;
20
+ opening: CustomEvent<any>;
21
+ open: CustomEvent<any>;
21
22
  ok: CustomEvent<any>;
22
23
  cancel: CustomEvent<any>;
24
+ closing: CustomEvent<any>;
23
25
  close: CustomEvent<any>;
24
26
  } & {
25
27
  [evt: string]: CustomEvent<any>;
@@ -39,17 +41,19 @@ declare const __propDef: {
39
41
  [x: string]: any;
40
42
  class?: string;
41
43
  title?: string;
42
- size?: ('small' | 'medium' | 'large' | 'x-large');
43
- position?: ('top' | 'right' | 'bottom' | 'left');
44
- keepContent?: boolean;
44
+ size?: 'small' | 'medium' | 'large' | 'x-large';
45
+ position?: 'top' | 'right' | 'bottom' | 'left';
45
46
  open?: boolean;
46
- showClose?: ('inside' | 'outside' | false);
47
- closeOnBackdropClick?: boolean;
47
+ lightDismiss?: boolean;
48
+ keepContent?: boolean;
49
+ showClose?: 'inside' | 'outside' | false;
48
50
  };
49
51
  events: {
50
- submit: SubmitEvent;
52
+ opening: CustomEvent<any>;
53
+ open: CustomEvent<any>;
51
54
  ok: CustomEvent<any>;
52
55
  cancel: CustomEvent<any>;
56
+ closing: CustomEvent<any>;
53
57
  close: CustomEvent<any>;
54
58
  } & {
55
59
  [evt: string]: CustomEvent<any>;
@@ -0,0 +1,51 @@
1
+ <!--
2
+ @component
3
+ The interactive version of `<TableBody>`.
4
+ @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody
5
+ @see https://w3c.github.io/aria/#rowgroup
6
+ -->
7
+ <script>
8
+ import { getRandomId } from '../../services/util';
9
+
10
+ /**
11
+ * The `class` attribute on the wrapper element.
12
+ * @type {string}
13
+ */
14
+ let className = '';
15
+ export { className as class };
16
+
17
+ /**
18
+ * Display label for the row group.
19
+ * @type {string}
20
+ */
21
+ export let label = '';
22
+
23
+ const id = getRandomId('tbody');
24
+ </script>
25
+
26
+ <div
27
+ role="rowgroup"
28
+ class="sui grid-body row-group {className}"
29
+ aria-labelledby={label ? `${id}-label` : undefined}
30
+ aria-roledescription="grid body"
31
+ {...$$restProps}
32
+ >
33
+ {#if label}
34
+ <tr class="row-group-caption">
35
+ <th id="{id}-label" colspan="9999" scope="rowgroup">{label}</th>
36
+ </tr>
37
+ {/if}
38
+ <slot />
39
+ </div>
40
+
41
+ <style>.grid-body {
42
+ display: table-row-group;
43
+ }
44
+
45
+ th {
46
+ padding: 8px;
47
+ color: var(--sui-secondary-foreground-color);
48
+ background-color: var(--sui-secondary-background-color);
49
+ font-size: var(--sui-font-size-default);
50
+ text-align: left;
51
+ }</style>
@@ -0,0 +1,36 @@
1
+ /** @typedef {typeof __propDef.props} GridBodyProps */
2
+ /** @typedef {typeof __propDef.events} GridBodyEvents */
3
+ /** @typedef {typeof __propDef.slots} GridBodySlots */
4
+ /**
5
+ * The interactive version of `<TableBody>`.
6
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody
7
+ * @see https://w3c.github.io/aria/#rowgroup
8
+ */
9
+ export default class GridBody extends SvelteComponent<{
10
+ [x: string]: any;
11
+ class?: string;
12
+ label?: string;
13
+ }, {
14
+ [evt: string]: CustomEvent<any>;
15
+ }, {
16
+ default: {};
17
+ }> {
18
+ }
19
+ export type GridBodyProps = typeof __propDef.props;
20
+ export type GridBodyEvents = typeof __propDef.events;
21
+ export type GridBodySlots = typeof __propDef.slots;
22
+ import { SvelteComponent } from "svelte";
23
+ declare const __propDef: {
24
+ props: {
25
+ [x: string]: any;
26
+ class?: string;
27
+ label?: string;
28
+ };
29
+ events: {
30
+ [evt: string]: CustomEvent<any>;
31
+ };
32
+ slots: {
33
+ default: {};
34
+ };
35
+ };
36
+ export {};
@@ -0,0 +1,22 @@
1
+ <!--
2
+ @component
3
+ The interactive version of `<TableCell>`.
4
+ @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td
5
+ @see https://w3c.github.io/aria/#gridcell
6
+ -->
7
+ <script>
8
+ /**
9
+ * The `class` attribute on the wrapper element.
10
+ * @type {string}
11
+ */
12
+ let className = '';
13
+ export { className as class };
14
+ </script>
15
+
16
+ <div role="gridcell" class="sui grid-cell {className}" {...$$restProps}>
17
+ <slot />
18
+ </div>
19
+
20
+ <style>.grid-cell {
21
+ display: table-cell;
22
+ }</style>