wenay-react2 1.0.38 → 1.0.40

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 (38) hide show
  1. package/lib/common/src/components/Dnd/FloatingWindow.d.ts +29 -12
  2. package/lib/common/src/components/Dnd/FloatingWindow.js +100 -91
  3. package/lib/common/src/components/Input.d.ts +25 -6
  4. package/lib/common/src/components/Input.js +27 -8
  5. package/lib/common/src/components/Menu/RightMenu.d.ts +28 -1
  6. package/lib/common/src/components/Menu/RightMenu.js +62 -35
  7. package/lib/common/src/components/Modal/LeftModal.js +5 -4
  8. package/lib/common/src/components/Modal/Modal.js +8 -7
  9. package/lib/common/src/components/ParamsEditor.d.ts +15 -0
  10. package/lib/common/src/components/ParamsEditor.js +45 -18
  11. package/lib/common/src/components/Settings/SettingsDialog.d.ts +68 -6
  12. package/lib/common/src/components/Settings/SettingsDialog.js +73 -13
  13. package/lib/common/src/components/Toolbar/Toolbar.js +64 -19
  14. package/lib/common/src/components/UiSlot/UiSlot.js +5 -4
  15. package/lib/common/src/grid/columnState/ColumnDots.d.ts +1 -1
  16. package/lib/common/src/grid/columnState/ColumnDots.js +1 -1
  17. package/lib/common/src/grid/columnState/ColumnsMenu.js +10 -18
  18. package/lib/common/src/grid/columnState/columnState.js +8 -6
  19. package/lib/common/src/hooks/useKeyboard.js +4 -3
  20. package/lib/common/src/logs/logs.d.ts +13 -133
  21. package/lib/common/src/logs/logs.js +20 -39
  22. package/lib/common/src/logs/logsContext.d.ts +26 -0
  23. package/lib/common/src/logs/logsContext.js +25 -20
  24. package/lib/common/src/logs/logsController.d.ts +88 -0
  25. package/lib/common/src/logs/logsController.js +54 -0
  26. package/lib/common/src/logs/miniLogs.d.ts +69 -3
  27. package/lib/common/src/logs/miniLogs.js +70 -15
  28. package/lib/common/src/menu/menu.d.ts +15 -3
  29. package/lib/common/src/menu/menu.js +81 -17
  30. package/lib/common/src/menu/menuMouse.d.ts +35 -0
  31. package/lib/common/src/menu/menuMouse.js +113 -4
  32. package/lib/common/src/styles/tokens.d.ts +79 -1
  33. package/lib/common/src/styles/tokens.js +79 -1
  34. package/lib/common/src/utils/memoryStore.d.ts +1 -10
  35. package/lib/common/src/utils/searchHistory.js +4 -3
  36. package/lib/style/style.css +122 -50
  37. package/lib/style/tokens.css +76 -2
  38. package/package.json +49 -49
@@ -1,4 +1,4 @@
1
- import { renderBy, updateBy } from "../../updateBy";
1
+ import { createUpdateApi } from "../../updateBy";
2
2
  import { memoryGetOrCreate, memoryMarkDirty } from "./memoryStore";
3
3
  function normalizeSearchHistoryItem(value) {
4
4
  return value.replace(/\s+/g, " ").trim();
@@ -6,6 +6,7 @@ function normalizeSearchHistoryItem(value) {
6
6
  export function createSearchHistory(opts) {
7
7
  const max = Math.max(1, opts.max ?? 8);
8
8
  const st = memoryGetOrCreate(opts.key, { items: [] });
9
+ const stApi = createUpdateApi(st);
9
10
  function normalize() {
10
11
  const seen = new Set();
11
12
  st.items = st.items
@@ -23,7 +24,7 @@ export function createSearchHistory(opts) {
23
24
  }
24
25
  function emit() {
25
26
  normalize();
26
- renderBy(st);
27
+ stApi.render();
27
28
  memoryMarkDirty(opts.key);
28
29
  }
29
30
  return {
@@ -31,7 +32,7 @@ export function createSearchHistory(opts) {
31
32
  return normalize().slice();
32
33
  },
33
34
  use() {
34
- updateBy(st);
35
+ stApi.use();
35
36
  return normalize().slice();
36
37
  },
37
38
  add(value) {
@@ -745,32 +745,103 @@ body {
745
745
  overflow: auto;
746
746
  }
747
747
 
748
+ /* Column state compact menu (ColumnsMenu/MenuStrip). Visual defaults moved from
749
+ component inline styles; runtime drag transforms remain inline. */
750
+ .wenayColsMenu,
751
+ .wenayColsMenuList {
752
+ display: flex;
753
+ align-items: center;
754
+ gap: var(--cols-menu-gap, 6px);
755
+ flex-wrap: wrap;
756
+ }
757
+ .wenayColsMenu {
758
+ user-select: none;
759
+ }
760
+ .wenayColsMenuBtn {
761
+ position: relative;
762
+ display: flex;
763
+ align-items: center;
764
+ gap: var(--cols-menu-btn-gap, 4px);
765
+ padding: var(--cols-menu-btn-padding, 3px 9px);
766
+ border-radius: var(--cols-menu-btn-radius, 6px);
767
+ font-size: var(--cols-menu-btn-font-size, 12px);
768
+ line-height: var(--cols-menu-btn-line-height, 16px);
769
+ white-space: nowrap;
770
+ cursor: pointer;
771
+ }
772
+ .wenayColsMenuBtn_on {
773
+ border: var(--cols-menu-on-border, 1px solid #24292f);
774
+ background: var(--cols-menu-on-bg, #24292f);
775
+ color: var(--cols-menu-on-color, #fff);
776
+ }
777
+ .wenayColsMenuBtn_off {
778
+ border: var(--cols-menu-off-border, 1px solid #d0d7de);
779
+ background: var(--cols-menu-off-bg, #fff);
780
+ color: var(--cols-menu-off-color, #8c959f);
781
+ text-decoration: line-through;
782
+ }
783
+ .wenayColsMenuBtn_disabled {
784
+ border: var(--cols-menu-disabled-border, 1px dashed #d0d7de);
785
+ background: var(--cols-menu-disabled-bg, #f6f8fa);
786
+ color: var(--cols-menu-disabled-color, #c4ccd4);
787
+ cursor: default;
788
+ }
789
+ .wenayColsMenuBtn_fixed {
790
+ box-shadow: var(--cols-menu-fixed-shadow, 0 0 0 2px #eaeef2);
791
+ }
792
+ .wenayColsMenuBtn_dragging {
793
+ z-index: 3;
794
+ box-shadow: var(--cols-menu-drag-shadow, 0 3px 10px rgba(0, 0, 0, 0.35));
795
+ }
796
+ .wenayColsMenuBtn_shift {
797
+ transition: transform 0.15s ease;
798
+ }
799
+ .wenayColsMenuIcon {
800
+ display: inline-flex;
801
+ align-items: center;
802
+ }
803
+ .wenayColsMenuAbbr {
804
+ font-size: var(--cols-menu-abbr-font-size, 10px);
805
+ font-weight: var(--cols-menu-abbr-font-weight, 700);
806
+ letter-spacing: var(--cols-menu-abbr-letter-spacing, 0.5px);
807
+ text-transform: uppercase;
808
+ }
809
+ .wenayColsMenuMarks {
810
+ font-size: var(--cols-menu-marks-font-size, 9px);
811
+ opacity: var(--cols-menu-marks-opacity, 0.9);
812
+ }
813
+ .wenayColsMenuDivider {
814
+ width: 1px;
815
+ align-self: stretch;
816
+ margin: 1px 2px;
817
+ background: var(--cols-menu-divider, #d0d7de);
818
+ }
748
819
  /* Column state mobile primitives (ColumnDots/CardList). Visual defaults mirror the
749
- original stand-29 inline look; apps can still override with className/style. */
820
+ restored stand-29 look and are tokenized through --cols-dots-* / --cols-card-*. */
750
821
  .wenayColDots {
751
822
  user-select: none;
752
- color: #24292f;
823
+ color: var(--cols-dots-text, #24292f);
753
824
  }
754
825
  .wenayColDotsHead {
755
826
  display: flex;
756
827
  align-items: center;
757
- gap: 10px;
758
- margin-bottom: 6px;
759
- font-size: 12px;
828
+ gap: var(--cols-dots-head-gap, 10px);
829
+ margin-bottom: var(--cols-dots-head-margin-bottom, 6px);
830
+ font-size: var(--cols-dots-head-font-size, 12px);
760
831
  }
761
832
  .wenayColDotsMeta {
762
- color: #57606a;
833
+ color: var(--cols-dots-meta-color, #57606a);
763
834
  }
764
835
  .wenayColDotsSpacer {
765
836
  flex: 1;
766
837
  }
767
838
  .wenayColDotsSort {
768
- border: 1px solid #6e7781;
769
- border-radius: 6px;
770
- padding: 2px 8px;
771
- font-size: 12px;
839
+ border: var(--cols-dots-sort-border, 1px solid #6e7781);
840
+ border-radius: var(--cols-dots-sort-radius, 6px);
841
+ padding: var(--cols-dots-sort-padding, 2px 8px);
842
+ font-size: var(--cols-dots-sort-font-size, 12px);
772
843
  cursor: pointer;
773
- background: #fff;
844
+ background: var(--cols-dots-sort-bg, #fff);
774
845
  }
775
846
  .wenayColDotsSort:disabled {
776
847
  cursor: default;
@@ -778,8 +849,8 @@ body {
778
849
  }
779
850
  .wenayColDotsTrack {
780
851
  position: relative;
781
- height: 56px;
782
- margin: 0 14px;
852
+ height: var(--cols-dots-track-height, 56px);
853
+ margin: var(--cols-dots-track-margin, 0 14px);
783
854
  touch-action: none;
784
855
  }
785
856
  .wenayColDotsRail {
@@ -789,14 +860,14 @@ body {
789
860
  top: 27px;
790
861
  height: 2px;
791
862
  border-radius: 1px;
792
- background: #d0d7de;
863
+ background: var(--cols-dots-rail, #d0d7de);
793
864
  }
794
865
  .wenayColDotsMark {
795
866
  position: absolute;
796
867
  top: 0;
797
- width: 44px;
798
- height: 56px;
799
- margin-left: -22px;
868
+ width: var(--cols-dots-mark-width, 44px);
869
+ height: var(--cols-dots-mark-height, 56px);
870
+ margin-left: var(--cols-dots-mark-margin-left, -22px);
800
871
  }
801
872
  .wenayColDotsSortMark {
802
873
  position: absolute;
@@ -804,8 +875,8 @@ body {
804
875
  right: 0;
805
876
  top: 0;
806
877
  text-align: center;
807
- font-size: 11px;
808
- color: #0969da;
878
+ font-size: var(--cols-dots-sort-mark-font-size, 11px);
879
+ color: var(--cols-dots-sort-mark-color, #0969da);
809
880
  font-weight: 700;
810
881
  }
811
882
  .wenayColDotsMarkPin {
@@ -816,7 +887,7 @@ body {
816
887
  height: 8px;
817
888
  margin-left: -4px;
818
889
  border-radius: 4px;
819
- background: #afb8c1;
890
+ background: var(--cols-dots-pin, #afb8c1);
820
891
  }
821
892
  .wenayColDotsMark_on .wenayColDotsMarkPin {
822
893
  background: transparent;
@@ -827,14 +898,14 @@ body {
827
898
  right: 0;
828
899
  top: 40px;
829
900
  text-align: center;
830
- font-size: 10px;
831
- color: #8c959f;
901
+ font-size: var(--cols-dots-label-font-size, 10px);
902
+ color: var(--cols-dots-label-color, #8c959f);
832
903
  overflow: hidden;
833
904
  text-overflow: ellipsis;
834
905
  white-space: nowrap;
835
906
  }
836
907
  .wenayColDotsMark_on .wenayColDotsMarkLabel {
837
- color: #24292f;
908
+ color: var(--cols-dots-label-active-color, #24292f);
838
909
  }
839
910
  .wenayColDotsDotWrap {
840
911
  position: absolute;
@@ -860,37 +931,37 @@ body {
860
931
  opacity: 0.4;
861
932
  }
862
933
  .wenayColDotsDot {
863
- width: 18px;
864
- height: 18px;
865
- border-radius: 9px;
866
- background: #24292f;
934
+ width: var(--cols-dots-dot-size, 18px);
935
+ height: var(--cols-dots-dot-size, 18px);
936
+ border-radius: var(--cols-dots-dot-radius, 9px);
937
+ background: var(--cols-dots-dot-bg, #24292f);
867
938
  border: 2px solid transparent;
868
939
  }
869
940
  .wenayColDotsDotWrap_dragging .wenayColDotsDot {
870
- box-shadow: 0 3px 10px rgba(0, 0, 0, 0.35);
941
+ box-shadow: var(--cols-dots-dot-shadow, 0 3px 10px rgba(0, 0, 0, 0.35));
871
942
  }
872
943
  .wenayColDotsDot_selected {
873
- background: #0969da;
874
- border-color: #b6d4fe;
944
+ background: var(--cols-dots-selected-bg, #0969da);
945
+ border-color: var(--cols-dots-selected-border, #b6d4fe);
875
946
  }
876
947
  .wenayColDotsDot_fixed {
877
- border-color: #afb8c1;
948
+ border-color: var(--cols-dots-fixed-border, #afb8c1);
878
949
  }
879
950
  .wenayCardList {
880
951
  display: grid;
881
- gap: 8px;
952
+ gap: var(--cols-card-gap, 8px);
882
953
  }
883
954
  .wenayCardListItem {
884
- border: 1px solid #d0d7de;
885
- border-radius: 8px;
886
- padding: 8px 10px;
887
- background: #fff;
955
+ border: var(--cols-card-border, 1px solid #d0d7de);
956
+ border-radius: var(--cols-card-radius, 8px);
957
+ padding: var(--cols-card-padding, 8px 10px);
958
+ background: var(--cols-card-bg, #fff);
888
959
  }
889
960
  .wenayCardListHeader {
890
961
  display: flex;
891
962
  align-items: center;
892
- gap: 8px;
893
- margin-bottom: 6px;
963
+ gap: var(--cols-card-header-gap, 8px);
964
+ margin-bottom: var(--cols-card-header-margin-bottom, 6px);
894
965
  }
895
966
  .wenayCardListHeader_compact {
896
967
  margin-bottom: 0;
@@ -900,32 +971,33 @@ body {
900
971
  overflow: hidden;
901
972
  text-overflow: ellipsis;
902
973
  white-space: nowrap;
903
- font-size: 14px;
974
+ font-size: var(--cols-card-title-font-size, 14px);
904
975
  }
905
976
  .wenayCardListAccent {
906
- font-size: 11px;
907
- padding: 1px 8px;
908
- border-radius: 10px;
909
- background: #ddf4ff;
910
- color: #0969da;
977
+ font-size: var(--cols-card-accent-font-size, 11px);
978
+ padding: var(--cols-card-accent-padding, 1px 8px);
979
+ border-radius: var(--cols-card-accent-radius, 10px);
980
+ background: var(--cols-card-accent-bg, #ddf4ff);
981
+ color: var(--cols-card-accent-color, #0969da);
911
982
  white-space: nowrap;
912
983
  }
913
984
  .wenayCardListField {
914
985
  display: flex;
915
- gap: 10px;
916
- font-size: 12px;
917
- line-height: 1.7;
986
+ gap: var(--cols-card-field-gap, 10px);
987
+ font-size: var(--cols-card-field-font-size, 12px);
988
+ line-height: var(--cols-card-field-line-height, 1.7);
918
989
  }
919
990
  .wenayCardListLabel {
920
- color: #57606a;
921
- min-width: 72px;
991
+ color: var(--cols-card-label-color, #57606a);
992
+ min-width: var(--cols-card-label-min-width, 72px);
922
993
  }
923
994
  .wenayCardListValue {
924
995
  flex: 1;
925
996
  text-align: right;
926
997
  overflow: hidden;
927
998
  text-overflow: ellipsis;
928
- }
999
+ }
1000
+
929
1001
  /* Toolbar (createToolbar). Themed via --tb-* (tokens.css), dark defaults. */
930
1002
  .wenayTb {
931
1003
  display: inline-flex;
@@ -85,9 +85,83 @@
85
85
  --tb-pop-bg: var(--color-bg-dark);
86
86
  --tb-pop-border: 1px solid var(--color-border-common);
87
87
  --tb-pop-radius: 8px;
88
- --tb-pop-shadow: 0 8px 28px rgba(0, 0, 0, 0.5);
89
-
88
+ --tb-pop-shadow: 0 8px 28px rgba(0, 0, 0, 0.5);
89
+
90
+ /* Column-state compact menu (ColumnsMenu/MenuStrip). Defaults preserve the
91
+ previous GitHub-like inline look; apps can override via --cols-menu-*. */
92
+ --cols-menu-gap: 6px;
93
+ --cols-menu-btn-gap: 4px;
94
+ --cols-menu-btn-padding: 3px 9px;
95
+ --cols-menu-btn-radius: 6px;
96
+ --cols-menu-btn-font-size: 12px;
97
+ --cols-menu-btn-line-height: 16px;
98
+ --cols-menu-on-border: 1px solid #24292f;
99
+ --cols-menu-on-bg: #24292f;
100
+ --cols-menu-on-color: #fff;
101
+ --cols-menu-off-border: 1px solid #d0d7de;
102
+ --cols-menu-off-bg: #fff;
103
+ --cols-menu-off-color: #8c959f;
104
+ --cols-menu-disabled-border: 1px dashed #d0d7de;
105
+ --cols-menu-disabled-bg: #f6f8fa;
106
+ --cols-menu-disabled-color: #c4ccd4;
107
+ --cols-menu-fixed-shadow: 0 0 0 2px #eaeef2;
108
+ --cols-menu-drag-shadow: 0 3px 10px rgba(0, 0, 0, 0.35);
109
+ --cols-menu-divider: #d0d7de;
110
+ --cols-menu-abbr-font-size: 10px;
111
+ --cols-menu-abbr-font-weight: 700;
112
+ --cols-menu-abbr-letter-spacing: 0.5px;
113
+ --cols-menu-marks-font-size: 9px;
114
+ --cols-menu-marks-opacity: 0.9;
90
115
 
116
+ /* Column-state mobile/card primitives (ColumnDots/CardList). Defaults preserve
117
+ the restored card-29 look; apps can override via --cols-dots-* / --cols-card-*. */
118
+ --cols-dots-text: #24292f;
119
+ --cols-dots-head-gap: 10px;
120
+ --cols-dots-head-margin-bottom: 6px;
121
+ --cols-dots-head-font-size: 12px;
122
+ --cols-dots-meta-color: #57606a;
123
+ --cols-dots-sort-border: 1px solid #6e7781;
124
+ --cols-dots-sort-radius: 6px;
125
+ --cols-dots-sort-padding: 2px 8px;
126
+ --cols-dots-sort-font-size: 12px;
127
+ --cols-dots-sort-bg: #fff;
128
+ --cols-dots-track-height: 56px;
129
+ --cols-dots-track-margin: 0 14px;
130
+ --cols-dots-rail: #d0d7de;
131
+ --cols-dots-mark-width: 44px;
132
+ --cols-dots-mark-height: 56px;
133
+ --cols-dots-mark-margin-left: -22px;
134
+ --cols-dots-sort-mark-color: #0969da;
135
+ --cols-dots-sort-mark-font-size: 11px;
136
+ --cols-dots-pin: #afb8c1;
137
+ --cols-dots-label-color: #8c959f;
138
+ --cols-dots-label-active-color: #24292f;
139
+ --cols-dots-label-font-size: 10px;
140
+ --cols-dots-dot-size: 18px;
141
+ --cols-dots-dot-radius: 9px;
142
+ --cols-dots-dot-bg: #24292f;
143
+ --cols-dots-dot-shadow: 0 3px 10px rgba(0, 0, 0, 0.35);
144
+ --cols-dots-selected-bg: #0969da;
145
+ --cols-dots-selected-border: #b6d4fe;
146
+ --cols-dots-fixed-border: #afb8c1;
147
+ --cols-card-gap: 8px;
148
+ --cols-card-border: 1px solid #d0d7de;
149
+ --cols-card-radius: 8px;
150
+ --cols-card-padding: 8px 10px;
151
+ --cols-card-bg: #fff;
152
+ --cols-card-header-gap: 8px;
153
+ --cols-card-header-margin-bottom: 6px;
154
+ --cols-card-title-font-size: 14px;
155
+ --cols-card-accent-font-size: 11px;
156
+ --cols-card-accent-padding: 1px 8px;
157
+ --cols-card-accent-radius: 10px;
158
+ --cols-card-accent-bg: #ddf4ff;
159
+ --cols-card-accent-color: #0969da;
160
+ --cols-card-field-gap: 10px;
161
+ --cols-card-field-font-size: 12px;
162
+ --cols-card-field-line-height: 1.7;
163
+ --cols-card-label-color: #57606a;
164
+ --cols-card-label-min-width: 72px;
91
165
  /* Logs. Defaults preserve the old logger look; apps can override in their theme. */
92
166
  --logs-notification-text: #fff;
93
167
  --logs-notification-accent: #5D9FFA;
package/package.json CHANGED
@@ -1,49 +1,49 @@
1
- {
2
- "name": "wenay-react2",
3
- "version": "1.0.38",
4
- "description": "Common react",
5
- "strict": true,
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "files": [
9
- "lib/**/*",
10
- "!**/*.tsbuildinfo"
11
- ],
12
- "author": "wenay",
13
- "license": "ISC",
14
- "peerDependenciesMeta": {
15
- "react-dom": {
16
- "optional": true
17
- }
18
- },
19
- "dependencies": {
20
- "ag-grid-community": "^35.1.0",
21
- "ag-grid-react": "^35.1.0",
22
- "re-resizable": "^6.11.2",
23
- "react": "^19.2.0",
24
- "react-dom": "^19.2.0",
25
- "react-rnd": "^10.5.3",
26
- "wenay-common2": "^1.0.65"
27
- },
28
- "peerDependencies": {
29
- "react": "^19.2.0",
30
- "react-dom": "^19.2.0"
31
- },
32
- "engines": {
33
- "node": ">=18",
34
- "vscode": "^1.22.0"
35
- },
36
- "browserslist": {
37
- "production": [
38
- ">0.2%",
39
- "not dead"
40
- ],
41
- "development": [
42
- ">1%"
43
- ]
44
- },
45
- "exports": {
46
- ".": "./lib/index.js",
47
- "./package.json": "./package.json"
48
- }
49
- }
1
+ {
2
+ "name": "wenay-react2",
3
+ "version": "1.0.40",
4
+ "description": "Common react",
5
+ "strict": true,
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "lib/**/*",
10
+ "!**/*.tsbuildinfo"
11
+ ],
12
+ "author": "wenay",
13
+ "license": "ISC",
14
+ "peerDependenciesMeta": {
15
+ "react-dom": {
16
+ "optional": true
17
+ }
18
+ },
19
+ "dependencies": {
20
+ "ag-grid-community": "^35.1.0",
21
+ "ag-grid-react": "^35.1.0",
22
+ "re-resizable": "^6.11.2",
23
+ "react": "^19.2.0",
24
+ "react-dom": "^19.2.0",
25
+ "react-rnd": "^10.5.3",
26
+ "wenay-common2": "^1.0.65"
27
+ },
28
+ "peerDependencies": {
29
+ "react": "^19.2.0",
30
+ "react-dom": "^19.2.0"
31
+ },
32
+ "engines": {
33
+ "node": ">=18",
34
+ "vscode": "^1.22.0"
35
+ },
36
+ "browserslist": {
37
+ "production": [
38
+ ">0.2%",
39
+ "not dead"
40
+ ],
41
+ "development": [
42
+ ">1%"
43
+ ]
44
+ },
45
+ "exports": {
46
+ ".": "./lib/index.js",
47
+ "./package.json": "./package.json"
48
+ }
49
+ }