@dosgato/dialog 0.0.46 → 0.0.48
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.
- package/dist/ButtonGroup.svelte +1 -0
- package/dist/Checkbox.svelte +1 -4
- package/dist/Checkbox.svelte.d.ts +0 -2
- package/dist/Container.svelte +77 -7
- package/dist/Container.svelte.d.ts +2 -0
- package/dist/Dialog.svelte +2 -2
- package/dist/FieldAutocomplete.svelte +4 -2
- package/dist/FieldAutocomplete.svelte.d.ts +2 -0
- package/dist/FieldCheckbox.svelte +5 -2
- package/dist/FieldCheckbox.svelte.d.ts +2 -0
- package/dist/FieldChoices.svelte +5 -2
- package/dist/FieldChoices.svelte.d.ts +2 -0
- package/dist/FieldChooserLink.svelte +4 -2
- package/dist/FieldChooserLink.svelte.d.ts +2 -0
- package/dist/FieldCodeEditor.svelte +4 -2
- package/dist/FieldCodeEditor.svelte.d.ts +2 -0
- package/dist/FieldDate.svelte +4 -2
- package/dist/FieldDate.svelte.d.ts +2 -0
- package/dist/FieldDateTime.svelte +4 -2
- package/dist/FieldDateTime.svelte.d.ts +2 -0
- package/dist/FieldDualListbox.svelte +9 -5
- package/dist/FieldDualListbox.svelte.d.ts +3 -0
- package/dist/FieldMultiple.svelte +11 -3
- package/dist/FieldMultiple.svelte.d.ts +3 -0
- package/dist/FieldMultiselect.svelte +7 -3
- package/dist/FieldMultiselect.svelte.d.ts +3 -0
- package/dist/FieldNumber.svelte +4 -2
- package/dist/FieldNumber.svelte.d.ts +2 -0
- package/dist/FieldRadio.svelte +3 -1
- package/dist/FieldRadio.svelte.d.ts +2 -0
- package/dist/FieldSelect.svelte +4 -2
- package/dist/FieldSelect.svelte.d.ts +2 -0
- package/dist/FieldStandard.svelte +2 -1
- package/dist/FieldStandard.svelte.d.ts +1 -0
- package/dist/FieldText.svelte +4 -2
- package/dist/FieldText.svelte.d.ts +2 -0
- package/dist/FieldTextArea.svelte +4 -2
- package/dist/FieldTextArea.svelte.d.ts +2 -0
- package/dist/Input.svelte +2 -1
- package/dist/Input.svelte.d.ts +1 -0
- package/dist/Listbox.svelte +1 -0
- package/dist/Radio.svelte +2 -1
- package/dist/Radio.svelte.d.ts +1 -0
- package/dist/Switcher.svelte +4 -2
- package/dist/Switcher.svelte.d.ts +2 -0
- package/dist/Tabs.svelte +1 -0
- package/dist/chooser/Chooser.svelte +1 -5
- package/dist/chooser/ChooserStore.d.ts +3 -3
- package/dist/chooser/ChooserStore.js +5 -3
- package/dist/chooser/Details.svelte +58 -12
- package/dist/chooser/Details.svelte.d.ts +2 -3
- package/dist/helpers.d.ts +1 -1
- package/dist/helpers.js +1 -1
- package/dist/tree/Tree.svelte +16 -11
- package/dist/tree/TreeNode.svelte +3 -3
- package/dist/tree/treestore.d.ts +3 -1
- package/dist/tree/treestore.js +21 -12
- package/package.json +2 -2
package/dist/ButtonGroup.svelte
CHANGED
|
@@ -44,6 +44,7 @@ function onKeyDown(choice, idx) {
|
|
|
44
44
|
{#if name}
|
|
45
45
|
<input type="hidden" {name} {value}>
|
|
46
46
|
{/if}
|
|
47
|
+
<!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->
|
|
47
48
|
<ul class="dialog-btn-group" class:disabled class:valid class:invalid aria-disabled={disabled} role="radiogroup" aria-labelledby={groupid} on:blur>
|
|
48
49
|
{#each choices as choice, i}
|
|
49
50
|
{@const selected = choice.value === value}
|
package/dist/Checkbox.svelte
CHANGED
|
@@ -5,16 +5,13 @@ export let value;
|
|
|
5
5
|
export let onChange = undefined;
|
|
6
6
|
export let onBlur = undefined;
|
|
7
7
|
export let descid = undefined;
|
|
8
|
-
export let messagesid = undefined;
|
|
9
8
|
export let disabled = false;
|
|
10
9
|
export let valid = false;
|
|
11
10
|
export let invalid = false;
|
|
12
11
|
export let inputelement = undefined;
|
|
13
|
-
export let helptextid = undefined;
|
|
14
|
-
$: descby = [descid, messagesid, helptextid].filter(isNotBlank).join(' ');
|
|
15
12
|
</script>
|
|
16
13
|
|
|
17
|
-
<input bind:this={inputelement} {id} type="checkbox" {name} class:valid class:invalid {disabled} aria-describedby={
|
|
14
|
+
<input bind:this={inputelement} {id} type="checkbox" {name} class:valid class:invalid {disabled} aria-describedby={descid} bind:checked={value} on:change={onChange} on:blur={onBlur}>
|
|
18
15
|
|
|
19
16
|
<style>
|
|
20
17
|
input, input:before, input:after {
|
|
@@ -7,12 +7,10 @@ declare const __propDef: {
|
|
|
7
7
|
onChange?: any;
|
|
8
8
|
onBlur?: any;
|
|
9
9
|
descid?: string | undefined;
|
|
10
|
-
messagesid?: string | undefined;
|
|
11
10
|
disabled?: boolean | undefined;
|
|
12
11
|
valid?: boolean | undefined;
|
|
13
12
|
invalid?: boolean | undefined;
|
|
14
13
|
inputelement?: HTMLInputElement | undefined;
|
|
15
|
-
helptextid?: string | undefined;
|
|
16
14
|
};
|
|
17
15
|
events: {
|
|
18
16
|
[evt: string]: CustomEvent<any>;
|
package/dist/Container.svelte
CHANGED
|
@@ -1,17 +1,34 @@
|
|
|
1
|
-
<script>import { eq } from '@txstate-mws/svelte-components';
|
|
2
|
-
import InlineMessages from './InlineMessages.svelte';
|
|
1
|
+
<script>import { eq, resize, ScreenReaderOnly } from '@txstate-mws/svelte-components';
|
|
3
2
|
import { randomid } from 'txstate-utils';
|
|
3
|
+
import { getContext } from 'svelte';
|
|
4
|
+
import { DG_DIALOG_FIELD_MULTIPLE } from './FieldMultiple.svelte';
|
|
5
|
+
import InlineMessages from './InlineMessages.svelte';
|
|
6
|
+
import { getDescribedBy } from './';
|
|
4
7
|
export let id = undefined;
|
|
5
8
|
export let descid = undefined;
|
|
6
9
|
export let label;
|
|
7
10
|
export let helptext = undefined;
|
|
8
11
|
export let messages;
|
|
9
12
|
export let required = false;
|
|
13
|
+
export let related = 0;
|
|
14
|
+
export let conditional = undefined;
|
|
10
15
|
let messagesid;
|
|
11
|
-
const
|
|
16
|
+
const dgMultipleContext = getContext(DG_DIALOG_FIELD_MULTIPLE);
|
|
17
|
+
const helptextid = randomid();
|
|
18
|
+
$: descids = getDescribedBy([helptext ? helptextid : undefined, dgMultipleContext?.helptextid]);
|
|
19
|
+
let showhelp = false;
|
|
20
|
+
let helpelement;
|
|
21
|
+
let needsShowHelp = false;
|
|
22
|
+
function setNeedsShowHelp(..._) {
|
|
23
|
+
needsShowHelp = (helpelement?.getClientRects().length ?? 0) > 1;
|
|
24
|
+
if (!needsShowHelp)
|
|
25
|
+
showhelp = false;
|
|
26
|
+
}
|
|
27
|
+
$: setNeedsShowHelp(helpelement);
|
|
12
28
|
</script>
|
|
13
29
|
|
|
14
|
-
|
|
30
|
+
{#if conditional !== false}
|
|
31
|
+
<div use:eq class="dialog-field-container" data-related={Array.from({ length: related === true ? 1 : related }, (_, i) => i + 1).join(' ')}>
|
|
15
32
|
{#if descid == null}
|
|
16
33
|
<label class="dialog-field-label" for={id}>{label}{#if required} *{/if}</label>
|
|
17
34
|
{:else}
|
|
@@ -19,12 +36,19 @@ const helptextid = helptext ? randomid() : undefined;
|
|
|
19
36
|
{/if}
|
|
20
37
|
<div class="dialog-field-content">
|
|
21
38
|
{#if helptext}
|
|
22
|
-
|
|
39
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
40
|
+
<div use:resize={{ debounce: 10 }} on:resize={setNeedsShowHelp} id={helptextid} class="dialog-field-help" class:needsShowHelp class:expanded={showhelp} on:click={() => { if (needsShowHelp) showhelp = !showhelp }}>
|
|
41
|
+
<span bind:this={helpelement}>{helptext}</span>
|
|
42
|
+
{#if needsShowHelp}
|
|
43
|
+
<button type="button" class="dialog-field-help-expand">Show {#if showhelp}Less{:else}More{/if}<ScreenReaderOnly>, ignore this, the help text it controls will be read to you as input description</ScreenReaderOnly></button>
|
|
44
|
+
{/if}
|
|
45
|
+
</div>
|
|
23
46
|
{/if}
|
|
24
|
-
<slot {messagesid} {
|
|
47
|
+
<slot {messagesid} helptextid={descids} />
|
|
25
48
|
</div>
|
|
26
49
|
<InlineMessages bind:id={messagesid} {messages} />
|
|
27
50
|
</div>
|
|
51
|
+
{/if}
|
|
28
52
|
|
|
29
53
|
<style>
|
|
30
54
|
.dialog-field-container {
|
|
@@ -32,6 +56,13 @@ const helptextid = helptext ? randomid() : undefined;
|
|
|
32
56
|
padding: var(--dialog-container-padding, 1em) 0;
|
|
33
57
|
--dialog-container-tab-correct: calc(-1 * var(--tabs-panel-padding, 1em));
|
|
34
58
|
}
|
|
59
|
+
.dialog-field-container[data-related~="1"] {
|
|
60
|
+
padding-top: 0;
|
|
61
|
+
padding-left: calc(var(--dialog-container-padding, 1em) + var(--dialog-related-padding, 1em));
|
|
62
|
+
}
|
|
63
|
+
.dialog-field-container[data-related~="2"] {
|
|
64
|
+
padding-left: calc(var(--dialog-container-padding, 1em) + (2 * var(--dialog-related-padding, 1em)));
|
|
65
|
+
}
|
|
35
66
|
.dialog-field-container:last-child {
|
|
36
67
|
border-bottom: 0;
|
|
37
68
|
}
|
|
@@ -51,6 +82,13 @@ const helptextid = helptext ? randomid() : undefined;
|
|
|
51
82
|
padding-left: var(--tabs-panel-padding, 1em);
|
|
52
83
|
padding-right: var(--tabs-panel-padding, 1em);
|
|
53
84
|
}
|
|
85
|
+
:global(.tabs-panel) .dialog-field-container[data-related~="1"] {
|
|
86
|
+
padding-left: calc(var(--tabs-panel-padding, 1em) + var(--dialog-container-padding, 1em));
|
|
87
|
+
}
|
|
88
|
+
:global(.tabs-panel) .dialog-field-container[data-related~="2"] {
|
|
89
|
+
padding-left: calc(var(--tabs-panel-padding, 1em) + (2 * var(--dialog-container-padding, 1em)));
|
|
90
|
+
}
|
|
91
|
+
|
|
54
92
|
:global(.tabs-panel) .dialog-field-container:first-child {
|
|
55
93
|
margin-top: var(--dialog-container-tab-correct);
|
|
56
94
|
}
|
|
@@ -82,9 +120,41 @@ const helptextid = helptext ? randomid() : undefined;
|
|
|
82
120
|
background-color: var(--dialog-field-bg2, transparent);
|
|
83
121
|
color: var(--dialog-field-text2, inherit);
|
|
84
122
|
}
|
|
85
|
-
.dialog-field-
|
|
123
|
+
.dialog-field-help {
|
|
86
124
|
font-size: 0.9em;
|
|
87
125
|
color: #595959;
|
|
126
|
+
margin-bottom: 0.4em;
|
|
127
|
+
line-height: 1.25em;
|
|
128
|
+
overflow: hidden;
|
|
129
|
+
text-overflow: ellipsis;
|
|
130
|
+
white-space: nowrap;
|
|
131
|
+
}
|
|
132
|
+
.dialog-field-help.expanded {
|
|
133
|
+
white-space: normal;
|
|
134
|
+
max-height: fit-content;
|
|
135
|
+
}
|
|
136
|
+
.dialog-field-help.needsShowHelp {
|
|
137
|
+
padding-right: 6em;
|
|
138
|
+
cursor: help;
|
|
139
|
+
}
|
|
140
|
+
.dialog-field-help.expanded {
|
|
141
|
+
padding-right: 0;
|
|
142
|
+
}
|
|
143
|
+
.dialog-field-help:not(.expanded) .dialog-field-help-expand {
|
|
144
|
+
position: absolute;
|
|
145
|
+
top: 0;
|
|
146
|
+
right: 0.5em;
|
|
147
|
+
}
|
|
148
|
+
.dialog-field-help-expand {
|
|
149
|
+
background: none!important;
|
|
150
|
+
border: none;
|
|
151
|
+
padding: 0!important;
|
|
152
|
+
color: #069;
|
|
153
|
+
text-decoration: underline;
|
|
154
|
+
cursor: pointer;
|
|
155
|
+
}
|
|
156
|
+
.dialog-field-help-expand:hover {
|
|
157
|
+
text-decoration: none;
|
|
88
158
|
}
|
|
89
159
|
|
|
90
160
|
</style>
|
package/dist/Dialog.svelte
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<script>import arrowLeftLight from '@iconify-icons/ph/arrow-left-light';
|
|
4
4
|
import arrowRightLight from '@iconify-icons/ph/arrow-right-light';
|
|
5
5
|
import xLight from '@iconify-icons/ph/x-light';
|
|
6
|
-
import { Modal, ScreenReaderOnly } from '@txstate-mws/svelte-components';
|
|
6
|
+
import { eq, Modal, ScreenReaderOnly } from '@txstate-mws/svelte-components';
|
|
7
7
|
import { createEventDispatcher, setContext } from 'svelte';
|
|
8
8
|
import { isNotBlank, randomid } from 'txstate-utils';
|
|
9
9
|
import { Button, Icon } from './';
|
|
@@ -35,7 +35,7 @@ $: describedby = [title ? labelid : undefined, descid].filter(isNotBlank).join('
|
|
|
35
35
|
</script>
|
|
36
36
|
|
|
37
37
|
<Modal {escapable} {initialfocus} hidefocus={false} includeselector=".ck-body-wrapper" on:escape>
|
|
38
|
-
<section class="{size}">
|
|
38
|
+
<section class="{size}" use:eq>
|
|
39
39
|
{#if title || icon}
|
|
40
40
|
<header id={labelid}>
|
|
41
41
|
<Icon width="1.4em" {icon} inline />{title}
|
|
@@ -17,6 +17,8 @@ export let defaultValue = undefined;
|
|
|
17
17
|
export let conditional = undefined;
|
|
18
18
|
export let required = false;
|
|
19
19
|
export let inputelement = undefined;
|
|
20
|
+
export let related = 0;
|
|
21
|
+
export let extradescid = undefined;
|
|
20
22
|
export let helptext = undefined;
|
|
21
23
|
let inputvalue = '';
|
|
22
24
|
let popupvalue = undefined;
|
|
@@ -77,9 +79,9 @@ onMount(() => {
|
|
|
77
79
|
});
|
|
78
80
|
</script>
|
|
79
81
|
|
|
80
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {helptext} serialize={finalserialize} deserialize={finaldeserialize} let:value let:setVal let:valid let:invalid let:id let:onBlur let:messagesid let:helptextid>
|
|
82
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {related} {helptext} serialize={finalserialize} deserialize={finaldeserialize} let:value let:setVal let:valid let:invalid let:id let:onBlur let:messagesid let:helptextid>
|
|
81
83
|
{@const _ = reactToValue(value, setVal)}
|
|
82
|
-
<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:keyup={onKeyUp(setVal)} autocapitalize="none" type="text" autocomplete="off" aria-autocomplete="list" role="combobox" {disabled} aria-describedby={getDescribedBy([messagesid, helptextid])}>
|
|
84
|
+
<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:keyup={onKeyUp(setVal)} autocapitalize="none" type="text" autocomplete="off" aria-autocomplete="list" role="combobox" {disabled} aria-describedby={getDescribedBy([messagesid, helptextid, extradescid])}>
|
|
83
85
|
<PopupMenu bind:menushown bind:menuid align="bottomleft" usePortal={portal} items={filteredChoices} buttonelement={inputelement} bind:value={popupvalue} on:change={onchangepopup(setVal)} emptyText="No options available"/>
|
|
84
86
|
<ScreenReaderOnly arialive="polite" ariaatomic={true} id={liveTextId}>
|
|
85
87
|
{filteredChoices.length} {filteredChoices.length === 1 ? 'option' : 'options'} available.
|
|
@@ -17,6 +17,8 @@ declare const __propDef: {
|
|
|
17
17
|
conditional?: boolean | undefined;
|
|
18
18
|
required?: boolean | undefined;
|
|
19
19
|
inputelement?: HTMLInputElement | undefined;
|
|
20
|
+
related?: number | true | undefined;
|
|
21
|
+
extradescid?: string | undefined;
|
|
20
22
|
helptext?: string | undefined;
|
|
21
23
|
};
|
|
22
24
|
events: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script>import { randomid } from 'txstate-utils';
|
|
2
2
|
import FieldStandard from './FieldStandard.svelte';
|
|
3
3
|
import Checkbox from './Checkbox.svelte';
|
|
4
|
+
import { getDescribedBy } from './';
|
|
4
5
|
let className = '';
|
|
5
6
|
export { className as class };
|
|
6
7
|
export let id = undefined;
|
|
@@ -11,6 +12,8 @@ export let defaultValue = undefined;
|
|
|
11
12
|
export let conditional = undefined;
|
|
12
13
|
export let required = false;
|
|
13
14
|
export let inputelement = undefined;
|
|
15
|
+
export let related = 0;
|
|
16
|
+
export let extradescid = undefined;
|
|
14
17
|
export let helptext = undefined;
|
|
15
18
|
function onChange(setVal) {
|
|
16
19
|
return function () {
|
|
@@ -20,10 +23,10 @@ function onChange(setVal) {
|
|
|
20
23
|
const descid = randomid();
|
|
21
24
|
</script>
|
|
22
25
|
|
|
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>
|
|
26
|
+
<FieldStandard bind:id {path} {descid} {label} {defaultValue} {conditional} {related} {helptext} {required} let:value let:messagesid let:helptextid let:valid let:invalid let:id let:onBlur let:setVal>
|
|
24
27
|
<div class={className}>
|
|
25
28
|
<label for={id}>
|
|
26
|
-
<Checkbox bind:inputelement {id} name={path} {value} {messagesid
|
|
29
|
+
<Checkbox bind:inputelement {id} name={path} {value} descid={getDescribedBy([descid, messagesid, helptextid, extradescid])} {valid} {invalid} {onBlur} onChange={onChange(setVal)}></Checkbox>
|
|
27
30
|
<span>{boxLabel}</span>
|
|
28
31
|
</label>
|
|
29
32
|
</div>
|
|
@@ -10,6 +10,8 @@ declare const __propDef: {
|
|
|
10
10
|
conditional?: boolean | undefined;
|
|
11
11
|
required?: boolean | undefined;
|
|
12
12
|
inputelement?: HTMLInputElement | undefined;
|
|
13
|
+
related?: number | true | undefined;
|
|
14
|
+
extradescid?: string | undefined;
|
|
13
15
|
helptext?: string | undefined;
|
|
14
16
|
};
|
|
15
17
|
events: {
|
package/dist/FieldChoices.svelte
CHANGED
|
@@ -4,6 +4,7 @@ import { derivedStore } from '@txstate-mws/svelte-store';
|
|
|
4
4
|
import { randomid } from 'txstate-utils';
|
|
5
5
|
import Container from './Container.svelte';
|
|
6
6
|
import Checkbox from './Checkbox.svelte';
|
|
7
|
+
import { getDescribedBy } from './helpers';
|
|
7
8
|
let className = '';
|
|
8
9
|
export { className as class };
|
|
9
10
|
export let id = undefined;
|
|
@@ -14,6 +15,8 @@ export let defaultValue = [];
|
|
|
14
15
|
export let conditional = undefined;
|
|
15
16
|
export let maxwidth = 250;
|
|
16
17
|
export let leftToRight = false;
|
|
18
|
+
export let related = 0;
|
|
19
|
+
export let extradescid = undefined;
|
|
17
20
|
export let helptext = undefined;
|
|
18
21
|
const store = getContext(FORM_CONTEXT);
|
|
19
22
|
const currentWidth = derivedStore(store, 'width');
|
|
@@ -40,14 +43,14 @@ const descid = randomid();
|
|
|
40
43
|
</script>
|
|
41
44
|
|
|
42
45
|
<Field {path} {defaultValue} {conditional} let:path let:value let:onBlur let:setVal let:messages let:valid let:invalid>
|
|
43
|
-
<Container {id} {label} {messages} {descid} {helptext} let:messagesid let:helptextid>
|
|
46
|
+
<Container {id} {label} {messages} {descid} {related} {helptext} let:messagesid let:helptextid>
|
|
44
47
|
<div class="dialog-choices {className}" class:valid class:invalid>
|
|
45
48
|
{#each choices as choice, idx}
|
|
46
49
|
{@const checkid = `${path}.${idx}`}
|
|
47
50
|
{@const included = value && value.includes(choice.value)}
|
|
48
51
|
{@const label = choice.label || (typeof choice.value === 'string' ? choice.value : '')}
|
|
49
52
|
<label for={checkid} style:width style:order={orders[idx]}>
|
|
50
|
-
<Checkbox id={checkid} name={checkid} value={included} {messagesid
|
|
53
|
+
<Checkbox id={checkid} name={checkid} value={included} descid={getDescribedBy([descid, messagesid, helptextid, extradescid])} disabled={choice.disabled} onChange={() => onChangeCheckbox(setVal, choice, included)} {onBlur} />
|
|
51
54
|
<span>{label}</span>
|
|
52
55
|
</label>
|
|
53
56
|
{/each}
|
|
@@ -14,6 +14,8 @@ declare const __propDef: {
|
|
|
14
14
|
conditional?: boolean | undefined;
|
|
15
15
|
maxwidth?: number | undefined;
|
|
16
16
|
leftToRight?: boolean | undefined;
|
|
17
|
+
related?: number | true | undefined;
|
|
18
|
+
extradescid?: string | undefined;
|
|
17
19
|
helptext?: string | undefined;
|
|
18
20
|
};
|
|
19
21
|
events: {
|
|
@@ -19,6 +19,8 @@ export let folders = false;
|
|
|
19
19
|
export let urlEntry = false;
|
|
20
20
|
export let initialSource = undefined;
|
|
21
21
|
export let initialPath = undefined;
|
|
22
|
+
export let related = 0;
|
|
23
|
+
export let extradescid = undefined;
|
|
22
24
|
export let helptext = undefined;
|
|
23
25
|
export let selectedAsset = undefined;
|
|
24
26
|
// TODO: add a mime type acceptance prop, maybe a regex or function, to prevent users from
|
|
@@ -122,7 +124,7 @@ async function updateSelected(..._) {
|
|
|
122
124
|
$: updateSelected($value);
|
|
123
125
|
</script>
|
|
124
126
|
|
|
125
|
-
<FieldStandard bind:id {path} {descid} {label} {defaultValue} {conditional} {required} {helptext} let:value let:messagesid let:helptextid let:valid let:invalid let:id let:onBlur let:setVal>
|
|
127
|
+
<FieldStandard bind:id {path} {descid} {label} {defaultValue} {conditional} {required} {related} {helptext} let:value let:messagesid let:helptextid let:valid let:invalid let:id let:onBlur let:setVal>
|
|
126
128
|
{#if selectedAsset}
|
|
127
129
|
<div class="dialog-chooser-container">
|
|
128
130
|
<Thumbnail item={selectedAsset} />
|
|
@@ -133,7 +135,7 @@ $: updateSelected($value);
|
|
|
133
135
|
{#if urlEntry}
|
|
134
136
|
<input type="text" value={selectedAsset?.url ?? ''} on:change={userUrlEntry} on:keyup={userUrlEntry}>
|
|
135
137
|
{/if}
|
|
136
|
-
<button type="button" on:click={show} aria-describedby={getDescribedBy([descid, messagesid, helptextid])}>Select {#if value}New{/if} {#if assets && pages}Link Target{:else if images}Image{:else if assets}Asset{:else}Page{/if}</button>
|
|
138
|
+
<button type="button" on:click={show} aria-describedby={getDescribedBy([descid, messagesid, helptextid, extradescid])}>Select {#if value}New{/if} {#if assets && pages}Link Target{:else if images}Image{:else if assets}Asset{:else}Page{/if}</button>
|
|
137
139
|
</div>
|
|
138
140
|
{#if modalshown}
|
|
139
141
|
<Chooser {store} {label} {pages} {assets} {images} {initialSource} {initialPath} {folders} {required} on:change={onChange(setVal)} on:escape={hide} />
|
|
@@ -16,6 +16,8 @@ declare const __propDef: {
|
|
|
16
16
|
urlEntry?: boolean | undefined;
|
|
17
17
|
initialSource?: string | undefined;
|
|
18
18
|
initialPath?: string | undefined;
|
|
19
|
+
related?: number | true | undefined;
|
|
20
|
+
extradescid?: string | undefined;
|
|
19
21
|
helptext?: string | undefined;
|
|
20
22
|
selectedAsset?: AnyItem | RawURL | undefined;
|
|
21
23
|
};
|
|
@@ -16,6 +16,8 @@ export let conditional = undefined;
|
|
|
16
16
|
export let required = false;
|
|
17
17
|
export let use = [];
|
|
18
18
|
export let inputelement = undefined;
|
|
19
|
+
export let related = 0;
|
|
20
|
+
export let extradescid = undefined;
|
|
19
21
|
export let helptext = undefined;
|
|
20
22
|
export let language;
|
|
21
23
|
const store = getContext(FORM_CONTEXT);
|
|
@@ -45,7 +47,7 @@ function updateValidState(invalidIn, messagesIdIn) {
|
|
|
45
47
|
invalid = !!invalidIn;
|
|
46
48
|
messagesid = messagesIdIn;
|
|
47
49
|
inputelement?.setAttribute('aria-invalid', String(!!invalid));
|
|
48
|
-
const descby = getDescribedBy([messagesid, helptextid]);
|
|
50
|
+
const descby = getDescribedBy([messagesid, helptextid, extradescid]);
|
|
49
51
|
if (descby)
|
|
50
52
|
inputelement?.setAttribute('aria-describedby', descby);
|
|
51
53
|
else
|
|
@@ -53,7 +55,7 @@ function updateValidState(invalidIn, messagesIdIn) {
|
|
|
53
55
|
}
|
|
54
56
|
</script>
|
|
55
57
|
|
|
56
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {helptext} serialize={!notNull ? nullableSerialize : undefined} deserialize={!notNull ? nullableDeserialize : undefined} let:value let:valid let:invalid let:id let:onBlur let:onChange let:messagesid let:helptextid>
|
|
58
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {related} {helptext} serialize={!notNull ? nullableSerialize : undefined} deserialize={!notNull ? nullableDeserialize : undefined} let:value let:valid let:invalid let:id let:onBlur let:onChange let:messagesid let:helptextid>
|
|
57
59
|
{@const _ = setSlotProps(helptextid, onChange)}
|
|
58
60
|
{@const __ = updateValidState(invalid, messagesid)}
|
|
59
61
|
<div bind:this={editorelement} style:height="{rows * 1.333}em" class:valid class:invalid on:paste on:focusout={onBlur} use:passActions={use}></div>
|
|
@@ -13,6 +13,8 @@ declare const __propDef: {
|
|
|
13
13
|
required?: boolean | undefined;
|
|
14
14
|
use?: HTMLActionEntry<any>[] | undefined;
|
|
15
15
|
inputelement?: HTMLTextAreaElement | undefined;
|
|
16
|
+
related?: number | true | undefined;
|
|
17
|
+
extradescid?: string | undefined;
|
|
16
18
|
helptext?: string | undefined;
|
|
17
19
|
language: 'js' | 'css' | 'html';
|
|
18
20
|
};
|
package/dist/FieldDate.svelte
CHANGED
|
@@ -13,9 +13,11 @@ export let step = undefined;
|
|
|
13
13
|
export let conditional = undefined;
|
|
14
14
|
export let required = false;
|
|
15
15
|
export let inputelement = undefined;
|
|
16
|
+
export let related = 0;
|
|
17
|
+
export let extradescid = undefined;
|
|
16
18
|
export let helptext = undefined;
|
|
17
19
|
</script>
|
|
18
20
|
|
|
19
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {helptext} serialize={dateSerialize} deserialize={dateDeserialize} let:value let:valid let:invalid let:id let:onBlur let:onChange let:messagesid let:helptextid>
|
|
20
|
-
<Input bind:inputelement type="date" name={path} {value} {id} class="dialog-input {className}" {onChange} {onBlur} {valid} {invalid} {min} {max} {step} {messagesid} {helptextid}/>
|
|
21
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {related} {helptext} serialize={dateSerialize} deserialize={dateDeserialize} let:value let:valid let:invalid let:id let:onBlur let:onChange let:messagesid let:helptextid>
|
|
22
|
+
<Input bind:inputelement type="date" name={path} {value} {id} class="dialog-input {className}" {onChange} {onBlur} {valid} {invalid} {min} {max} {step} {extradescid} {messagesid} {helptextid}/>
|
|
21
23
|
</FieldStandard>
|
|
@@ -16,6 +16,8 @@ declare const __propDef: {
|
|
|
16
16
|
conditional?: boolean | undefined;
|
|
17
17
|
required?: boolean | undefined;
|
|
18
18
|
inputelement?: HTMLInputElement | undefined;
|
|
19
|
+
related?: number | true | undefined;
|
|
20
|
+
extradescid?: string | undefined;
|
|
19
21
|
helptext?: string | undefined;
|
|
20
22
|
};
|
|
21
23
|
events: {
|
|
@@ -12,9 +12,11 @@ export let max = undefined;
|
|
|
12
12
|
export let step = undefined;
|
|
13
13
|
export let conditional = undefined;
|
|
14
14
|
export let required = false;
|
|
15
|
+
export let related = 0;
|
|
16
|
+
export let extradescid = undefined;
|
|
15
17
|
export let helptext = undefined;
|
|
16
18
|
</script>
|
|
17
19
|
|
|
18
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {helptext} serialize={datetimeSerialize} deserialize={datetimeDeserialize} let:value let:valid let:invalid let:id let:onBlur let:onChange let:helptextid>
|
|
19
|
-
<Input type="datetime-local" name={path} {value} {id} class="dialog-input {className}" {onChange} {onBlur} {valid} {invalid} {min} {max} {step} {helptextid}/>
|
|
20
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {related} {helptext} serialize={datetimeSerialize} deserialize={datetimeDeserialize} let:value let:valid let:invalid let:id let:onBlur let:onChange let:helptextid let:messagesid>
|
|
21
|
+
<Input type="datetime-local" name={path} {value} {id} class="dialog-input {className}" {onChange} {onBlur} {valid} {invalid} {min} {max} {step} {extradescid} {messagesid} {helptextid}/>
|
|
20
22
|
</FieldStandard>
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
<script>import menuRight from '@iconify-icons/mdi/menu-right.js';
|
|
2
2
|
import menuLeft from '@iconify-icons/mdi/menu-left.js';
|
|
3
|
-
import FieldStandard from './FieldStandard.svelte';
|
|
4
3
|
import { ScreenReaderOnly, modifierKey } from '@txstate-mws/svelte-components';
|
|
4
|
+
import { randomid } from 'txstate-utils';
|
|
5
|
+
import FieldStandard from './FieldStandard.svelte';
|
|
5
6
|
import Icon from './Icon.svelte';
|
|
6
7
|
import Listbox from './Listbox.svelte';
|
|
7
|
-
import {
|
|
8
|
+
import { getDescribedBy } from './';
|
|
8
9
|
export let id = undefined;
|
|
9
10
|
export let path;
|
|
10
11
|
export let label = '';
|
|
@@ -15,6 +16,9 @@ export let choices;
|
|
|
15
16
|
export let defaultValue = [];
|
|
16
17
|
export let conditional = undefined;
|
|
17
18
|
export let required = false;
|
|
19
|
+
export let related = 0;
|
|
20
|
+
export let extradescid = undefined;
|
|
21
|
+
export let helptext = undefined;
|
|
18
22
|
let itemsToAdd = []; // the items selected in the left listbox
|
|
19
23
|
let itemsToRemove = []; // the items selected in the right listbox
|
|
20
24
|
let instructions = 'test';
|
|
@@ -79,12 +83,12 @@ function onkeydown(value, setVal) {
|
|
|
79
83
|
}
|
|
80
84
|
</script>
|
|
81
85
|
|
|
82
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {descid} let:value let:valid let:invalid let:id let:onBlur let:setVal>
|
|
86
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {descid} {related} {helptext} let:value let:valid let:invalid let:id let:onBlur let:setVal let:helptextid let:messagesid>
|
|
83
87
|
<div {id} role="group" class="dual-list-container" on:keydown={onkeydown(value, setVal)}>
|
|
84
88
|
<ScreenReaderOnly>
|
|
85
89
|
<span aria-live="polite">{instructions}</span>
|
|
86
90
|
</ScreenReaderOnly>
|
|
87
|
-
<Listbox label={sourceLabel} multiselect={multiselect} items={getAvailable(value)} {descid} {valid} {invalid} on:change={e => { itemsToAdd = e.detail }} selected={itemsToAdd} on:blur={onBlur}/>
|
|
91
|
+
<Listbox label={sourceLabel} multiselect={multiselect} items={getAvailable(value)} descid={getDescribedBy([descid, messagesid, helptextid, extradescid])} {valid} {invalid} on:change={e => { itemsToAdd = e.detail }} selected={itemsToAdd} on:blur={onBlur}/>
|
|
88
92
|
<div class="toolbar">
|
|
89
93
|
<button type="button" class="toolbar-button" title="Move selection to {selectedLabel}" disabled={itemsToAdd.length === 0} on:click={addToSelected(value, setVal)}>
|
|
90
94
|
<Icon icon={menuRight} width='3em'/>
|
|
@@ -93,7 +97,7 @@ function onkeydown(value, setVal) {
|
|
|
93
97
|
<Icon icon={menuLeft} width='3em'/>
|
|
94
98
|
</button>
|
|
95
99
|
</div>
|
|
96
|
-
<Listbox label={selectedLabel} multiselect={multiselect} items={valueToSelectedChoices(value)} {descid} {valid} {invalid} on:change={e => { itemsToRemove = e.detail }} selected={itemsToRemove} on:blur={onBlur}/>
|
|
100
|
+
<Listbox label={selectedLabel} multiselect={multiselect} items={valueToSelectedChoices(value)} descid={getDescribedBy([descid, messagesid, helptextid, extradescid])} {valid} {invalid} on:change={e => { itemsToRemove = e.detail }} selected={itemsToRemove} on:blur={onBlur}/>
|
|
97
101
|
</div>
|
|
98
102
|
</FieldStandard>
|
|
99
103
|
|
|
@@ -12,6 +12,9 @@ declare const __propDef: {
|
|
|
12
12
|
defaultValue?: string[] | undefined;
|
|
13
13
|
conditional?: boolean | undefined;
|
|
14
14
|
required?: boolean | undefined;
|
|
15
|
+
related?: number | true | undefined;
|
|
16
|
+
extradescid?: string | undefined;
|
|
17
|
+
helptext?: string | undefined;
|
|
15
18
|
};
|
|
16
19
|
events: {
|
|
17
20
|
[evt: string]: CustomEvent<any>;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
<script context="module">export const DG_DIALOG_FIELD_MULTIPLE = {};
|
|
2
|
+
function noOp(..._) { return ''; }
|
|
3
|
+
</script>
|
|
1
4
|
<script>import plusCircleLight from '@iconify-icons/ph/plus-circle-light';
|
|
2
5
|
import { AddMore, FORM_CONTEXT, FORM_INHERITED_PATH } from '@txstate-mws/svelte-forms';
|
|
3
6
|
import { derivedStore } from '@txstate-mws/svelte-store';
|
|
4
|
-
import { getContext } from 'svelte';
|
|
7
|
+
import { getContext, setContext } from 'svelte';
|
|
5
8
|
import { isNotNull } from 'txstate-utils';
|
|
6
9
|
import Button from './Button.svelte';
|
|
7
10
|
import Container from './Container.svelte';
|
|
@@ -17,6 +20,10 @@ export let conditional = undefined;
|
|
|
17
20
|
export let addMoreText = 'Add';
|
|
18
21
|
export let maxedText = addMoreText;
|
|
19
22
|
export let addMoreClass = undefined;
|
|
23
|
+
export let related = 0;
|
|
24
|
+
export let helptext = undefined;
|
|
25
|
+
const fieldMultipleContext = { helptextid: undefined };
|
|
26
|
+
setContext(DG_DIALOG_FIELD_MULTIPLE, fieldMultipleContext);
|
|
20
27
|
const inheritedPath = getContext(FORM_INHERITED_PATH);
|
|
21
28
|
const finalPath = [inheritedPath, path].filter(isNotNull).join('.');
|
|
22
29
|
const store = getContext(FORM_CONTEXT);
|
|
@@ -31,13 +38,14 @@ function moveUpAndFocus(onMoveUp, idx) {
|
|
|
31
38
|
$: messages = compact ? $messageStore : [];
|
|
32
39
|
</script>
|
|
33
40
|
|
|
34
|
-
<Container {label} {messages}>
|
|
41
|
+
<Container {label} {messages} {conditional} {related} {helptext} let:helptextid>
|
|
42
|
+
{noOp(fieldMultipleContext.helptextid = helptextid)}
|
|
35
43
|
<AddMore {path} {initialState} {minLength} {maxLength} {conditional} let:path let:currentLength let:maxLength let:index let:minned let:maxed let:value let:onDelete let:onMoveUp>
|
|
36
44
|
{@const showDelete = removable && !minned}
|
|
37
45
|
{@const showMove = reorder && index > 0}
|
|
38
46
|
<div class="dialog-multiple" class:has-delete-icon={showDelete}>
|
|
39
47
|
<div class="dialog-multiple-content">
|
|
40
|
-
<slot {path} {index} {value} {maxed} {maxLength} {currentLength}
|
|
48
|
+
<slot {path} {index} {value} {maxed} {maxLength} {currentLength}/>
|
|
41
49
|
</div>
|
|
42
50
|
{#if showDelete || showMove}<div class="dialog-multiple-buttons">
|
|
43
51
|
{#if reorder}<button bind:this={reorderelements[index]} class="dialog-multiple-move" type="button" aria-hidden={!showMove} disabled={!showMove} style:visibility={showMove ? 'visible' : 'hidden'} on:click|preventDefault|stopPropagation={moveUpAndFocus(onMoveUp, index)}>^</button>{/if}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
export declare const DG_DIALOG_FIELD_MULTIPLE: {};
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
4
5
|
path: string;
|
|
@@ -13,6 +14,8 @@ declare const __propDef: {
|
|
|
13
14
|
addMoreText?: string | undefined;
|
|
14
15
|
maxedText?: string | undefined;
|
|
15
16
|
addMoreClass?: string | undefined;
|
|
17
|
+
related?: number | true | undefined;
|
|
18
|
+
helptext?: string | undefined;
|
|
16
19
|
};
|
|
17
20
|
events: {
|
|
18
21
|
[evt: string]: CustomEvent<any>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script>import { MultiSelect } from '@txstate-mws/svelte-components';
|
|
2
2
|
import { Store } from '@txstate-mws/svelte-store';
|
|
3
|
-
import FieldStandard from './FieldStandard.svelte';
|
|
4
3
|
import { onMount } from 'svelte';
|
|
5
4
|
import { isNotBlank } from 'txstate-utils';
|
|
5
|
+
import FieldStandard from './FieldStandard.svelte';
|
|
6
|
+
import { getDescribedBy } from './helpers';
|
|
6
7
|
export let id = undefined;
|
|
7
8
|
export let path;
|
|
8
9
|
export let label = '';
|
|
@@ -13,6 +14,9 @@ export let conditional = undefined;
|
|
|
13
14
|
export let required = false;
|
|
14
15
|
export let maxSelections = 0;
|
|
15
16
|
export let getOptions;
|
|
17
|
+
export let related = 0;
|
|
18
|
+
export let extradescid = undefined;
|
|
19
|
+
export let helptext = undefined;
|
|
16
20
|
// each time we run getOptions we will save the value -> label mappings
|
|
17
21
|
// that it finds, so that we can display labels on pills
|
|
18
22
|
const valueToLabel = {};
|
|
@@ -52,10 +56,10 @@ async function reactToValue(value) {
|
|
|
52
56
|
|
|
53
57
|
<div bind:this={inputelement}></div>
|
|
54
58
|
{#if hasInit}
|
|
55
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} let:value let:valid let:invalid let:id let:onBlur let:setVal>
|
|
59
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {related} {helptext} let:value let:valid let:invalid let:id let:onBlur let:setVal let:messagesid let:helptextid>
|
|
56
60
|
{@const _ = reactToValue(value)}
|
|
57
61
|
<div class:valid class:invalid>
|
|
58
|
-
<MultiSelect {id} name={path} usePortal={portal} {disabled} {maxSelections} selected={$selectedStore} {placeholder} getOptions={wrapGetOptions} on:change={e => setVal(e.detail.map(itm => itm.value))} on:blur={onBlur}
|
|
62
|
+
<MultiSelect {id} name={path} usePortal={portal} descid={getDescribedBy([messagesid, helptextid, extradescid])} {disabled} {maxSelections} selected={$selectedStore} {placeholder} getOptions={wrapGetOptions} on:change={e => setVal(e.detail.map(itm => itm.value))} on:blur={onBlur} />
|
|
59
63
|
</div>
|
|
60
64
|
</FieldStandard>
|
|
61
65
|
{/if}
|
|
@@ -12,6 +12,9 @@ declare const __propDef: {
|
|
|
12
12
|
required?: boolean | undefined;
|
|
13
13
|
maxSelections?: number | undefined;
|
|
14
14
|
getOptions: (search: string) => Promise<PopupMenuItem[]>;
|
|
15
|
+
related?: number | true | undefined;
|
|
16
|
+
extradescid?: string | undefined;
|
|
17
|
+
helptext?: string | undefined;
|
|
15
18
|
};
|
|
16
19
|
events: {
|
|
17
20
|
[evt: string]: CustomEvent<any>;
|
package/dist/FieldNumber.svelte
CHANGED
|
@@ -14,9 +14,11 @@ export let step = undefined;
|
|
|
14
14
|
export let conditional = undefined;
|
|
15
15
|
export let required = false;
|
|
16
16
|
export let inputelement = undefined;
|
|
17
|
+
export let related = 0;
|
|
18
|
+
export let extradescid = undefined;
|
|
17
19
|
export let helptext = undefined;
|
|
18
20
|
</script>
|
|
19
21
|
|
|
20
|
-
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {helptext} serialize={numberSerialize} deserialize={nullable ? numberNullableDeserialize : numberDeserialize} let:value let:valid let:invalid let:id let:onBlur let:onChange let:helptextid>
|
|
21
|
-
<Input bind:inputelement type="number" name={path} {value} {id} class="dialog-input {className}" {onChange} {onBlur} {valid} {invalid} {min} {max} {step} {helptextid}></Input>
|
|
22
|
+
<FieldStandard bind:id {label} {path} {required} {defaultValue} {conditional} {related} {helptext} serialize={numberSerialize} deserialize={nullable ? numberNullableDeserialize : numberDeserialize} let:value let:valid let:invalid let:id let:onBlur let:onChange let:helptextid>
|
|
23
|
+
<Input bind:inputelement type="number" name={path} {value} {id} class="dialog-input {className}" {onChange} {onBlur} {valid} {invalid} {min} {max} {step} {helptextid} {extradescid}></Input>
|
|
22
24
|
</FieldStandard>
|
|
@@ -13,6 +13,8 @@ declare const __propDef: {
|
|
|
13
13
|
conditional?: boolean | undefined;
|
|
14
14
|
required?: boolean | undefined;
|
|
15
15
|
inputelement?: HTMLInputElement | undefined;
|
|
16
|
+
related?: number | true | undefined;
|
|
17
|
+
extradescid?: string | undefined;
|
|
16
18
|
helptext?: string | undefined;
|
|
17
19
|
};
|
|
18
20
|
events: {
|