@dosgato/dialog 1.1.20 → 1.1.22

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 (55) hide show
  1. package/dist/Button.svelte.d.ts +6 -6
  2. package/dist/ButtonGroup.svelte.d.ts +4 -4
  3. package/dist/Checkbox.svelte.d.ts +4 -4
  4. package/dist/Container.svelte +3 -3
  5. package/dist/Container.svelte.d.ts +2 -2
  6. package/dist/Dialog.svelte.d.ts +9 -9
  7. package/dist/FieldAutocomplete.svelte.d.ts +8 -8
  8. package/dist/FieldCheckbox.svelte.d.ts +5 -5
  9. package/dist/FieldChoices.svelte +1 -1
  10. package/dist/FieldChoices.svelte.d.ts +5 -5
  11. package/dist/FieldChooserLink.svelte.d.ts +8 -8
  12. package/dist/FieldDate.svelte.d.ts +5 -5
  13. package/dist/FieldDateTime.svelte.d.ts +5 -5
  14. package/dist/FieldDualListbox.svelte.d.ts +7 -7
  15. package/dist/FieldHidden.svelte.d.ts +4 -4
  16. package/dist/FieldIdentifier.svelte.d.ts +1 -1
  17. package/dist/FieldMultiple.svelte.d.ts +7 -7
  18. package/dist/FieldMultiselect.svelte.d.ts +8 -8
  19. package/dist/FieldNumber.svelte.d.ts +6 -6
  20. package/dist/FieldRadio.svelte.d.ts +10 -10
  21. package/dist/FieldSelect.svelte.d.ts +12 -12
  22. package/dist/FieldStandard.svelte.d.ts +8 -8
  23. package/dist/FieldText.svelte.d.ts +10 -10
  24. package/dist/FieldTextArea.svelte.d.ts +7 -7
  25. package/dist/FileIcon.svelte.d.ts +3 -3
  26. package/dist/Form.svelte.d.ts +41 -7
  27. package/dist/FormDialog.svelte.d.ts +8 -8
  28. package/dist/Icon.svelte.d.ts +1 -1
  29. package/dist/Input.svelte.d.ts +9 -9
  30. package/dist/Listbox.svelte.d.ts +6 -6
  31. package/dist/Radio.svelte.d.ts +4 -4
  32. package/dist/Switcher.svelte.d.ts +10 -10
  33. package/dist/Tabs.svelte.d.ts +3 -3
  34. package/dist/Tooltip.svelte.d.ts +5 -5
  35. package/dist/chooser/Chooser.svelte.d.ts +5 -5
  36. package/dist/chooser/Details.svelte.d.ts +1 -1
  37. package/dist/chooser/Thumbnail.svelte.d.ts +3 -3
  38. package/dist/chooser/UploadUI.svelte.d.ts +5 -5
  39. package/dist/code/CodeEditor.svelte.d.ts +4 -4
  40. package/dist/code/FieldCodeEditor.svelte.d.ts +9 -9
  41. package/dist/colorpicker/FieldColorPicker.svelte.d.ts +5 -5
  42. package/dist/cropper/FieldCropper.svelte +1 -1
  43. package/dist/cropper/FieldCropper.svelte.d.ts +4 -4
  44. package/dist/iconpicker/FieldIconPicker.svelte +27 -8
  45. package/dist/iconpicker/FieldIconPicker.svelte.d.ts +3 -3
  46. package/dist/imageposition/FieldImagePosition.svelte +197 -0
  47. package/dist/imageposition/FieldImagePosition.svelte.d.ts +25 -0
  48. package/dist/imageposition/index.d.ts +2 -0
  49. package/dist/imageposition/index.js +2 -0
  50. package/dist/imageposition/position.d.ts +4 -0
  51. package/dist/imageposition/position.js +1 -0
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.js +1 -0
  54. package/dist/tree/Tree.svelte.d.ts +2 -2
  55. package/package.json +8 -9
@@ -0,0 +1,197 @@
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 info = undefined;
15
+ export let defaultValue = { x: 50, y: 50 };
16
+ let initialVal;
17
+ function init(v) {
18
+ if (v) {
19
+ initialVal = v;
20
+ }
21
+ else {
22
+ initialVal = defaultValue;
23
+ }
24
+ }
25
+ const boxes = [];
26
+ const descid = randomid();
27
+ const labelid = randomid();
28
+ let modalOpen = false;
29
+ function showModal() {
30
+ modalOpen = true;
31
+ }
32
+ function hideModal() {
33
+ modalOpen = false;
34
+ }
35
+ let x, y;
36
+ function onSave(setVal) {
37
+ setVal({ x: x * 25, y: y * 25 });
38
+ hideModal();
39
+ }
40
+ function onSelectBox(newX, newY) {
41
+ x = newX;
42
+ y = newY;
43
+ boxes[x + y * 5].focus();
44
+ }
45
+ function onKeyDown(e) {
46
+ if (modifierKey(e))
47
+ return;
48
+ if (e.key === 'ArrowDown') {
49
+ e.preventDefault();
50
+ y = Math.min(y + 1, 4);
51
+ }
52
+ else if (e.key === 'ArrowUp') {
53
+ e.preventDefault();
54
+ y = Math.max(y - 1, 0);
55
+ }
56
+ else if (e.key === 'ArrowRight') {
57
+ e.preventDefault();
58
+ x = Math.min(x + 1, 4);
59
+ }
60
+ else if (e.key === 'ArrowLeft') {
61
+ e.preventDefault();
62
+ x = Math.max(0, x - 1);
63
+ }
64
+ boxes[y + x * 5].focus();
65
+ }
66
+ const positionText = {
67
+ 0: {
68
+ 0: 'Top Left Corner',
69
+ 1: 'Upper Left',
70
+ 2: 'Middle Left',
71
+ 3: 'Lower Left',
72
+ 4: 'Bottom Left Corner'
73
+ },
74
+ 1: {
75
+ 0: 'Top Left of Center',
76
+ 1: 'Upper Left of Center',
77
+ 2: 'Middle Left of Center',
78
+ 3: 'Below Left of Center',
79
+ 4: 'Bottom, Left of Center'
80
+ },
81
+ 2: {
82
+ 0: 'Top Center',
83
+ 1: 'Upper Center',
84
+ 2: 'Dead Center',
85
+ 3: 'Below Center',
86
+ 4: 'Bottom Center'
87
+ },
88
+ 3: {
89
+ 0: 'Top, Right of Center',
90
+ 1: 'Upper Right of Center',
91
+ 2: 'Middle Right of Center',
92
+ 3: 'Below Right of Center',
93
+ 4: 'Bottom, Right of Center'
94
+ },
95
+ 4: {
96
+ 0: 'Top Right Corner',
97
+ 1: 'Upper Right',
98
+ 2: 'Middle Right',
99
+ 3: 'Lower Right',
100
+ 4: 'Bottom Right Corner'
101
+ }
102
+ };
103
+ let dialogWasOpened = false;
104
+ function onDialogOpen() {
105
+ if (!dialogWasOpened) {
106
+ x = (initialVal.x ?? 50) / 25;
107
+ y = (initialVal.y ?? 50) / 25;
108
+ dialogWasOpened = true;
109
+ }
110
+ }
111
+ </script>
112
+
113
+ <FieldStandard bind:id {label} {path} {required} {defaultValue} conditional={conditional && isNotBlank(imageSrc)} {helptext} {descid} let:value let:setVal let:helptextid>
114
+ {@const _ = init(value)}
115
+ {#if isNotBlank(imageSrc)}
116
+ <Button icon={arrowsIn} on:click={showModal}>Adjust Image Position</Button>
117
+ {#if modalOpen}
118
+ <Dialog size="large" title={label} on:escape={hideModal} continueText="Save" cancelText="Cancel" on:continue={() => onSave(setVal)} {labelid}>
119
+ {@const _dialogopen = onDialogOpen()}
120
+ {#if info}
121
+ <section class="info">
122
+ {info}
123
+ </section>
124
+ {/if}
125
+ <section class="position">
126
+ <p>
127
+ Using the grid overlays, select a focal point in your image to determine how Gato will align, position, and scale your image
128
+ in the section. This will help ensure the focal point of your image is always in frame. By default, Gato will
129
+ use the center of the image.
130
+ </p>
131
+ <div class="image-container">
132
+ <img class="crop-image" src={imageSrc} alt="" />
133
+ <div class="overlay" role="radiogroup" aria-labelledby={labelid}>
134
+ {#each Array.from(Array(5).keys()) as col}
135
+ {#each Array.from(Array(5).keys()) as row}
136
+ <div
137
+ bind:this={boxes[col + row * 5]}
138
+ class="box"
139
+ class:side={row === 4}
140
+ class:bottom={col === 4}
141
+ role="radio"
142
+ aria-checked={row === x && col === y}
143
+ tabindex={row === x && col === y ? 0 : -1}
144
+ on:click={() => onSelectBox(row, col)} on:keydown={onKeyDown}><ScreenReaderOnly>{positionText[row][col]}</ScreenReaderOnly></div>
145
+ {/each}
146
+ {/each}
147
+ </div>
148
+ </div>
149
+ </section>
150
+ </Dialog>
151
+ {/if}
152
+ {/if}
153
+ </FieldStandard>
154
+
155
+ <style>
156
+ section.position {
157
+ border: 1px dashed #767676;
158
+ padding: 1em;
159
+ display: flex;
160
+ flex-direction: column;
161
+ align-items: center;
162
+ }
163
+ .image-container {
164
+ width: 75%;
165
+ position: relative;
166
+ }
167
+ .crop-image {
168
+ width: 100%;
169
+ display: block;
170
+ }
171
+ .overlay {
172
+ position: absolute;
173
+ top: 0;
174
+ left: 0;
175
+ width: 100%;
176
+ height: 100%;
177
+ display: grid;
178
+ grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
179
+ grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
180
+ }
181
+ .overlay .box {
182
+ background-color: rgba(0, 0, 0, 0.5);
183
+ border-bottom: 1px dashed white;
184
+ border-right: 1px dashed white;
185
+ }
186
+ .overlay .box[aria-checked="true"] {
187
+ background-color: rgba(255, 255, 0, 0.5);
188
+ }
189
+ .overlay .box.side {
190
+ border-right-width: 0;
191
+ }
192
+ .overlay .box.bottom {
193
+ border-bottom-width: 0;
194
+ }
195
+
196
+ </style>
197
+
@@ -0,0 +1,25 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import { type ImagePositionOutput } from '..';
3
+ declare const __propDef: {
4
+ props: {
5
+ id?: string | undefined;
6
+ path: string;
7
+ imageSrc: string | undefined;
8
+ label?: string;
9
+ required?: boolean;
10
+ conditional?: boolean | undefined;
11
+ helptext?: string | undefined;
12
+ info?: string | undefined;
13
+ defaultValue?: ImagePositionOutput;
14
+ };
15
+ events: {
16
+ [evt: string]: CustomEvent<any>;
17
+ };
18
+ slots: {};
19
+ };
20
+ export type FieldImagePositionProps = typeof __propDef.props;
21
+ export type FieldImagePositionEvents = typeof __propDef.events;
22
+ export type FieldImagePositionSlots = typeof __propDef.slots;
23
+ export default class FieldImagePosition extends SvelteComponentTyped<FieldImagePositionProps, FieldImagePositionEvents, FieldImagePositionSlots> {
24
+ }
25
+ export {};
@@ -0,0 +1,2 @@
1
+ export { default as FieldImagePosition } from './FieldImagePosition.svelte';
2
+ export * from './position.js';
@@ -0,0 +1,2 @@
1
+ export { default as FieldImagePosition } from './FieldImagePosition.svelte';
2
+ export * from './position.js';
@@ -0,0 +1,4 @@
1
+ export interface ImagePositionOutput {
2
+ x: number;
3
+ y: number;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -42,3 +42,4 @@ export * from './helpers.js';
42
42
  export * from './tree/index.js';
43
43
  export * from './cropper/index.js';
44
44
  export * from './code/index.js';
45
+ export * from './imageposition/index.js';
package/dist/index.js CHANGED
@@ -42,3 +42,4 @@ export * from './helpers.js';
42
42
  export * from './tree/index.js';
43
43
  export * from './cropper/index.js';
44
44
  export * from './code/index.js';
45
+ export * from './imageposition/index.js';
@@ -6,10 +6,10 @@ declare class __sveltets_Render<T extends TreeItemFromDB> {
6
6
  headers: TreeHeader<T>[];
7
7
  searchable?: SearchableType<T>;
8
8
  filterable?: SearchableType<T>;
9
- filter?: string | undefined;
9
+ filter?: string;
10
10
  nodeClass?: ((itm: T) => string) | undefined;
11
11
  singleSelect?: boolean | undefined;
12
- enableResize?: boolean | undefined;
12
+ enableResize?: boolean;
13
13
  /**
14
14
  * Takes the width of the tree, in pixels, and returns an array of TreeHeader IDs that should be
15
15
  * displayed at that screen width. Any headers whose ID is not returned will be added to a dropdown, which allows
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dosgato/dialog",
3
3
  "description": "A component library for building forms that edit a JSON document.",
4
- "version": "1.1.20",
4
+ "version": "1.1.22",
5
5
  "scripts": {
6
6
  "prepublishOnly": "svelte-package",
7
7
  "dev": "vite dev --force",
@@ -23,28 +23,27 @@
23
23
  "@codemirror/lang-javascript": "^6.1.7",
24
24
  "@codemirror/lang-css": "^6.2.1",
25
25
  "@codemirror/lang-html": "^6.4.3",
26
- "@iconify/svelte": "^3.1.6",
26
+ "@iconify/svelte": "^4.0.0",
27
27
  "@iconify-icons/mdi": "^1.2.22",
28
28
  "@iconify-icons/ph": "^1.2.2",
29
- "@txstate-mws/svelte-components": "^1.5.5",
29
+ "@txstate-mws/svelte-components": "^1.6.2",
30
30
  "@txstate-mws/svelte-forms": "^1.4.2",
31
31
  "codemirror": "^6.0.1",
32
32
  "txstate-utils": "^1.8.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@sveltejs/adapter-auto": "^2.0.0",
36
- "@sveltejs/kit": "^1.0.1",
35
+ "@sveltejs/adapter-auto": "^3.0.0",
36
+ "@sveltejs/kit": "^2.0.1",
37
37
  "@sveltejs/package": "^2.0.1",
38
- "eslint-config-standard-with-typescript": "^39.0.0",
38
+ "eslint-config-standard-with-typescript": "^43.0.0",
39
39
  "eslint-plugin-svelte": "^2.0.0",
40
40
  "svelte-check": "^3.0.1",
41
- "svelte-preprocess": "^5.0.0",
42
- "svelte2tsx": "^0.6.0",
41
+ "svelte": "^4.0.0",
43
42
  "tslib": "^2.3.1",
44
43
  "typescript": "^5.0.2"
45
44
  },
46
45
  "peerDependencies": {
47
- "svelte": "^3.53.1 || ^4.0.0"
46
+ "svelte": "^3.53.1 || ^4.0.0 || ^5.0.0"
48
47
  },
49
48
  "files": ["dist"],
50
49
  "type": "module"