@kabel-project/kabel 1.0.7 → 1.0.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.
Files changed (273) hide show
  1. package/dist/comment-renderer/renderer.d.ts +32 -0
  2. package/dist/comment-renderer/renderer.d.ts.map +1 -0
  3. package/dist/controllers/base.d.ts +39 -0
  4. package/dist/controllers/base.d.ts.map +1 -0
  5. package/dist/controllers/wasd.d.ts +33 -0
  6. package/dist/controllers/wasd.d.ts.map +1 -0
  7. package/dist/events/comment-drag-handle.d.ts +2 -0
  8. package/dist/events/comment-drag-handle.d.ts.map +1 -0
  9. package/dist/events/comment-input.d.ts +4 -0
  10. package/dist/events/comment-input.d.ts.map +1 -0
  11. package/dist/events/connection-line.d.ts +2 -0
  12. package/dist/events/connection-line.d.ts.map +1 -0
  13. package/dist/events/connector.d.ts +2 -0
  14. package/dist/events/connector.d.ts.map +1 -0
  15. package/dist/events/draggable.d.ts +2 -0
  16. package/dist/events/draggable.d.ts.map +1 -0
  17. package/{events/events.ts → dist/events/events.d.ts} +8 -7
  18. package/dist/events/events.d.ts.map +1 -0
  19. package/dist/events/input-box.d.ts +2 -0
  20. package/dist/events/input-box.d.ts.map +1 -0
  21. package/dist/events/node-x-btn.d.ts +2 -0
  22. package/dist/events/node-x-btn.d.ts.map +1 -0
  23. package/dist/kabel.js +2 -0
  24. package/dist/kabel.js.map +1 -0
  25. package/dist/renderers/apollo/apollo.d.ts +12 -0
  26. package/dist/renderers/apollo/apollo.d.ts.map +1 -0
  27. package/dist/renderers/apollo/constants.d.ts +21 -0
  28. package/dist/renderers/apollo/constants.d.ts.map +1 -0
  29. package/dist/renderers/apollo/renderer.d.ts +97 -0
  30. package/dist/renderers/apollo/renderer.d.ts.map +1 -0
  31. package/{renderers/atlas/atlas.ts → dist/renderers/atlas/atlas.d.ts} +6 -15
  32. package/dist/renderers/atlas/atlas.d.ts.map +1 -0
  33. package/dist/renderers/constants.d.ts +51 -0
  34. package/dist/renderers/constants.d.ts.map +1 -0
  35. package/dist/renderers/renderer.d.ts +470 -0
  36. package/dist/renderers/renderer.d.ts.map +1 -0
  37. package/dist/renderers/representer-node.d.ts +27 -0
  38. package/dist/renderers/representer-node.d.ts.map +1 -0
  39. package/dist/renderers/representer.d.ts +13 -0
  40. package/dist/renderers/representer.d.ts.map +1 -0
  41. package/dist/src/category.d.ts +48 -0
  42. package/dist/src/category.d.ts.map +1 -0
  43. package/{src/colors.ts → dist/src/colors.d.ts} +21 -20
  44. package/dist/src/colors.d.ts.map +1 -0
  45. package/dist/src/comment.d.ts +88 -0
  46. package/dist/src/comment.d.ts.map +1 -0
  47. package/dist/src/connection.d.ts +52 -0
  48. package/dist/src/connection.d.ts.map +1 -0
  49. package/dist/src/context-menu.d.ts +76 -0
  50. package/dist/src/context-menu.d.ts.map +1 -0
  51. package/dist/src/coordinates.d.ts +52 -0
  52. package/dist/src/coordinates.d.ts.map +1 -0
  53. package/dist/src/core.d.ts +153 -0
  54. package/dist/src/core.d.ts.map +1 -0
  55. package/dist/src/ctx-menu-registry.d.ts +22 -0
  56. package/dist/src/ctx-menu-registry.d.ts.map +1 -0
  57. package/dist/src/dropdown-menu.d.ts +87 -0
  58. package/dist/src/dropdown-menu.d.ts.map +1 -0
  59. package/dist/src/field.d.ts +305 -0
  60. package/dist/src/field.d.ts.map +1 -0
  61. package/dist/src/flyout.d.ts +41 -0
  62. package/dist/src/flyout.d.ts.map +1 -0
  63. package/dist/src/fonts-manager.d.ts +6 -0
  64. package/dist/src/fonts-manager.d.ts.map +1 -0
  65. package/dist/src/grid.d.ts +60 -0
  66. package/dist/src/grid.d.ts.map +1 -0
  67. package/dist/src/headless-node.d.ts +11 -0
  68. package/dist/src/headless-node.d.ts.map +1 -0
  69. package/dist/src/index.d.ts +38 -0
  70. package/dist/src/index.d.ts.map +1 -0
  71. package/dist/src/inject-headless.d.ts +4 -0
  72. package/dist/src/inject-headless.d.ts.map +1 -0
  73. package/{src/inject.ts → dist/src/inject.d.ts} +142 -213
  74. package/dist/src/inject.d.ts.map +1 -0
  75. package/{src/main-workspace.ts → dist/src/main-workspace.d.ts} +31 -51
  76. package/dist/src/main-workspace.d.ts.map +1 -0
  77. package/dist/src/mutator.d.ts +2 -0
  78. package/dist/src/mutator.d.ts.map +1 -0
  79. package/{src/node-types.ts → dist/src/node-types.d.ts} +26 -27
  80. package/dist/src/node-types.d.ts.map +1 -0
  81. package/dist/src/nodesvg.d.ts +266 -0
  82. package/dist/src/nodesvg.d.ts.map +1 -0
  83. package/{src/prototypes.ts → dist/src/prototypes.d.ts} +10 -9
  84. package/dist/src/prototypes.d.ts.map +1 -0
  85. package/{src/renderer-map.ts → dist/src/renderer-map.d.ts} +51 -86
  86. package/dist/src/renderer-map.d.ts.map +1 -0
  87. package/dist/src/toolbox.d.ts +51 -0
  88. package/dist/src/toolbox.d.ts.map +1 -0
  89. package/{src/types.ts → dist/src/types.d.ts} +159 -205
  90. package/dist/src/types.d.ts.map +1 -0
  91. package/dist/src/undo-redo.d.ts +15 -0
  92. package/dist/src/undo-redo.d.ts.map +1 -0
  93. package/{src/visual-types.ts → dist/src/visual-types.d.ts} +34 -29
  94. package/dist/src/visual-types.d.ts.map +1 -0
  95. package/dist/src/widget-prototypes.d.ts +10 -0
  96. package/dist/src/widget-prototypes.d.ts.map +1 -0
  97. package/dist/src/widget.d.ts +62 -0
  98. package/dist/src/widget.d.ts.map +1 -0
  99. package/{src/workspace-coords.ts → dist/src/workspace-coords.d.ts} +10 -14
  100. package/dist/src/workspace-coords.d.ts.map +1 -0
  101. package/dist/src/workspace-svg.d.ts +371 -0
  102. package/dist/src/workspace-svg.d.ts.map +1 -0
  103. package/dist/src/workspace.d.ts +50 -0
  104. package/dist/src/workspace.d.ts.map +1 -0
  105. package/dist/themes/dark.d.ts +4 -0
  106. package/dist/themes/dark.d.ts.map +1 -0
  107. package/dist/themes/default.d.ts +4 -0
  108. package/dist/themes/default.d.ts.map +1 -0
  109. package/dist/themes/themes.d.ts +6 -0
  110. package/dist/themes/themes.d.ts.map +1 -0
  111. package/dist/util/emitter.d.ts +10 -0
  112. package/dist/util/emitter.d.ts.map +1 -0
  113. package/dist/util/env.d.ts +7 -0
  114. package/dist/util/env.d.ts.map +1 -0
  115. package/{util/escape-html.ts → dist/util/escape-html.d.ts} +16 -22
  116. package/dist/util/escape-html.d.ts.map +1 -0
  117. package/dist/util/eventer.d.ts +29 -0
  118. package/dist/util/eventer.d.ts.map +1 -0
  119. package/dist/util/has-prop.d.ts +2 -0
  120. package/dist/util/has-prop.d.ts.map +1 -0
  121. package/dist/util/parse-color.d.ts +6 -0
  122. package/dist/util/parse-color.d.ts.map +1 -0
  123. package/dist/util/path.d.ts +25 -0
  124. package/dist/util/path.d.ts.map +1 -0
  125. package/dist/util/styler.d.ts +12 -0
  126. package/dist/util/styler.d.ts.map +1 -0
  127. package/dist/util/uid.d.ts +42 -0
  128. package/dist/util/uid.d.ts.map +1 -0
  129. package/{util/unescape-html.ts → dist/util/unescape-html.d.ts} +16 -22
  130. package/dist/util/unescape-html.d.ts.map +1 -0
  131. package/dist/util/user-state.d.ts +37 -0
  132. package/dist/util/user-state.d.ts.map +1 -0
  133. package/{util/wait-anim-frames.ts → dist/util/wait-anim-frames.d.ts} +11 -24
  134. package/dist/util/wait-anim-frames.d.ts.map +1 -0
  135. package/dist/util/window-listeners.d.ts +8 -0
  136. package/dist/util/window-listeners.d.ts.map +1 -0
  137. package/package.json +4 -1
  138. package/(1.0.7)kabel.md +0 -18
  139. package/_READ_ME_MEDIA_/documentation/docs.md +0 -293
  140. package/_READ_ME_MEDIA_/workspace.png +0 -0
  141. package/comment-renderer/renderer.ts +0 -228
  142. package/controllers/base.ts +0 -186
  143. package/controllers/wasd.ts +0 -132
  144. package/docs/README.md +0 -98
  145. package/docs/_media/docs.md +0 -289
  146. package/docs/_media/workspace.png +0 -0
  147. package/docs/classes/CommentModel.md +0 -271
  148. package/docs/classes/CommentRenderer.md +0 -457
  149. package/docs/classes/ConnectableField.md +0 -597
  150. package/docs/classes/Connection.md +0 -191
  151. package/docs/classes/ContextMenuHTML.md +0 -163
  152. package/docs/classes/Coordinates.md +0 -187
  153. package/docs/classes/DropdownContainer.md +0 -300
  154. package/docs/classes/DummyField.md +0 -393
  155. package/docs/classes/Eventer.md +0 -185
  156. package/docs/classes/Field.md +0 -461
  157. package/docs/classes/InjectMsg.md +0 -85
  158. package/docs/classes/NodeSvg.md +0 -1011
  159. package/docs/classes/NumberField.md +0 -559
  160. package/docs/classes/OptConnectField.md +0 -624
  161. package/docs/classes/Renderer.md +0 -1636
  162. package/docs/classes/RendererConstants.md +0 -343
  163. package/docs/classes/Representer.md +0 -95
  164. package/docs/classes/RepresenterNode.md +0 -175
  165. package/docs/classes/TextField.md +0 -559
  166. package/docs/classes/Toolbox.md +0 -172
  167. package/docs/classes/WASDController.md +0 -616
  168. package/docs/classes/Widget.md +0 -195
  169. package/docs/classes/WorkspaceController.md +0 -385
  170. package/docs/classes/WorkspaceCoords.md +0 -218
  171. package/docs/classes/WorkspaceSvg.md +0 -1380
  172. package/docs/functions/clearMainWorkspace.md +0 -20
  173. package/docs/functions/getMainWorkspace.md +0 -19
  174. package/docs/functions/inject.md +0 -35
  175. package/docs/functions/setMainWorkspace.md +0 -28
  176. package/docs/globals.md +0 -95
  177. package/docs/interfaces/ColorStyle.md +0 -43
  178. package/docs/interfaces/ConnectorToFrom.md +0 -57
  179. package/docs/interfaces/DrawState.md +0 -81
  180. package/docs/interfaces/FieldConnectionData.md +0 -25
  181. package/docs/interfaces/FieldOptions.md +0 -63
  182. package/docs/interfaces/FieldRawBoxData.md +0 -25
  183. package/docs/interfaces/FieldVisualInfo.md +0 -65
  184. package/docs/interfaces/GridOptions.md +0 -61
  185. package/docs/interfaces/InjectOptions.md +0 -133
  186. package/docs/interfaces/InputFieldJson.md +0 -50
  187. package/docs/interfaces/KabelCommentRendering.md +0 -31
  188. package/docs/interfaces/KabelInterface.md +0 -469
  189. package/docs/interfaces/KabelNodeRendering.md +0 -77
  190. package/docs/interfaces/KabelUIX.md +0 -105
  191. package/docs/interfaces/KabelUtils.md +0 -215
  192. package/docs/interfaces/NodeEvents.md +0 -42
  193. package/docs/interfaces/NodeJson.md +0 -104
  194. package/docs/interfaces/NodePrototype.md +0 -82
  195. package/docs/interfaces/RegisteredEl.md +0 -53
  196. package/docs/interfaces/SerializedNode.md +0 -128
  197. package/docs/interfaces/TblxCategoryStruct.md +0 -41
  198. package/docs/interfaces/TblxFieldStruct.md +0 -28
  199. package/docs/interfaces/TblxNodeStruct.md +0 -35
  200. package/docs/interfaces/WidgetOptions.md +0 -115
  201. package/docs/interfaces/WidgetPrototypeList.md +0 -15
  202. package/docs/type-aliases/AnyField.md +0 -13
  203. package/docs/type-aliases/AnyFieldCls.md +0 -13
  204. package/docs/type-aliases/Color.md +0 -13
  205. package/docs/type-aliases/Connectable.md +0 -13
  206. package/docs/type-aliases/EventArgs.md +0 -11
  207. package/docs/type-aliases/EventSetupFn.md +0 -25
  208. package/docs/type-aliases/Hex.md +0 -13
  209. package/docs/type-aliases/RGBObject.md +0 -37
  210. package/docs/type-aliases/RGBString.md +0 -13
  211. package/docs/type-aliases/RGBTuple.md +0 -13
  212. package/docs/type-aliases/TblxObjStruct.md +0 -52
  213. package/docs/variables/CategoryColors.md +0 -29
  214. package/docs/variables/FieldMap.md +0 -41
  215. package/docs/variables/NodePrototypes.md +0 -18
  216. package/docs/variables/default.md +0 -11
  217. package/events/comment-drag-handle.ts +0 -61
  218. package/events/comment-input.ts +0 -291
  219. package/events/connection-line.ts +0 -68
  220. package/events/connector.ts +0 -116
  221. package/events/draggable.ts +0 -119
  222. package/events/input-box.ts +0 -213
  223. package/events/node-x-btn.ts +0 -25
  224. package/index.d.ts +0 -4
  225. package/renderers/apollo/apollo.ts +0 -21
  226. package/renderers/apollo/constants.ts +0 -40
  227. package/renderers/apollo/renderer.ts +0 -331
  228. package/renderers/constants.ts +0 -87
  229. package/renderers/renderer.ts +0 -1288
  230. package/renderers/representer-node.ts +0 -52
  231. package/renderers/representer.ts +0 -25
  232. package/src/category.ts +0 -107
  233. package/src/comment.ts +0 -142
  234. package/src/connection.ts +0 -114
  235. package/src/context-menu.ts +0 -194
  236. package/src/coordinates.ts +0 -74
  237. package/src/core.ts +0 -202
  238. package/src/ctx-menu-registry.ts +0 -143
  239. package/src/dropdown-menu.ts +0 -215
  240. package/src/field.ts +0 -595
  241. package/src/flyout.ts +0 -165
  242. package/src/fonts-manager.ts +0 -38
  243. package/src/grid.ts +0 -162
  244. package/src/headless-node.ts +0 -27
  245. package/src/index.ts +0 -115
  246. package/src/inject-headless.ts +0 -18
  247. package/src/mutator.ts +0 -40
  248. package/src/nodesvg.ts +0 -756
  249. package/src/styles.css +0 -224
  250. package/src/toolbox.ts +0 -125
  251. package/src/undo-redo.ts +0 -87
  252. package/src/widget-prototypes.ts +0 -11
  253. package/src/widget.ts +0 -139
  254. package/src/workspace-svg.ts +0 -736
  255. package/src/workspace.ts +0 -155
  256. package/test-server.js +0 -61
  257. package/themes/dark.ts +0 -32
  258. package/themes/default.ts +0 -28
  259. package/themes/themes.ts +0 -9
  260. package/tsconfig.json +0 -25
  261. package/typedoc.json +0 -10
  262. package/util/emitter.ts +0 -33
  263. package/util/env.ts +0 -11
  264. package/util/eventer.ts +0 -108
  265. package/util/has-prop.ts +0 -4
  266. package/util/parse-color.ts +0 -42
  267. package/util/path.ts +0 -99
  268. package/util/styler.ts +0 -41
  269. package/util/uid.ts +0 -184
  270. package/util/user-state.ts +0 -68
  271. package/util/window-listeners.ts +0 -62
  272. package/webpack.config.js +0 -80
  273. /package/{docs/_media → dist}/index.html +0 -0
package/util/uid.ts DELETED
@@ -1,184 +0,0 @@
1
- // uid.ts
2
-
3
- /**
4
- * Strategy used to generate UIDs.
5
- */
6
- export type UIDStrategy = "uuidv4" | "ulid" | "nanoid" | "short";
7
-
8
- export interface UIDOptions {
9
- /** For "nanoid": length of the id (default 21) */
10
- size?: number;
11
- /** For "nanoid": custom alphabet (default URL-safe) */
12
- alphabet?: string;
13
- }
14
-
15
- /** Web Crypto shim (browser + Node 16+) */
16
- const cryptoAPI: Crypto | null =
17
- (typeof globalThis !== "undefined" && (globalThis as any).crypto) || null;
18
-
19
- /**
20
- * Returns a Uint8Array of random bytes.
21
- * Uses Web Crypto if available; falls back to Math.random otherwise (not cryptographically secure).
22
- *
23
- * @param {number} len - Number of random bytes to generate.
24
- * @returns {Uint8Array} Random bytes array.
25
- */
26
- function randBytes(len: number): Uint8Array {
27
- if (cryptoAPI?.getRandomValues) {
28
- const buf = new Uint8Array(len);
29
- cryptoAPI.getRandomValues(buf);
30
- return buf;
31
- }
32
- // Last resort (very old envs). Not cryptographically strong.
33
- const buf = new Uint8Array(len);
34
- for (let i = 0; i < len; i++) buf[i] = Math.floor(Math.random() * 256);
35
- return buf;
36
- }
37
-
38
- /**
39
- * Generates an RFC4122-compliant UUID v4.
40
- * Uses `crypto.randomUUID` if available.
41
- *
42
- * @returns {string} UUID v4 string.
43
- */
44
- export function uuidv4(): string {
45
- const g: any = globalThis as any;
46
- if (g?.crypto?.randomUUID) return g.crypto.randomUUID();
47
-
48
- const b = randBytes(16);
49
- // Per RFC: set version + variant bits
50
- // @ts-ignore
51
- b[6] = (b[6] & 0x0f) | 0x40;
52
- // @ts-ignore
53
- b[8] = (b[8] & 0x3f) | 0x80;
54
-
55
- const hex: string[] = [];
56
- for (let i = 0; i < 256; i++) hex.push(i.toString(16).padStart(2, "0"));
57
-
58
- return (
59
- // @ts-ignore
60
- hex[b[0]] + hex[b[1]] + hex[b[2]] + hex[b[3]] + "-" +
61
- // @ts-ignore
62
- hex[b[4]] + hex[b[5]] + "-" +
63
- // @ts-ignore
64
- hex[b[6]] + hex[b[7]] + "-" +
65
- // @ts-ignore
66
- hex[b[8]] + hex[b[9]] + "-" +
67
- // @ts-ignore
68
- hex[b[10]] + hex[b[11]] + hex[b[12]] + hex[b[13]] + hex[b[14]] + hex[b[15]]
69
- );
70
- }
71
-
72
- /** Crockford Base32 alphabet for ULID */
73
- const CROCK32 = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"; // no I L O U
74
-
75
- /**
76
- * Generates a 26-character ULID (time-sortable unique ID).
77
- *
78
- * @param {number} [date] - Optional timestamp in milliseconds. Defaults to `Date.now()`.
79
- * @returns {string} ULID string.
80
- */
81
- export function ulid(date?: number): string {
82
- const time = (typeof date === "number" ? date : Date.now()) >>> 0; // low 32 bits
83
- const timeHi = Math.floor((typeof date === "number" ? date : Date.now()) / 0x100000000) >>> 0; // high 32
84
- // ULID uses 48-bit time; do base32 encode 48 bits
85
- const time48 = new Uint8Array(6);
86
- // write 48-bit big-endian
87
- let t = BigInt(typeof date === "number" ? date : Date.now());
88
- for (let i = 5; i >= 0; i--) {
89
- time48[i] = Number(t & 0xffn);
90
- t >>= 8n;
91
- }
92
- // first 10 chars = time
93
- let out = "";
94
- let acc = 0;
95
- let bits = 0;
96
- for (let i = 0; i < 6; i++) {
97
- // @ts-ignore
98
- acc = (acc << 8) | time48[i];
99
- bits += 8;
100
- while (bits >= 5) {
101
- bits -= 5;
102
- out += CROCK32[(acc >>> bits) & 31];
103
- }
104
- }
105
- if (bits > 0) out += CROCK32[(acc << (5 - bits)) & 31];
106
- out = out.slice(0, 10);
107
-
108
- // last 16 chars = randomness (80 bits)
109
- const rnd = randBytes(10);
110
- acc = 0; bits = 0;
111
- for (let i = 0; i < rnd.length; i++) {
112
- // @ts-ignore
113
- acc = (acc << 8) | rnd[i];
114
- bits += 8;
115
- while (bits >= 5) {
116
- bits -= 5;
117
- out += CROCK32[(acc >>> bits) & 31];
118
- }
119
- }
120
- if (bits > 0) out += CROCK32[(acc << (5 - bits)) & 31];
121
-
122
- return out.slice(0, 26);
123
- }
124
-
125
- /** NanoID-style: URL-safe alphabet by default, configurable length/alphabet */
126
- const DEFAULT_ALPHABET =
127
- "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
128
- /**
129
- * Generates a NanoID-style string.
130
- *
131
- * @param {number} [size=21] - Length of the generated ID.
132
- * @param {string} [alphabet=DEFAULT_ALPHABET] - Alphabet to use.
133
- * @returns {string} Generated NanoID string.
134
- */
135
- export function nanoid(size: number = 21, alphabet: string = DEFAULT_ALPHABET): string {
136
- if (size <= 0) throw new Error("size must be > 0");
137
- const mask = (1 << Math.ceil(Math.log2(alphabet.length))) - 1;
138
- let id = "";
139
- while (id.length < size) {
140
- const bytes = randBytes(1);
141
- // @ts-ignore
142
- const idx = bytes[0] & mask;
143
- if (idx < alphabet.length) id += alphabet[idx];
144
- }
145
- return id;
146
- }
147
-
148
- /**
149
- * Generates a short, mostly-unique ID (timestamp + counter + random).
150
- * Not cryptographically strong.
151
- *
152
- * @returns {string} Short UID string.
153
- */
154
- let _ctr = 0;
155
- export function shortId(): string {
156
- const ts = Date.now().toString(36);
157
- _ctr = (_ctr + 1) & 0xfff; // 0..4095
158
- const c = _ctr.toString(36).padStart(3, "0");
159
- const r = Array.from(randBytes(3))
160
- .map(b => (b & 0x3f).toString(36).padStart(2, "0"))
161
- .join("")
162
- .slice(0, 4);
163
- return `${ts}${c}${r}`;
164
- }
165
-
166
- /**
167
- * Generates a UID using the specified strategy.
168
- *
169
- * @param {UIDStrategy} [strategy="uuidv4"] - The UID strategy to use.
170
- * @param {UIDOptions} [opts={}] - Options for the selected strategy.
171
- * @returns {string} Generated UID.
172
- */
173
- export function generateUID(strategy: UIDStrategy = "uuidv4", opts: UIDOptions = {}): string {
174
- switch (strategy) {
175
- case "uuidv4": return uuidv4();
176
- case "ulid": return ulid();
177
- case "nanoid": return nanoid(opts.size ?? 21, opts.alphabet ?? DEFAULT_ALPHABET);
178
- case "short": return shortId();
179
- default: {
180
- const _exhaustive: never = strategy;
181
- return uuidv4();
182
- }
183
- }
184
- }
@@ -1,68 +0,0 @@
1
- type StateChangeCallback = (addedOrRemoved: 0 | 1) => void;
2
-
3
- class UserState {
4
- private state: Set<string>;
5
- private callbacks: Map<string, StateChangeCallback[]>;
6
- /**
7
- * Stores the user's current UIX state
8
- * Ex: 'typing'
9
- */
10
- constructor() {
11
- this.state = new Set();
12
- this.callbacks = new Map();
13
- }
14
-
15
- /**
16
- * Adds a state
17
- * @param name - The name of the state (ex: 'typing')
18
- */
19
- setState(name: string) {
20
- const wasPresent = this.state.has(name);
21
- if (!wasPresent) {
22
- this.state.add(name);
23
- this.triggerCallbacks(name, 1);
24
- }
25
- }
26
-
27
- /**
28
- * Removes a state
29
- * @param name - The name of the state (ex: 'typing')
30
- */
31
- removeState(name: string) {
32
- const wasPresent = this.state.has(name);
33
- if (wasPresent) {
34
- this.state.delete(name);
35
- this.triggerCallbacks(name, 0);
36
- }
37
- }
38
-
39
- /**
40
- * Checks if a state is active
41
- * @param name - The name of the state (ex: 'typing')
42
- */
43
- hasState(name: string) {
44
- return this.state.has(name);
45
- }
46
-
47
- /**
48
- * Registers a callback for state changes
49
- * @param name - Name of the state to check changes for.
50
- * @param cb - Callback to call on state change.
51
- */
52
- onStateChange(name: string, cb: StateChangeCallback) {
53
- if (!this.callbacks.has(name)) this.callbacks.set(name, []);
54
- this.callbacks.get(name)!.push(cb);
55
- }
56
-
57
- /** Internal: triggers callbacks for a state */
58
- private triggerCallbacks(name: string, addedOrRemoved: 0 | 1) {
59
- const cbs = this.callbacks.get(name);
60
- if (!cbs) return;
61
- for (const cb of cbs) cb(addedOrRemoved);
62
- }
63
- }
64
- const userState = new UserState();
65
- export default userState;
66
- export {
67
- UserState
68
- };
@@ -1,62 +0,0 @@
1
- type WindowEventKeys =
2
- | 'resize'
3
- | 'scroll'
4
- | 'blur'
5
- | 'focus'
6
- | 'visibilitychange'
7
- | 'pointerlockchange'
8
- | 'beforeunload';
9
-
10
- type WindowListenersMap = Record<WindowEventKeys, Array<(event: Event) => void>>;
11
-
12
- const windowListeners: WindowListenersMap = {
13
- resize: [],
14
- scroll: [],
15
- blur: [],
16
- focus: [],
17
- visibilitychange: [],
18
- pointerlockchange: [],
19
- beforeunload: [],
20
- };
21
-
22
- function handleEvent(type: WindowEventKeys, event: Event) {
23
- const list = windowListeners[type];
24
- if (!list.length) return;
25
- for (const fn of list) {
26
- try {
27
- fn(event);
28
- } catch (err) {
29
- console.error(`[Kabel] Error in window listener for '${type}':`, err);
30
- }
31
- }
32
- }
33
-
34
- // auto attach
35
- (Object.keys(windowListeners) as WindowEventKeys[]).forEach((type) => {
36
- window.addEventListener(type, (e) => handleEvent(type, e));
37
- });
38
-
39
- export function addWindowListener(
40
- type: WindowEventKeys,
41
- fn: (event: Event) => void
42
- ) {
43
- windowListeners[type].push(fn);
44
- }
45
-
46
- export function removeWindowListener(
47
- type: WindowEventKeys,
48
- fn: (event: Event) => void
49
- ) {
50
- const list = windowListeners[type];
51
- const i = list.indexOf(fn);
52
- if (i !== -1) list.splice(i, 1);
53
- }
54
-
55
- export function clearWindowListeners(type?: WindowEventKeys) {
56
- if (type) windowListeners[type].length = 0;
57
- else (Object.keys(windowListeners) as WindowEventKeys[]).forEach((k) => {
58
- windowListeners[k].length = 0;
59
- });
60
- }
61
-
62
- export default windowListeners;
package/webpack.config.js DELETED
@@ -1,80 +0,0 @@
1
- const path = require('path');
2
- const TerserPlugin = require('terser-webpack-plugin');
3
- const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
4
-
5
- module.exports = {
6
- mode: 'production', // <- production enables lots of optimizations automatically
7
- entry: './src/index.ts',
8
- output: {
9
- filename: 'kabel.js',
10
- path: path.resolve(__dirname, 'dist'),
11
- library: {
12
- name: 'Kabel',
13
- type: 'umd',
14
- },
15
- globalObject: 'this',
16
- libraryExport: 'default',
17
- clean: {
18
- keep: /index\.html/,
19
- }
20
- },
21
- resolve: {
22
- extensions: ['.ts', '.js'],
23
- },
24
- module: {
25
- rules: [
26
- {
27
- test: /\.ts$/,
28
- use: 'ts-loader',
29
- exclude: /node_modules/,
30
- },
31
- {
32
- enforce: 'pre',
33
- test: /\.js$/,
34
- loader: 'source-map-loader',
35
- },
36
- {
37
- test: /\.(css|svg)$/,
38
- use: 'raw-loader'
39
- },
40
- ],
41
- },
42
- optimization: {
43
- minimize: true,
44
- minimizer: [
45
- new TerserPlugin({
46
- terserOptions: {
47
- compress: {
48
- //drop_console: true, // kill console.logs
49
- drop_debugger: true, // kill debugger;
50
- pure_funcs: ['console.info', 'console.debug'],
51
- // aggressive compress flags
52
- booleans_as_integers: true,
53
- hoist_funs: true,
54
- passes: 3,
55
- collapse_vars: true, // inline single-use vars
56
- reduce_vars: true, // further optimizes var usage
57
- join_vars: true, // join consecutive var statements
58
- keep_fargs: false, // remove unused function args
59
- if_return: true, // optimize if/return statements
60
- conditionals: true, // convert if-else to conditional expressions
61
- sequences: true, // join consecutive statements with comma
62
- unused: true, // remove unused vars/functions
63
- loops: true, // optimize loops
64
- side_effects: true, // remove expressions without side-effects
65
- },
66
- mangle: {
67
- //toplevel: false, // <- don’t scramble top-level/public names
68
- },
69
- format: {
70
- comments: false,
71
- },
72
- },
73
- extractComments: false,
74
- parallel: true,
75
- }),
76
- new CssMinimizerPlugin(),
77
- ],
78
- },
79
- devtool: 'source-map',
80
- };
File without changes