@corenel/ui-kit 0.1.0 → 0.3.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.
@@ -0,0 +1,2 @@
1
+ export declare function useEscape(active: boolean, onClose: () => void): void;
2
+ //# sourceMappingURL=useEscape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEscape.d.ts","sourceRoot":"","sources":["../useEscape.ts"],"names":[],"mappings":"AAsBA,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAgBpE"}
@@ -0,0 +1,40 @@
1
+ /* Close-on-Escape for drawers/modals/popovers. Overlays register while active;
2
+ * ONE window listener fires only the TOPMOST (most recently activated) handler,
3
+ * so stacked surfaces (a modal above a drawer above a peeked panel) close one
4
+ * per keypress, top first — instead of every listener reacting to the same
5
+ * Escape. An Escape already consumed by an inner control (a completion popup,
6
+ * Monaco, a rename input — anything that called preventDefault before the event
7
+ * reached window) is ignored.
8
+ *
9
+ * This is the ONLY sanctioned Escape-close mechanism: a raw window/document
10
+ * keydown listener next to surfaces using this hook double-closes (all listeners
11
+ * on the same target fire in registration order, regardless of preventDefault). */
12
+ import { useEffect, useRef } from 'react';
13
+ const stack = [];
14
+ let bound = false;
15
+ function onKey(e) {
16
+ if (e.key !== 'Escape' || e.defaultPrevented || stack.length === 0)
17
+ return;
18
+ e.preventDefault();
19
+ stack[stack.length - 1]();
20
+ }
21
+ export function useEscape(active, onClose) {
22
+ const ref = useRef(onClose);
23
+ ref.current = onClose;
24
+ useEffect(() => {
25
+ if (!active)
26
+ return;
27
+ const fn = () => ref.current();
28
+ stack.push(fn);
29
+ if (!bound) {
30
+ window.addEventListener('keydown', onKey);
31
+ bound = true;
32
+ }
33
+ return () => {
34
+ const i = stack.lastIndexOf(fn);
35
+ if (i >= 0)
36
+ stack.splice(i, 1);
37
+ };
38
+ }, [active]);
39
+ }
40
+ //# sourceMappingURL=useEscape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEscape.js","sourceRoot":"","sources":["../useEscape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;mFAUmF;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,KAAK,GAAsB,EAAE,CAAC;AACpC,IAAI,KAAK,GAAG,KAAK,CAAC;AAElB,SAAS,KAAK,CAAC,CAAgB;IAC7B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC3E,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,OAAmB;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,EAAE,GAAG,GAAS,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1C,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,20 +1,29 @@
1
1
  {
2
2
  "name": "@corenel/ui-kit",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Corenel shared UI primitives — icons, theme, token-usage helpers, small UI helpers, monaco colorizer. Consumed by @corenel/web-ui and the prompd app alike.",
6
6
  "exports": {
7
- ".": "./index.ts",
8
- "./*": "./*.ts",
9
- "./icons": "./icons.tsx",
10
- "./host": "./host.tsx"
11
- },
12
- "scripts": {
13
- "build": "tsc -p tsconfig.build.json",
14
- "prepublishOnly": "tsc -p tsconfig.build.json"
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ },
11
+ "./*": {
12
+ "types": "./dist/*.d.ts",
13
+ "default": "./dist/*.js"
14
+ },
15
+ "./icons": {
16
+ "types": "./dist/icons.d.ts",
17
+ "default": "./dist/icons.js"
18
+ },
19
+ "./host": {
20
+ "types": "./dist/host.d.ts",
21
+ "default": "./dist/host.js"
22
+ }
15
23
  },
16
24
  "dependencies": {
17
- "@corenel/protocol": "workspace:*"
25
+ "gpt-tokenizer": "^3.4.0",
26
+ "@corenel/protocol": "0.4.0"
18
27
  },
19
28
  "peerDependencies": {
20
29
  "monaco-editor": "*",
@@ -24,27 +33,12 @@
24
33
  "typescript": "^5.9.3"
25
34
  },
26
35
  "publishConfig": {
27
- "access": "public",
28
- "exports": {
29
- ".": {
30
- "types": "./dist/index.d.ts",
31
- "default": "./dist/index.js"
32
- },
33
- "./*": {
34
- "types": "./dist/*.d.ts",
35
- "default": "./dist/*.js"
36
- },
37
- "./icons": {
38
- "types": "./dist/icons.d.ts",
39
- "default": "./dist/icons.js"
40
- },
41
- "./host": {
42
- "types": "./dist/host.d.ts",
43
- "default": "./dist/host.js"
44
- }
45
- }
36
+ "access": "public"
46
37
  },
47
38
  "files": [
48
39
  "dist"
49
- ]
50
- }
40
+ ],
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.build.json"
43
+ }
44
+ }