@dosgato/dialog 1.2.8 → 1.3.1

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 (58) hide show
  1. package/dist/Button.svelte +15 -13
  2. package/dist/ButtonGroup.svelte +44 -40
  3. package/dist/Checkbox.svelte +13 -12
  4. package/dist/Container.svelte +50 -46
  5. package/dist/Dialog.svelte +56 -41
  6. package/dist/FieldAutocomplete.svelte +77 -70
  7. package/dist/FieldCheckbox.svelte +25 -22
  8. package/dist/FieldChoices.svelte +74 -68
  9. package/dist/FieldChooserLink.svelte +148 -150
  10. package/dist/FieldDate.svelte +19 -18
  11. package/dist/FieldDateTime.svelte +36 -34
  12. package/dist/FieldDualListbox.svelte +80 -79
  13. package/dist/FieldHidden.svelte +16 -15
  14. package/dist/FieldIdentifier.svelte +18 -17
  15. package/dist/FieldMultiple.svelte +71 -74
  16. package/dist/FieldMultiselect.svelte +81 -72
  17. package/dist/FieldNumber.svelte +20 -19
  18. package/dist/FieldRadio.svelte +42 -41
  19. package/dist/FieldSelect.svelte +45 -45
  20. package/dist/FieldStandard.svelte +28 -27
  21. package/dist/FieldText.svelte +27 -24
  22. package/dist/FieldTextArea.svelte +24 -24
  23. package/dist/FileIcon.svelte +10 -8
  24. package/dist/Form.svelte +40 -18
  25. package/dist/Form.svelte.d.ts +15 -13
  26. package/dist/FormDialog.svelte +40 -25
  27. package/dist/FormDialog.svelte.d.ts +23 -17
  28. package/dist/Icon.svelte +38 -33
  29. package/dist/InlineMessage.svelte +31 -29
  30. package/dist/InlineMessages.svelte +10 -7
  31. package/dist/Input.svelte +40 -39
  32. package/dist/Listbox.svelte +102 -109
  33. package/dist/MaxLength.svelte +19 -18
  34. package/dist/Radio.svelte +18 -15
  35. package/dist/Switcher.svelte +37 -33
  36. package/dist/Tab.svelte +23 -21
  37. package/dist/Tabs.svelte +111 -110
  38. package/dist/Tooltip.svelte +7 -7
  39. package/dist/chooser/Chooser.svelte +83 -76
  40. package/dist/chooser/ChooserPreview.svelte +16 -14
  41. package/dist/chooser/Details.svelte +6 -4
  42. package/dist/chooser/Thumbnail.svelte +20 -16
  43. package/dist/chooser/UploadUI.svelte +78 -69
  44. package/dist/code/CodeEditor.svelte +63 -66
  45. package/dist/code/FieldCodeEditor.svelte +21 -19
  46. package/dist/colorpicker/FieldColorPicker.svelte +36 -35
  47. package/dist/cropper/FieldCropper.svelte +142 -141
  48. package/dist/iconpicker/FieldIconPicker.svelte +102 -94
  49. package/dist/imageposition/FieldImagePosition.svelte +107 -98
  50. package/dist/tagpicker/FieldTagPicker.svelte +63 -54
  51. package/dist/tree/LoadIcon.svelte +0 -1
  52. package/dist/tree/Tree.svelte +198 -192
  53. package/dist/tree/Tree.svelte.d.ts +5 -5
  54. package/dist/tree/TreeCell.svelte +10 -6
  55. package/dist/tree/TreeCell.svelte.d.ts +5 -5
  56. package/dist/tree/TreeNode.svelte +213 -241
  57. package/dist/tree/TreeNode.svelte.d.ts +5 -5
  58. package/package.json +8 -9
@@ -1,116 +1,126 @@
1
- <script>import { isNotBlank, randomid } from 'txstate-utils';
2
- import FieldStandard from '../FieldStandard.svelte';
3
- import Button from '../Button.svelte';
4
- import arrowsIn from '@iconify-icons/ph/arrows-in';
5
- import { Dialog } from '..';
6
- import { modifierKey, ScreenReaderOnly } from '@txstate-mws/svelte-components';
7
- export let id = undefined;
8
- export let path;
9
- export let imageSrc;
10
- export let label = '';
11
- export let required = false;
12
- export let conditional = undefined;
13
- export let helptext = undefined;
14
- export let defaultValue = { x: 50, y: 50 };
15
- let initialVal;
16
- function init(v) {
1
+ <script lang="ts">
2
+ import { isNotBlank, randomid } from 'txstate-utils'
3
+ import FieldStandard from '../FieldStandard.svelte'
4
+ import Button from '../Button.svelte'
5
+ import arrowsIn from '@iconify-icons/ph/arrows-in'
6
+ import { Dialog, type ImagePositionOutput } from '..'
7
+ import { modifierKey, ScreenReaderOnly } from '@txstate-mws/svelte-components'
8
+
9
+ export let id: string | undefined = undefined
10
+ export let path: string
11
+ export let imageSrc: string | undefined
12
+ export let label: string = ''
13
+ export let required = false
14
+ export let conditional: boolean | undefined = undefined
15
+ export let helptext: string | undefined = undefined
16
+ export let defaultValue: ImagePositionOutput = { x: 50, y: 50 }
17
+
18
+ let initialVal: ImagePositionOutput
19
+ function init (v) {
17
20
  if (v) {
18
- initialVal = v;
21
+ initialVal = v
22
+ } else {
23
+ initialVal = defaultValue
19
24
  }
20
- else {
21
- initialVal = defaultValue;
22
- }
23
- }
24
- const boxes = [];
25
- const descid = randomid();
26
- const labelid = randomid();
27
- let modalOpen = false;
28
- function showModal() {
29
- modalOpen = true;
30
- }
31
- function hideModal() {
32
- modalOpen = false;
33
- }
34
- let x, y;
35
- function onSave(setVal) {
36
- setVal({ x: x * 25, y: y * 25 });
37
- hideModal();
38
- }
39
- function onSelectBox(newX, newY) {
40
- x = newX;
41
- y = newY;
42
- boxes[x + y * 5].focus();
43
- }
44
- function onKeyDown(e) {
45
- if (modifierKey(e))
46
- return;
25
+ }
26
+
27
+ const boxes: HTMLDivElement[] = []
28
+
29
+ const descid = randomid()
30
+ const labelid = randomid()
31
+ let modalOpen: boolean = false
32
+
33
+ function showModal () {
34
+ modalOpen = true
35
+ }
36
+
37
+ function hideModal () {
38
+ modalOpen = false
39
+ }
40
+
41
+ let x, y
42
+
43
+ function onSave (setVal) {
44
+ setVal({ x: x * 25, y: y * 25 })
45
+ hideModal()
46
+ }
47
+
48
+ function onSelectBox (newX, newY) {
49
+ x = newX
50
+ y = newY
51
+ boxes[x + y * 5].focus()
52
+ }
53
+
54
+ function onKeyDown (e: KeyboardEvent) {
55
+ if (modifierKey(e)) return
47
56
  if (e.key === 'ArrowDown') {
48
- e.preventDefault();
49
- y = Math.min(y + 1, 4);
50
- }
51
- else if (e.key === 'ArrowUp') {
52
- e.preventDefault();
53
- y = Math.max(y - 1, 0);
54
- }
55
- else if (e.key === 'ArrowRight') {
56
- e.preventDefault();
57
- x = Math.min(x + 1, 4);
57
+ e.preventDefault()
58
+ y = Math.min(y + 1, 4)
59
+ } else if (e.key === 'ArrowUp') {
60
+ e.preventDefault()
61
+ y = Math.max(y - 1, 0)
62
+ } else if (e.key === 'ArrowRight') {
63
+ e.preventDefault()
64
+ x = Math.min(x + 1, 4)
65
+ } else if (e.key === 'ArrowLeft') {
66
+ e.preventDefault()
67
+ x = Math.max(0, x - 1)
58
68
  }
59
- else if (e.key === 'ArrowLeft') {
60
- e.preventDefault();
61
- x = Math.max(0, x - 1);
62
- }
63
- boxes[y + x * 5].focus();
64
- }
65
- const positionText = {
69
+ boxes[y + x * 5].focus()
70
+ }
71
+
72
+
73
+ const positionText: Record<number, Record<number, string>> = {
66
74
  0: {
67
- 0: 'Top Left Corner',
68
- 1: 'Upper Left',
69
- 2: 'Middle Left',
70
- 3: 'Lower Left',
71
- 4: 'Bottom Left Corner'
75
+ 0: 'Top Left Corner',
76
+ 1: 'Upper Left',
77
+ 2: 'Middle Left',
78
+ 3: 'Lower Left',
79
+ 4: 'Bottom Left Corner'
72
80
  },
73
81
  1: {
74
- 0: 'Top Left of Center',
75
- 1: 'Upper Left of Center',
76
- 2: 'Middle Left of Center',
77
- 3: 'Below Left of Center',
78
- 4: 'Bottom, Left of Center'
82
+ 0: 'Top Left of Center',
83
+ 1: 'Upper Left of Center',
84
+ 2: 'Middle Left of Center',
85
+ 3: 'Below Left of Center',
86
+ 4: 'Bottom, Left of Center'
79
87
  },
80
88
  2: {
81
- 0: 'Top Center',
82
- 1: 'Upper Center',
83
- 2: 'Dead Center',
84
- 3: 'Below Center',
85
- 4: 'Bottom Center'
89
+ 0: 'Top Center',
90
+ 1: 'Upper Center',
91
+ 2: 'Dead Center',
92
+ 3: 'Below Center',
93
+ 4: 'Bottom Center'
86
94
  },
87
95
  3: {
88
- 0: 'Top, Right of Center',
89
- 1: 'Upper Right of Center',
90
- 2: 'Middle Right of Center',
91
- 3: 'Below Right of Center',
92
- 4: 'Bottom, Right of Center'
96
+ 0: 'Top, Right of Center',
97
+ 1: 'Upper Right of Center',
98
+ 2: 'Middle Right of Center',
99
+ 3: 'Below Right of Center',
100
+ 4: 'Bottom, Right of Center'
93
101
  },
94
102
  4: {
95
- 0: 'Top Right Corner',
96
- 1: 'Upper Right',
97
- 2: 'Middle Right',
98
- 3: 'Lower Right',
99
- 4: 'Bottom Right Corner'
103
+ 0: 'Top Right Corner',
104
+ 1: 'Upper Right',
105
+ 2: 'Middle Right',
106
+ 3: 'Lower Right',
107
+ 4: 'Bottom Right Corner'
100
108
  }
101
- };
102
- let dialogWasOpened = false;
103
- function onDialogOpen() {
109
+ }
110
+
111
+ let dialogWasOpened = false
112
+ function onDialogOpen () {
104
113
  if (!dialogWasOpened) {
105
- x = (initialVal.x ?? 50) / 25;
106
- y = (initialVal.y ?? 50) / 25;
107
- dialogWasOpened = true;
114
+ x = (initialVal.x ?? 50) / 25
115
+ y = (initialVal.y ?? 50) / 25
116
+ dialogWasOpened = true
108
117
  }
109
- }
110
- function resetPosition() {
111
- x = 2;
112
- y = 2;
113
- }
118
+ }
119
+
120
+ function resetPosition () {
121
+ x = 2
122
+ y = 2
123
+ }
114
124
  </script>
115
125
 
116
126
  <FieldStandard bind:id {label} {path} {required} {defaultValue} conditional={conditional && isNotBlank(imageSrc)} {helptext} {descid} let:value let:setVal let:helptextid>
@@ -222,6 +232,5 @@ function resetPosition() {
222
232
  :global(button.reset-position.reset-position):not([disabled]):hover {
223
233
  background-color: var(--dg-button-cancel-hover-bg, #595959);
224
234
  }
225
-
226
235
  </style>
227
236
 
@@ -1,60 +1,70 @@
1
- <script>import FieldMultiselect from '../FieldMultiselect.svelte';
2
- import { getContext } from 'svelte';
3
- import { isNotBlank } from 'txstate-utils';
4
- import { TAG_API_CONTEXT } from './TagAPI';
5
- import trashIcon from '@iconify-icons/ph/trash-simple-fill';
6
- import { Icon } from '..';
7
- export let path;
8
- export let label;
9
- export let target;
10
- export let conditional = undefined;
11
- export let required = false;
12
- export let extradescid = undefined;
13
- export let helptext = undefined;
14
- export let emptyText = undefined;
15
- /** Text to display in the tag picker input field when it's empty. */
16
- export let placeholder = '';
17
- /** We might want to show the title in the dialog for clarity, even if it is excluded when rendering tags on a page. */
18
- export let showTitleInDialog = false;
19
- export let menuContainerClass = '';
20
- export let menuClass = '';
21
- export let menuItemClass = 'default-menu-item';
22
- export let menuItemHilitedClass = '';
23
- export let menuCategoryClass = 'default-menu-category';
24
- const tagClient = getContext(TAG_API_CONTEXT);
25
- let lasttarget = -1;
26
- let groups = [];
27
- let tags;
28
- async function fetchAvailableTags() {
1
+ <script lang="ts">
2
+ import FieldMultiselect from '../FieldMultiselect.svelte'
3
+ import { getContext } from 'svelte'
4
+ import { isNotBlank } from 'txstate-utils'
5
+ import { TAG_API_CONTEXT, type Tag, type TagClient, type TagGroup } from './TagAPI'
6
+ import trashIcon from '@iconify-icons/ph/trash-simple-fill'
7
+ import { Icon } from '..';
8
+ import type { PopupMenuItem } from '@txstate-mws/svelte-components'
9
+
10
+ export let path: string
11
+ export let label: string
12
+ export let target: any
13
+ export let conditional: boolean | undefined = undefined
14
+ export let required = false
15
+ export let extradescid: string | undefined = undefined
16
+ export let helptext: string | undefined = undefined
17
+ export let emptyText: string | undefined = undefined
18
+ /** Text to display in the tag picker input field when it's empty. */
19
+ export let placeholder = ''
20
+ /** We might want to show the title in the dialog for clarity, even if it is excluded when rendering tags on a page. */
21
+ export let showTitleInDialog = false
22
+ export let menuContainerClass = ''
23
+ export let menuClass = ''
24
+ export let menuItemClass = 'default-menu-item'
25
+ export let menuItemHilitedClass = ''
26
+ export let menuCategoryClass = 'default-menu-category'
27
+
28
+ const tagClient = getContext<TagClient>(TAG_API_CONTEXT)
29
+
30
+ let lasttarget: any = -1
31
+ let groups: TagGroup[] = []
32
+ let tags: (Tag & { lcname: string, group: TagGroup & { lctitle: string } })[]
33
+ async function fetchAvailableTags () {
29
34
  if (lasttarget !== target) {
30
- groups = await tagClient.availableForTarget(target);
31
- tags = groups.flatMap(g => g.tags.map(t => ({ ...t, lcname: t.name.toLocaleLowerCase(), group: { ...g, lctitle: g.title?.toLocaleLowerCase() ?? '' } })));
32
- lasttarget = target;
35
+ groups = await tagClient.availableForTarget(target)
36
+ tags = groups.flatMap(g => g.tags.map(t => ({ ...t, lcname: t.name.toLocaleLowerCase(), group: { ...g, lctitle: g.title?.toLocaleLowerCase() ?? '' } })))
37
+ lasttarget = target
33
38
  }
34
- }
35
- function tagToOption(tag) {
36
- let group = undefined;
39
+ }
40
+
41
+ function tagToOption (tag: (typeof tags)[0]) {
42
+ let group: string | undefined = undefined
37
43
  if (isNotBlank(tag.group.title) && (showTitleInDialog || !tag.group.excludeTitle)) {
38
- group = tag.group.title;
44
+ group = tag.group.title
39
45
  }
40
- return { label: tag.name, value: tag.id, group };
41
- }
42
- async function getOptions(search) {
43
- await fetchAvailableTags();
44
- const lcsearch = search?.toLocaleLowerCase() ?? '';
45
- return tags.filter(t => t.lcname.includes(lcsearch) || t.group.lctitle.includes(lcsearch)).map(tagToOption);
46
- }
47
- async function lookupByValue(id) {
48
- await fetchAvailableTags();
49
- const tag = tags.find(t => t.id === id);
50
- if (!tag)
51
- return undefined;
52
- return tagToOption(tag);
53
- }
54
- function selectedItemLabel(item) {
55
- const tag = item.label ?? item.value;
56
- return item.group ? `${item.group}: ${tag}` : tag;
57
- }
46
+ return { label: tag.name, value: tag.id, group }
47
+ }
48
+
49
+ async function getOptions (search: string) {
50
+ await fetchAvailableTags()
51
+ const lcsearch = search?.toLocaleLowerCase() ?? ''
52
+ return tags.filter(t => t.lcname.includes(lcsearch) || t.group.lctitle.includes(lcsearch)).map(tagToOption)
53
+ }
54
+
55
+ async function lookupByValue (id: string) {
56
+ await fetchAvailableTags()
57
+ const tag = tags.find(t => t.id === id)
58
+ if (!tag) return undefined
59
+ return tagToOption(tag)
60
+ }
61
+
62
+ function selectedItemLabel (item: PopupMenuItem) {
63
+ const tag = item.label ?? item.value
64
+ return item.group ? `${item.group}: ${tag}` : tag
65
+ }
66
+
67
+
58
68
  </script>
59
69
 
60
70
  <FieldMultiselect {path} {label} {getOptions} {lookupByValue} {conditional} {required} {extradescid} {helptext} {emptyText} {placeholder} {menuClass} {menuContainerClass} {menuItemClass} {menuItemHilitedClass} {menuCategoryClass} selectedItemLabel={showTitleInDialog ? selectedItemLabel : undefined} includeDeleteAll confirmDelete="Are you sure you want remove all tag selections?">
@@ -95,5 +105,4 @@ function selectedItemLabel(item) {
95
105
  background-color: transparent;
96
106
  border: 0;
97
107
  }
98
-
99
108
  </style>
@@ -21,5 +21,4 @@
21
21
  0% { transform: rotate(0deg); }
22
22
  100% { transform: rotate(360deg); }
23
23
  }
24
-
25
24
  </style>