@dosgato/dialog 0.0.19 → 0.0.21

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 (95) hide show
  1. package/Button.svelte +77 -0
  2. package/Button.svelte.d.ts +30 -0
  3. package/ButtonGroup.svelte.d.ts +3 -3
  4. package/Checkbox.svelte +2 -1
  5. package/Checkbox.svelte.d.ts +4 -3
  6. package/Container.svelte +18 -19
  7. package/Container.svelte.d.ts +5 -3
  8. package/Dialog.svelte +155 -0
  9. package/Dialog.svelte.d.ts +50 -0
  10. package/FieldAutocomplete.svelte +4 -7
  11. package/FieldAutocomplete.svelte.d.ts +4 -4
  12. package/FieldCheckbox.svelte +3 -2
  13. package/FieldCheckbox.svelte.d.ts +5 -4
  14. package/FieldChoices.svelte +3 -2
  15. package/FieldChoices.svelte.d.ts +4 -3
  16. package/FieldChooserLink.svelte +17 -13
  17. package/FieldChooserLink.svelte.d.ts +4 -5
  18. package/FieldDate.svelte +3 -2
  19. package/FieldDate.svelte.d.ts +4 -3
  20. package/FieldDateTime.svelte +3 -2
  21. package/FieldDateTime.svelte.d.ts +4 -3
  22. package/FieldDualListbox.svelte.d.ts +3 -3
  23. package/FieldHidden.svelte.d.ts +3 -3
  24. package/FieldIdentifier.svelte.d.ts +3 -3
  25. package/FieldMultiple.svelte +14 -7
  26. package/FieldMultiple.svelte.d.ts +6 -3
  27. package/FieldMultiselect.svelte +29 -22
  28. package/FieldMultiselect.svelte.d.ts +3 -3
  29. package/FieldNumber.svelte +3 -2
  30. package/FieldNumber.svelte.d.ts +4 -3
  31. package/FieldRadio.svelte +9 -4
  32. package/FieldRadio.svelte.d.ts +9 -3
  33. package/FieldSelect.svelte +9 -3
  34. package/FieldSelect.svelte.d.ts +9 -3
  35. package/FieldStandard.svelte +8 -3
  36. package/FieldStandard.svelte.d.ts +9 -3
  37. package/FieldText.svelte +3 -2
  38. package/FieldText.svelte.d.ts +4 -3
  39. package/FieldTextArea.svelte +5 -3
  40. package/FieldTextArea.svelte.d.ts +4 -3
  41. package/FileIcon.svelte.d.ts +3 -3
  42. package/Form.svelte +3 -3
  43. package/Form.svelte.d.ts +3 -3
  44. package/FormDialog.svelte +34 -0
  45. package/FormDialog.svelte.d.ts +38 -0
  46. package/Icon.svelte.d.ts +3 -3
  47. package/InlineMessage.svelte.d.ts +3 -3
  48. package/InlineMessages.svelte.d.ts +3 -3
  49. package/Input.svelte +4 -1
  50. package/Input.svelte.d.ts +4 -3
  51. package/Listbox.svelte.d.ts +3 -3
  52. package/Radio.svelte +5 -2
  53. package/Radio.svelte.d.ts +4 -3
  54. package/Tab.svelte +3 -2
  55. package/Tab.svelte.d.ts +3 -3
  56. package/TabStore.d.ts +11 -1
  57. package/TabStore.js +30 -3
  58. package/Tabs.svelte +66 -18
  59. package/Tabs.svelte.d.ts +5 -7
  60. package/chooser/Chooser.svelte +76 -99
  61. package/chooser/Chooser.svelte.d.ts +5 -5
  62. package/chooser/ChooserAPI.d.ts +10 -3
  63. package/chooser/ChooserStore.d.ts +15 -33
  64. package/chooser/ChooserStore.js +32 -149
  65. package/chooser/Details.svelte.d.ts +6 -5
  66. package/chooser/Thumbnail.svelte +9 -2
  67. package/chooser/Thumbnail.svelte.d.ts +6 -5
  68. package/colorpicker/FieldColorPicker.svelte +78 -24
  69. package/colorpicker/FieldColorPicker.svelte.d.ts +5 -6
  70. package/fileIcons.d.ts +2 -1
  71. package/helpers.d.ts +1 -0
  72. package/helpers.js +5 -0
  73. package/iconpicker/FieldIconPicker.svelte +4 -2
  74. package/iconpicker/FieldIconPicker.svelte.d.ts +4 -3
  75. package/index.d.ts +7 -0
  76. package/index.js +7 -0
  77. package/package.json +20 -13
  78. package/tree/LoadIcon.svelte +24 -0
  79. package/tree/LoadIcon.svelte.d.ts +23 -0
  80. package/tree/Tree.svelte +203 -0
  81. package/tree/Tree.svelte.d.ts +28 -0
  82. package/tree/TreeCell.svelte +18 -0
  83. package/tree/TreeCell.svelte.d.ts +18 -0
  84. package/tree/TreeNode.svelte +418 -0
  85. package/tree/TreeNode.svelte.d.ts +30 -0
  86. package/tree/index.d.ts +3 -0
  87. package/tree/index.js +3 -0
  88. package/tree/treestore.d.ts +117 -0
  89. package/tree/treestore.js +336 -0
  90. package/chooser/Asset.svelte +0 -83
  91. package/chooser/Asset.svelte.d.ts +0 -25
  92. package/chooser/AssetFolder.svelte +0 -127
  93. package/chooser/AssetFolder.svelte.d.ts +0 -25
  94. package/chooser/Page.svelte +0 -121
  95. package/chooser/Page.svelte.d.ts +0 -25
package/Button.svelte ADDED
@@ -0,0 +1,77 @@
1
+ <script>import Icon from './Icon.svelte';
2
+ export let type = 'button';
3
+ export let disabled = false;
4
+ export let compact = false;
5
+ export let cancel = false;
6
+ export let destructive = false;
7
+ export let secondary = false;
8
+ export let describedby = undefined;
9
+ export let element = undefined;
10
+ export let icon = undefined;
11
+ let className = undefined;
12
+ export { className as class };
13
+ </script>
14
+
15
+ <button {disabled} bind:this={element} {type} class="reset {className ?? ''}" class:cancel class:destructive class:secondary class:compact aria-describedby={describedby} on:click><Icon {icon} width="1.3em" /><span><slot /></span></button>
16
+
17
+ <style>
18
+ button.reset {
19
+ padding: 0.5em 1em;
20
+ border: 0;
21
+ border-radius: 0.25em;
22
+ background-color: var(--dg-button-bg, #501214);
23
+ color: var(--dg-button-text, white);
24
+ cursor: pointer;
25
+ display: flex;
26
+ align-items: center;
27
+ line-height: 1;
28
+ }
29
+ button.reset.compact {
30
+ padding: 0.1em;
31
+ }
32
+ button.reset[disabled] {
33
+ opacity: 0.6;
34
+ cursor: default;
35
+ }
36
+
37
+ button.reset > :global(svg:last-child) {
38
+ margin-left: 0.3em;
39
+ margin-right: -0.3em;
40
+ }
41
+ button.reset > :global(svg:first-child) {
42
+ margin-left: -0.3em;
43
+ margin-right: 0.3em;
44
+ }
45
+
46
+ button.reset:not([disabled]):hover {
47
+ background-color: var(--dg-button-hover-bg, #622a2c);
48
+ color: var(--dg-button-hover-text, white);
49
+ }
50
+
51
+ button.secondary {
52
+ background-color: var(--dg-button-secondary-bg, rgb(18, 184, 134));
53
+ color: var(--dg-button-secondary-text, white);
54
+ }
55
+ button.secondary:not([disabled]):hover {
56
+ background-color: var(--dg-button-secondary-hover-bg, rgb(12, 166, 120));
57
+ color: var(--dg-button-secondary-hover-text, white);
58
+ }
59
+
60
+ button.cancel {
61
+ background-color: var(--dg-button-cancel-bg, #808080);
62
+ color: var(--dg-button-cancel-text, white);
63
+ }
64
+ button.cancel:not([disabled]):hover {
65
+ background-color: var(--dg-button-cancel-hover-bg, #595959);
66
+ color: var(--dg-button-cancel-hover-text, white);
67
+ }
68
+
69
+ button.destructive {
70
+ background-color: var(--dg-button-delete-bg, rgb(250, 82, 82));
71
+ color: var(--dg-button-delete-text, white);
72
+ }
73
+ button.destructive:not([disabled]):hover {
74
+ background-color: var(--dg-button-delete-hover-bg, rgb(240, 62, 62));
75
+ color: var(--dg-button-delete-hover-text, white);
76
+ }
77
+ </style>
@@ -0,0 +1,30 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { IconifyIcon } from '@iconify/svelte';
3
+ declare const __propDef: {
4
+ props: {
5
+ type?: 'button' | 'submit';
6
+ disabled?: boolean;
7
+ compact?: boolean;
8
+ cancel?: boolean;
9
+ destructive?: boolean;
10
+ secondary?: boolean;
11
+ describedby?: string | undefined;
12
+ element?: HTMLElement | undefined;
13
+ icon?: IconifyIcon;
14
+ class?: string | undefined;
15
+ };
16
+ events: {
17
+ click: MouseEvent;
18
+ } & {
19
+ [evt: string]: CustomEvent<any>;
20
+ };
21
+ slots: {
22
+ default: {};
23
+ };
24
+ };
25
+ export type ButtonProps = typeof __propDef.props;
26
+ export type ButtonEvents = typeof __propDef.events;
27
+ export type ButtonSlots = typeof __propDef.slots;
28
+ export default class Button extends SvelteComponentTyped<ButtonProps, ButtonEvents, ButtonSlots> {
29
+ }
30
+ export {};
@@ -20,9 +20,9 @@ declare const __propDef: {
20
20
  };
21
21
  slots: {};
22
22
  };
23
- export declare type ButtonGroupProps = typeof __propDef.props;
24
- export declare type ButtonGroupEvents = typeof __propDef.events;
25
- export declare type ButtonGroupSlots = typeof __propDef.slots;
23
+ export type ButtonGroupProps = typeof __propDef.props;
24
+ export type ButtonGroupEvents = typeof __propDef.events;
25
+ export type ButtonGroupSlots = typeof __propDef.slots;
26
26
  export default class ButtonGroup extends SvelteComponentTyped<ButtonGroupProps, ButtonGroupEvents, ButtonGroupSlots> {
27
27
  }
28
28
  export {};
package/Checkbox.svelte CHANGED
@@ -10,7 +10,8 @@ export let disabled = false;
10
10
  export let valid = false;
11
11
  export let invalid = false;
12
12
  export let inputelement = undefined;
13
- $: descby = [descid, messagesid].filter(isNotBlank).join(' ');
13
+ export let helptextid = undefined;
14
+ $: descby = [descid, messagesid, helptextid].filter(isNotBlank).join(' ');
14
15
  </script>
15
16
 
16
17
  <input bind:this={inputelement} {id} type="checkbox" {name} class:valid class:invalid {disabled} aria-describedby={descby} bind:checked={value} on:change={onChange} on:blur={onBlur}>
@@ -12,15 +12,16 @@ declare const __propDef: {
12
12
  valid?: boolean;
13
13
  invalid?: boolean;
14
14
  inputelement?: HTMLInputElement;
15
+ helptextid?: string | undefined;
15
16
  };
16
17
  events: {
17
18
  [evt: string]: CustomEvent<any>;
18
19
  };
19
20
  slots: {};
20
21
  };
21
- export declare type CheckboxProps = typeof __propDef.props;
22
- export declare type CheckboxEvents = typeof __propDef.events;
23
- export declare type CheckboxSlots = typeof __propDef.slots;
22
+ export type CheckboxProps = typeof __propDef.props;
23
+ export type CheckboxEvents = typeof __propDef.events;
24
+ export type CheckboxSlots = typeof __propDef.slots;
24
25
  export default class Checkbox extends SvelteComponentTyped<CheckboxProps, CheckboxEvents, CheckboxSlots> {
25
26
  }
26
27
  export {};
package/Container.svelte CHANGED
@@ -1,11 +1,14 @@
1
1
  <script>import { eq } from '@txstate-mws/svelte-components';
2
2
  import InlineMessages from './InlineMessages.svelte';
3
+ import { randomid } from 'txstate-utils';
3
4
  export let id = undefined;
4
5
  export let descid = undefined;
5
6
  export let label;
7
+ export let helptext = undefined;
6
8
  export let messages;
7
9
  export let required = false;
8
10
  let messagesid;
11
+ const helptextid = helptext ? randomid() : undefined;
9
12
  </script>
10
13
 
11
14
  <div use:eq class="dialog-field-container">
@@ -15,16 +18,16 @@ let messagesid;
15
18
  <div id={descid} class="dialog-field-label">{label}{#if required}&nbsp;*{/if}</div>
16
19
  {/if}
17
20
  <div class="dialog-field-content">
18
- <slot {messagesid} />
21
+ {#if helptext}
22
+ <div id={helptextid} class="dialog-field-help">{helptext}</div>
23
+ {/if}
24
+ <slot {messagesid} {helptextid}/>
19
25
  </div>
20
26
  <InlineMessages bind:id={messagesid} {messages} />
21
27
  </div>
22
28
 
23
29
  <style>
24
30
  .dialog-field-container {
25
- display: flex;
26
- flex-wrap: wrap;
27
- align-items: center;
28
31
  border-bottom: var(--dialog-container-border, 1px solid #999999);
29
32
  padding: var(--dialog-container-padding, 1em) 0;
30
33
  --dialog-container-tab-correct: calc(-1 * var(--tabs-panel-padding, 1em));
@@ -57,33 +60,29 @@ let messagesid;
57
60
  :global(.tabs-panel) .dialog-field-container :global(.dialog-field-container) {
58
61
  margin-left: 0;
59
62
  }
60
- .dialog-field-content {
61
- position: relative;
62
- width: max(70%, calc(100% - 20em));
63
- }
64
63
  .dialog-field-label {
65
- width: min(30%, 20em);
66
- }
67
- :global([data-eq~="500px"]) .dialog-field-label {
68
- width: 100%;
69
- margin-bottom: 0.4em;
64
+ display: block;
65
+ margin-bottom: 0.3em;
66
+ font-weight: 500;
70
67
  }
71
- :global([data-eq~="500px"]) .dialog-field-content {
72
- width: 100%;
68
+ .dialog-field-content {
69
+ position: relative;
73
70
  }
74
71
  .dialog-field-container :global(.dialog-input) {
75
72
  width: 100%;
76
- padding: 0.4em 0.6em;
73
+ padding: 0.3em 0.5em;
74
+ border: 0;
75
+ border-radius: 0;
77
76
  }
78
77
  .dialog-field-container:nth-of-type(even) {
79
- background-color: var(--dialog-field-bg1, #e6e6e6);
78
+ background-color: var(--dialog-field-bg1, transparent);
80
79
  color: var(--dialog-field-text1, inherit);
81
80
  }
82
81
  .dialog-field-container:nth-of-type(odd) {
83
- background-color: var(--dialog-field-bg2, #ffffff);
82
+ background-color: var(--dialog-field-bg2, transparent);
84
83
  color: var(--dialog-field-text2, inherit);
85
84
  }
86
- .dialog-field-container :global(.field-help-text) {
85
+ .dialog-field-container :global(.dialog-field-help) {
87
86
  font-size: 0.9em;
88
87
  color: #595959;
89
88
  }
@@ -5,6 +5,7 @@ declare const __propDef: {
5
5
  id?: string | undefined;
6
6
  descid?: string | undefined;
7
7
  label: string;
8
+ helptext?: string | undefined;
8
9
  messages: Feedback[];
9
10
  required?: boolean;
10
11
  };
@@ -14,12 +15,13 @@ declare const __propDef: {
14
15
  slots: {
15
16
  default: {
16
17
  messagesid: any;
18
+ helptextid: string;
17
19
  };
18
20
  };
19
21
  };
20
- export declare type ContainerProps = typeof __propDef.props;
21
- export declare type ContainerEvents = typeof __propDef.events;
22
- export declare type ContainerSlots = typeof __propDef.slots;
22
+ export type ContainerProps = typeof __propDef.props;
23
+ export type ContainerEvents = typeof __propDef.events;
24
+ export type ContainerSlots = typeof __propDef.slots;
23
25
  export default class Container extends SvelteComponentTyped<ContainerProps, ContainerEvents, ContainerSlots> {
24
26
  }
25
27
  export {};
package/Dialog.svelte ADDED
@@ -0,0 +1,155 @@
1
+ <script context="module">export const DIALOG_TABS_CONTEXT = {};
2
+ </script>
3
+ <script>import arrowLeftLight from '@iconify-icons/ph/arrow-left-light';
4
+ import arrowRightLight from '@iconify-icons/ph/arrow-right-light';
5
+ import xLight from '@iconify-icons/ph/x-light';
6
+ import { Modal, ScreenReaderOnly } from '@txstate-mws/svelte-components';
7
+ import { createEventDispatcher, setContext } from 'svelte';
8
+ import { isNotBlank, randomid } from 'txstate-utils';
9
+ import { Button, Icon } from './';
10
+ const dispatch = createEventDispatcher();
11
+ export let initialfocus = undefined;
12
+ export let title = '';
13
+ export let icon = undefined;
14
+ export let size = 'normal';
15
+ export let cancelText = undefined;
16
+ export let continueText = 'Ok';
17
+ export let continueIcon = undefined;
18
+ export let escapable = isNotBlank(cancelText);
19
+ export let disabled = false;
20
+ export let ignoreTabs = false;
21
+ export let labelid = randomid();
22
+ export let descid = randomid();
23
+ const ctx = { change: onTabChange };
24
+ let hasTabs = false;
25
+ let prevTitle;
26
+ let nextTitle;
27
+ let hasRequired = false;
28
+ let onPrev;
29
+ let onNext;
30
+ function onTabChange() {
31
+ ({ hasTabs, prevTitle, nextTitle, hasRequired, onPrev, onNext } = ctx);
32
+ }
33
+ setContext(DIALOG_TABS_CONTEXT, ctx);
34
+ $: describedby = [title ? labelid : undefined, descid].filter(isNotBlank).join(' ');
35
+ </script>
36
+
37
+ <Modal {escapable} {initialfocus} hidefocus={false} on:escape>
38
+ <section class="{size}">
39
+ {#if title || icon}
40
+ <header id={labelid}>
41
+ <Icon width="1.4em" {icon} inline />{title}
42
+ </header>
43
+ {/if}
44
+ {#if escapable}
45
+ <button type="button" class="escape" on:click={() => dispatch('escape')}><Icon icon={xLight} width="2em" hiddenLabel="Close Dialog" /></button>
46
+ {/if}
47
+ <div id={descid} class="content">
48
+ <slot></slot>
49
+ </div>
50
+ <footer class="actions">
51
+ <slot name="buttons" {nextTitle} {prevTitle} hasRequired={hasRequired && !ignoreTabs} onPrev={onPrev} onNext={onNext}>
52
+ {#if prevTitle && !ignoreTabs}
53
+ <Button class="prev" disabled={!prevTitle} on:click={onPrev}><Icon icon={arrowLeftLight} inline /> Previous<ScreenReaderOnly> Tab ({prevTitle})</ScreenReaderOnly></Button>
54
+ {/if}
55
+ {#if isNotBlank(cancelText)}
56
+ <Button cancel {describedby} on:click={() => dispatch('escape')}>{cancelText}</Button>
57
+ {/if}
58
+ <Button class="primary" disabled={disabled || (hasRequired && !ignoreTabs)} {describedby} on:click={() => dispatch('continue')}><Icon icon={continueIcon} inline />{continueText}</Button>
59
+ {#if nextTitle && !ignoreTabs}
60
+ <Button class="next" disabled={!nextTitle} on:click={onNext}>Next<ScreenReaderOnly> Tab ({nextTitle})</ScreenReaderOnly> <Icon width="1.2em" icon={arrowRightLight} inline /></Button>
61
+ {/if}
62
+ </slot>
63
+ </footer>
64
+ </section>
65
+ </Modal>
66
+
67
+ <style>
68
+ section {
69
+ position: relative;
70
+ background-color: #f4f4f4;
71
+ padding: 1em;
72
+ overflow: hidden;
73
+ }
74
+ section.tiny {
75
+ width: 30vw;
76
+ min-width: 200px;
77
+ max-width: 250px;
78
+ }
79
+ section.small {
80
+ width: 50vw;
81
+ min-width: 220px;
82
+ max-width: 400px;
83
+ }
84
+ section.normal {
85
+ width: 75vw;
86
+ min-width: 250px;
87
+ max-width: 650px;
88
+ }
89
+ section.large {
90
+ width: 90vw;
91
+ min-width: 300px;
92
+ max-width: 1000px;
93
+ }
94
+ section.xl {
95
+ width: 95vw;
96
+ max-width: 2000px;
97
+ }
98
+
99
+ header {
100
+ display: flex;
101
+ align-items: center;
102
+ font-size: 1.1em;
103
+ margin: -1em;
104
+ margin-bottom: 0;
105
+ padding: 0.5em calc(var(--tabs-padding-hori, 1em) + 0.9em - 3px);
106
+ background-color: var(--dg-dialog-header-bg, #DDDDDD);
107
+ color: var(--dg-dialog-header-text, black);
108
+ }
109
+
110
+ header :global(svg) {
111
+ margin-right: 0.4em;
112
+ }
113
+
114
+ .content {
115
+ margin: 0 -1em;
116
+ padding: 1em;
117
+ min-height: 5em;
118
+ overflow: auto;
119
+ background-color: var(--dg-dialog-content-bg, #f4f4f4);
120
+ max-height: calc(100vh - 7em);
121
+ }
122
+
123
+ footer {
124
+ display: flex;
125
+ align-items: center;
126
+ justify-content: flex-end;
127
+ flex-wrap: wrap;
128
+ background-color: var(--dg-dialog-footer-bg, #DDDDDD);
129
+ margin: -1em;
130
+ margin-top: 0;
131
+ padding: 0.5em 1em;
132
+ }
133
+
134
+ footer > :global(*:not(:last-child)) {
135
+ margin-right: 0.5em;
136
+ }
137
+
138
+ :global(.dialog-field-container) {
139
+ background-color: transparent !important;
140
+ border-bottom: 0px !important;
141
+ }
142
+
143
+ footer.actions :global(.prev) {
144
+ margin-right: auto;
145
+ }
146
+
147
+ .escape {
148
+ position: absolute;
149
+ top: 0.1em;
150
+ right: 0;
151
+ border: 0;
152
+ background: none;
153
+ cursor: pointer;
154
+ }
155
+ </style>
@@ -0,0 +1,50 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ export declare const DIALOG_TABS_CONTEXT: {};
3
+ export interface DialogTabContext {
4
+ change: (..._: any) => void;
5
+ hasTabs?: boolean;
6
+ prevTitle?: string;
7
+ nextTitle?: string;
8
+ hasRequired?: boolean;
9
+ onNext?: () => void;
10
+ onPrev?: () => void;
11
+ }
12
+ import type { IconifyIcon } from '@iconify/svelte';
13
+ declare const __propDef: {
14
+ props: {
15
+ initialfocus?: string | undefined;
16
+ title?: string;
17
+ icon?: IconifyIcon;
18
+ size?: 'tiny' | 'small' | 'normal' | 'large' | 'xl';
19
+ cancelText?: string | undefined;
20
+ continueText?: string;
21
+ continueIcon?: IconifyIcon;
22
+ escapable?: boolean;
23
+ disabled?: boolean;
24
+ ignoreTabs?: boolean;
25
+ labelid?: string;
26
+ descid?: string;
27
+ };
28
+ events: {
29
+ escape: CustomEvent<any>;
30
+ continue: CustomEvent<any>;
31
+ } & {
32
+ [evt: string]: CustomEvent<any>;
33
+ };
34
+ slots: {
35
+ default: {};
36
+ buttons: {
37
+ nextTitle: string;
38
+ prevTitle: string;
39
+ hasRequired: boolean;
40
+ onPrev: () => void;
41
+ onNext: () => void;
42
+ };
43
+ };
44
+ };
45
+ export type DialogProps = typeof __propDef.props;
46
+ export type DialogEvents = typeof __propDef.events;
47
+ export type DialogSlots = typeof __propDef.slots;
48
+ export default class Dialog extends SvelteComponentTyped<DialogProps, DialogEvents, DialogSlots> {
49
+ }
50
+ export {};
@@ -2,6 +2,7 @@
2
2
  import FieldStandard from './FieldStandard.svelte';
3
3
  import { randomid } from 'txstate-utils';
4
4
  import { PopupMenu, ScreenReaderOnly } from '@txstate-mws/svelte-components';
5
+ import { getDescribedBy } from './';
5
6
  export let id = undefined;
6
7
  export let path;
7
8
  export let label = '';
@@ -14,15 +15,14 @@ export let choices;
14
15
  export let defaultValue = notNull ? choices[0].value : undefined;
15
16
  export let conditional = undefined;
16
17
  export let required = false;
17
- export let helptext = '';
18
18
  export let inputelement = undefined;
19
+ export let helptext = undefined;
19
20
  let inputvalue = '';
20
21
  let popupvalue = undefined;
21
22
  let savedLabel = '';
22
23
  let changed = false;
23
24
  let menuid;
24
25
  const liveTextId = randomid();
25
- const helpTextId = randomid();
26
26
  $: filteredChoices = changed
27
27
  ? choices.filter((item) => {
28
28
  return item.label?.toLowerCase().includes(inputvalue.toLowerCase()) || item.value.toLowerCase().includes(inputvalue.toLowerCase());
@@ -56,13 +56,10 @@ function reactToInitialValue(value) {
56
56
  }
57
57
  </script>
58
58
 
59
- <FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} serialize={!notNull && nullableSerialize} deserialize={!notNull && nullableDeserialize} let:value let:setVal let:valid let:invalid let:id let:onBlur let:onChange let:messagesid>
59
+ <FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {helptext} serialize={!notNull && nullableSerialize} deserialize={!notNull && nullableDeserialize} let:value let:setVal let:valid let:invalid let:id let:onBlur let:onChange let:messagesid let:helptextid>
60
60
  {@const _ = reactToInitialValue(value)}
61
- <input bind:this={inputelement} bind:value={inputvalue} {id} {placeholder} class="dialog-input {className}" class:valid class:invalid aria-invalid={invalid} aria-expanded={false} aria-controls={menuid} on:blur={onBlur} on:change={onChange} autocapitalize="none" type="text" autocomplete="off" aria-autocomplete="list" role="combobox" {disabled} aria-describedby={`${messagesid ?? ''} ${helptext.length ? helpTextId : ''}`} on:keydown={checkifchanged}>
61
+ <input bind:this={inputelement} bind:value={inputvalue} {id} {placeholder} class="dialog-input {className}" class:valid class:invalid aria-invalid={invalid} aria-expanded={false} aria-controls={menuid} on:blur={onBlur} on:change={onChange} autocapitalize="none" type="text" autocomplete="off" aria-autocomplete="list" role="combobox" {disabled} aria-describedby={getDescribedBy([messagesid, helptextid])} on:keydown={checkifchanged}>
62
62
  <PopupMenu bind:menuid align="bottomleft" items={filteredChoices} buttonelement={inputelement} bind:value={popupvalue} on:change={onchangepopup(setVal)} emptyText="No options available"/>
63
- {#if helptext.length}
64
- <span id={helpTextId} class="field-help-text">{helptext}</span>
65
- {/if}
66
63
  <ScreenReaderOnly arialive="polite" ariaatomic={true} id={liveTextId}>
67
64
  {filteredChoices.length} {filteredChoices.length === 1 ? 'option' : 'options'} available.
68
65
  </ScreenReaderOnly>
@@ -16,17 +16,17 @@ declare const __propDef: {
16
16
  defaultValue?: any;
17
17
  conditional?: boolean | undefined;
18
18
  required?: boolean;
19
- helptext?: string;
20
19
  inputelement?: HTMLInputElement;
20
+ helptext?: string | undefined;
21
21
  };
22
22
  events: {
23
23
  [evt: string]: CustomEvent<any>;
24
24
  };
25
25
  slots: {};
26
26
  };
27
- export declare type FieldAutocompleteProps = typeof __propDef.props;
28
- export declare type FieldAutocompleteEvents = typeof __propDef.events;
29
- export declare type FieldAutocompleteSlots = typeof __propDef.slots;
27
+ export type FieldAutocompleteProps = typeof __propDef.props;
28
+ export type FieldAutocompleteEvents = typeof __propDef.events;
29
+ export type FieldAutocompleteSlots = typeof __propDef.slots;
30
30
  export default class FieldAutocomplete extends SvelteComponentTyped<FieldAutocompleteProps, FieldAutocompleteEvents, FieldAutocompleteSlots> {
31
31
  }
32
32
  export {};
@@ -11,6 +11,7 @@ export let defaultValue = undefined;
11
11
  export let conditional = undefined;
12
12
  export let required = false;
13
13
  export let inputelement = undefined;
14
+ export let helptext = undefined;
14
15
  function onChange(setVal) {
15
16
  return function () {
16
17
  setVal(this.checked);
@@ -19,10 +20,10 @@ function onChange(setVal) {
19
20
  const descid = randomid();
20
21
  </script>
21
22
 
22
- <FieldStandard bind:id {path} {descid} {label} {defaultValue} {conditional} {required} let:value let:messagesid let:valid let:invalid let:id let:onBlur let:setVal>
23
+ <FieldStandard bind:id {path} {descid} {label} {defaultValue} {conditional} {helptext} {required} let:value let:messagesid let:helptextid let:valid let:invalid let:id let:onBlur let:setVal>
23
24
  <div class={className}>
24
25
  <label for={id}>
25
- <Checkbox bind:inputelement {id} name={path} {value} {messagesid} {descid} {valid} {invalid} {onBlur} onChange={onChange(setVal)}></Checkbox>
26
+ <Checkbox bind:inputelement {id} name={path} {value} {messagesid} {helptextid} {descid} {valid} {invalid} {onBlur} onChange={onChange(setVal)}></Checkbox>
26
27
  <span>{boxLabel}</span>
27
28
  </label>
28
29
  </div>
@@ -5,20 +5,21 @@ declare const __propDef: {
5
5
  id?: string | undefined;
6
6
  path: string;
7
7
  label?: string;
8
- boxLabel: any;
8
+ boxLabel: string;
9
9
  defaultValue?: boolean | undefined;
10
10
  conditional?: boolean | undefined;
11
11
  required?: boolean;
12
12
  inputelement?: HTMLInputElement;
13
+ helptext?: string | undefined;
13
14
  };
14
15
  events: {
15
16
  [evt: string]: CustomEvent<any>;
16
17
  };
17
18
  slots: {};
18
19
  };
19
- export declare type FieldCheckboxProps = typeof __propDef.props;
20
- export declare type FieldCheckboxEvents = typeof __propDef.events;
21
- export declare type FieldCheckboxSlots = typeof __propDef.slots;
20
+ export type FieldCheckboxProps = typeof __propDef.props;
21
+ export type FieldCheckboxEvents = typeof __propDef.events;
22
+ export type FieldCheckboxSlots = typeof __propDef.slots;
22
23
  export default class FieldCheckbox extends SvelteComponentTyped<FieldCheckboxProps, FieldCheckboxEvents, FieldCheckboxSlots> {
23
24
  }
24
25
  export {};
@@ -14,6 +14,7 @@ export let defaultValue = [];
14
14
  export let conditional = undefined;
15
15
  export let maxwidth = 250;
16
16
  export let leftToRight = false;
17
+ export let helptext = undefined;
17
18
  const store = getContext(FORM_CONTEXT);
18
19
  const currentWidth = derivedStore(store, 'width');
19
20
  $: cols = Math.min(Math.ceil($currentWidth / maxwidth), choices.length);
@@ -39,14 +40,14 @@ const descid = randomid();
39
40
  </script>
40
41
 
41
42
  <Field {path} {defaultValue} {conditional} let:path let:value let:onBlur let:setVal let:messages let:valid let:invalid>
42
- <Container {id} {label} {messages} {descid} let:messagesid>
43
+ <Container {id} {label} {messages} {descid} {helptext} let:messagesid let:helptextid>
43
44
  <div class="dialog-choices {className}" class:valid class:invalid>
44
45
  {#each choices as choice, idx}
45
46
  {@const checkid = `${path}.${idx}`}
46
47
  {@const included = value && value.includes(choice.value)}
47
48
  {@const label = choice.label || (typeof choice.value === 'string' ? choice.value : '')}
48
49
  <label for={checkid} style:width style:order={orders[idx]}>
49
- <Checkbox id={checkid} name={checkid} value={included} {messagesid} {descid} disabled={choice.disabled} onChange={() => onChangeCheckbox(setVal, choice, included)} {onBlur} />
50
+ <Checkbox id={checkid} name={checkid} value={included} {messagesid} {helptextid} {descid} disabled={choice.disabled} onChange={() => onChangeCheckbox(setVal, choice, included)} {onBlur} />
50
51
  <span>{label}</span>
51
52
  </label>
52
53
  {/each}
@@ -14,15 +14,16 @@ declare const __propDef: {
14
14
  conditional?: boolean | undefined;
15
15
  maxwidth?: number;
16
16
  leftToRight?: boolean;
17
+ helptext?: string | undefined;
17
18
  };
18
19
  events: {
19
20
  [evt: string]: CustomEvent<any>;
20
21
  };
21
22
  slots: {};
22
23
  };
23
- export declare type FieldChoicesProps = typeof __propDef.props;
24
- export declare type FieldChoicesEvents = typeof __propDef.events;
25
- export declare type FieldChoicesSlots = typeof __propDef.slots;
24
+ export type FieldChoicesProps = typeof __propDef.props;
25
+ export type FieldChoicesEvents = typeof __propDef.events;
26
+ export type FieldChoicesSlots = typeof __propDef.slots;
26
27
  export default class FieldChoices extends SvelteComponentTyped<FieldChoicesProps, FieldChoicesEvents, FieldChoicesSlots> {
27
28
  }
28
29
  export {};