@dosgato/dialog 0.0.48 → 0.0.50

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.
@@ -11,7 +11,7 @@ declare const __propDef: {
11
11
  rows?: number | undefined;
12
12
  conditional?: boolean | undefined;
13
13
  required?: boolean | undefined;
14
- use?: HTMLActionEntry<any>[] | undefined;
14
+ use?: HTMLActionEntry[] | undefined;
15
15
  inputelement?: HTMLTextAreaElement | undefined;
16
16
  related?: number | true | undefined;
17
17
  extradescid?: string | undefined;
@@ -13,7 +13,7 @@ declare const __propDef: {
13
13
  maxlength?: number | undefined;
14
14
  conditional?: boolean | undefined;
15
15
  required?: boolean | undefined;
16
- use?: HTMLActionEntry<any>[] | undefined;
16
+ use?: HTMLActionEntry[] | undefined;
17
17
  inputelement?: HTMLInputElement | undefined;
18
18
  related?: number | true | undefined;
19
19
  extradescid?: string | undefined;
@@ -12,7 +12,7 @@ declare const __propDef: {
12
12
  rows?: number | undefined;
13
13
  conditional?: boolean | undefined;
14
14
  required?: boolean | undefined;
15
- use?: HTMLActionEntry<any>[] | undefined;
15
+ use?: HTMLActionEntry[] | undefined;
16
16
  inputelement?: HTMLTextAreaElement | undefined;
17
17
  related?: number | true | undefined;
18
18
  extradescid?: string | undefined;
@@ -25,7 +25,7 @@ declare const __propDef: {
25
25
  onChange: any;
26
26
  onBlur: any;
27
27
  onSelect?: any;
28
- use?: HTMLActionEntry<any>[] | undefined;
28
+ use?: HTMLActionEntry[] | undefined;
29
29
  inputelement?: HTMLInputElement | undefined;
30
30
  };
31
31
  events: {
@@ -56,6 +56,7 @@ interface Item {
56
56
  export interface Folder extends Item {
57
57
  type: 'folder';
58
58
  hasChildren: boolean;
59
+ childCount: number;
59
60
  acceptsUpload: boolean;
60
61
  url: string;
61
62
  }
@@ -18,7 +18,7 @@ export interface IAssetStore {
18
18
  activetype: ChooserType;
19
19
  activesource: number;
20
20
  initialized: boolean;
21
- preview?: AnyUIItem;
21
+ preview?: AnyItem | AnyUIItem;
22
22
  }
23
23
  export interface ChooserStoreOptions<F> {
24
24
  pages?: boolean;
@@ -44,11 +44,11 @@ export declare class ChooserStore<F = any> extends Store<IAssetStore> {
44
44
  setOptions(options: ChooserStoreOptions<F>): void;
45
45
  sources: import("@txstate-mws/svelte-store").DerivedStore<UISource[], IAssetStore>;
46
46
  source: import("@txstate-mws/svelte-store").DerivedStore<UISource | undefined, IAssetStore>;
47
- preview: import("@txstate-mws/svelte-store").DerivedStore<AnyUIItem | undefined, IAssetStore>;
47
+ preview: import("@txstate-mws/svelte-store").DerivedStore<AnyItem | AnyUIItem | undefined, IAssetStore>;
48
48
  getSource(state?: IAssetStore): UISource | undefined;
49
49
  getSourceIndex(name: string, state?: IAssetStore, type?: ChooserType): number;
50
50
  init(options: ChooserStoreOptions<F>): Promise<void>;
51
- setPreview(item?: AnyUIItem): void;
51
+ setPreview(item?: AnyItem | AnyUIItem): void;
52
52
  clearPreview(): void;
53
53
  setSource(name?: string, init?: boolean): void;
54
54
  }
@@ -1,6 +1,6 @@
1
1
  import { Store, derivedStore } from '@txstate-mws/svelte-store';
2
2
  import { tick } from 'svelte';
3
- import { findIndex, isBlank } from 'txstate-utils';
3
+ import { findIndex } from 'txstate-utils';
4
4
  export const CHOOSER_STORE_CONTEXT = {};
5
5
  const nofilter = (x) => true;
6
6
  export function combinePath(path, name) {
@@ -42,7 +42,7 @@ export let item;
42
42
  </div>
43
43
  <div>
44
44
  <dt>Contents:</dt>
45
- <dd>{item.children?.length ?? 0} sub-items</dd>
45
+ <dd>{item.childCount} sub-items</dd>
46
46
  </div>
47
47
  </div>
48
48
  {/if}
@@ -1,8 +1,9 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import { type AnyUIItem, type RawURL } from './ChooserStore';
2
+ import type { AnyItem } from './ChooserAPI';
3
+ import { type RawURL } from './ChooserStore';
3
4
  declare const __propDef: {
4
5
  props: {
5
- item: AnyUIItem | RawURL;
6
+ item: AnyItem | RawURL;
6
7
  };
7
8
  events: {
8
9
  [evt: string]: CustomEvent<any>;
@@ -95,15 +95,11 @@ function headerDragReset() {
95
95
  let mounted = false;
96
96
  onMount(async () => {
97
97
  document.addEventListener('dragend', onDragEnd);
98
- const saveFocusId = $store.focused?.id;
99
98
  headerSizes.set(calcHeaderSizes()); // seems to need a kick on first mount
100
99
  await new Promise(resolve => requestAnimationFrame(resolve));
101
100
  // need to wait long enough for headers to redraw before trying to mount the rows
102
101
  await new Promise(resolve => requestAnimationFrame(resolve));
103
102
  mounted = true;
104
- const el = saveFocusId ? document.getElementById(getHashId(saveFocusId)) : undefined;
105
- if ($store.focused?.id && $store.focused.id === saveFocusId)
106
- el?.scrollIntoView({ block: 'center' });
107
103
  await store.refresh();
108
104
  });
109
105
  onDestroy(() => {
@@ -159,7 +155,7 @@ afterUpdate(() => {
159
155
  .tree-header {
160
156
  display: flex;
161
157
  align-items: center;
162
- background-color: var(--tree-head-bg, #555555);
158
+ background-color: var(--tree-head-bg, #757575);
163
159
  color: var(--tree-head-text, white);
164
160
  position: sticky;
165
161
  top: 0;
@@ -3,10 +3,10 @@ import checkboxBlankOutline from '@iconify-icons/mdi/checkbox-blank-outline';
3
3
  import menuDown from '@iconify-icons/mdi/menu-down';
4
4
  import menuRight from '@iconify-icons/mdi/menu-right';
5
5
  import { modifierKey, ScreenReaderOnly } from '@txstate-mws/svelte-components';
6
- import { createEventDispatcher, getContext } from 'svelte';
6
+ import { createEventDispatcher, getContext, onMount } from 'svelte';
7
7
  import { isNotBlank, toArray } from 'txstate-utils';
8
8
  import { Icon } from '..';
9
- import { TREE_STORE_CONTEXT, getHashId } from './treestore';
9
+ import { TREE_STORE_CONTEXT, getHashId, lazyObserver } from './treestore';
10
10
  import LoadIcon from './LoadIcon.svelte';
11
11
  import TreeCell from './TreeCell.svelte';
12
12
  export let headers;
@@ -243,6 +243,14 @@ function onDragLeaveAbove(e) {
243
243
  else
244
244
  dragOverAbove--;
245
245
  }
246
+ let display = $focused && $focused.id === item.id;
247
+ onMount(async () => {
248
+ if ($focused && $focused.id === item.id)
249
+ nodeelement.scrollIntoView({ block: 'center' });
250
+ nodeelement.addEventListener('lazy', () => { display = true; });
251
+ lazyObserver.observe(nodeelement);
252
+ return () => lazyObserver.unobserve(nodeelement);
253
+ });
246
254
  $: if ($dragging) {
247
255
  dragOver = 0;
248
256
  dragOverAbove = 0;
@@ -287,6 +295,7 @@ $: if ($dragging) {
287
295
  on:mousedown={e => { if (e.shiftKey) e.preventDefault() }}
288
296
  on:dblclick={onDblClick}
289
297
  >
298
+ {#if display}
290
299
  <!-- keyboard users have modifier keys, they don't ever focus the checkbox -->
291
300
  <!-- svelte-ignore a11y-click-events-have-key-events -->
292
301
  <div class="checkbox" on:click={onCheckClick}>
@@ -315,6 +324,7 @@ $: if ($dragging) {
315
324
  {#if item.hasChildren && !showChildren}, right arrow to show children{/if}
316
325
  {#if $selected.size > 0}, command-enter to select multiple, shift-enter to select all from last selection{/if}
317
326
  </ScreenReaderOnly>
327
+ {/if}
318
328
  </div>
319
329
  {#if showChildren && item.children}
320
330
  <ul role="group">
@@ -346,6 +356,7 @@ $: if ($dragging) {
346
356
  border-bottom: var(--tree-border, 1px dashed #aaaaaa);
347
357
  width: 100%;
348
358
  overflow: hidden;
359
+ min-height: 2.9em;
349
360
  }
350
361
  :global(.resizing) .tree-node {
351
362
  cursor: col-resize;
@@ -373,7 +384,7 @@ $: if ($dragging) {
373
384
  color: var(--tree-selected-text, inherit);
374
385
  }
375
386
  .tree-node.dragOver {
376
- background-color: var(--tree-droppable, #555555);
387
+ background-color: var(--tree-droppable, #757575);
377
388
  color: var(--tree-droppable-text, white);
378
389
  }
379
390
  .tree-node.dropDisabled {
@@ -387,7 +398,7 @@ $: if ($dragging) {
387
398
  height: 6px;
388
399
  }
389
400
  .drop-above.dragOverAbove {
390
- background-color: var(--tree-droppable, #555555);
401
+ background-color: var(--tree-droppable, #757575);
391
402
  }
392
403
  li {
393
404
  position: relative;
@@ -117,3 +117,4 @@ export declare class TreeStore<T extends TreeItemFromDB> extends ActiveStore<ITr
117
117
  }
118
118
  export declare const hashedIds: Record<string, string>;
119
119
  export declare function getHashId(str: string): string;
120
+ export declare const lazyObserver: IntersectionObserver | undefined;
@@ -345,3 +345,14 @@ export function getHashId(str) {
345
345
  hashedIds[str] ??= hashid(str);
346
346
  return hashedIds[str];
347
347
  }
348
+ const lazyEvent = new CustomEvent('lazy');
349
+ export const lazyObserver = typeof IntersectionObserver !== 'undefined'
350
+ ? new IntersectionObserver((entries) => {
351
+ for (const entry of entries) {
352
+ if (entry.isIntersecting) {
353
+ entry.target.dispatchEvent(lazyEvent);
354
+ lazyObserver.unobserve(entry.target);
355
+ }
356
+ }
357
+ }, { rootMargin: '500px' })
358
+ : undefined;
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": "0.0.48",
4
+ "version": "0.0.50",
5
5
  "scripts": {
6
6
  "prepublishOnly": "svelte-package",
7
7
  "dev": "vite dev --force",
@@ -39,7 +39,7 @@
39
39
  "svelte-preprocess": "^5.0.0",
40
40
  "svelte2tsx": "^0.6.0",
41
41
  "tslib": "^2.3.1",
42
- "typescript": "^4.4.3"
42
+ "typescript": "^5.0.2"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "svelte": "^3.53.1"