quickwin 2.3.1 → 3.0.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.
Files changed (172) hide show
  1. package/README.en.md +1 -2
  2. package/README.md +1 -2
  3. package/constants.ts +15 -0
  4. package/enum_map.d.ts +3 -0
  5. package/examples/PdfCanvas.js +1 -1
  6. package/examples/PdfCanvas.tsx +2 -2
  7. package/examples/execd/main.js +334 -188
  8. package/examples/pdf_preview2.js +76 -67
  9. package/examples/pdf_preview2.ts +84 -64
  10. package/examples/pdf_viewer.js +4932 -1029
  11. package/examples/pdf_viewer.tsx +11 -22
  12. package/examples/test_gallery.js +308 -143
  13. package/examples/test_gallery.tsx +12 -7
  14. package/examples/test_react_lazy.js +295 -133
  15. package/examples/test_react_lazy.tsx +4 -3
  16. package/examples/test_react_listbox.js +293 -132
  17. package/examples/test_react_listbox.tsx +3 -2
  18. package/examples/test_root_window.js +283 -126
  19. package/examples/test_tab.js +295 -133
  20. package/examples/test_tab.tsx +4 -3
  21. package/examples/tray_demo.js +37 -30
  22. package/examples/tray_demo.tsx +39 -32
  23. package/lib/abort.d.ts +21 -0
  24. package/lib/assert.d.ts +2 -0
  25. package/lib/bitmap.d.ts +7 -0
  26. package/lib/bitmap.js +40 -0
  27. package/lib/cache-utils.d.ts +6 -0
  28. package/lib/certs.d.ts +1 -0
  29. package/lib/certs.js +31 -3
  30. package/lib/dpi.d.ts +9 -0
  31. package/lib/dpi.js +30 -0
  32. package/lib/dumpRects.d.ts +2 -0
  33. package/lib/dumpRects.js +14 -7
  34. package/lib/exec-log.d.ts +23 -0
  35. package/lib/fetch.d.ts +4 -0
  36. package/lib/ffi/bind.d.ts +70 -0
  37. package/lib/ffi/bind.js +5 -4
  38. package/lib/ffi/ctype.d.ts +117 -0
  39. package/lib/ffi/index.d.ts +2 -0
  40. package/lib/ffi/struct.d.ts +174 -0
  41. package/lib/http-common.d.ts +143 -0
  42. package/lib/http-server.d.ts +59 -0
  43. package/lib/polyfill.d.ts +22 -0
  44. package/lib/react-qw/components/Button.d.ts +9 -0
  45. package/lib/react-qw/components/CheckBox.d.ts +11 -0
  46. package/lib/react-qw/components/ComboBox.d.ts +11 -0
  47. package/lib/react-qw/components/DateTimePicker.d.ts +15 -0
  48. package/lib/react-qw/components/DateTimePicker.js +6 -7
  49. package/lib/react-qw/components/Input.d.ts +15 -0
  50. package/lib/react-qw/components/Input.js +5 -1
  51. package/lib/react-qw/components/Link.d.ts +12 -0
  52. package/lib/react-qw/components/ListBox.d.ts +13 -0
  53. package/lib/react-qw/components/ListView.d.ts +37 -0
  54. package/lib/react-qw/components/ListView.js +8 -6
  55. package/lib/react-qw/components/PathPicker.d.ts +23 -0
  56. package/lib/react-qw/components/ProgressBar.d.ts +9 -0
  57. package/lib/react-qw/components/RadioButton.d.ts +11 -0
  58. package/lib/react-qw/components/ScrollView.d.ts +9 -0
  59. package/lib/react-qw/components/ScrollView.js +28 -22
  60. package/lib/react-qw/components/Slider.d.ts +12 -0
  61. package/lib/react-qw/components/Tab.d.ts +14 -0
  62. package/lib/react-qw/components/Tooltip.d.ts +7 -0
  63. package/lib/react-qw/components/TreeView.d.ts +18 -0
  64. package/lib/react-qw/components/index.d.ts +16 -0
  65. package/lib/react-qw/index.d.ts +24 -0
  66. package/lib/react-qw/index.js +7 -5
  67. package/lib/react-qw/layout.d.ts +29 -0
  68. package/lib/react-qw/nmhdr.d.ts +1 -0
  69. package/lib/react-qw/props.d.ts +2 -0
  70. package/lib/react-qw/props.js +3 -3
  71. package/lib/react-qw/reconciler.d.ts +21 -0
  72. package/lib/react-qw/reconciler.js +12 -17
  73. package/lib/stream.d.ts +20 -0
  74. package/lib/text-codec.d.ts +39 -0
  75. package/lib/text-measure.d.ts +14 -0
  76. package/lib/text-measure.js +9 -6
  77. package/lib/url.d.ts +54 -0
  78. package/lib/websocket.d.ts +73 -0
  79. package/lib/windows/{advapi32.ts → advapi32.d.ts} +6 -21
  80. package/lib/windows/comctl32.d.ts +14 -0
  81. package/lib/windows/comctl32.js +3 -2
  82. package/lib/windows/comdlg32.d.ts +4 -0
  83. package/lib/windows/{gdi32.ts → gdi32.d.ts} +184 -97
  84. package/lib/windows/gdi32.js +28 -6
  85. package/lib/windows/{kernel32.ts → kernel32.d.ts} +145 -113
  86. package/lib/windows/kernel32.js +9 -0
  87. package/lib/windows/{msimg32.ts → msimg32.d.ts} +11 -14
  88. package/lib/windows/ntdll.d.ts +5 -0
  89. package/lib/windows/ole32.d.ts +3 -0
  90. package/lib/windows/{psapi.ts → psapi.d.ts} +9 -18
  91. package/lib/windows/shell32.d.ts +51 -0
  92. package/lib/windows/shell32.js +11 -2
  93. package/lib/windows/structs.d.ts +3141 -0
  94. package/lib/windows/structs.js +51 -0
  95. package/lib/windows/user32.d.ts +623 -0
  96. package/lib/windows/user32.js +6 -5
  97. package/lib/windows/version.d.ts +27 -0
  98. package/lib/windows/{winspool.ts → winspool.d.ts} +18 -32
  99. package/main.js +13 -5
  100. package/package.json +16 -7
  101. package/quickwin.d.ts +13 -115
  102. package/qwin-nowasm-x86.exe +0 -0
  103. package/qwin-nowasm.exe +0 -0
  104. package/qwin-x86.exe +0 -0
  105. package/qwin.exe +0 -0
  106. package/test/bench_ffi_callraw.js +3 -4
  107. package/test/bench_ffi_callraw.ts +3 -4
  108. package/test/debug/mupdf_debug.js +4 -22
  109. package/test/debug/wasm_export_debug.js +2 -12
  110. package/test/debug/wasm_names.js +3 -13
  111. package/test/example.pdf +0 -0
  112. package/test/mupdf-cdn.js +40 -0
  113. package/test/mupdf-cdn.ts +43 -0
  114. package/test/test_ffi.js +8 -9
  115. package/test/test_ffi.ts +8 -9
  116. package/test/test_ffi_abi.js +6 -6
  117. package/test/test_ffi_abi.ts +8 -8
  118. package/test/test_ffi_windows.js +82 -11
  119. package/test/test_ffi_windows.ts +85 -11
  120. package/test/test_gdi_draw.js +3 -3
  121. package/test/test_gdi_draw.ts +4 -4
  122. package/test/test_mupdf_render.js +4 -22
  123. package/test/test_mupdf_render.ts +4 -23
  124. package/test/test_mupdf_twice.js +4 -19
  125. package/test/test_mupdf_twice.ts +4 -20
  126. package/test/test_mupdf_wasm.js +10 -4
  127. package/test/test_mupdf_wasm.ts +6 -4
  128. package/test/test_react_complex.js +316 -140
  129. package/test/test_react_counter.js +295 -133
  130. package/test/test_react_flex.js +297 -138
  131. package/test/test_react_hidden.js +296 -134
  132. package/test/test_react_listview_link.js +288 -131
  133. package/test/test_react_notify.js +290 -133
  134. package/test/test_react_render.js +295 -133
  135. package/lib/abort.ts +0 -69
  136. package/lib/assert.ts +0 -7
  137. package/lib/cache-utils.ts +0 -40
  138. package/lib/certs.ts +0 -229
  139. package/lib/dumpRects.ts +0 -26
  140. package/lib/exec-log.ts +0 -30
  141. package/lib/fetch.ts +0 -589
  142. package/lib/ffi/bind.ts +0 -539
  143. package/lib/ffi/ctype.ts +0 -371
  144. package/lib/ffi/index.ts +0 -6
  145. package/lib/ffi/struct.ts +0 -780
  146. package/lib/http-common.ts +0 -441
  147. package/lib/http-server.ts +0 -604
  148. package/lib/polyfill.ts +0 -171
  149. package/lib/react-qw/components/index.ts +0 -17
  150. package/lib/react-qw/index.ts +0 -96
  151. package/lib/react-qw/layout.ts +0 -111
  152. package/lib/react-qw/nmhdr.ts +0 -7
  153. package/lib/react-qw/props.ts +0 -41
  154. package/lib/react-qw/reconciler.ts +0 -383
  155. package/lib/stream.ts +0 -22
  156. package/lib/text-codec.ts +0 -171
  157. package/lib/text-measure.ts +0 -41
  158. package/lib/url.ts +0 -201
  159. package/lib/websocket.ts +0 -600
  160. package/lib/windows/comctl32.ts +0 -19
  161. package/lib/windows/comdlg32.ts +0 -10
  162. package/lib/windows/ntdll.ts +0 -11
  163. package/lib/windows/ole32.ts +0 -9
  164. package/lib/windows/shell32.ts +0 -39
  165. package/lib/windows/structs.ts +0 -752
  166. package/lib/windows/user32.ts +0 -619
  167. package/lib/windows/version.ts +0 -35
  168. package/vendor/mupdf-wasm/mupdf-wasm.d.ts +0 -571
  169. package/vendor/mupdf-wasm/mupdf-wasm.js +0 -2749
  170. package/vendor/mupdf-wasm/mupdf-wasm.wasm +0 -0
  171. package/vendor/mupdf-wasm/mupdf.d.ts +0 -939
  172. package/vendor/mupdf-wasm/mupdf.js +0 -3317
@@ -1367,9 +1367,9 @@ var require_scheduler_development = __commonJS({
1367
1367
  }
1368
1368
  return first;
1369
1369
  }
1370
- function compare(a, b6) {
1371
- var diff = a.sortIndex - b6.sortIndex;
1372
- return 0 !== diff ? diff : a.id - b6.id;
1370
+ function compare(a, b7) {
1371
+ var diff = a.sortIndex - b7.sortIndex;
1372
+ return 0 !== diff ? diff : a.id - b7.id;
1373
1373
  }
1374
1374
  function advanceTimers(currentTime) {
1375
1375
  for (var timer = peek(timerQueue); null !== timer; ) {
@@ -1667,14 +1667,14 @@ var require_react_reconciler_development = __commonJS({
1667
1667
  throw Error("Unable to find node on an unmounted component.");
1668
1668
  return alternate !== fiber ? null : fiber;
1669
1669
  }
1670
- for (var a = fiber, b6 = alternate; ; ) {
1670
+ for (var a = fiber, b7 = alternate; ; ) {
1671
1671
  var parentA = a.return;
1672
1672
  if (null === parentA) break;
1673
1673
  var parentB = parentA.alternate;
1674
1674
  if (null === parentB) {
1675
- b6 = parentA.return;
1676
- if (null !== b6) {
1677
- a = b6;
1675
+ b7 = parentA.return;
1676
+ if (null !== b7) {
1677
+ a = b7;
1678
1678
  continue;
1679
1679
  }
1680
1680
  break;
@@ -1682,23 +1682,23 @@ var require_react_reconciler_development = __commonJS({
1682
1682
  if (parentA.child === parentB.child) {
1683
1683
  for (parentB = parentA.child; parentB; ) {
1684
1684
  if (parentB === a) return assertIsMounted(parentA), fiber;
1685
- if (parentB === b6) return assertIsMounted(parentA), alternate;
1685
+ if (parentB === b7) return assertIsMounted(parentA), alternate;
1686
1686
  parentB = parentB.sibling;
1687
1687
  }
1688
1688
  throw Error("Unable to find node on an unmounted component.");
1689
1689
  }
1690
- if (a.return !== b6.return) a = parentA, b6 = parentB;
1690
+ if (a.return !== b7.return) a = parentA, b7 = parentB;
1691
1691
  else {
1692
1692
  for (var didFindChild = false, _child = parentA.child; _child; ) {
1693
1693
  if (_child === a) {
1694
1694
  didFindChild = true;
1695
1695
  a = parentA;
1696
- b6 = parentB;
1696
+ b7 = parentB;
1697
1697
  break;
1698
1698
  }
1699
- if (_child === b6) {
1699
+ if (_child === b7) {
1700
1700
  didFindChild = true;
1701
- b6 = parentA;
1701
+ b7 = parentA;
1702
1702
  a = parentB;
1703
1703
  break;
1704
1704
  }
@@ -1709,12 +1709,12 @@ var require_react_reconciler_development = __commonJS({
1709
1709
  if (_child === a) {
1710
1710
  didFindChild = true;
1711
1711
  a = parentB;
1712
- b6 = parentA;
1712
+ b7 = parentA;
1713
1713
  break;
1714
1714
  }
1715
- if (_child === b6) {
1715
+ if (_child === b7) {
1716
1716
  didFindChild = true;
1717
- b6 = parentB;
1717
+ b7 = parentB;
1718
1718
  a = parentA;
1719
1719
  break;
1720
1720
  }
@@ -1726,7 +1726,7 @@ var require_react_reconciler_development = __commonJS({
1726
1726
  );
1727
1727
  }
1728
1728
  }
1729
- if (a.alternate !== b6)
1729
+ if (a.alternate !== b7)
1730
1730
  throw Error(
1731
1731
  "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue."
1732
1732
  );
@@ -15071,10 +15071,10 @@ var require_react_reconciler_development = __commonJS({
15071
15071
  setCurrentUpdatePriority(previousPriority), ReactSharedInternals.T = prevTransition;
15072
15072
  }
15073
15073
  };
15074
- exports2.discreteUpdates = function(fn, a, b6, c, d) {
15074
+ exports2.discreteUpdates = function(fn, a, b7, c, d) {
15075
15075
  var prevTransition = ReactSharedInternals.T, previousPriority = getCurrentUpdatePriority();
15076
15076
  try {
15077
- return setCurrentUpdatePriority(2), ReactSharedInternals.T = null, fn(a, b6, c, d);
15077
+ return setCurrentUpdatePriority(2), ReactSharedInternals.T = null, fn(a, b7, c, d);
15078
15078
  } finally {
15079
15079
  setCurrentUpdatePriority(previousPriority), ReactSharedInternals.T = prevTransition, executionContext === NoContext && (workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS);
15080
15080
  }
@@ -15361,7 +15361,7 @@ import * as std2 from "std";
15361
15361
  import * as ffi4 from "ffi";
15362
15362
 
15363
15363
  // _build/lib/react-qw/index.js
15364
- import * as gui17 from "gui";
15364
+ import * as gui16 from "gui";
15365
15365
 
15366
15366
  // _build/lib/windows/user32.js
15367
15367
  import * as os3 from "os";
@@ -15370,7 +15370,6 @@ import * as os3 from "os";
15370
15370
  import * as ffi from "ffi";
15371
15371
  import * as os2 from "os";
15372
15372
  import * as std from "std";
15373
- import * as win from "win";
15374
15373
 
15375
15374
  // _build/lib/text-codec.js
15376
15375
  var _labelMap = {
@@ -15392,19 +15391,19 @@ function _normalizeLabel(label) {
15392
15391
  function _decodeUTF8(buf, fatal) {
15393
15392
  let out = "";
15394
15393
  for (let i = 0; i < buf.length; ) {
15395
- const b6 = buf[i++];
15396
- if (b6 < 128) {
15397
- out += String.fromCharCode(b6);
15394
+ const b7 = buf[i++];
15395
+ if (b7 < 128) {
15396
+ out += String.fromCharCode(b7);
15398
15397
  continue;
15399
15398
  }
15400
- if (b6 < 192) {
15399
+ if (b7 < 192) {
15401
15400
  out += fatal ? (() => {
15402
15401
  throw new TypeError("unexpected continuation byte");
15403
15402
  })() : "\uFFFD";
15404
15403
  continue;
15405
15404
  }
15406
15405
  let c, min;
15407
- if (b6 < 224) {
15406
+ if (b7 < 224) {
15408
15407
  if (i >= buf.length) {
15409
15408
  out += fatal ? (() => {
15410
15409
  throw new TypeError("incomplete utf-8");
@@ -15416,9 +15415,9 @@ function _decodeUTF8(buf, fatal) {
15416
15415
  out += "\uFFFD";
15417
15416
  continue;
15418
15417
  }
15419
- c = (b6 & 31) << 6 | b22 & 63;
15418
+ c = (b7 & 31) << 6 | b22 & 63;
15420
15419
  min = 128;
15421
- } else if (b6 < 240) {
15420
+ } else if (b7 < 240) {
15422
15421
  if (i + 1 >= buf.length) {
15423
15422
  out += fatal ? (() => {
15424
15423
  throw new TypeError("incomplete utf-8");
@@ -15431,9 +15430,9 @@ function _decodeUTF8(buf, fatal) {
15431
15430
  out += "\uFFFD";
15432
15431
  continue;
15433
15432
  }
15434
- c = (b6 & 15) << 12 | (b22 & 63) << 6 | b32 & 63;
15433
+ c = (b7 & 15) << 12 | (b22 & 63) << 6 | b32 & 63;
15435
15434
  min = 2048;
15436
- } else if (b6 < 248) {
15435
+ } else if (b7 < 248) {
15437
15436
  if (i + 2 >= buf.length) {
15438
15437
  out += fatal ? (() => {
15439
15438
  throw new TypeError("incomplete utf-8");
@@ -15447,7 +15446,7 @@ function _decodeUTF8(buf, fatal) {
15447
15446
  out += "\uFFFD";
15448
15447
  continue;
15449
15448
  }
15450
- c = (b6 & 7) << 18 | (b22 & 63) << 12 | (b32 & 63) << 6 | b42 & 63;
15449
+ c = (b7 & 7) << 18 | (b22 & 63) << 12 | (b32 & 63) << 6 | b42 & 63;
15451
15450
  min = 65536;
15452
15451
  } else {
15453
15452
  out += fatal ? (() => {
@@ -15751,7 +15750,7 @@ function loadDll(dll) {
15751
15750
  const cached = _dllCache.get(dll);
15752
15751
  if (cached !== void 0)
15753
15752
  return cached;
15754
- const loaded = win.LoadLibrary(dll);
15753
+ const loaded = ffi.LoadLibrary(dll);
15755
15754
  if (!loaded)
15756
15755
  throw new Error(`ffi-bind: LoadLibrary("${dll}") failed`);
15757
15756
  _dllCache.set(dll, loaded);
@@ -15961,7 +15960,7 @@ var BYTE = {
15961
15960
  };
15962
15961
  var builtinCodecs = { WCHAR, BYTE };
15963
15962
  function bind(dll, name, sig, encoders, decoders) {
15964
- const proc = win.GetProcAddress(loadDll(dll), name);
15963
+ const proc = ffi.GetProcAddress(loadDll(dll), name);
15965
15964
  if (!proc)
15966
15965
  throw new Error(`ffi-bind: proc "${name}" not found in ${dll}`);
15967
15966
  const effDec = decoders ?? encoders;
@@ -16001,13 +16000,13 @@ function lower(v) {
16001
16000
  type: { tag: "array", elementType: el.type, elementSize: el.size }
16002
16001
  };
16003
16002
  }
16004
- const b6 = /^([A-Za-z_]\w*):(\d+)$/.exec(v);
16005
- if (b6) {
16006
- const rawUnit = b6[1];
16003
+ const b7 = /^([A-Za-z_]\w*):(\d+)$/.exec(v);
16004
+ if (b7) {
16005
+ const rawUnit = b7[1];
16007
16006
  const unit = normToken(rawUnit);
16008
16007
  if (!isCNumberToken(unit) || unit === "f32" || unit === "f64")
16009
16008
  throw new Error(`ffi-struct: bitfield unit must be an integer type, got "${rawUnit}"`);
16010
- const width = Number(b6[2]);
16009
+ const width = Number(b7[2]);
16011
16010
  const s2 = SizeAlign[unit];
16012
16011
  const cap = s2 * 8;
16013
16012
  if (!Number.isInteger(width) || width < 1)
@@ -16323,10 +16322,10 @@ function buildDecl(kind, member, pack) {
16323
16322
  decl[k] = v;
16324
16323
  return decl;
16325
16324
  }
16326
- function struct(a, b6, c) {
16325
+ function struct(a, b7, c) {
16327
16326
  const isNamed = typeof a === "string";
16328
- const raw = isNamed ? b6 : a;
16329
- const opts = isNamed ? c : b6;
16327
+ const raw = isNamed ? b7 : a;
16328
+ const opts = isNamed ? c : b7;
16330
16329
  return createStruct(buildDecl("struct", raw, opts?.pack));
16331
16330
  }
16332
16331
 
@@ -16351,6 +16350,17 @@ var SIZE_DECL = {
16351
16350
  cy: "i32"
16352
16351
  };
16353
16352
  var SIZE = /* @__PURE__ */ struct("SIZE", SIZE_DECL);
16353
+ var SCROLLINFO_DECL = {
16354
+ "#": "struct",
16355
+ cbSize: "u32",
16356
+ fMask: "u32",
16357
+ nMin: "i32",
16358
+ nMax: "i32",
16359
+ nPage: "u32",
16360
+ nPos: "i32",
16361
+ nTrackPos: "i32"
16362
+ };
16363
+ var SCROLLINFO = /* @__PURE__ */ struct("SCROLLINFO", SCROLLINFO_DECL);
16354
16364
  var LOGFONTW_DECL = {
16355
16365
  "#": "struct",
16356
16366
  lfHeight: "i32",
@@ -16369,6 +16379,41 @@ var LOGFONTW_DECL = {
16369
16379
  lfFaceName: "u16[32]@utf-16le"
16370
16380
  };
16371
16381
  var LOGFONTW = /* @__PURE__ */ struct("LOGFONTW", LOGFONTW_DECL);
16382
+ var NONCLIENTMETRICSW_DECL = {
16383
+ "#": "struct",
16384
+ cbSize: "u32",
16385
+ iBorderWidth: "i32",
16386
+ iScrollWidth: "i32",
16387
+ iScrollHeight: "i32",
16388
+ iCaptionWidth: "i32",
16389
+ iCaptionHeight: "i32",
16390
+ lfCaptionFont: LOGFONTW_DECL,
16391
+ iSmCaptionWidth: "i32",
16392
+ iSmCaptionHeight: "i32",
16393
+ lfSmCaptionFont: LOGFONTW_DECL,
16394
+ iMenuWidth: "i32",
16395
+ iMenuHeight: "i32",
16396
+ lfMenuFont: LOGFONTW_DECL,
16397
+ lfStatusFont: LOGFONTW_DECL,
16398
+ lfMessageFont: LOGFONTW_DECL,
16399
+ iPaddedBorderWidth: "i32"
16400
+ };
16401
+ var NONCLIENTMETRICSW = /* @__PURE__ */ struct("NONCLIENTMETRICSW", NONCLIENTMETRICSW_DECL);
16402
+ var BITMAPINFOHEADER_DECL = {
16403
+ "#": "struct",
16404
+ biSize: "u32",
16405
+ biWidth: "i32",
16406
+ biHeight: "i32",
16407
+ biPlanes: "u16",
16408
+ biBitCount: "u16",
16409
+ biCompression: "u32",
16410
+ biSizeImage: "u32",
16411
+ biXPelsPerMeter: "i32",
16412
+ biYPelsPerMeter: "i32",
16413
+ biClrUsed: "u32",
16414
+ biClrImportant: "u32"
16415
+ };
16416
+ var BITMAPINFOHEADER = /* @__PURE__ */ struct("BITMAPINFOHEADER", BITMAPINFOHEADER_DECL);
16372
16417
  var OPENFILENAMEW_DECL = {
16373
16418
  "#": "struct",
16374
16419
  lStructSize: "u32",
@@ -16575,8 +16620,13 @@ var NOTIFYICONIDENTIFIER = /* @__PURE__ */ struct("NOTIFYICONIDENTIFIER", NOTIFY
16575
16620
  var b = (name, sig, encoders) => bind("user32.dll", name, sig, encoders);
16576
16621
  var _bProbe = b("GetDesktopWindow", " -> <HWND>ptr");
16577
16622
  var LONG_PTR_SYM = os3.arch === "x64" ? "PtrW" : "W";
16623
+ var ShowWindow = /* @__PURE__ */ b("ShowWindow", "<HWND>ptr i32@ShowWindowCmd -> i32");
16578
16624
  var SetWindowPos = /* @__PURE__ */ b("SetWindowPos", "<HWND>ptr <>ptr@SetWindowPosHwnd i32 i32 i32 i32 u32 -> i32");
16625
+ var GetWindowRect = /* @__PURE__ */ b("GetWindowRect", "<HWND>ptr <RECT>ptr -> i32");
16626
+ var GetClientRect = /* @__PURE__ */ b("GetClientRect", "<HWND>ptr <RECT>ptr -> i32");
16627
+ var GetWindowText = /* @__PURE__ */ b("GetWindowTextW", "<HWND>ptr <BYTE>ptr i32 -> i32");
16579
16628
  var SetWindowText = /* @__PURE__ */ b("SetWindowTextW", "<HWND>ptr <WCHAR>ptr -> i32");
16629
+ var GetWindowTextLength = /* @__PURE__ */ b("GetWindowTextLengthW", "<HWND>ptr -> i32");
16580
16630
  var GetWindowLongPtr = /* @__PURE__ */ b("GetWindowLong" + LONG_PTR_SYM, "<HWND>ptr i32@Gwlp -> <>ptr");
16581
16631
  var SetWindowLongPtr = /* @__PURE__ */ b("SetWindowLong" + LONG_PTR_SYM, "<HWND>ptr i32@Gwlp <>ptr -> <>ptr");
16582
16632
  var EnableWindow = /* @__PURE__ */ b("EnableWindow", "<HWND>ptr i32 -> i32");
@@ -16589,12 +16639,16 @@ var GetDC = /* @__PURE__ */ b("GetDC", "<HWND>ptr -> <HDC>ptr");
16589
16639
  var ReleaseDC = /* @__PURE__ */ b("ReleaseDC", "<HWND>ptr <HDC>ptr! -> i32");
16590
16640
  var DrawText = /* @__PURE__ */ b("DrawTextW", "<HDC>ptr! <WCHAR>ptr i32 <RECT>ptr i32 -> i32");
16591
16641
  var InvalidateRect = /* @__PURE__ */ b("InvalidateRect", "<HWND>ptr <RECT>ptr i32 -> i32", { RECT });
16642
+ var UpdateWindow = /* @__PURE__ */ b("UpdateWindow", "<HWND>ptr -> i32");
16592
16643
  var SetCursor = /* @__PURE__ */ b("SetCursor", "<HCURSOR>ptr -> <HCURSOR>ptr");
16593
16644
  var LoadCursor = /* @__PURE__ */ b("LoadCursorW", "<HMODULE>ptr <>ptr -> <HCURSOR>ptr");
16594
16645
  var GetCursorPos = /* @__PURE__ */ b("GetCursorPos", "<POINT>ptr -> i32");
16595
16646
  var ScreenToClient = /* @__PURE__ */ b("ScreenToClient", "<HWND>ptr <POINT>ptr -> i32");
16647
+ var SetScrollInfo = /* @__PURE__ */ b("SetScrollInfo", "<HWND>ptr u32 <SCROLLINFO>ptr i32 -> i32", { SCROLLINFO });
16648
+ var GetScrollInfo = /* @__PURE__ */ b("GetScrollInfo", "<HWND>ptr u32 <SCROLLINFO>ptr -> i32");
16596
16649
  var ShowScrollBar = /* @__PURE__ */ b("ShowScrollBar", "<HWND>ptr u32 i32 -> i32");
16597
16650
  var GetSystemMetrics = /* @__PURE__ */ b("GetSystemMetrics", "i32 -> i32");
16651
+ var SystemParametersInfo = /* @__PURE__ */ b("SystemParametersInfoW", "u32 u32 <BYTE>ptr u32 -> i32");
16598
16652
 
16599
16653
  // _build/lib/react-qw/reconciler.js
16600
16654
  var import_react_reconciler = __toESM(require_react_reconciler(), 1);
@@ -16610,9 +16664,34 @@ var GetDeviceCaps = /* @__PURE__ */ b2("GetDeviceCaps", "<HDC>ptr! i32@DeviceCap
16610
16664
  var CreateFontIndirect = /* @__PURE__ */ b2("CreateFontIndirectW", "<LOGFONTW>ptr -> <HGDIOBJ>ptr", { LOGFONTW });
16611
16665
  var CreateCompatibleDC = /* @__PURE__ */ b2("CreateCompatibleDC", "<HDC>ptr -> <HDC>ptr");
16612
16666
  var SelectObject = /* @__PURE__ */ b2("SelectObject", "<HDC>ptr! <HGDIOBJ>ptr -> <HGDIOBJ>ptr");
16667
+ var CreateDIBSection = /* @__PURE__ */ b2("CreateDIBSection", "<HDC>ptr <>ptr u32@ColorUse <>ptr <>ptr u32 -> <HGDIOBJ>ptr");
16668
+ var SetDIBits = /* @__PURE__ */ b2("SetDIBits", "<HDC>ptr <HGDIOBJ>ptr! u32 u32 <BYTE>ptr <>ptr u32@ColorUse -> i32");
16613
16669
  var GetObject = /* @__PURE__ */ b2("GetObjectW", "<HGDIOBJ>ptr i32 <BYTE>ptr -> i32");
16614
16670
  var DeleteDC = /* @__PURE__ */ b2("DeleteDC", "<HDC>ptr! -> i32");
16615
16671
 
16672
+ // _build/lib/dpi.js
16673
+ function getScaleFactor() {
16674
+ const hdc = GetDC(NULL);
16675
+ const dpi = hdc ? GetDeviceCaps(
16676
+ hdc,
16677
+ 88
16678
+ /* DeviceCap.LOGPIXELSX */
16679
+ ) : 96;
16680
+ if (hdc)
16681
+ ReleaseDC(NULL, hdc);
16682
+ return dpi / 96;
16683
+ }
16684
+ function createSystemDpiFont() {
16685
+ const ncm = NONCLIENTMETRICSW.encode({ cbSize: NONCLIENTMETRICSW.size });
16686
+ if (!SystemParametersInfo(41, NONCLIENTMETRICSW.size, ncm, 0)) {
16687
+ const legacySize = NONCLIENTMETRICSW.size - 4;
16688
+ NONCLIENTMETRICSW.encode({ cbSize: legacySize }, ncm);
16689
+ if (!SystemParametersInfo(41, legacySize, ncm, 0))
16690
+ return NULL;
16691
+ }
16692
+ return CreateFontIndirect(NONCLIENTMETRICSW.decode(ncm).lfMessageFont);
16693
+ }
16694
+
16616
16695
  // _build/lib/react-qw/props.js
16617
16696
  import * as gui from "gui";
16618
16697
  function applyProps(instance, newProps, _oldProps) {
@@ -16636,14 +16715,14 @@ function applyProps(instance, newProps, _oldProps) {
16636
16715
  EnableWindow(hwnd, !newProps.disabled ? 1 : 0);
16637
16716
  }
16638
16717
  if ("hidden" in newProps) {
16639
- gui.ShowWindow(
16718
+ ShowWindow(
16640
16719
  hwnd,
16641
16720
  newProps.hidden ? 0 : 5
16642
16721
  /* ShowWindowCmd.SHOW */
16643
16722
  );
16644
16723
  }
16645
16724
  if ("visible" in newProps) {
16646
- gui.ShowWindow(
16725
+ ShowWindow(
16647
16726
  hwnd,
16648
16727
  newProps.visible ? 5 : 0
16649
16728
  /* ShowWindowCmd.HIDE */
@@ -16763,24 +16842,21 @@ function measureTextForHwnd(hwnd, text) {
16763
16842
  if (hFont)
16764
16843
  SelectObject(hdc, oldFont);
16765
16844
  ReleaseDC(hwnd, hdc);
16766
- const wr = gui2.GetWindowRect(hwnd);
16767
- const cr = gui2.GetClientRect(hwnd);
16768
- if (wr && cr) {
16769
- result.width += wr.right - wr.left - (cr.right - cr.left);
16770
- result.height += wr.bottom - wr.top - (cr.bottom - cr.top);
16845
+ const wr = RECT.alloc();
16846
+ const cr = RECT.alloc();
16847
+ const okWr = GetWindowRect(hwnd, wr.ptr);
16848
+ const okCr = GetClientRect(hwnd, cr.ptr);
16849
+ if (okWr && okCr) {
16850
+ const w = RECT.decode(wr), c = RECT.decode(cr);
16851
+ result.width += w.right - w.left - (c.right - c.left);
16852
+ result.height += w.bottom - w.top - (c.bottom - c.top);
16771
16853
  }
16772
16854
  return result;
16773
16855
  }
16774
16856
 
16775
16857
  // _build/lib/react-qw/reconciler.js
16776
- var dpiFont = gui3.CreateSystemDpiFont();
16777
- var scaleFactor = (() => {
16778
- const hdc = GetDC(NULL);
16779
- const dpi = hdc ? GetDeviceCaps(hdc, 88) : 96;
16780
- if (hdc)
16781
- ReleaseDC(NULL, hdc);
16782
- return dpi / 96;
16783
- })();
16858
+ var dpiFont = createSystemDpiFont();
16859
+ var scaleFactor = getScaleFactor();
16784
16860
  var DELAYED_CONTROLS = /* @__PURE__ */ new Set(["SysListView32", "SysTreeView32", "LISTBOX", "COMBOBOX", "msctls_trackbar32", "SysDateTimePick32", "SysLink"]);
16785
16861
  function isDelayedControl(winClass) {
16786
16862
  return DELAYED_CONTROLS.has(winClass);
@@ -16826,11 +16902,12 @@ function runFlexLayout(inst) {
16826
16902
  const visible = children.filter((c) => !c.props.hidden);
16827
16903
  if (visible.length === 0)
16828
16904
  return;
16829
- const rect = gui3.GetClientRect(inst.hwnd);
16830
- if (!rect) {
16905
+ const rcBuf = RECT.alloc();
16906
+ if (!GetClientRect(inst.hwnd, rcBuf.ptr)) {
16831
16907
  console.log("flex: no rect for", inst.hwnd, inst.type);
16832
16908
  return;
16833
16909
  }
16910
+ const rect = RECT.decode(rcBuf);
16834
16911
  const pw = (rect.right - rect.left) / scaleFactor;
16835
16912
  const ph = (rect.bottom - rect.top) / scaleFactor;
16836
16913
  if (pw <= 0 || ph <= 0) {
@@ -17031,7 +17108,7 @@ var hostConfig = {
17031
17108
  },
17032
17109
  hideInstance(instance) {
17033
17110
  if (instance.hwnd !== null)
17034
- gui3.ShowWindow(
17111
+ ShowWindow(
17035
17112
  instance.hwnd,
17036
17113
  0
17037
17114
  /* ShowWindowCmd.HIDE */
@@ -17039,7 +17116,7 @@ var hostConfig = {
17039
17116
  },
17040
17117
  hideTextInstance(instance) {
17041
17118
  if (instance.hwnd !== null)
17042
- gui3.ShowWindow(
17119
+ ShowWindow(
17043
17120
  instance.hwnd,
17044
17121
  0
17045
17122
  /* ShowWindowCmd.HIDE */
@@ -17047,7 +17124,7 @@ var hostConfig = {
17047
17124
  },
17048
17125
  unhideInstance(instance, _props) {
17049
17126
  if (instance.hwnd !== null)
17050
- gui3.ShowWindow(
17127
+ ShowWindow(
17051
17128
  instance.hwnd,
17052
17129
  5
17053
17130
  /* ShowWindowCmd.SHOW */
@@ -17055,7 +17132,7 @@ var hostConfig = {
17055
17132
  },
17056
17133
  unhideTextInstance(instance, _text) {
17057
17134
  if (instance.hwnd !== null)
17058
- gui3.ShowWindow(
17135
+ ShowWindow(
17059
17136
  instance.hwnd,
17060
17137
  5
17061
17138
  /* ShowWindowCmd.SHOW */
@@ -17302,11 +17379,10 @@ var DateTimePicker = (0, import_react5.forwardRef)(function DateTimePicker2({ va
17302
17379
  if (!h)
17303
17380
  return;
17304
17381
  InvalidateRect(h, NULL, 1);
17305
- const cr = gui6.GetClientRect(h);
17306
- if (cr) {
17307
- const w = cr.right - cr.left;
17308
- const hh = cr.bottom - cr.top;
17309
- gui6.SendMessage(h, 5, 0, hh << 16 | w);
17382
+ const cr = RECT.alloc();
17383
+ if (GetClientRect(h, cr.ptr)) {
17384
+ const { left, top, right, bottom } = RECT.decode(cr);
17385
+ gui6.SendMessage(h, 5, 0, bottom - top << 16 | right - left);
17310
17386
  }
17311
17387
  }, []);
17312
17388
  return (0, import_jsx_runtime4.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
@@ -17367,7 +17443,10 @@ var Input = (0, import_react6.forwardRef)(({ value: controlledValue, defaultValu
17367
17443
  const h = inputRef.current;
17368
17444
  if (!h)
17369
17445
  return;
17370
- const newText = gui7.GetWindowText(h);
17446
+ const cap = GetWindowTextLength(h) + 1;
17447
+ const buf = WCHAR.alloc(cap);
17448
+ GetWindowText(h, buf, cap);
17449
+ const newText = WCHAR.decode(buf);
17371
17450
  if (!isControlled)
17372
17451
  setInternalValue(newText);
17373
17452
  onChange?.(newText);
@@ -17455,6 +17534,49 @@ var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
17455
17534
  var import_react9 = __toESM(require_react(), 1);
17456
17535
  import * as gui9 from "gui";
17457
17536
  import * as ffi3 from "ffi";
17537
+
17538
+ // _build/lib/bitmap.js
17539
+ function createBitmapFromPixels(width, height, pixels) {
17540
+ if (width <= 0 || height <= 0)
17541
+ return NULL;
17542
+ const len = width * height * 4;
17543
+ if (pixels.byteLength < len)
17544
+ return NULL;
17545
+ const bi = BITMAPINFOHEADER.encode({
17546
+ biSize: BITMAPINFOHEADER.size,
17547
+ biWidth: width,
17548
+ biHeight: -height,
17549
+ biPlanes: 1,
17550
+ biBitCount: 32
17551
+ });
17552
+ const hbm = CreateDIBSection(NULL, bi.ptr, 0, NULL, NULL, 0);
17553
+ if (!hbm)
17554
+ return NULL;
17555
+ const src = new PtrArrayBuffer(len);
17556
+ new Uint8Array(src).set(new Uint8Array(pixels, 0, len));
17557
+ if (SetDIBits(
17558
+ NULL,
17559
+ hbm,
17560
+ 0,
17561
+ height,
17562
+ src,
17563
+ bi.ptr,
17564
+ 0
17565
+ /* ColorUse.RGB_COLORS */
17566
+ ) !== height) {
17567
+ DeleteObject(hbm);
17568
+ return NULL;
17569
+ }
17570
+ return hbm;
17571
+ }
17572
+
17573
+ // _build/lib/windows/comctl32.js
17574
+ var b3 = (name, sig) => bind("comctl32.dll", name, sig);
17575
+ var ImageListCreate = /* @__PURE__ */ b3("ImageList_Create", "i32 i32 u32 i32 i32 -> <HIMAGELIST>ptr");
17576
+ var ImageListAdd = /* @__PURE__ */ b3("ImageList_Add", "<HIMAGELIST>ptr <HGDIOBJ>ptr <HGDIOBJ>ptr -> i32");
17577
+ var ImageListDestroy = /* @__PURE__ */ b3("ImageList_Destroy", "<HIMAGELIST>ptr -> i32");
17578
+
17579
+ // _build/lib/react-qw/components/ListView.js
17458
17580
  function writeU32(ptr, offset, v) {
17459
17581
  ffi3.writeByte(ptr + offset, v & 255);
17460
17582
  ffi3.writeByte(ptr + offset + 1, v >> 8 & 255);
@@ -17544,7 +17666,7 @@ function resolveCellStyle(columns2, data2, row, colIndex) {
17544
17666
  }
17545
17667
  function makeLVItem(i, sub, text, image) {
17546
17668
  const textBuf = WCHAR.encode(text);
17547
- const b6 = LVITEMW.encode({
17669
+ const b7 = LVITEMW.encode({
17548
17670
  mask: 1 | (image !== void 0 ? 2 : 0),
17549
17671
  iItem: i,
17550
17672
  iSubItem: sub,
@@ -17561,32 +17683,32 @@ function makeLVItem(i, sub, text, image) {
17561
17683
  piColFmt: 0,
17562
17684
  iGroup: 0
17563
17685
  });
17564
- b6.__textBuf = textBuf;
17565
- return b6;
17686
+ b7.__textBuf = textBuf;
17687
+ return b7;
17566
17688
  }
17567
17689
  var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: columns2, data: data2, style, icons, iconSize, getIcon }, ref) {
17568
17690
  const lvRef = (0, import_react9.useRef)(null);
17569
- const iconListRef = (0, import_react9.useRef)(0);
17691
+ const iconListRef = (0, import_react9.useRef)(NULL);
17570
17692
  (0, import_react9.useEffect)(() => {
17571
17693
  const h = lvRef.current;
17572
17694
  if (!h)
17573
17695
  return;
17574
17696
  const il = iconListRef.current;
17575
- iconListRef.current = 0;
17697
+ iconListRef.current = NULL;
17576
17698
  if (il) {
17577
17699
  gui9.SendMessage(h, 4099, 1, 0);
17578
- gui9.ImageListDestroy(il);
17700
+ ImageListDestroy(il);
17579
17701
  }
17580
17702
  if (!icons || icons.length === 0)
17581
17703
  return;
17582
17704
  const size = iconSize ?? 32;
17583
- const img = gui9.ImageListCreate(size, size, 32, icons.length, 1);
17705
+ const img = ImageListCreate(size, size, 32, icons.length, 1);
17584
17706
  if (!img)
17585
17707
  return;
17586
17708
  for (const p of icons) {
17587
- const hbm = gui9.CreateBitmapFromPixels(size, size, p);
17709
+ const hbm = createBitmapFromPixels(size, size, p);
17588
17710
  if (hbm) {
17589
- gui9.ImageListAdd(img, hbm);
17711
+ ImageListAdd(img, hbm, NULL);
17590
17712
  DeleteObject(hbm);
17591
17713
  }
17592
17714
  }
@@ -17767,22 +17889,19 @@ var RadioButton = (0, import_react11.forwardRef)(({ checked: controlledChecked,
17767
17889
  // _build/lib/react-qw/components/ScrollView.js
17768
17890
  var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
17769
17891
  var import_react12 = __toESM(require_react(), 1);
17770
- import * as gui12 from "gui";
17771
17892
  var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth, contentHeight }, ref) => {
17772
17893
  const svRef = (0, import_react12.useRef)(null);
17773
17894
  const contentRef = (0, import_react12.useRef)(null);
17774
17895
  const scrollXRef = (0, import_react12.useRef)(0);
17775
17896
  const scrollYRef = (0, import_react12.useRef)(0);
17776
17897
  function updateScroll(sv, content) {
17777
- const svRect = gui12.GetClientRect(sv);
17778
- if (!svRect)
17898
+ const svBuf = RECT.alloc();
17899
+ if (!GetClientRect(sv, svBuf.ptr))
17779
17900
  return;
17780
- const svW = svRect.right - svRect.left;
17781
- const svH = svRect.bottom - svRect.top;
17782
- const hdc = GetDC(NULL);
17783
- const scale = hdc ? GetDeviceCaps(hdc, 88) / 96 : 1;
17784
- if (hdc)
17785
- ReleaseDC(NULL, hdc);
17901
+ const { left, top, right, bottom } = RECT.decode(svBuf);
17902
+ const svW = right - left;
17903
+ const svH = bottom - top;
17904
+ const scale = getScaleFactor();
17786
17905
  const natW = Math.round((contentWidth ?? svW / scale) * scale);
17787
17906
  const natH = Math.round((contentHeight ?? svH / scale) * scale);
17788
17907
  scrollXRef.current = Math.max(0, Math.min(scrollXRef.current, natW - svW));
@@ -17799,14 +17918,28 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17799
17918
  );
17800
17919
  forceFlexLayout(content);
17801
17920
  if (natW > svW) {
17802
- gui12.SetScrollInfo(sv, 0, { min: 0, max: natW - 1, page: svW, pos: scrollXRef.current }, true);
17921
+ SetScrollInfo(sv, 0, {
17922
+ cbSize: SCROLLINFO.size,
17923
+ fMask: 1 | 2 | 4,
17924
+ nMin: 0,
17925
+ nMax: natW - 1,
17926
+ nPage: svW,
17927
+ nPos: scrollXRef.current
17928
+ }, 1);
17803
17929
  ShowScrollBar(sv, 0, 1);
17804
17930
  } else {
17805
17931
  scrollXRef.current = 0;
17806
17932
  ShowScrollBar(sv, 0, 0);
17807
17933
  }
17808
17934
  if (natH > svH) {
17809
- gui12.SetScrollInfo(sv, 1, { min: 0, max: natH - 1, page: svH, pos: scrollYRef.current }, true);
17935
+ SetScrollInfo(sv, 1, {
17936
+ cbSize: SCROLLINFO.size,
17937
+ fMask: 1 | 2 | 4,
17938
+ nMin: 0,
17939
+ nMax: natH - 1,
17940
+ nPage: svH,
17941
+ nPos: scrollYRef.current
17942
+ }, 1);
17810
17943
  ShowScrollBar(sv, 1, 1);
17811
17944
  } else {
17812
17945
  scrollYRef.current = 0;
@@ -17836,15 +17969,21 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17836
17969
  1 | 4
17837
17970
  /* SetWindowPosFlag.SWP_NOZORDER */
17838
17971
  );
17839
- gui12.SetScrollInfo(sv, bar, { pos: newPos }, true);
17972
+ SetScrollInfo(sv, bar, { cbSize: SCROLLINFO.size, fMask: 4, nPos: newPos }, 1);
17840
17973
  }
17841
17974
  function handleScroll(e, bar) {
17842
17975
  const sv = svRef.current;
17843
17976
  const content = contentRef.current;
17844
17977
  if (!sv || !content)
17845
17978
  return;
17846
- const info = gui12.GetScrollInfo(sv, bar);
17847
- const maxPos = info.max - info.page + 1;
17979
+ const si = SCROLLINFO.encode({
17980
+ cbSize: SCROLLINFO.size,
17981
+ fMask: 23
17982
+ /* ScrollInfoFlag.ALL */
17983
+ });
17984
+ GetScrollInfo(sv, bar, si.ptr);
17985
+ const info = SCROLLINFO.decode(si);
17986
+ const maxPos = info.nMax - info.nPage + 1;
17848
17987
  const code = e.wParam & 65535;
17849
17988
  const ref_ = bar === 1 ? scrollYRef : scrollXRef;
17850
17989
  let newPos = ref_.current;
@@ -17855,9 +17994,9 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17855
17994
  else if (code === 1)
17856
17995
  newPos += 20;
17857
17996
  else if (code === 2)
17858
- newPos -= info.page;
17997
+ newPos -= info.nPage;
17859
17998
  else if (code === 3)
17860
- newPos += info.page;
17999
+ newPos += info.nPage;
17861
18000
  else
17862
18001
  return;
17863
18002
  newPos = Math.max(0, Math.min(maxPos, newPos));
@@ -17877,8 +18016,14 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17877
18016
  if (!isHorz && contentHeight === void 0)
17878
18017
  return;
17879
18018
  const bar = isHorz ? 0 : 1;
17880
- const info = gui12.GetScrollInfo(sv, bar);
17881
- const maxPos = info.max - info.page + 1;
18019
+ const si = SCROLLINFO.encode({
18020
+ cbSize: SCROLLINFO.size,
18021
+ fMask: 23
18022
+ /* ScrollInfoFlag.ALL */
18023
+ });
18024
+ GetScrollInfo(sv, bar, si.ptr);
18025
+ const info = SCROLLINFO.decode(si);
18026
+ const maxPos = info.nMax - info.nPage + 1;
17882
18027
  const ref_ = isHorz ? scrollXRef : scrollYRef;
17883
18028
  let newPos = ref_.current + dy;
17884
18029
  newPos = Math.max(0, Math.min(maxPos, newPos));
@@ -17926,7 +18071,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17926
18071
  // _build/lib/react-qw/components/Slider.js
17927
18072
  var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
17928
18073
  var import_react13 = __toESM(require_react(), 1);
17929
- import * as gui13 from "gui";
18074
+ import * as gui12 from "gui";
17930
18075
  var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 100, vertical = false, disabled, style }, ref) => {
17931
18076
  const wrapperRef = (0, import_react13.useRef)(null);
17932
18077
  const sliderRef = (0, import_react13.useRef)(null);
@@ -17935,14 +18080,14 @@ var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 1
17935
18080
  if (!h)
17936
18081
  return;
17937
18082
  const lParam = min & 65535 | (max & 65535) << 16;
17938
- gui13.SendMessage(h, 1030, 0, lParam);
17939
- gui13.SendMessage(h, 1029, 1, value);
18083
+ gui12.SendMessage(h, 1030, 0, lParam);
18084
+ gui12.SendMessage(h, 1029, 1, value);
17940
18085
  }, [min, max]);
17941
18086
  (0, import_react13.useEffect)(() => {
17942
18087
  const h = sliderRef.current;
17943
18088
  if (!h)
17944
18089
  return;
17945
- gui13.SendMessage(h, 1029, 1, value);
18090
+ gui12.SendMessage(h, 1029, 1, value);
17946
18091
  }, [value]);
17947
18092
  const tbStyle = 268435456 | 65536 | 1 | (vertical ? 2 : 0);
17948
18093
  return (0, import_jsx_runtime12.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style, ref: (h) => {
@@ -17959,7 +18104,7 @@ var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 1
17959
18104
  const h = sliderRef.current;
17960
18105
  if (!h)
17961
18106
  return 0;
17962
- const pos = gui13.SendMessage(h, 1024, 0, 0);
18107
+ const pos = gui12.SendMessage(h, 1024, 0, 0);
17963
18108
  onChange?.(pos);
17964
18109
  return 0;
17965
18110
  }
@@ -17972,7 +18117,7 @@ var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 1
17972
18117
  // _build/lib/react-qw/components/Tab.js
17973
18118
  var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
17974
18119
  var import_react14 = __toESM(require_react(), 1);
17975
- import * as gui14 from "gui";
18120
+ import * as gui13 from "gui";
17976
18121
  var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex, defaultSelectedIndex = 0, onChange, style }, ref) => {
17977
18122
  const [internalIndex, setInternalIndex] = (0, import_react14.useState)(defaultSelectedIndex);
17978
18123
  const isControlled = controlledIndex !== void 0;
@@ -17982,7 +18127,7 @@ var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex
17982
18127
  const h = tabHwnd.current;
17983
18128
  if (!h)
17984
18129
  return;
17985
- gui14.SendMessage(h, 4873, 0, 0);
18130
+ gui13.SendMessage(h, 4873, 0, 0);
17986
18131
  for (let i = 0; i < tabs.length; i++) {
17987
18132
  const titleBuf = WCHAR.encode(tabs[i].title);
17988
18133
  const tci = TCITEMW.encode({
@@ -17995,14 +18140,14 @@ var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex
17995
18140
  lParam: 0
17996
18141
  });
17997
18142
  const tciPtr = tci.ptr;
17998
- gui14.SendMessage(h, 4926, i, tciPtr);
18143
+ gui13.SendMessage(h, 4926, i, tciPtr);
17999
18144
  }
18000
- gui14.SendMessage(h, 4876, sel, 0);
18145
+ gui13.SendMessage(h, 4876, sel, 0);
18001
18146
  }, [tabs]);
18002
18147
  (0, import_react14.useEffect)(() => {
18003
18148
  const h = tabHwnd.current;
18004
18149
  if (h)
18005
- gui14.SendMessage(h, 4876, sel, 0);
18150
+ gui13.SendMessage(h, 4876, sel, 0);
18006
18151
  }, [sel]);
18007
18152
  return (0, import_jsx_runtime13.jsxs)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
18008
18153
  if (e.msg === 78) {
@@ -18011,7 +18156,7 @@ var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex
18011
18156
  return;
18012
18157
  const code = nmCode(e.lParam);
18013
18158
  if (code === -552 || code === -2) {
18014
- const newSel = gui14.SendMessage(h, 4875, 0, 0);
18159
+ const newSel = gui13.SendMessage(h, 4875, 0, 0);
18015
18160
  if (newSel !== sel) {
18016
18161
  if (!isControlled)
18017
18162
  setInternalIndex(newSel);
@@ -18024,12 +18169,12 @@ var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex
18024
18169
 
18025
18170
  // _build/lib/react-qw/components/Tooltip.js
18026
18171
  var import_react15 = __toESM(require_react(), 1);
18027
- import * as gui15 from "gui";
18172
+ import * as gui14 from "gui";
18028
18173
 
18029
18174
  // _build/lib/react-qw/components/TreeView.js
18030
18175
  var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
18031
18176
  var import_react16 = __toESM(require_react(), 1);
18032
- import * as gui16 from "gui";
18177
+ import * as gui15 from "gui";
18033
18178
  function buildTvItem(textPtr, cChildren) {
18034
18179
  let mask = 1;
18035
18180
  if (cChildren > 0)
@@ -18054,20 +18199,20 @@ function insertItems(hTree, nodes, parentHandle, hItemMap, keyMap) {
18054
18199
  const itemBuf = buildTvItem(textBuf.ptr, cChildren);
18055
18200
  const item = TVITEM.decode(itemBuf);
18056
18201
  const tvins = TVINSERTSTRUCT.encode({ hParent: parentHandle, hInsertAfter: -65536, item });
18057
- const hItem = gui16.SendMessage(hTree, 4402, 0, tvins.ptr);
18202
+ const hItem = gui15.SendMessage(hTree, 4402, 0, tvins.ptr);
18058
18203
  hItemMap.set(hItem, node);
18059
18204
  if (node.key)
18060
18205
  keyMap.set(node.key, hItem);
18061
18206
  if (node.children && node.children.length > 0) {
18062
18207
  insertItems(hTree, node.children, hItem, hItemMap, keyMap);
18063
- gui16.SendMessage(hTree, 4354, 2, hItem);
18208
+ gui15.SendMessage(hTree, 4354, 2, hItem);
18064
18209
  }
18065
18210
  }
18066
18211
  }
18067
18212
  function deleteAllItems(hTree) {
18068
- const n = gui16.SendMessage(hTree, 4357, 0, 0);
18213
+ const n = gui15.SendMessage(hTree, 4357, 0, 0);
18069
18214
  if (n > 0)
18070
- gui16.SendMessage(
18215
+ gui15.SendMessage(
18071
18216
  hTree,
18072
18217
  4353,
18073
18218
  1,
@@ -18099,7 +18244,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data: dat
18099
18244
  const h = tvRef.current;
18100
18245
  if (!h)
18101
18246
  return;
18102
- gui16.SendMessage(
18247
+ gui15.SendMessage(
18103
18248
  h,
18104
18249
  4396,
18105
18250
  0,
@@ -18115,7 +18260,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data: dat
18115
18260
  return;
18116
18261
  const hItem = keyMapRef.current.get(selKey);
18117
18262
  if (hItem !== void 0)
18118
- gui16.SendMessage(h, 4363, 9, hItem);
18263
+ gui15.SendMessage(h, 4363, 9, hItem);
18119
18264
  }, [selKey]);
18120
18265
  return (0, import_jsx_runtime14.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
18121
18266
  if (e.msg === 78) {
@@ -18124,7 +18269,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data: dat
18124
18269
  const h = tvRef.current;
18125
18270
  if (!h)
18126
18271
  return;
18127
- const hCaret = gui16.SendMessage(h, 4362, 9, 0);
18272
+ const hCaret = gui15.SendMessage(h, 4362, 9, 0);
18128
18273
  const node = hItemMapRef.current.get(hCaret) ?? null;
18129
18274
  const key = node?.key ?? null;
18130
18275
  if (!isControlled)
@@ -18142,24 +18287,24 @@ var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
18142
18287
  var import_react17 = __toESM(require_react(), 1);
18143
18288
 
18144
18289
  // _build/lib/windows/comdlg32.js
18145
- var b3 = (name, sig) => bind("comdlg32.dll", name, sig);
18146
- var GetOpenFileName = /* @__PURE__ */ b3("GetOpenFileNameW", "<OPENFILENAMEW>ptr -> u32");
18290
+ var b4 = (name, sig) => bind("comdlg32.dll", name, sig);
18291
+ var GetOpenFileName = /* @__PURE__ */ b4("GetOpenFileNameW", "<OPENFILENAMEW>ptr -> u32");
18147
18292
 
18148
18293
  // _build/lib/windows/shell32.js
18149
- var b4 = (name, sig, encoders) => bind("shell32.dll", name, sig, encoders);
18150
- var SHBrowseForFolder = /* @__PURE__ */ b4("SHBrowseForFolderW", "<BROWSEINFOW>ptr -> <>ptr");
18151
- var SHGetPathFromIDList = /* @__PURE__ */ b4("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
18294
+ var b5 = (name, sig, encoders) => bind("shell32.dll", name, sig, encoders);
18295
+ var SHBrowseForFolder = /* @__PURE__ */ b5("SHBrowseForFolderW", "<BROWSEINFOW>ptr -> <>ptr");
18296
+ var SHGetPathFromIDList = /* @__PURE__ */ b5("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
18152
18297
  var Shell_NotifyIconGetRect = (() => {
18153
18298
  try {
18154
- return b4("Shell_NotifyIconGetRect", "<NOTIFYICONIDENTIFIER>ptr <RECT>ptr -> i32", { NOTIFYICONIDENTIFIER });
18299
+ return b5("Shell_NotifyIconGetRect", "<NOTIFYICONIDENTIFIER>ptr <RECT>ptr -> i32", { NOTIFYICONIDENTIFIER });
18155
18300
  } catch {
18156
18301
  return null;
18157
18302
  }
18158
18303
  })();
18159
18304
 
18160
18305
  // _build/lib/windows/ole32.js
18161
- var b5 = (name, sig) => bind("ole32.dll", name, sig);
18162
- var CoTaskMemFree = /* @__PURE__ */ b5("CoTaskMemFree", "<>ptr -> void");
18306
+ var b6 = (name, sig) => bind("ole32.dll", name, sig);
18307
+ var CoTaskMemFree = /* @__PURE__ */ b6("CoTaskMemFree", "<>ptr -> void");
18163
18308
 
18164
18309
  // _build/lib/react-qw/components/PathPicker.js
18165
18310
  function openFileDialog(owner, filter, title, multiple) {
@@ -18254,7 +18399,7 @@ var rootMap = /* @__PURE__ */ new Map();
18254
18399
  function ensureDefaultClass() {
18255
18400
  if (defaultClassRegistered)
18256
18401
  return DEFAULT_CLASS;
18257
- gui17.RegisterClass(DEFAULT_CLASS, (hwnd, msg, wParam, lParam) => {
18402
+ gui16.RegisterClass(DEFAULT_CLASS, (hwnd, msg, wParam, lParam) => {
18258
18403
  const entry = rootMap.get(hwnd);
18259
18404
  if (msg === 2 && entry) {
18260
18405
  rootMap.delete(hwnd);
@@ -18280,15 +18425,27 @@ function createRoot(container) {
18280
18425
  const ws = (cfg.ws ?? 0) | 13565952;
18281
18426
  const w = (cfg.width ?? 800) * scaleFactor;
18282
18427
  const h = (cfg.height ?? 600) * scaleFactor;
18283
- const [sw, sh] = [GetSystemMetrics(0), GetSystemMetrics(1)];
18428
+ const [sw, sh] = [GetSystemMetrics(
18429
+ 0
18430
+ /* SysMetrics.CXSCREEN */
18431
+ ), GetSystemMetrics(
18432
+ 1
18433
+ /* SysMetrics.CYSCREEN */
18434
+ )];
18284
18435
  const x = cfg.x === void 0 ? (sw - w) / 2 | 0 : cfg.x === -2147483648 ? -2147483648 : cfg.x * scaleFactor;
18285
18436
  const y = cfg.y === void 0 ? (sh - h) / 2 | 0 : cfg.y === -2147483648 ? -2147483648 : cfg.y * scaleFactor;
18286
- const hwin = gui17.CreateWindow(className, cfg.text || "", ws, x, y, w, h, null, null);
18437
+ const hwin = gui16.CreateWindow(className, cfg.text || "", ws, x, y, w, h, null, null);
18287
18438
  if (!hwin)
18288
18439
  throw new Error("CreateWindow failed");
18289
18440
  hwnd = hwin;
18290
- if (!cfg.noShowWindow)
18291
- gui17.ShowWindow(hwnd);
18441
+ if (!cfg.noShowWindow) {
18442
+ ShowWindow(
18443
+ hwnd,
18444
+ 1
18445
+ /* ShowWindowCmd.SHOWNORMAL */
18446
+ );
18447
+ UpdateWindow(hwnd);
18448
+ }
18292
18449
  } else {
18293
18450
  hwnd = container;
18294
18451
  }
@@ -18325,10 +18482,10 @@ function expect(label, actual, expected) {
18325
18482
  }
18326
18483
  }
18327
18484
  function nm(size, code) {
18328
- const b6 = new ArrayBuffer(size);
18329
- const dv = new DataView(b6);
18485
+ const b7 = new ArrayBuffer(size);
18486
+ const dv = new DataView(b7);
18330
18487
  dv.setInt32(2 * P, code, true);
18331
- return { b: b6, dv };
18488
+ return { b: b7, dv };
18332
18489
  }
18333
18490
  function setPtr(dv, off, v) {
18334
18491
  if (P === 8)
@@ -18336,8 +18493,8 @@ function setPtr(dv, off, v) {
18336
18493
  else
18337
18494
  dv.setUint32(off, v >>> 0, true);
18338
18495
  }
18339
- function notify(h, b6) {
18340
- return SendMessage(h, 78, 0, ffi4.bufferPtr(b6));
18496
+ function notify(h, b7) {
18497
+ return SendMessage(h, 78, 0, ffi4.bufferPtr(b7));
18341
18498
  }
18342
18499
  var data = [
18343
18500
  { name: "a", size: "1", action: "x" },
@@ -18396,7 +18553,7 @@ function child(h) {
18396
18553
  const c = GetWindow(
18397
18554
  h,
18398
18555
  5
18399
- /* GW_CHILD */
18556
+ /* GetWindowCmd.CHILD */
18400
18557
  );
18401
18558
  if (!c)
18402
18559
  throw new Error("no child window");
@@ -18556,7 +18713,7 @@ function runAll() {
18556
18713
  const tabCtl = GetWindow(
18557
18714
  child(tabW),
18558
18715
  1
18559
- /* GW_HWNDLAST */
18716
+ /* GetWindowCmd.LAST */
18560
18717
  );
18561
18718
  if (!tabCtl)
18562
18719
  throw new Error("no tab control");