@arcanewizards/sigil 0.1.6 → 0.1.8

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,5 +1,8 @@
1
1
  /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
2
  @layer properties;
3
+ .fixed {
4
+ position: fixed;
5
+ }
3
6
  .relative {
4
7
  position: relative;
5
8
  }
@@ -142,6 +145,9 @@
142
145
  padding: var(--sigil-control-gap);
143
146
  font-size: var(--sigil-control-font-size);
144
147
  }
148
+ .block {
149
+ display: block;
150
+ }
145
151
  .contents {
146
152
  display: contents;
147
153
  }
@@ -18,7 +18,7 @@ type SigilUsageColorUsage = {
18
18
  gradientLight: string;
19
19
  gradientDark: string;
20
20
  };
21
- declare const sigilColorUsage: (color: SigilUsageColor) => SigilUsageColorUsage;
21
+ declare const sigilColorUsage: (color: SigilUsageColor | "hint") => SigilUsageColorUsage;
22
22
  declare const cssSigilColorUsageVariables: (prefix: string, usage: SigilUsageColorUsage) => CSSProperties;
23
23
  declare const cssHintColorVariables: (color: SigilColor) => CSSProperties;
24
24
  declare const cssVariables: (variables: Partial<Record<`--${string}`, string | number>>) => CSSProperties;
@@ -18,7 +18,7 @@ type SigilUsageColorUsage = {
18
18
  gradientLight: string;
19
19
  gradientDark: string;
20
20
  };
21
- declare const sigilColorUsage: (color: SigilUsageColor) => SigilUsageColorUsage;
21
+ declare const sigilColorUsage: (color: SigilUsageColor | "hint") => SigilUsageColorUsage;
22
22
  declare const cssSigilColorUsageVariables: (prefix: string, usage: SigilUsageColorUsage) => CSSProperties;
23
23
  declare const cssHintColorVariables: (color: SigilColor) => CSSProperties;
24
24
  declare const cssVariables: (variables: Partial<Record<`--${string}`, string | number>>) => CSSProperties;
package/dist/frontend.cjs CHANGED
@@ -105,6 +105,20 @@ var createBrowserMediaSession = () => {
105
105
  // src/frontend/browser-context.tsx
106
106
  var _jsxruntime = require('react/jsx-runtime');
107
107
  var createDefaultBrowserContext = (browser) => {
108
+ const closeListeners = /* @__PURE__ */ new Set();
109
+ window.addEventListener("beforeunload", (e) => {
110
+ let confirm = false;
111
+ for (const listener of closeListeners) {
112
+ if (listener().action === "confirm") {
113
+ confirm = true;
114
+ }
115
+ }
116
+ if (confirm) {
117
+ e.preventDefault();
118
+ e.returnValue = "";
119
+ return;
120
+ }
121
+ });
108
122
  const defaults = {
109
123
  appListenerChangesHandledExternally: false,
110
124
  openExternalLink: (url) => {
@@ -115,8 +129,8 @@ var createDefaultBrowserContext = (browser) => {
115
129
  },
116
130
  selectDirectory: null,
117
131
  openDevTools: null,
118
- confirmClose: () => {
119
- },
132
+ addCloseListener: (listener) => closeListeners.add(listener),
133
+ removeCloseListener: (listener) => closeListeners.delete(listener),
120
134
  mediaSession: createBrowserMediaSession()
121
135
  };
122
136
  return {
@@ -50,13 +50,29 @@ type NewWindowOptions = {
50
50
  */
51
51
  mode?: string;
52
52
  };
53
+ type BrowserCloseListenerAction = {
54
+ action: 'allow';
55
+ } | {
56
+ action: 'confirm';
57
+ confirmation: string;
58
+ };
59
+ /**
60
+ * A listener that can be registered to listen for close events,
61
+ * and prevent them if needed.
62
+ *
63
+ * Note that in browser environments,
64
+ * preventing close will always display the same confirmation message that a user
65
+ * can then choose to proceed with or not.
66
+ */
67
+ type BrowserCloseListener = () => BrowserCloseListenerAction;
53
68
  type BaseBrowserContext = {
54
69
  appListenerChangesHandledExternally?: boolean;
55
70
  openExternalLink: (url: string) => void;
56
71
  openNewWidow: (url: string, options?: NewWindowOptions) => void;
57
72
  selectDirectory: (() => Promise<string | null>) | null;
58
73
  openDevTools: (() => Promise<null>) | null;
59
- confirmClose: (message: string) => void;
74
+ addCloseListener: (listener: BrowserCloseListener) => void;
75
+ removeCloseListener: (listener: BrowserCloseListener) => void;
60
76
  mediaSession: MediaSessionControl;
61
77
  };
62
78
  declare const createDefaultBrowserContext: <TBrowserContext extends BaseBrowserContext = BaseBrowserContext>(browser?: Partial<TBrowserContext> | null) => TBrowserContext;
@@ -88,4 +104,4 @@ declare const startSigilFrontend: <TBrowserContext extends BaseBrowserContext>({
88
104
 
89
105
  declare const createBrowserMediaSession: () => MediaSessionControl;
90
106
 
91
- export { type BaseBrowserContext, BrowserContext, BrowserContextProvider, Debugger, type MediaMetadata, type MediaPlayState, type MediaSessionAction, type MediaSessionControl, type MediaSessionHandler, type NewWindowOptions, AppRoot as SigilAppRoot, SigilAppRootComponent, type StartSigilFrontendOptions, createBrowserMediaSession, createDefaultBrowserContext, createSigilFrontendRenderer, startSigilFrontend, useBrowserContext };
107
+ export { type BaseBrowserContext, type BrowserCloseListener, type BrowserCloseListenerAction, BrowserContext, BrowserContextProvider, Debugger, type MediaMetadata, type MediaPlayState, type MediaSessionAction, type MediaSessionControl, type MediaSessionHandler, type NewWindowOptions, AppRoot as SigilAppRoot, SigilAppRootComponent, type StartSigilFrontendOptions, createBrowserMediaSession, createDefaultBrowserContext, createSigilFrontendRenderer, startSigilFrontend, useBrowserContext };
@@ -50,13 +50,29 @@ type NewWindowOptions = {
50
50
  */
51
51
  mode?: string;
52
52
  };
53
+ type BrowserCloseListenerAction = {
54
+ action: 'allow';
55
+ } | {
56
+ action: 'confirm';
57
+ confirmation: string;
58
+ };
59
+ /**
60
+ * A listener that can be registered to listen for close events,
61
+ * and prevent them if needed.
62
+ *
63
+ * Note that in browser environments,
64
+ * preventing close will always display the same confirmation message that a user
65
+ * can then choose to proceed with or not.
66
+ */
67
+ type BrowserCloseListener = () => BrowserCloseListenerAction;
53
68
  type BaseBrowserContext = {
54
69
  appListenerChangesHandledExternally?: boolean;
55
70
  openExternalLink: (url: string) => void;
56
71
  openNewWidow: (url: string, options?: NewWindowOptions) => void;
57
72
  selectDirectory: (() => Promise<string | null>) | null;
58
73
  openDevTools: (() => Promise<null>) | null;
59
- confirmClose: (message: string) => void;
74
+ addCloseListener: (listener: BrowserCloseListener) => void;
75
+ removeCloseListener: (listener: BrowserCloseListener) => void;
60
76
  mediaSession: MediaSessionControl;
61
77
  };
62
78
  declare const createDefaultBrowserContext: <TBrowserContext extends BaseBrowserContext = BaseBrowserContext>(browser?: Partial<TBrowserContext> | null) => TBrowserContext;
@@ -88,4 +104,4 @@ declare const startSigilFrontend: <TBrowserContext extends BaseBrowserContext>({
88
104
 
89
105
  declare const createBrowserMediaSession: () => MediaSessionControl;
90
106
 
91
- export { type BaseBrowserContext, BrowserContext, BrowserContextProvider, Debugger, type MediaMetadata, type MediaPlayState, type MediaSessionAction, type MediaSessionControl, type MediaSessionHandler, type NewWindowOptions, AppRoot as SigilAppRoot, SigilAppRootComponent, type StartSigilFrontendOptions, createBrowserMediaSession, createDefaultBrowserContext, createSigilFrontendRenderer, startSigilFrontend, useBrowserContext };
107
+ export { type BaseBrowserContext, type BrowserCloseListener, type BrowserCloseListenerAction, BrowserContext, BrowserContextProvider, Debugger, type MediaMetadata, type MediaPlayState, type MediaSessionAction, type MediaSessionControl, type MediaSessionHandler, type NewWindowOptions, AppRoot as SigilAppRoot, SigilAppRootComponent, type StartSigilFrontendOptions, createBrowserMediaSession, createDefaultBrowserContext, createSigilFrontendRenderer, startSigilFrontend, useBrowserContext };
package/dist/frontend.js CHANGED
@@ -105,6 +105,20 @@ var createBrowserMediaSession = () => {
105
105
  // src/frontend/browser-context.tsx
106
106
  import { jsx } from "react/jsx-runtime";
107
107
  var createDefaultBrowserContext = (browser) => {
108
+ const closeListeners = /* @__PURE__ */ new Set();
109
+ window.addEventListener("beforeunload", (e) => {
110
+ let confirm = false;
111
+ for (const listener of closeListeners) {
112
+ if (listener().action === "confirm") {
113
+ confirm = true;
114
+ }
115
+ }
116
+ if (confirm) {
117
+ e.preventDefault();
118
+ e.returnValue = "";
119
+ return;
120
+ }
121
+ });
108
122
  const defaults = {
109
123
  appListenerChangesHandledExternally: false,
110
124
  openExternalLink: (url) => {
@@ -115,8 +129,8 @@ var createDefaultBrowserContext = (browser) => {
115
129
  },
116
130
  selectDirectory: null,
117
131
  openDevTools: null,
118
- confirmClose: () => {
119
- },
132
+ addCloseListener: (listener) => closeListeners.add(listener),
133
+ removeCloseListener: (listener) => closeListeners.delete(listener),
120
134
  mediaSession: createBrowserMediaSession()
121
135
  };
122
136
  return {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@arcanewizards/sigil",
3
3
  "description": "Application framework for A/V applications, built on-top of arcanejs",
4
- "version": "0.1.6",
4
+ "version": "0.1.8",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -129,12 +129,13 @@
129
129
  "tailwindcss": "^4.1.13",
130
130
  "tsup": "^8.1.0",
131
131
  "typescript": "^5.7.3",
132
- "@arcanewizards/eslint-config": "^0.0.0",
133
- "@arcanewizards/typescript-config": "^0.0.0"
132
+ "@arcanewizards/typescript-config": "^0.0.0",
133
+ "@arcanewizards/eslint-config": "^0.0.0"
134
134
  },
135
135
  "scripts": {
136
- "build": "rm -rf dist && tsup && pnpm build:styles && check-export-map",
136
+ "build": "pnpm clean && tsup && pnpm build:styles && check-export-map",
137
137
  "build:styles": "tailwindcss -i ./src/frontend/styles/sigil.css -o ./dist/frontend/styles/sigil.css && cp ./src/frontend/styles/theme.css ./dist/frontend/styles/theme.css && cp ./src/frontend/styles/base.css ./dist/frontend/styles/base.css",
138
+ "clean": "rm -rf dist",
138
139
  "check:types": "tsc --noEmit",
139
140
  "format:fix": "cd .. && pnpm format:fix",
140
141
  "lint": "eslint . --max-warnings 0",