twico-ui 1.22.0 → 1.22.2
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.
- package/CHANGELOG.md +15 -0
- package/dist/index.cjs +56 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.mjs +56 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Twico UI are documented here (newest first). This file is generated automatically on each release by [semantic-release](https://semantic-release.gitbook.io/) from [Conventional Commits](https://www.conventionalcommits.org/) — do not edit it by hand. The same notes appear on each [GitHub Release](https://github.com/EncryptionL/twico-ui/releases).
|
|
4
4
|
|
|
5
|
+
## [1.22.2](https://github.com/EncryptionL/twico-ui/compare/v1.22.1...v1.22.2) (2026-07-29)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **datatable:** reset optimistic rowReorder overlay when rows change in server mode ([#296](https://github.com/EncryptionL/twico-ui/issues/296)) ([600cb16](https://github.com/EncryptionL/twico-ui/commit/600cb16099faf0f5498c11430773d8375dc593ac))
|
|
11
|
+
|
|
12
|
+
## [1.22.1](https://github.com/EncryptionL/twico-ui/compare/v1.22.0...v1.22.1) (2026-07-29)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **datatable:** keep the Filters popover position:fixed (regression from [#292](https://github.com/EncryptionL/twico-ui/issues/292)) ([0d53d05](https://github.com/EncryptionL/twico-ui/commit/0d53d057e861f5327af7b43730b3f143a937205e)), closes [#294](https://github.com/EncryptionL/twico-ui/issues/294)
|
|
18
|
+
* **inputs:** portaled dropdown menu re-tracks its trigger's resize ([b6e6843](https://github.com/EncryptionL/twico-ui/commit/b6e6843f2345f60db0719f7e12bef504393e3189)), closes [#292](https://github.com/EncryptionL/twico-ui/issues/292)
|
|
19
|
+
|
|
5
20
|
# [1.22.0](https://github.com/EncryptionL/twico-ui/compare/v1.21.1...v1.22.0) (2026-07-29)
|
|
6
21
|
|
|
7
22
|
|
package/dist/index.cjs
CHANGED
|
@@ -5345,9 +5345,16 @@ function ColorPicker({
|
|
|
5345
5345
|
const onMove = () => place();
|
|
5346
5346
|
window.addEventListener("scroll", onMove, true);
|
|
5347
5347
|
window.addEventListener("resize", onMove);
|
|
5348
|
+
let ro;
|
|
5349
|
+
const rt = triggerRef.current;
|
|
5350
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
5351
|
+
ro = new ResizeObserver(onMove);
|
|
5352
|
+
ro.observe(rt);
|
|
5353
|
+
}
|
|
5348
5354
|
return () => {
|
|
5349
5355
|
window.removeEventListener("scroll", onMove, true);
|
|
5350
5356
|
window.removeEventListener("resize", onMove);
|
|
5357
|
+
ro?.disconnect();
|
|
5351
5358
|
};
|
|
5352
5359
|
}, [open, place]);
|
|
5353
5360
|
const labelId = React51__namespace.default.useId();
|
|
@@ -5807,9 +5814,16 @@ function Combobox({
|
|
|
5807
5814
|
const onMove = () => place();
|
|
5808
5815
|
window.addEventListener("scroll", onMove, true);
|
|
5809
5816
|
window.addEventListener("resize", onMove);
|
|
5817
|
+
let ro;
|
|
5818
|
+
const rt = controlRef.current;
|
|
5819
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
5820
|
+
ro = new ResizeObserver(onMove);
|
|
5821
|
+
ro.observe(rt);
|
|
5822
|
+
}
|
|
5810
5823
|
return () => {
|
|
5811
5824
|
window.removeEventListener("scroll", onMove, true);
|
|
5812
5825
|
window.removeEventListener("resize", onMove);
|
|
5826
|
+
ro?.disconnect();
|
|
5813
5827
|
};
|
|
5814
5828
|
}, [open, portal, place]);
|
|
5815
5829
|
React51__namespace.default.useEffect(() => {
|
|
@@ -6634,9 +6648,16 @@ function Select({
|
|
|
6634
6648
|
const onMove = () => place();
|
|
6635
6649
|
window.addEventListener("scroll", onMove, true);
|
|
6636
6650
|
window.addEventListener("resize", onMove);
|
|
6651
|
+
let ro;
|
|
6652
|
+
const rt = triggerRef.current;
|
|
6653
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
6654
|
+
ro = new ResizeObserver(onMove);
|
|
6655
|
+
ro.observe(rt);
|
|
6656
|
+
}
|
|
6637
6657
|
return () => {
|
|
6638
6658
|
window.removeEventListener("scroll", onMove, true);
|
|
6639
6659
|
window.removeEventListener("resize", onMove);
|
|
6660
|
+
ro?.disconnect();
|
|
6640
6661
|
};
|
|
6641
6662
|
}, [open, portal, place]);
|
|
6642
6663
|
React51__namespace.default.useEffect(() => {
|
|
@@ -7463,9 +7484,16 @@ function MultiSelect({
|
|
|
7463
7484
|
const onMove = () => place();
|
|
7464
7485
|
window.addEventListener("scroll", onMove, true);
|
|
7465
7486
|
window.addEventListener("resize", onMove);
|
|
7487
|
+
let ro;
|
|
7488
|
+
const rt = controlRef.current;
|
|
7489
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
7490
|
+
ro = new ResizeObserver(onMove);
|
|
7491
|
+
ro.observe(rt);
|
|
7492
|
+
}
|
|
7466
7493
|
return () => {
|
|
7467
7494
|
window.removeEventListener("scroll", onMove, true);
|
|
7468
7495
|
window.removeEventListener("resize", onMove);
|
|
7496
|
+
ro?.disconnect();
|
|
7469
7497
|
};
|
|
7470
7498
|
}, [open, portal, place]);
|
|
7471
7499
|
React51__namespace.default.useEffect(() => {
|
|
@@ -8529,7 +8557,10 @@ th.twc-dt__rownum .twc-dt__th-inner { padding-inline: 8px; gap: 2px; justify-con
|
|
|
8529
8557
|
cascade \u2014 user drag (-usr) > #289 measured auto-fit (-fit) > 118px fallback \u2014 entirely in clamp(), so
|
|
8530
8558
|
neither writer reads the other (reset = remove the -usr var and auto-fit instantly re-wins). */
|
|
8531
8559
|
.twc-dt__filters {
|
|
8532
|
-
position:
|
|
8560
|
+
/* #294: do NOT set 'position' here \u2014 this element also carries .twc-dt__pop (position: fixed), and an
|
|
8561
|
+
equal-specificity 'position: relative' defined later would clobber it, dropping the popover into normal
|
|
8562
|
+
flow below the table. The panel stays position: fixed, which already anchors the absolutely-positioned
|
|
8563
|
+
.twc-dt__pop-grip; per-field handles anchor to their own position: relative .twc-dt__f-* fields. */
|
|
8533
8564
|
width: var(--twc-dt-panel-w, 580px); max-width: calc(100vw - 32px);
|
|
8534
8565
|
height: var(--twc-dt-panel-h, auto); max-height: calc(100vh - 32px);
|
|
8535
8566
|
display: flex; flex-direction: column;
|
|
@@ -9268,6 +9299,9 @@ function Datatable({
|
|
|
9268
9299
|
const [headH, setHeadH] = React51__namespace.default.useState(41);
|
|
9269
9300
|
const theadRef = React51__namespace.default.useRef(null);
|
|
9270
9301
|
const [rowOrder, setRowOrder] = React51__namespace.default.useState(null);
|
|
9302
|
+
React51__namespace.default.useEffect(() => {
|
|
9303
|
+
if (serverMode) setRowOrder(null);
|
|
9304
|
+
}, [rows, serverMode]);
|
|
9271
9305
|
const [rowHeights, setRowHeights] = React51__namespace.default.useState({});
|
|
9272
9306
|
const [rowDrag, setRowDrag] = React51__namespace.default.useState({ from: null, over: null, after: false });
|
|
9273
9307
|
const [rowGrab, setRowGrab] = React51__namespace.default.useState(null);
|
|
@@ -12606,9 +12640,16 @@ function DatePicker({
|
|
|
12606
12640
|
const onMove = () => place();
|
|
12607
12641
|
window.addEventListener("scroll", onMove, true);
|
|
12608
12642
|
window.addEventListener("resize", onMove);
|
|
12643
|
+
let ro;
|
|
12644
|
+
const rt = triggerRef.current;
|
|
12645
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
12646
|
+
ro = new ResizeObserver(onMove);
|
|
12647
|
+
ro.observe(rt);
|
|
12648
|
+
}
|
|
12609
12649
|
return () => {
|
|
12610
12650
|
window.removeEventListener("scroll", onMove, true);
|
|
12611
12651
|
window.removeEventListener("resize", onMove);
|
|
12652
|
+
ro?.disconnect();
|
|
12612
12653
|
};
|
|
12613
12654
|
}, [open, place]);
|
|
12614
12655
|
React51__namespace.default.useEffect(() => {
|
|
@@ -13150,9 +13191,16 @@ function DateRangePicker({
|
|
|
13150
13191
|
const onMove = () => place();
|
|
13151
13192
|
window.addEventListener("scroll", onMove, true);
|
|
13152
13193
|
window.addEventListener("resize", onMove);
|
|
13194
|
+
let ro;
|
|
13195
|
+
const rt = triggerRef.current;
|
|
13196
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
13197
|
+
ro = new ResizeObserver(onMove);
|
|
13198
|
+
ro.observe(rt);
|
|
13199
|
+
}
|
|
13153
13200
|
return () => {
|
|
13154
13201
|
window.removeEventListener("scroll", onMove, true);
|
|
13155
13202
|
window.removeEventListener("resize", onMove);
|
|
13203
|
+
ro?.disconnect();
|
|
13156
13204
|
};
|
|
13157
13205
|
}, [open, place]);
|
|
13158
13206
|
React51__namespace.default.useEffect(() => {
|
|
@@ -13703,9 +13751,16 @@ function TimePicker({
|
|
|
13703
13751
|
const onMove = () => place();
|
|
13704
13752
|
window.addEventListener("scroll", onMove, true);
|
|
13705
13753
|
window.addEventListener("resize", onMove);
|
|
13754
|
+
let ro;
|
|
13755
|
+
const rt = triggerRef.current;
|
|
13756
|
+
if (rt && typeof ResizeObserver !== "undefined") {
|
|
13757
|
+
ro = new ResizeObserver(onMove);
|
|
13758
|
+
ro.observe(rt);
|
|
13759
|
+
}
|
|
13706
13760
|
return () => {
|
|
13707
13761
|
window.removeEventListener("scroll", onMove, true);
|
|
13708
13762
|
window.removeEventListener("resize", onMove);
|
|
13763
|
+
ro?.disconnect();
|
|
13709
13764
|
};
|
|
13710
13765
|
}, [open, place]);
|
|
13711
13766
|
React51__namespace.default.useEffect(() => {
|