@txstate-mws/svelte-components 1.0.4 → 1.1.0
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/.eslintrc.cjs +37 -0
- package/docs/CollapsingTable.md +79 -0
- package/docs/ConditionalWrapper.md +35 -0
- package/docs/Modal.md +63 -0
- package/docs/PopupMenu.md +31 -0
- package/docs/ScreenReaderOnly.md +10 -0
- package/docs/actions.md +84 -0
- package/docs/stores.md +203 -0
- package/package.json +15 -37
- package/playwright.config.js +112 -0
- package/src/app.html +14 -0
- package/src/global.d.ts +1 -0
- package/src/lib/actions/buttonify.ts +27 -0
- package/src/lib/actions/glue.ts +96 -0
- package/src/lib/actions/index.ts +7 -0
- package/src/lib/actions/offset.ts +43 -0
- package/src/lib/actions/portal.ts +13 -0
- package/src/lib/actions/resize.ts +72 -0
- package/src/lib/actions/sticky.ts +105 -0
- package/src/lib/actions/stickyfixed.ts +160 -0
- package/src/lib/components/Card.svelte +25 -0
- package/src/lib/components/CardLayout.svelte +188 -0
- package/{components → src/lib/components}/CollapsingTable.svelte +65 -63
- package/{components → src/lib/components}/ConditionalWrapper.svelte +7 -6
- package/src/lib/components/FocusLock.svelte +102 -0
- package/{components → src/lib/components}/Modal.svelte +24 -22
- package/src/lib/components/MultiSelect.svelte +174 -0
- package/src/lib/components/PopupMenu.svelte +285 -0
- package/{components → src/lib/components}/ScreenReaderOnly.svelte +4 -3
- package/src/lib/components/index.ts +9 -0
- package/src/lib/index.ts +4 -0
- package/src/lib/types/CardLayout.ts +14 -0
- package/src/lib/types/CollapsingTable.ts +8 -0
- package/src/lib/types/PopupMenu.ts +5 -0
- package/src/lib/types/index.ts +3 -0
- package/src/lib/util/bodyoffset.ts +77 -0
- package/src/lib/util/index.ts +3 -0
- package/src/lib/util/repositioned.ts +91 -0
- package/src/lib/util/util.ts +36 -0
- package/src/routes/__layout.svelte +125 -0
- package/src/routes/actions/index.svelte +1 -0
- package/src/routes/actions/offset.svelte +4 -0
- package/src/routes/actions/offsetdebounce.svelte +4 -0
- package/src/routes/actions/resize.svelte +4 -0
- package/src/routes/actions/resizedebounce.svelte +4 -0
- package/src/routes/actions/sticky.svelte +4 -0
- package/src/routes/cards/index.svelte +4 -0
- package/src/routes/cards/preserve.svelte +4 -0
- package/src/routes/collapsingtable/index.svelte +4 -0
- package/src/routes/collapsingtable/stickyheader.svelte +4 -0
- package/src/routes/index.svelte +2 -0
- package/src/routes/modal.svelte +4 -0
- package/src/routes/multiselect.svelte +4 -0
- package/src/routes/popupmenu/body.svelte +4 -0
- package/src/routes/popupmenu/complex.svelte +4 -0
- package/src/routes/popupmenu/empty.svelte +5 -0
- package/src/routes/popupmenu/index.svelte +4 -0
- package/src/routes/popupmenu/parent.svelte +4 -0
- package/src/routes/popupmenu/scrollable.svelte +27 -0
- package/src/routes/popupmenu/showselected.svelte +4 -0
- package/src/test/Cards.svelte +64 -0
- package/src/test/CollapsingTableTest.svelte +36 -0
- package/src/test/ModalTest.svelte +58 -0
- package/src/test/MultiSelectTest.svelte +26 -0
- package/src/test/Offset.svelte +32 -0
- package/src/test/PopupMenuBody.svelte +34 -0
- package/src/test/PopupMenuButtonIsParent.svelte +36 -0
- package/src/test/PopupMenuComplex.svelte +34 -0
- package/src/test/PopupMenuSimple.svelte +36 -0
- package/src/test/Resize.svelte +29 -0
- package/src/test/Sticky.svelte +65 -0
- package/static/layout.css +263 -0
- package/svelte.config.js +15 -0
- package/tests/.eslintrc.cjs +19 -0
- package/tests/CardLayout.test.js +41 -0
- package/tests/CollapsingTable.test.js +37 -0
- package/tests/Modal.test.js +18 -0
- package/tests/MultiSelect.test.js +58 -0
- package/tests/PopupMenu.test.js +55 -0
- package/tests/common.js +4 -0
- package/tsconfig.json +31 -0
- package/actions/buttonify.d.ts +0 -8
- package/actions/buttonify.js +0 -26
- package/actions/glue.d.ts +0 -16
- package/actions/glue.js +0 -82
- package/actions/index.d.ts +0 -7
- package/actions/index.js +0 -7
- package/actions/offset.d.ts +0 -15
- package/actions/offset.js +0 -35
- package/actions/portal.d.ts +0 -4
- package/actions/portal.js +0 -13
- package/actions/resize.d.ts +0 -20
- package/actions/resize.js +0 -45
- package/actions/sticky.d.ts +0 -33
- package/actions/sticky.js +0 -85
- package/actions/stickyfixed.d.ts +0 -25
- package/actions/stickyfixed.js +0 -157
- package/components/CollapsingTable.svelte.d.ts +0 -59
- package/components/ConditionalWrapper.svelte.d.ts +0 -23
- package/components/FocusLock.svelte +0 -107
- package/components/FocusLock.svelte.d.ts +0 -26
- package/components/Modal.svelte.d.ts +0 -27
- package/components/PopupMenu.svelte +0 -279
- package/components/PopupMenu.svelte.d.ts +0 -44
- package/components/ScreenReaderOnly.svelte.d.ts +0 -20
- package/components/index.d.ts +0 -6
- package/components/index.js +0 -6
- package/index.d.ts +0 -4
- package/index.js +0 -4
- package/types/CollapsingTable.d.ts +0 -8
- package/types/CollapsingTable.js +0 -1
- package/types/PopupMenu.d.ts +0 -5
- package/types/PopupMenu.js +0 -1
- package/types/index.d.ts +0 -2
- package/types/index.js +0 -2
- package/util/bodyoffset.d.ts +0 -14
- package/util/bodyoffset.js +0 -72
- package/util/index.d.ts +0 -3
- package/util/index.js +0 -3
- package/util/repositioned.d.ts +0 -12
- package/util/repositioned.js +0 -81
- package/util/util.d.ts +0 -2
- package/util/util.js +0 -10
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import { Store } from '@txstate-mws/svelte-store';
|
|
3
|
-
import type { GlueAlignOpts, GlueAlignStore } from '../actions';
|
|
4
|
-
import type { PopupMenuItem } from '../types';
|
|
5
|
-
declare const __propDef: {
|
|
6
|
-
props: {
|
|
7
|
-
menushown?: boolean;
|
|
8
|
-
menuContainerClass?: string;
|
|
9
|
-
menuClass?: string;
|
|
10
|
-
menuItemClass?: string;
|
|
11
|
-
menuItemHilitedClass?: string;
|
|
12
|
-
menuItemSelectedClass?: string;
|
|
13
|
-
items?: PopupMenuItem[];
|
|
14
|
-
buttonelement: HTMLElement;
|
|
15
|
-
align?: GlueAlignOpts;
|
|
16
|
-
cover?: boolean;
|
|
17
|
-
showSelected?: boolean;
|
|
18
|
-
width?: string | undefined;
|
|
19
|
-
computedalign?: Store<GlueAlignStore>;
|
|
20
|
-
usePortal?: HTMLElement | true | undefined;
|
|
21
|
-
emptyText?: string | undefined;
|
|
22
|
-
value?: string | undefined;
|
|
23
|
-
};
|
|
24
|
-
events: {
|
|
25
|
-
change: CustomEvent<any>;
|
|
26
|
-
} & {
|
|
27
|
-
[evt: string]: CustomEvent<any>;
|
|
28
|
-
};
|
|
29
|
-
slots: {
|
|
30
|
-
default: {
|
|
31
|
-
item: PopupMenuItem;
|
|
32
|
-
label: string;
|
|
33
|
-
hilited: boolean;
|
|
34
|
-
selected: boolean;
|
|
35
|
-
};
|
|
36
|
-
noresults: {};
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
export declare type PopupMenuProps = typeof __propDef.props;
|
|
40
|
-
export declare type PopupMenuEvents = typeof __propDef.events;
|
|
41
|
-
export declare type PopupMenuSlots = typeof __propDef.slots;
|
|
42
|
-
export default class PopupMenu extends SvelteComponentTyped<PopupMenuProps, PopupMenuEvents, PopupMenuSlots> {
|
|
43
|
-
}
|
|
44
|
-
export {};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
declare const __propDef: {
|
|
3
|
-
props: {
|
|
4
|
-
id?: string | undefined;
|
|
5
|
-
arialive?: 'off' | 'assertive' | 'polite' | undefined;
|
|
6
|
-
ariaatomic?: boolean | 'false' | 'true' | undefined;
|
|
7
|
-
};
|
|
8
|
-
events: {
|
|
9
|
-
[evt: string]: CustomEvent<any>;
|
|
10
|
-
};
|
|
11
|
-
slots: {
|
|
12
|
-
default: {};
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
export declare type ScreenReaderOnlyProps = typeof __propDef.props;
|
|
16
|
-
export declare type ScreenReaderOnlyEvents = typeof __propDef.events;
|
|
17
|
-
export declare type ScreenReaderOnlySlots = typeof __propDef.slots;
|
|
18
|
-
export default class ScreenReaderOnly extends SvelteComponentTyped<ScreenReaderOnlyProps, ScreenReaderOnlyEvents, ScreenReaderOnlySlots> {
|
|
19
|
-
}
|
|
20
|
-
export {};
|
package/components/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { default as CollapsingTable } from './CollapsingTable.svelte';
|
|
2
|
-
export { default as FocusLock } from './FocusLock.svelte';
|
|
3
|
-
export { default as ConditionalWrapper } from './ConditionalWrapper.svelte';
|
|
4
|
-
export { default as Modal } from './Modal.svelte';
|
|
5
|
-
export { default as PopupMenu } from './PopupMenu.svelte';
|
|
6
|
-
export { default as ScreenReaderOnly } from './ScreenReaderOnly.svelte';
|
package/components/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { default as CollapsingTable } from './CollapsingTable.svelte';
|
|
2
|
-
export { default as FocusLock } from './FocusLock.svelte';
|
|
3
|
-
export { default as ConditionalWrapper } from './ConditionalWrapper.svelte';
|
|
4
|
-
export { default as Modal } from './Modal.svelte';
|
|
5
|
-
export { default as PopupMenu } from './PopupMenu.svelte';
|
|
6
|
-
export { default as ScreenReaderOnly } from './ScreenReaderOnly.svelte';
|
package/index.d.ts
DELETED
package/index.js
DELETED
package/types/CollapsingTable.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/types/PopupMenu.d.ts
DELETED
package/types/PopupMenu.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/types/index.d.ts
DELETED
package/types/index.js
DELETED
package/util/bodyoffset.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare type ElementOffsets = Partial<ReturnType<typeof bodyOffset>>;
|
|
2
|
-
export declare function bodyOffset(ele: HTMLElement): {
|
|
3
|
-
right: number;
|
|
4
|
-
bottom: number;
|
|
5
|
-
top: number;
|
|
6
|
-
left: number;
|
|
7
|
-
};
|
|
8
|
-
export declare function targetOffset(ele: HTMLElement, target: HTMLElement): {
|
|
9
|
-
right: number;
|
|
10
|
-
bottom: number;
|
|
11
|
-
top: number;
|
|
12
|
-
left: number;
|
|
13
|
-
};
|
|
14
|
-
export declare function sharedOffsetParent(a: HTMLElement, b: HTMLElement): HTMLElement;
|
package/util/bodyoffset.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
export function bodyOffset(ele) {
|
|
2
|
-
return targetOffset(ele, document.body);
|
|
3
|
-
}
|
|
4
|
-
export function targetOffset(ele, target) {
|
|
5
|
-
const offset = targetOffsetRecursive(ele, target);
|
|
6
|
-
return {
|
|
7
|
-
...offset,
|
|
8
|
-
right: target.offsetWidth - offset.left - ele.offsetWidth,
|
|
9
|
-
bottom: target.offsetHeight - offset.top - ele.offsetHeight
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export function sharedOffsetParent(a, b) {
|
|
13
|
-
if (!a || !b)
|
|
14
|
-
return undefined;
|
|
15
|
-
if (a.contains(b) && a.firstElementChild.offsetParent === a)
|
|
16
|
-
return a;
|
|
17
|
-
if (b.contains(a) && b.firstElementChild.offsetParent === b)
|
|
18
|
-
return b;
|
|
19
|
-
let c = a.offsetParent;
|
|
20
|
-
while (c instanceof HTMLElement && !c.contains(b))
|
|
21
|
-
c = c.offsetParent;
|
|
22
|
-
return c;
|
|
23
|
-
}
|
|
24
|
-
function targetOffsetRecursive(ele, target, currentOffset) {
|
|
25
|
-
const { x, y } = getTranslate(ele);
|
|
26
|
-
const offset = {
|
|
27
|
-
top: ele.offsetTop + (currentOffset?.top ?? 0) + y,
|
|
28
|
-
left: ele.offsetLeft + (currentOffset?.left ?? 0) + x
|
|
29
|
-
};
|
|
30
|
-
if (ele.offsetParent instanceof HTMLElement && target !== ele.offsetParent && target.contains(ele.offsetParent))
|
|
31
|
-
return targetOffsetRecursive(ele.offsetParent, target, offset);
|
|
32
|
-
return offset;
|
|
33
|
-
}
|
|
34
|
-
function getTranslate(element) {
|
|
35
|
-
const style = window.getComputedStyle(element);
|
|
36
|
-
const matrix = style.transform;
|
|
37
|
-
// No transform property. Simply return 0 values.
|
|
38
|
-
if (matrix === 'none' || !matrix) {
|
|
39
|
-
return {
|
|
40
|
-
x: 0,
|
|
41
|
-
y: 0,
|
|
42
|
-
z: 0
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
// Can either be 2d or 3d transform
|
|
46
|
-
const matrixType = matrix.includes('3d') ? '3d' : '2d';
|
|
47
|
-
const matrixValues = matrix.match(/matrix.*\((.+)\)/)[1].split(', ');
|
|
48
|
-
// 2d matrices have 6 values
|
|
49
|
-
// Last 2 values are X and Y.
|
|
50
|
-
// 2d matrices does not have Z value.
|
|
51
|
-
if (matrixType === '2d') {
|
|
52
|
-
return {
|
|
53
|
-
x: Number(matrixValues[4]),
|
|
54
|
-
y: Number(matrixValues[5]),
|
|
55
|
-
z: 0
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
// 3d matrices have 16 values
|
|
59
|
-
// The 13th, 14th, and 15th values are X, Y, and Z
|
|
60
|
-
if (matrixType === '3d') {
|
|
61
|
-
return {
|
|
62
|
-
x: Number(matrixValues[12]),
|
|
63
|
-
y: Number(matrixValues[13]),
|
|
64
|
-
z: Number(matrixValues[14])
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
x: 0,
|
|
69
|
-
y: 0,
|
|
70
|
-
z: 0
|
|
71
|
-
};
|
|
72
|
-
}
|
package/util/index.d.ts
DELETED
package/util/index.js
DELETED
package/util/repositioned.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ElementOffsets } from './bodyoffset.js';
|
|
2
|
-
export declare function watchForMutations(cb: () => void): {
|
|
3
|
-
destroy(): void;
|
|
4
|
-
};
|
|
5
|
-
export declare function watchForPositionChange(el: (HTMLElement | undefined)[] | HTMLElement | undefined, cb: ((offset: Required<ElementOffsets>) => void) | ((offsets: Required<ElementOffsets>[]) => void)): {
|
|
6
|
-
update(newEl: (HTMLElement | undefined)[] | HTMLElement | undefined, newCb: ((offset: Required<ElementOffsets>) => void) | ((offsets: Required<ElementOffsets>[]) => void)): void;
|
|
7
|
-
destroy: () => void;
|
|
8
|
-
};
|
|
9
|
-
export declare function watchForPositionChangeInContainer(el: HTMLElement | undefined, container: HTMLElement | undefined, cb: (offset: Required<ElementOffsets>) => void): {
|
|
10
|
-
update(newEl: HTMLElement | undefined, newContainer: HTMLElement | undefined, newCb: (offset: Required<ElementOffsets>) => void): void;
|
|
11
|
-
destroy: () => void;
|
|
12
|
-
};
|
package/util/repositioned.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { equal, isNotNull, randomid, toArray } from 'txstate-utils';
|
|
2
|
-
import { bodyOffset, targetOffset } from './bodyoffset.js';
|
|
3
|
-
const observers = new Map();
|
|
4
|
-
let mutationobserver;
|
|
5
|
-
export function watchForMutations(cb) {
|
|
6
|
-
function watch() {
|
|
7
|
-
for (const cb of observers.values())
|
|
8
|
-
cb();
|
|
9
|
-
}
|
|
10
|
-
if (observers.size === 0) {
|
|
11
|
-
mutationobserver ?? (mutationobserver = new MutationObserver(watch));
|
|
12
|
-
window.addEventListener('resize', watch, { passive: true });
|
|
13
|
-
mutationobserver.observe(document.body, {
|
|
14
|
-
subtree: true,
|
|
15
|
-
childList: true,
|
|
16
|
-
attributes: true,
|
|
17
|
-
characterData: true
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
const id = randomid();
|
|
21
|
-
observers.set(id, cb);
|
|
22
|
-
cb();
|
|
23
|
-
return {
|
|
24
|
-
destroy() {
|
|
25
|
-
observers.delete(id);
|
|
26
|
-
if (observers.size === 0) {
|
|
27
|
-
window.removeEventListener('resize', watch);
|
|
28
|
-
mutationobserver.disconnect();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
export function watchForPositionChange(el, cb) {
|
|
34
|
-
let lastoffsets = [];
|
|
35
|
-
let els = toArray(el).filter(isNotNull);
|
|
36
|
-
function watch() {
|
|
37
|
-
const offsets = els.map(bodyOffset);
|
|
38
|
-
if (offsets.some((offset, i) => !equal(offset, lastoffsets[i]))) {
|
|
39
|
-
lastoffsets = offsets;
|
|
40
|
-
Array.isArray(el) ? cb(offsets) : cb(offsets[0]);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const { destroy } = watchForMutations(watch);
|
|
44
|
-
return {
|
|
45
|
-
update(newEl, newCb) {
|
|
46
|
-
const changed = newEl !== el || newCb !== cb;
|
|
47
|
-
if (changed) {
|
|
48
|
-
el = newEl;
|
|
49
|
-
els = toArray(el).filter(isNotNull);
|
|
50
|
-
cb = newCb;
|
|
51
|
-
watch();
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
destroy
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
export function watchForPositionChangeInContainer(el, container, cb) {
|
|
58
|
-
let lastoffset;
|
|
59
|
-
function watch() {
|
|
60
|
-
if (!el || !container)
|
|
61
|
-
return;
|
|
62
|
-
const offset = targetOffset(el, container);
|
|
63
|
-
if (!equal(offset, lastoffset)) {
|
|
64
|
-
lastoffset = offset;
|
|
65
|
-
cb(offset);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
const { destroy } = watchForMutations(watch);
|
|
69
|
-
return {
|
|
70
|
-
update(newEl, newContainer, newCb) {
|
|
71
|
-
const changed = newEl !== el || newContainer !== container || newCb !== cb;
|
|
72
|
-
if (changed) {
|
|
73
|
-
el = newEl;
|
|
74
|
-
container = newContainer;
|
|
75
|
-
cb = newCb;
|
|
76
|
-
watch();
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
destroy
|
|
80
|
-
};
|
|
81
|
-
}
|
package/util/util.d.ts
DELETED
package/util/util.js
DELETED