@monstermann/signals-modal 0.1.3 → 0.2.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.
@@ -1,6 +1,6 @@
1
1
  import { Signal } from "@monstermann/signals";
2
2
 
3
3
  //#region src/anchor/withAnchorElement.d.ts
4
- declare function withAnchorElement(anchorElement?: HTMLElement): Signal<HTMLElement | null>;
4
+ declare function withAnchorElement(anchorElement?: HTMLElement | null): Signal<HTMLElement | null>;
5
5
  //#endregion
6
6
  export { withAnchorElement };
@@ -1,6 +1,6 @@
1
1
  import { Signal } from "@monstermann/signals";
2
2
 
3
3
  //#region src/floating/withFloatingElement.d.ts
4
- declare function withFloatingElement(anchorElement?: HTMLElement): Signal<HTMLElement | null>;
4
+ declare function withFloatingElement(anchorElement?: HTMLElement | null): Signal<HTMLElement | null>;
5
5
  //#endregion
6
6
  export { withFloatingElement };
package/dist/index.d.ts CHANGED
@@ -23,24 +23,29 @@ import { isTooltip } from "./groups/isTooltip.js";
23
23
  import { modalGroups } from "./groups/modalGroups.js";
24
24
  import { withModalGroups } from "./groups/withModalGroups.js";
25
25
  import { ModalPlacement, ModalPlacementOption, withPlacement } from "./position/withPlacement.js";
26
+ import { getModalPlacement } from "./position/getModalPlacement.js";
26
27
  import { ModalPosition, withPosition } from "./position/withPosition.js";
27
28
  import { getModalPosition } from "./position/getModalPosition.js";
28
29
  import { withBoundary } from "./position/withBoundary.js";
29
30
  import { closeAllModals } from "./status/closeAllModals.js";
31
+ import { closeLastModal } from "./status/closeLastModal.js";
30
32
  import { closeModal } from "./status/closeModal.js";
31
33
  import { getClosedModals } from "./status/getClosedModals.js";
32
34
  import { getClosingModals } from "./status/getClosingModals.js";
33
35
  import { getModalStatus } from "./status/getModalStatus.js";
34
36
  import { getOpenedModals } from "./status/getOpenedModals.js";
35
37
  import { getOpeningModals } from "./status/getOpeningModals.js";
38
+ import { getOpenModals } from "./status/getOpenModals.js";
36
39
  import { getVisibleModals } from "./status/getVisibleModals.js";
37
40
  import { isAnyModalClosed } from "./status/isAnyModalClosed.js";
38
41
  import { isAnyModalClosing } from "./status/isAnyModalClosing.js";
42
+ import { isAnyModalOpen } from "./status/isAnyModalOpen.js";
39
43
  import { isAnyModalOpened } from "./status/isAnyModalOpened.js";
40
44
  import { isAnyModalOpening } from "./status/isAnyModalOpening.js";
41
45
  import { isAnyModalVisible } from "./status/isAnyModalVisible.js";
42
46
  import { isModalClosed } from "./status/isModalClosed.js";
43
47
  import { isModalClosing } from "./status/isModalClosing.js";
48
+ import { isModalOpen } from "./status/isModalOpen.js";
44
49
  import { isModalOpened } from "./status/isModalOpened.js";
45
50
  import { isModalOpening } from "./status/isModalOpening.js";
46
51
  import { isModalVisible } from "./status/isModalVisible.js";
@@ -54,4 +59,4 @@ import { withModalStatus } from "./status/withModalStatus.js";
54
59
  import { closeLastModalOnClickOutside } from "./utils/closeLastModalOnClickOutside.js";
55
60
  import { closeLastModalOnEsc } from "./utils/closeLastModalOnEsc.js";
56
61
  import { syncModalGroupsToBody } from "./utils/syncModalGroupsToBody.js";
57
- export { ModalContext, ModalPlacement, ModalPlacementOption, ModalPosition, ModalStatus, closeAllModals, closeLastModalOnClickOutside, closeLastModalOnEsc, closeModal, createModal, currentModal, getAnchorElement, getAnchorMeasurement, getClosedModals, getClosingModals, getDialogs, getFloatingElement, getFloatingMeasurement, getGroupsForModal, getModalPosition, getModalStatus, getModalsForGroup, getOpenedModals, getOpeningModals, getPopovers, getTooltips, getVisibleModals, isAnyModalClosed, isAnyModalClosing, isAnyModalOpened, isAnyModalOpening, isAnyModalVisible, isDialog, isModalClosed, isModalClosing, isModalInGroup, isModalOpened, isModalOpening, isModalVisible, isPopover, isTooltip, modalGroups, onModalClosed, onModalClosing, onModalDisposed, onModalOpened, onModalOpening, openModal, setAnchorElement, setFloatingElement, setModalStatus, syncModalGroupsToBody, withAnchorElement, withAnchorMeasurement, withBoundary, withFloatingElement, withFloatingMeasurement, withModalGroups, withModalStatus, withMouseAnchor, withPlacement, withPosition };
62
+ export { ModalContext, ModalPlacement, ModalPlacementOption, ModalPosition, ModalStatus, closeAllModals, closeLastModal, closeLastModalOnClickOutside, closeLastModalOnEsc, closeModal, createModal, currentModal, getAnchorElement, getAnchorMeasurement, getClosedModals, getClosingModals, getDialogs, getFloatingElement, getFloatingMeasurement, getGroupsForModal, getModalPlacement, getModalPosition, getModalStatus, getModalsForGroup, getOpenModals, getOpenedModals, getOpeningModals, getPopovers, getTooltips, getVisibleModals, isAnyModalClosed, isAnyModalClosing, isAnyModalOpen, isAnyModalOpened, isAnyModalOpening, isAnyModalVisible, isDialog, isModalClosed, isModalClosing, isModalInGroup, isModalOpen, isModalOpened, isModalOpening, isModalVisible, isPopover, isTooltip, modalGroups, onModalClosed, onModalClosing, onModalDisposed, onModalOpened, onModalOpening, openModal, setAnchorElement, setFloatingElement, setModalStatus, syncModalGroupsToBody, withAnchorElement, withAnchorMeasurement, withBoundary, withFloatingElement, withFloatingMeasurement, withModalGroups, withModalStatus, withMouseAnchor, withPlacement, withPosition };
package/dist/index.js CHANGED
@@ -26,25 +26,30 @@ import { isModalInGroup } from "./groups/isModalInGroup.js";
26
26
  import { isPopover } from "./groups/isPopover.js";
27
27
  import { isTooltip } from "./groups/isTooltip.js";
28
28
  import { withModalGroups } from "./groups/withModalGroups.js";
29
+ import { getModalPlacement } from "./position/getModalPlacement.js";
29
30
  import { getModalPosition } from "./position/getModalPosition.js";
30
31
  import { withBoundary } from "./position/withBoundary.js";
31
32
  import { withPlacement } from "./position/withPlacement.js";
32
33
  import { withPosition } from "./position/withPosition.js";
33
34
  import { closeAllModals } from "./status/closeAllModals.js";
35
+ import { closeLastModal } from "./status/closeLastModal.js";
34
36
  import { getClosedModals } from "./status/getClosedModals.js";
35
37
  import { getClosingModals } from "./status/getClosingModals.js";
36
38
  import { getModalStatus } from "./status/getModalStatus.js";
37
39
  import { getOpenedModals } from "./status/getOpenedModals.js";
38
40
  import { getOpeningModals } from "./status/getOpeningModals.js";
41
+ import { getOpenModals } from "./status/getOpenModals.js";
39
42
  import { getVisibleModals } from "./status/getVisibleModals.js";
40
43
  import { isAnyModalClosed } from "./status/isAnyModalClosed.js";
41
44
  import { isAnyModalClosing } from "./status/isAnyModalClosing.js";
45
+ import { isAnyModalOpen } from "./status/isAnyModalOpen.js";
42
46
  import { isAnyModalOpened } from "./status/isAnyModalOpened.js";
43
47
  import { isAnyModalOpening } from "./status/isAnyModalOpening.js";
44
48
  import { isAnyModalVisible } from "./status/isAnyModalVisible.js";
45
49
  import { isModalClosing } from "./status/isModalClosing.js";
46
50
  import { isModalOpened } from "./status/isModalOpened.js";
47
51
  import { isModalOpening } from "./status/isModalOpening.js";
52
+ import { isModalOpen } from "./status/isModalOpen.js";
48
53
  import { isModalVisible } from "./status/isModalVisible.js";
49
54
  import { onModalClosing } from "./status/onModalClosing.js";
50
55
  import { openModal } from "./status/openModal.js";
@@ -54,4 +59,4 @@ import { closeLastModalOnClickOutside } from "./utils/closeLastModalOnClickOutsi
54
59
  import { closeLastModalOnEsc } from "./utils/closeLastModalOnEsc.js";
55
60
  import { syncModalGroupsToBody } from "./utils/syncModalGroupsToBody.js";
56
61
 
57
- export { closeAllModals, closeLastModalOnClickOutside, closeLastModalOnEsc, closeModal, createModal, currentModal, getAnchorElement, getAnchorMeasurement, getClosedModals, getClosingModals, getDialogs, getFloatingElement, getFloatingMeasurement, getGroupsForModal, getModalPosition, getModalStatus, getModalsForGroup, getOpenedModals, getOpeningModals, getPopovers, getTooltips, getVisibleModals, isAnyModalClosed, isAnyModalClosing, isAnyModalOpened, isAnyModalOpening, isAnyModalVisible, isDialog, isModalClosed, isModalClosing, isModalInGroup, isModalOpened, isModalOpening, isModalVisible, isPopover, isTooltip, modalGroups, onModalClosed, onModalClosing, onModalDisposed, onModalOpened, onModalOpening, openModal, setAnchorElement, setFloatingElement, setModalStatus, syncModalGroupsToBody, withAnchorElement, withAnchorMeasurement, withBoundary, withFloatingElement, withFloatingMeasurement, withModalGroups, withModalStatus, withMouseAnchor, withPlacement, withPosition };
62
+ export { closeAllModals, closeLastModal, closeLastModalOnClickOutside, closeLastModalOnEsc, closeModal, createModal, currentModal, getAnchorElement, getAnchorMeasurement, getClosedModals, getClosingModals, getDialogs, getFloatingElement, getFloatingMeasurement, getGroupsForModal, getModalPlacement, getModalPosition, getModalStatus, getModalsForGroup, getOpenModals, getOpenedModals, getOpeningModals, getPopovers, getTooltips, getVisibleModals, isAnyModalClosed, isAnyModalClosing, isAnyModalOpen, isAnyModalOpened, isAnyModalOpening, isAnyModalVisible, isDialog, isModalClosed, isModalClosing, isModalInGroup, isModalOpen, isModalOpened, isModalOpening, isModalVisible, isPopover, isTooltip, modalGroups, onModalClosed, onModalClosing, onModalDisposed, onModalOpened, onModalOpening, openModal, setAnchorElement, setFloatingElement, setModalStatus, syncModalGroupsToBody, withAnchorElement, withAnchorMeasurement, withBoundary, withFloatingElement, withFloatingMeasurement, withModalGroups, withModalStatus, withMouseAnchor, withPlacement, withPosition };
@@ -0,0 +1,6 @@
1
+ import { ModalPlacement } from "./withPlacement.js";
2
+
3
+ //#region src/position/getModalPlacement.d.ts
4
+ declare function getModalPlacement(key: string): ModalPlacement | undefined;
5
+ //#endregion
6
+ export { getModalPlacement };
@@ -0,0 +1,9 @@
1
+ import { $placements } from "./internals.js";
2
+
3
+ //#region src/position/getModalPlacement.ts
4
+ function getModalPlacement(key) {
5
+ return $placements().get(key);
6
+ }
7
+
8
+ //#endregion
9
+ export { getModalPlacement };
@@ -0,0 +1,4 @@
1
+ //#region src/status/closeLastModal.d.ts
2
+ declare function closeLastModal(): void;
3
+ //#endregion
4
+ export { closeLastModal };
@@ -0,0 +1,11 @@
1
+ import { $openedModals } from "./internals.js";
2
+ import { closeModal } from "./closeModal.js";
3
+
4
+ //#region src/status/closeLastModal.ts
5
+ function closeLastModal() {
6
+ const key = Array.from($openedModals()).at(-1);
7
+ if (key) closeModal(key);
8
+ }
9
+
10
+ //#endregion
11
+ export { closeLastModal };
@@ -0,0 +1,4 @@
1
+ //#region src/status/getOpenModals.d.ts
2
+ declare function getOpenModals(): string[];
3
+ //#endregion
4
+ export { getOpenModals };
@@ -0,0 +1,12 @@
1
+ import { $keysToStatus } from "./internals.js";
2
+
3
+ //#region src/status/getOpenModals.ts
4
+ function getOpenModals() {
5
+ const result = [];
6
+ const map = $keysToStatus();
7
+ for (const [key, $status] of map) if ($status() === "opening" || $status() === "opened") result.push(key);
8
+ return result;
9
+ }
10
+
11
+ //#endregion
12
+ export { getOpenModals };
@@ -4,8 +4,8 @@ import { onModalOpening } from "./onModalOpening.js";
4
4
  import { onModalDisposed } from "../createModal.js";
5
5
  import { INTERNAL, SILENT, signal } from "@monstermann/signals";
6
6
  import { create } from "@monstermann/set/Set/create.js";
7
- import { remove } from "@monstermann/set/Set/remove.js";
8
7
  import { add } from "@monstermann/set/Set/add.js";
8
+ import { remove } from "@monstermann/set/Set/remove.js";
9
9
 
10
10
  //#region src/status/internals.ts
11
11
  const path = "@signals-modal/status/internals.ts";
@@ -21,10 +21,10 @@ const meta1 = {
21
21
  };
22
22
  const $keysToStatus = signal(/* @__PURE__ */ new Map(), SILENT, meta);
23
23
  const $openedModals = signal(create(), INTERNAL, meta1);
24
- onModalOpening((key) => $openedModals((m) => remove(m, key)));
25
- onModalOpened((key) => $openedModals((m) => remove(m, key)));
26
- onModalClosed((key) => $openedModals((m) => add(m, key)));
27
- onModalDisposed((key) => $openedModals((m) => add(m, key)));
24
+ onModalOpening((key) => $openedModals((m) => add(m, key)));
25
+ onModalOpened((key) => $openedModals((m) => add(m, key)));
26
+ onModalClosed((key) => $openedModals((m) => remove(m, key)));
27
+ onModalDisposed((key) => $openedModals((m) => remove(m, key)));
28
28
 
29
29
  //#endregion
30
30
  export { $keysToStatus, $openedModals };
@@ -0,0 +1,4 @@
1
+ //#region src/status/isAnyModalOpen.d.ts
2
+ declare function isAnyModalOpen(): boolean;
3
+ //#endregion
4
+ export { isAnyModalOpen };
@@ -0,0 +1,9 @@
1
+ import { getOpenModals } from "./getOpenModals.js";
2
+
3
+ //#region src/status/isAnyModalOpen.ts
4
+ function isAnyModalOpen() {
5
+ return getOpenModals().length > 0;
6
+ }
7
+
8
+ //#endregion
9
+ export { isAnyModalOpen };
@@ -0,0 +1,4 @@
1
+ //#region src/status/isModalOpen.d.ts
2
+ declare function isModalOpen(key: string): boolean;
3
+ //#endregion
4
+ export { isModalOpen };
@@ -0,0 +1,10 @@
1
+ import { isModalOpened } from "./isModalOpened.js";
2
+ import { isModalOpening } from "./isModalOpening.js";
3
+
4
+ //#region src/status/isModalOpen.ts
5
+ function isModalOpen(key) {
6
+ return isModalOpening(key) || isModalOpened(key);
7
+ }
8
+
9
+ //#endregion
10
+ export { isModalOpen };
@@ -1,6 +1,6 @@
1
- import * as _monstermann_signals1 from "@monstermann/signals";
1
+ import * as _monstermann_signals0 from "@monstermann/signals";
2
2
 
3
3
  //#region src/status/onModalClosed.d.ts
4
- declare const onModalClosed: _monstermann_signals1.Emitter<string>;
4
+ declare const onModalClosed: _monstermann_signals0.Emitter<string>;
5
5
  //#endregion
6
6
  export { onModalClosed };
@@ -1,6 +1,6 @@
1
- import * as _monstermann_signals0 from "@monstermann/signals";
1
+ import * as _monstermann_signals1 from "@monstermann/signals";
2
2
 
3
3
  //#region src/status/onModalClosing.d.ts
4
- declare const onModalClosing: _monstermann_signals0.Emitter<string>;
4
+ declare const onModalClosing: _monstermann_signals1.Emitter<string>;
5
5
  //#endregion
6
6
  export { onModalClosing };
@@ -1,7 +1,12 @@
1
1
  import { ModalStatus } from "./types.js";
2
- import { Signal } from "@monstermann/signals";
2
+ import { Memo, Signal } from "@monstermann/signals";
3
3
 
4
4
  //#region src/status/withModalStatus.d.ts
5
- declare function withModalStatus(status?: ModalStatus): Signal<ModalStatus>;
5
+ declare function withModalStatus(status?: ModalStatus): {
6
+ $isOpen: Memo<boolean>;
7
+ $status: Signal<ModalStatus>;
8
+ close: () => void;
9
+ open: () => void;
10
+ };
6
11
  //#endregion
7
12
  export { withModalStatus };
@@ -2,9 +2,12 @@ import { onModalClosed } from "./onModalClosed.js";
2
2
  import { onModalOpened } from "./onModalOpened.js";
3
3
  import { onModalOpening } from "./onModalOpening.js";
4
4
  import { $keysToStatus } from "./internals.js";
5
+ import { closeModal } from "./closeModal.js";
5
6
  import { currentModal } from "../createModal.js";
7
+ import { isModalOpen } from "./isModalOpen.js";
6
8
  import { onModalClosing } from "./onModalClosing.js";
7
- import { INTERNAL, signal, watch } from "@monstermann/signals";
9
+ import { openModal } from "./openModal.js";
10
+ import { INTERNAL, memo, signal, watch } from "@monstermann/signals";
8
11
  import { set } from "@monstermann/map/Map/set.js";
9
12
  import { remove } from "@monstermann/map/Map/remove.js";
10
13
 
@@ -12,14 +15,19 @@ import { remove } from "@monstermann/map/Map/remove.js";
12
15
  const path = "@signals-modal/status/withModalStatus.ts";
13
16
  const meta = {
14
17
  path,
15
- line: 15,
18
+ line: 23,
16
19
  name: "withModalStatus.$status"
17
20
  };
18
21
  const meta1 = {
19
22
  path,
20
- line: 20,
23
+ line: 28,
21
24
  name: "withModalStatus"
22
25
  };
26
+ const meta2 = {
27
+ path,
28
+ line: 36,
29
+ name: "withModalStatus.$isOpen"
30
+ };
23
31
  function withModalStatus(status = "closed") {
24
32
  const modal = currentModal();
25
33
  const $status = signal(status, INTERNAL, meta);
@@ -31,7 +39,12 @@ function withModalStatus(status = "closed") {
31
39
  else if (status$1 === "opening") onModalOpening(modal.key);
32
40
  else if (status$1 === "opened") onModalOpened(modal.key);
33
41
  }, INTERNAL, meta1));
34
- return $status;
42
+ return {
43
+ $isOpen: memo(() => isModalOpen(modal.key), void 0, meta2),
44
+ $status,
45
+ close: () => closeModal(modal.key),
46
+ open: () => openModal(modal.key)
47
+ };
35
48
  }
36
49
 
37
50
  //#endregion
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@monstermann/signals-modal",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.2.1",
5
5
  "description": "Composable modal management.",
6
6
  "author": "Michael Ostermann <michaelostermann@me.com>",
7
7
  "license": "MIT",