@e280/sly 0.2.0-1 → 0.2.0-2

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/x/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from "./ops/loaders/parts/error-display.js";
7
7
  export * from "./ops/op.js";
8
8
  export * from "./ops/podium.js";
9
9
  export * from "./ops/types.js";
10
+ export * as loot from "./loot/index.js";
10
11
  export * from "./views/attributes.js";
11
12
  export * from "./views/css-reset.js";
12
13
  export * from "./views/types.js";
package/x/index.html CHANGED
@@ -111,7 +111,7 @@ body {
111
111
  }
112
112
 
113
113
  </style>
114
- <script type=module src="demo/demo.bundle.min.js?v=c6f94fbdccdb"></script>
114
+ <script type=module src="demo/demo.bundle.min.js?v=4b778811d6eb"></script>
115
115
  <link rel="icon" href="assets/favicon.png?v=4dc161ed79b3"/>
116
116
 
117
117
  <meta name="theme-color" content="#95ff7b">
@@ -131,7 +131,7 @@ body {
131
131
  <img class=icon alt="" src="/assets/favicon.png"/>
132
132
  <h1>sly testing page</h1>
133
133
  <p><a href="https://github.com/e280/sly">github.com/e280/sly</a></p>
134
- <p class=lil>v0.2.0-1</p>
134
+ <p class=lil>v0.2.0-2</p>
135
135
  <demo-counter>component</demo-counter>
136
136
  <div class=demo></div>
137
137
 
package/x/index.js CHANGED
@@ -7,6 +7,7 @@ export * from "./ops/loaders/parts/error-display.js";
7
7
  export * from "./ops/op.js";
8
8
  export * from "./ops/podium.js";
9
9
  export * from "./ops/types.js";
10
+ export * as loot from "./loot/index.js";
10
11
  export * from "./views/attributes.js";
11
12
  export * from "./views/css-reset.js";
12
13
  export * from "./views/types.js";
package/x/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAE9B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AAEpD,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAE9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAE9B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AACpD,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAE9B,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAEvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,29 @@
1
+ /** system for dragging-and-dropping things around on a webpage */
2
+ export declare class DragDrop<Grabbed, Hovering> {
3
+ #private;
4
+ private params;
5
+ constructor(params: {
6
+ /** accept a dropped item that was declared within this system */
7
+ acceptDrop: (event: DragEvent, grabbed: Grabbed, hovering: Hovering) => void;
8
+ /** accept undeclared drops from outside this system */
9
+ fromOutside?: {
10
+ predicate: (event: DragEvent, hovering: Hovering) => boolean;
11
+ acceptDrop: (event: DragEvent, hovering: Hovering) => void;
12
+ };
13
+ });
14
+ /** make event listeners to attach to your dragzone(s) */
15
+ readonly dragzone: {
16
+ draggable: () => string;
17
+ dragstart: (grabbed: Grabbed) => (_: DragEvent) => void;
18
+ dragend: () => (_: DragEvent) => void;
19
+ };
20
+ /** make event listeners to attach to your dropzones(s) */
21
+ readonly dropzone: {
22
+ dragenter: () => (_: DragEvent) => void;
23
+ dragleave: () => (event: DragEvent) => void;
24
+ dragover: (hovering: Hovering) => (event: DragEvent) => void;
25
+ drop: (hovering: Hovering) => (event: DragEvent) => void;
26
+ };
27
+ get grabbed(): Grabbed | undefined;
28
+ get hovering(): Hovering | undefined;
29
+ }
@@ -0,0 +1,54 @@
1
+ import { signal } from "@e280/strata";
2
+ import { dragIsOutsideCurrentTarget } from "./helpers.js";
3
+ /** system for dragging-and-dropping things around on a webpage */
4
+ export class DragDrop {
5
+ params;
6
+ #$grabbed = signal(undefined);
7
+ #$hovering = signal(undefined);
8
+ constructor(params) {
9
+ this.params = params;
10
+ }
11
+ /** make event listeners to attach to your dragzone(s) */
12
+ dragzone = {
13
+ draggable: () => "true",
14
+ dragstart: (grabbed) => (_) => {
15
+ this.#$grabbed.value = grabbed;
16
+ },
17
+ dragend: () => (_) => {
18
+ this.#$grabbed.value = undefined;
19
+ this.#$hovering.value = undefined;
20
+ },
21
+ };
22
+ /** make event listeners to attach to your dropzones(s) */
23
+ dropzone = {
24
+ dragenter: () => (_) => { },
25
+ dragleave: () => (event) => {
26
+ if (dragIsOutsideCurrentTarget(event))
27
+ this.#$hovering.value = undefined;
28
+ },
29
+ dragover: (hovering) => (event) => {
30
+ event.preventDefault();
31
+ const { fromOutside } = this.params;
32
+ if (this.#$grabbed() || (fromOutside && fromOutside.predicate(event, hovering)))
33
+ this.#$hovering.value = hovering;
34
+ },
35
+ drop: (hovering) => (event) => {
36
+ event.preventDefault();
37
+ const { acceptDrop, fromOutside } = this.params;
38
+ const grabbed = this.#$grabbed();
39
+ this.#$grabbed.value = undefined;
40
+ this.#$hovering.value = undefined;
41
+ if (grabbed)
42
+ acceptDrop(event, grabbed, hovering);
43
+ else if (fromOutside && fromOutside.predicate(event, hovering))
44
+ fromOutside.acceptDrop(event, hovering);
45
+ },
46
+ };
47
+ get grabbed() {
48
+ return this.#$grabbed();
49
+ }
50
+ get hovering() {
51
+ return this.#$hovering();
52
+ }
53
+ }
54
+ //# sourceMappingURL=drag-drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-drop.js","sourceRoot":"","sources":["../../s/loot/drag-drop.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,0BAA0B,EAAC,MAAM,cAAc,CAAA;AAEvD,kEAAkE;AAClE,MAAM,OAAO,QAAQ;IAIA;IAHpB,SAAS,GAAG,MAAM,CAAsB,SAAS,CAAC,CAAA;IAClD,UAAU,GAAG,MAAM,CAAuB,SAAS,CAAC,CAAA;IAEpD,YAAoB,MAUnB;QAVmB,WAAM,GAAN,MAAM,CAUzB;IAAG,CAAC;IAEL,yDAAyD;IAChD,QAAQ,GAAG;QACnB,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM;QAEvB,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,CAAY,EAAE,EAAE;YACjD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAA;QAC/B,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAY,EAAE,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAA;YAChC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;QAClC,CAAC;KACD,CAAA;IAED,0DAA0D;IACjD,QAAQ,GAAG;QACnB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAY,EAAE,EAAE,GAAE,CAAC;QAErC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAgB,EAAE,EAAE;YACrC,IAAI,0BAA0B,CAAC,KAAK,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;QACnC,CAAC;QAED,QAAQ,EAAE,CAAC,QAAkB,EAAE,EAAE,CAAC,CAAC,KAAgB,EAAE,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,MAAM,EAAC,WAAW,EAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YAEjC,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC9E,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAA;QAClC,CAAC;QAED,IAAI,EAAE,CAAC,QAAkB,EAAE,EAAE,CAAC,CAAC,KAAgB,EAAE,EAAE;YAClD,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,MAAM,EAAC,UAAU,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAChC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAA;YAChC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;YAEjC,IAAI,OAAO;gBACV,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;iBAChC,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC7D,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACzC,CAAC;KACD,CAAA;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;IACxB,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,UAAU,EAAE,CAAA;IACzB,CAAC;CACD"}
@@ -0,0 +1,16 @@
1
+ /** dropzone that accepts dropped stuff like files */
2
+ export declare class Drop {
3
+ #private;
4
+ private params;
5
+ constructor(params: {
6
+ /** whether or not the dragged item is acceptable for a drop */
7
+ predicate: (event: DragEvent) => boolean;
8
+ /** fn to handle the drop of an acceptable item */
9
+ acceptDrop: (event: DragEvent) => void;
10
+ });
11
+ get indicator(): boolean;
12
+ resetIndicator: () => void;
13
+ dragover: (event: DragEvent) => void;
14
+ dragleave: (event: DragEvent) => void;
15
+ drop: (event: DragEvent) => void;
16
+ }
package/x/loot/drop.js ADDED
@@ -0,0 +1,32 @@
1
+ import { signal } from "@e280/strata";
2
+ import { dragIsOutsideCurrentTarget } from "./helpers.js";
3
+ /** dropzone that accepts dropped stuff like files */
4
+ export class Drop {
5
+ params;
6
+ #$indicator = signal(false);
7
+ constructor(params) {
8
+ this.params = params;
9
+ }
10
+ get indicator() {
11
+ return this.#$indicator.value;
12
+ }
13
+ resetIndicator = () => {
14
+ this.#$indicator.value = false;
15
+ };
16
+ dragover = (event) => {
17
+ event.preventDefault();
18
+ if (this.params.predicate(event))
19
+ this.#$indicator.value = true;
20
+ };
21
+ dragleave = (event) => {
22
+ if (dragIsOutsideCurrentTarget(event))
23
+ this.#$indicator.value = false;
24
+ };
25
+ drop = (event) => {
26
+ event.preventDefault();
27
+ this.#$indicator.value = false;
28
+ if (this.params.predicate(event))
29
+ this.params.acceptDrop(event);
30
+ };
31
+ }
32
+ //# sourceMappingURL=drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop.js","sourceRoot":"","sources":["../../s/loot/drop.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,0BAA0B,EAAC,MAAM,cAAc,CAAA;AAEvD,qDAAqD;AACrD,MAAM,OAAO,IAAI;IAGI;IAFpB,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAE3B,YAAoB,MAOnB;QAPmB,WAAM,GAAN,MAAM,CAOzB;IAAG,CAAC;IAEL,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAA;IAC9B,CAAC;IAED,cAAc,GAAG,GAAG,EAAE;QACrB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAA;IAC/B,CAAC,CAAA;IAED,QAAQ,GAAG,CAAC,KAAgB,EAAE,EAAE;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAA;IAC/B,CAAC,CAAA;IAED,SAAS,GAAG,CAAC,KAAgB,EAAE,EAAE;QAChC,IAAI,0BAA0B,CAAC,KAAK,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAA;IAChC,CAAC,CAAA;IAED,IAAI,GAAG,CAAC,KAAgB,EAAE,EAAE;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAA;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC,CAAA;CACD"}
@@ -0,0 +1,3 @@
1
+ export declare function dragHasFiles(event: DragEvent): boolean;
2
+ export declare function droppedFiles(event: DragEvent): File[];
3
+ export declare function dragIsOutsideCurrentTarget(event: DragEvent): boolean;
@@ -0,0 +1,21 @@
1
+ export function dragHasFiles(event) {
2
+ return !!(event.dataTransfer &&
3
+ event.dataTransfer.types.includes("Files"));
4
+ }
5
+ export function droppedFiles(event) {
6
+ return event.dataTransfer
7
+ ? Array.from(event.dataTransfer.files)
8
+ : [];
9
+ }
10
+ export function dragIsOutsideCurrentTarget(event) {
11
+ const isCursorOutsideViewport = !event.relatedTarget || (event.clientX === 0 &&
12
+ event.clientY === 0);
13
+ if (isCursorOutsideViewport)
14
+ return true;
15
+ const rect = event.currentTarget.getBoundingClientRect();
16
+ const withinX = event.clientX >= rect.left && event.clientX <= rect.right;
17
+ const withinY = event.clientY >= rect.top && event.clientY <= rect.bottom;
18
+ const cursorOutsideCurrentTarget = !(withinX && withinY);
19
+ return cursorOutsideCurrentTarget;
20
+ }
21
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../s/loot/helpers.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC5C,OAAO,CAAC,CAAC,CACR,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC1C,CAAA;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC5C,OAAO,KAAK,CAAC,YAAY;QACxB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,EAAE,CAAA;AACN,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAgB;IAC1D,MAAM,uBAAuB,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CACvD,KAAK,CAAC,OAAO,KAAK,CAAC;QACnB,KAAK,CAAC,OAAO,KAAK,CAAC,CACnB,CAAA;IAED,IAAI,uBAAuB;QAC1B,OAAO,IAAI,CAAA;IAEZ,MAAM,IAAI,GAAI,KAAK,CAAC,aAAqB,CAAC,qBAAqB,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAA;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAA;IACzE,MAAM,0BAA0B,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAA;IAExD,OAAO,0BAA0B,CAAA;AAClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./drag-drop.js";
2
+ export * from "./drop.js";
3
+ export * from "./helpers.js";
@@ -0,0 +1,4 @@
1
+ export * from "./drag-drop.js";
2
+ export * from "./drop.js";
3
+ export * from "./helpers.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/loot/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}