ics-ui-kit 0.1.16 → 0.1.17
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/dist/components/table/tree.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/styles-scoped.css +46 -57
- package/dist/styles.css +46 -57
- package/dist/theme.css +4 -12
- package/dist/{treeModel-jvOXFZvK.js → treeModel-BlJWP4sc.js} +2 -2
- package/dist/treeModel-BlJWP4sc.js.map +1 -0
- package/package.json +1 -1
- package/tailwind.preset.js +5 -9
- package/dist/treeModel-jvOXFZvK.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { s as a, o as E, p as s, u as l, r, q as _, v as R, j as t, k as L, m as N, l as O, x as n, w as G, n as i, t as b } from "../../treeModel-
|
|
1
|
+
import { s as a, o as E, p as s, u as l, r, q as _, v as R, j as t, k as L, m as N, l as O, x as n, w as G, n as i, t as b } from "../../treeModel-BlJWP4sc.js";
|
|
2
2
|
export {
|
|
3
3
|
a as TREE_CONNECTOR_Y,
|
|
4
4
|
E as TREE_INDENT,
|
package/dist/components/table.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { s, o as T, p as l, u as E, r as t, q as o, v as R, T as r, b as _, c as n, h as i, g as C, d as b, e as d, a as L, i as O, f as S, j as A, k as N, m as c, l as f, x as g, w as m, n as u, t as p } from "../treeModel-
|
|
1
|
+
import { s, o as T, p as l, u as E, r as t, q as o, v as R, T as r, b as _, c as n, h as i, g as C, d as b, e as d, a as L, i as O, f as S, j as A, k as N, m as c, l as f, x as g, w as m, n as u, t as p } from "../treeModel-BlJWP4sc.js";
|
|
2
2
|
import { C as I, g as G, u as x } from "../useColumnResize-wjfEyBBg.js";
|
|
3
3
|
import { C as F, u as H } from "../useColumnReorder-tE5pMONm.js";
|
|
4
4
|
import { T as W, a as h, b as k, o as w, t as z } from "../opaqueCell-D95h1mFM.js";
|
package/dist/styles-scoped.css
CHANGED
|
@@ -116,9 +116,6 @@
|
|
|
116
116
|
--status-error-secondary-border: 0 96% 89%;
|
|
117
117
|
|
|
118
118
|
/** Alpha **/
|
|
119
|
-
--alpha-03: 210 40% 96% / 3%;
|
|
120
|
-
--alpha-05: 210 40% 96% / 5%;
|
|
121
|
-
--alpha-08: 210 40% 96% / 8%;
|
|
122
119
|
--alpha-10: 210 40% 96% / 10%;
|
|
123
120
|
--alpha-20: 210 40% 96% / 20%;
|
|
124
121
|
--alpha-30: 210 40% 96% / 30%;
|
|
@@ -129,9 +126,6 @@
|
|
|
129
126
|
--alpha-80: 210 40% 96% / 80%;
|
|
130
127
|
--alpha-90: 210 40% 96% / 90%;
|
|
131
128
|
|
|
132
|
-
--alpha-high-03: 229 84% 5% / 3%;
|
|
133
|
-
--alpha-high-05: 229 84% 5% / 5%;
|
|
134
|
-
--alpha-high-08: 229 84% 5% / 8%;
|
|
135
129
|
--alpha-high-10: 229 84% 5% / 10%;
|
|
136
130
|
--alpha-high-20: 229 84% 5% / 20%;
|
|
137
131
|
--alpha-high-30: 229 84% 5% / 30%;
|
|
@@ -142,8 +136,10 @@
|
|
|
142
136
|
--alpha-high-80: 229 84% 5% / 80%;
|
|
143
137
|
--alpha-high-90: 229 84% 5% / 90%;
|
|
144
138
|
|
|
139
|
+
--alpha-hover: 210 40% 96% / 6%;
|
|
145
140
|
--alpha-accent-primary: 210 40% 96% / 16%;
|
|
146
141
|
--alpha-accent-secondary: 210 40% 96% / 8%;
|
|
142
|
+
--alpha-high-hover: 229 84% 5% / 4%;
|
|
147
143
|
--alpha-accent-high-primary: 222 47% 11% / 16%;
|
|
148
144
|
--alpha-accent-high-secondary: 222 47% 11% / 8%;
|
|
149
145
|
|
|
@@ -286,9 +282,6 @@
|
|
|
286
282
|
--status-error-secondary-border: 0 63% 31%;
|
|
287
283
|
|
|
288
284
|
/** Alpha **/
|
|
289
|
-
--alpha-03: 229 84% 5% / 3%;
|
|
290
|
-
--alpha-05: 229 84% 5% / 5%;
|
|
291
|
-
--alpha-08: 229 84% 5% / 8%;
|
|
292
285
|
--alpha-10: 229 84% 5% / 10%;
|
|
293
286
|
--alpha-20: 229 84% 5% / 20%;
|
|
294
287
|
--alpha-30: 229 84% 5% / 30%;
|
|
@@ -299,9 +292,6 @@
|
|
|
299
292
|
--alpha-80: 229 84% 5% / 80%;
|
|
300
293
|
--alpha-90: 229 84% 5% / 90%;
|
|
301
294
|
|
|
302
|
-
--alpha-high-03: 210 40% 96% / 3%;
|
|
303
|
-
--alpha-high-05: 210 40% 96% / 5%;
|
|
304
|
-
--alpha-high-08: 210 40% 96% / 8%;
|
|
305
295
|
--alpha-high-10: 210 40% 96% / 10%;
|
|
306
296
|
--alpha-high-20: 210 40% 96% / 20%;
|
|
307
297
|
--alpha-high-30: 210 40% 96% / 30%;
|
|
@@ -312,8 +302,10 @@
|
|
|
312
302
|
--alpha-high-80: 210 40% 96% / 80%;
|
|
313
303
|
--alpha-high-90: 210 40% 96% / 90%;
|
|
314
304
|
|
|
305
|
+
--alpha-hover: 229 84% 5% / 4%;
|
|
315
306
|
--alpha-accent-primary: 222 47% 11% / 16%;
|
|
316
307
|
--alpha-accent-secondary: 222 47% 11% / 8%;
|
|
308
|
+
--alpha-high-hover: 210 40% 96% / 6%;
|
|
317
309
|
--alpha-accent-high-primary: 210 40% 96% / 16%;
|
|
318
310
|
--alpha-accent-high-secondary: 210 40% 96% / 8%;
|
|
319
311
|
|
|
@@ -4016,8 +4008,8 @@
|
|
|
4016
4008
|
opacity: 0.8;
|
|
4017
4009
|
}
|
|
4018
4010
|
.ui-kit .\!shadow-focus {
|
|
4019
|
-
--tw-shadow: 0 0 0
|
|
4020
|
-
--tw-shadow-colored: 0 0 0
|
|
4011
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus)) !important;
|
|
4012
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color) !important;
|
|
4021
4013
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;
|
|
4022
4014
|
}
|
|
4023
4015
|
.ui-kit .\!shadow-none {
|
|
@@ -4031,8 +4023,8 @@
|
|
|
4031
4023
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4032
4024
|
}
|
|
4033
4025
|
.ui-kit .shadow-focus {
|
|
4034
|
-
--tw-shadow: 0 0 0
|
|
4035
|
-
--tw-shadow-colored: 0 0 0
|
|
4026
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4027
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4036
4028
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4037
4029
|
}
|
|
4038
4030
|
.ui-kit .shadow-glass-md {
|
|
@@ -4311,8 +4303,8 @@
|
|
|
4311
4303
|
.ui-kit .\@container {
|
|
4312
4304
|
container-type: inline-size;
|
|
4313
4305
|
}
|
|
4314
|
-
.ui-kit .\[--table-row-bg-hover\:hsl\(var\(--alpha-high-
|
|
4315
|
-
--table-row-bg-hover: hsl(var(--alpha-high-
|
|
4306
|
+
.ui-kit .\[--table-row-bg-hover\:hsl\(var\(--alpha-high-hover\)\)\] {
|
|
4307
|
+
--table-row-bg-hover: hsl(var(--alpha-high-hover));
|
|
4316
4308
|
}
|
|
4317
4309
|
.ui-kit .\[--table-row-bg\:transparent\] {
|
|
4318
4310
|
--table-row-bg: transparent;
|
|
@@ -4589,9 +4581,6 @@
|
|
|
4589
4581
|
.ui-kit .hover\:bg-alpha-high-90:hover {
|
|
4590
4582
|
background-color: hsl(var(--alpha-high-10));
|
|
4591
4583
|
}
|
|
4592
|
-
.ui-kit .hover\:bg-alpha-high-95:hover {
|
|
4593
|
-
background-color: hsl(var(--alpha-high-05));
|
|
4594
|
-
}
|
|
4595
4584
|
.ui-kit .hover\:bg-amber-100:hover {
|
|
4596
4585
|
--tw-bg-opacity: 1;
|
|
4597
4586
|
background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
|
|
@@ -4687,8 +4676,8 @@
|
|
|
4687
4676
|
opacity: 0.65;
|
|
4688
4677
|
}
|
|
4689
4678
|
.ui-kit .hover\:shadow-focus:hover {
|
|
4690
|
-
--tw-shadow: 0 0 0
|
|
4691
|
-
--tw-shadow-colored: 0 0 0
|
|
4679
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4680
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4692
4681
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4693
4682
|
}
|
|
4694
4683
|
.ui-kit .hover\:shadow-soft-base:hover {
|
|
@@ -4774,13 +4763,13 @@
|
|
|
4774
4763
|
color: hsl(var(--primary-fg));
|
|
4775
4764
|
}
|
|
4776
4765
|
.ui-kit .focus\:shadow-focus:focus {
|
|
4777
|
-
--tw-shadow: 0 0 0
|
|
4778
|
-
--tw-shadow-colored: 0 0 0
|
|
4766
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4767
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4779
4768
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4780
4769
|
}
|
|
4781
4770
|
.ui-kit .focus\:shadow-focus-error:focus {
|
|
4782
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4783
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4771
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4772
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4784
4773
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4785
4774
|
}
|
|
4786
4775
|
.ui-kit .focus\:shadow-soft-sm:focus {
|
|
@@ -4807,8 +4796,8 @@
|
|
|
4807
4796
|
border-color: hsl(var(--status-error-secondary-border));
|
|
4808
4797
|
}
|
|
4809
4798
|
.ui-kit .invalid\:focus\:shadow-focus-error:focus:invalid {
|
|
4810
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4811
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4799
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4800
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4812
4801
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4813
4802
|
}
|
|
4814
4803
|
.ui-kit .read-only\:focus\:bg-secondary-bg-hover:focus:read-only {
|
|
@@ -4848,23 +4837,23 @@
|
|
|
4848
4837
|
background-color: hsl(var(--secondary-bg-hover));
|
|
4849
4838
|
}
|
|
4850
4839
|
.ui-kit .focus-visible\:\!shadow-focus:focus-visible {
|
|
4851
|
-
--tw-shadow: 0 0 0
|
|
4852
|
-
--tw-shadow-colored: 0 0 0
|
|
4840
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus)) !important;
|
|
4841
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color) !important;
|
|
4853
4842
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;
|
|
4854
4843
|
}
|
|
4855
4844
|
.ui-kit .focus-visible\:shadow-focus:focus-visible {
|
|
4856
|
-
--tw-shadow: 0 0 0
|
|
4857
|
-
--tw-shadow-colored: 0 0 0
|
|
4845
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4846
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4858
4847
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4859
4848
|
}
|
|
4860
4849
|
.ui-kit .focus-visible\:shadow-focus-error:focus-visible {
|
|
4861
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4862
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4850
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4851
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4863
4852
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4864
4853
|
}
|
|
4865
4854
|
.ui-kit .focus-visible\:shadow-inverse-focus:focus-visible {
|
|
4866
|
-
--tw-shadow: 0 0 0
|
|
4867
|
-
--tw-shadow-colored: 0 0 0
|
|
4855
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--inverse-primary-bg)), 0 0 0 1px hsl(var(--inverse-muted));
|
|
4856
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4868
4857
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4869
4858
|
}
|
|
4870
4859
|
.ui-kit .focus-visible\:outline-none:focus-visible {
|
|
@@ -4907,8 +4896,8 @@
|
|
|
4907
4896
|
border-color: hsl(var(--status-error-secondary-border));
|
|
4908
4897
|
}
|
|
4909
4898
|
.ui-kit .invalid\:focus-visible\:shadow-focus-error:focus-visible:invalid {
|
|
4910
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4911
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4899
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4900
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4912
4901
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4913
4902
|
}
|
|
4914
4903
|
.ui-kit .active\:cursor-grabbing:active {
|
|
@@ -5049,8 +5038,8 @@
|
|
|
5049
5038
|
opacity: 1;
|
|
5050
5039
|
}
|
|
5051
5040
|
.ui-kit :is(.group\/search-select-trigger:focus-within .group-focus-within\/search-select-trigger\:shadow-focus) {
|
|
5052
|
-
--tw-shadow: 0 0 0
|
|
5053
|
-
--tw-shadow-colored: 0 0 0
|
|
5041
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5042
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5054
5043
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5055
5044
|
}
|
|
5056
5045
|
@media (hover: hover) and (pointer: fine) {
|
|
@@ -5166,8 +5155,8 @@
|
|
|
5166
5155
|
opacity: 0.5;
|
|
5167
5156
|
}
|
|
5168
5157
|
.ui-kit .has-\[div\[data-input-group-element\=\'contenteditable\'\]\:focus\]\:shadow-focus:has(div[data-input-group-element='contenteditable']:focus) {
|
|
5169
|
-
--tw-shadow: 0 0 0
|
|
5170
|
-
--tw-shadow-colored: 0 0 0
|
|
5158
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5159
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5171
5160
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5172
5161
|
}
|
|
5173
5162
|
.ui-kit .has-\[input\:disabled\]\:shadow-soft-sm:has(input:disabled) {
|
|
@@ -5176,13 +5165,13 @@
|
|
|
5176
5165
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5177
5166
|
}
|
|
5178
5167
|
.ui-kit .has-\[input\:focus\]\:shadow-focus:has(input:focus) {
|
|
5179
|
-
--tw-shadow: 0 0 0
|
|
5180
|
-
--tw-shadow-colored: 0 0 0
|
|
5168
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5169
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5181
5170
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5182
5171
|
}
|
|
5183
5172
|
.ui-kit .has-\[input\:invalid\]\:has-\[input\:focus\]\:shadow-focus-error:has(input:focus):has(input:invalid) {
|
|
5184
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
5185
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
5173
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
5174
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5186
5175
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5187
5176
|
}
|
|
5188
5177
|
.ui-kit .has-\[input\:invalid\]\:shadow-soft-base:has(input:invalid) {
|
|
@@ -5191,8 +5180,8 @@
|
|
|
5191
5180
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5192
5181
|
}
|
|
5193
5182
|
.ui-kit .has-\[input\:read-only\:not\(\[type\=\'file\'\]\)\]\:has-\[input\:focus\]\:shadow-focus:has(input:focus):has(input:read-only:not([type='file'])) {
|
|
5194
|
-
--tw-shadow: 0 0 0
|
|
5195
|
-
--tw-shadow-colored: 0 0 0
|
|
5183
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5184
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5196
5185
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5197
5186
|
}
|
|
5198
5187
|
.ui-kit .has-\[input\:read-only\:not\(\[type\=\'file\'\]\)\]\:shadow-soft-sm:has(input:read-only:not([type='file'])) {
|
|
@@ -5201,8 +5190,8 @@
|
|
|
5201
5190
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5202
5191
|
}
|
|
5203
5192
|
.ui-kit .has-\[input\[aria-invalid\=true\]\]\:has-\[input\:focus\]\:shadow-focus-error:has(input:focus):has(input[aria-invalid=true]) {
|
|
5204
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
5205
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
5193
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
5194
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5206
5195
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5207
5196
|
}
|
|
5208
5197
|
.ui-kit .has-\[input\[aria-invalid\=true\]\]\:shadow-soft-base:has(input[aria-invalid=true]) {
|
|
@@ -5262,8 +5251,8 @@
|
|
|
5262
5251
|
border-color: hsl(var(--status-error-secondary-border));
|
|
5263
5252
|
}
|
|
5264
5253
|
.ui-kit .aria-\[invalid\=true\]\:focus\:shadow-focus-error:focus[aria-invalid="true"] {
|
|
5265
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
5266
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
5254
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
5255
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5267
5256
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5268
5257
|
}
|
|
5269
5258
|
.ui-kit .data-\[disabled\=true\]\:pointer-events-none[data-disabled="true"] {
|
|
@@ -5675,13 +5664,13 @@
|
|
|
5675
5664
|
}
|
|
5676
5665
|
}
|
|
5677
5666
|
.ui-kit .data-\[state\=checked\]\:focus-visible\:shadow-focus:focus-visible[data-state="checked"] {
|
|
5678
|
-
--tw-shadow: 0 0 0
|
|
5679
|
-
--tw-shadow-colored: 0 0 0
|
|
5667
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5668
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5680
5669
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5681
5670
|
}
|
|
5682
5671
|
.ui-kit .data-\[state\=indeterminate\]\:focus-visible\:shadow-focus:focus-visible[data-state="indeterminate"] {
|
|
5683
|
-
--tw-shadow: 0 0 0
|
|
5684
|
-
--tw-shadow-colored: 0 0 0
|
|
5672
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5673
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5685
5674
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5686
5675
|
}
|
|
5687
5676
|
.ui-kit .active\:data-\[state\=open\]\:bg-secondary-bg-hover[data-state="open"]:active {
|
package/dist/styles.css
CHANGED
|
@@ -116,9 +116,6 @@
|
|
|
116
116
|
--status-error-secondary-border: 0 96% 89%;
|
|
117
117
|
|
|
118
118
|
/** Alpha **/
|
|
119
|
-
--alpha-03: 210 40% 96% / 3%;
|
|
120
|
-
--alpha-05: 210 40% 96% / 5%;
|
|
121
|
-
--alpha-08: 210 40% 96% / 8%;
|
|
122
119
|
--alpha-10: 210 40% 96% / 10%;
|
|
123
120
|
--alpha-20: 210 40% 96% / 20%;
|
|
124
121
|
--alpha-30: 210 40% 96% / 30%;
|
|
@@ -129,9 +126,6 @@
|
|
|
129
126
|
--alpha-80: 210 40% 96% / 80%;
|
|
130
127
|
--alpha-90: 210 40% 96% / 90%;
|
|
131
128
|
|
|
132
|
-
--alpha-high-03: 229 84% 5% / 3%;
|
|
133
|
-
--alpha-high-05: 229 84% 5% / 5%;
|
|
134
|
-
--alpha-high-08: 229 84% 5% / 8%;
|
|
135
129
|
--alpha-high-10: 229 84% 5% / 10%;
|
|
136
130
|
--alpha-high-20: 229 84% 5% / 20%;
|
|
137
131
|
--alpha-high-30: 229 84% 5% / 30%;
|
|
@@ -142,8 +136,10 @@
|
|
|
142
136
|
--alpha-high-80: 229 84% 5% / 80%;
|
|
143
137
|
--alpha-high-90: 229 84% 5% / 90%;
|
|
144
138
|
|
|
139
|
+
--alpha-hover: 210 40% 96% / 6%;
|
|
145
140
|
--alpha-accent-primary: 210 40% 96% / 16%;
|
|
146
141
|
--alpha-accent-secondary: 210 40% 96% / 8%;
|
|
142
|
+
--alpha-high-hover: 229 84% 5% / 4%;
|
|
147
143
|
--alpha-accent-high-primary: 222 47% 11% / 16%;
|
|
148
144
|
--alpha-accent-high-secondary: 222 47% 11% / 8%;
|
|
149
145
|
|
|
@@ -286,9 +282,6 @@
|
|
|
286
282
|
--status-error-secondary-border: 0 63% 31%;
|
|
287
283
|
|
|
288
284
|
/** Alpha **/
|
|
289
|
-
--alpha-03: 229 84% 5% / 3%;
|
|
290
|
-
--alpha-05: 229 84% 5% / 5%;
|
|
291
|
-
--alpha-08: 229 84% 5% / 8%;
|
|
292
285
|
--alpha-10: 229 84% 5% / 10%;
|
|
293
286
|
--alpha-20: 229 84% 5% / 20%;
|
|
294
287
|
--alpha-30: 229 84% 5% / 30%;
|
|
@@ -299,9 +292,6 @@
|
|
|
299
292
|
--alpha-80: 229 84% 5% / 80%;
|
|
300
293
|
--alpha-90: 229 84% 5% / 90%;
|
|
301
294
|
|
|
302
|
-
--alpha-high-03: 210 40% 96% / 3%;
|
|
303
|
-
--alpha-high-05: 210 40% 96% / 5%;
|
|
304
|
-
--alpha-high-08: 210 40% 96% / 8%;
|
|
305
295
|
--alpha-high-10: 210 40% 96% / 10%;
|
|
306
296
|
--alpha-high-20: 210 40% 96% / 20%;
|
|
307
297
|
--alpha-high-30: 210 40% 96% / 30%;
|
|
@@ -312,8 +302,10 @@
|
|
|
312
302
|
--alpha-high-80: 210 40% 96% / 80%;
|
|
313
303
|
--alpha-high-90: 210 40% 96% / 90%;
|
|
314
304
|
|
|
305
|
+
--alpha-hover: 229 84% 5% / 4%;
|
|
315
306
|
--alpha-accent-primary: 222 47% 11% / 16%;
|
|
316
307
|
--alpha-accent-secondary: 222 47% 11% / 8%;
|
|
308
|
+
--alpha-high-hover: 210 40% 96% / 6%;
|
|
317
309
|
--alpha-accent-high-primary: 210 40% 96% / 16%;
|
|
318
310
|
--alpha-accent-high-secondary: 210 40% 96% / 8%;
|
|
319
311
|
|
|
@@ -4001,8 +3993,8 @@ body {
|
|
|
4001
3993
|
opacity: 0.8;
|
|
4002
3994
|
}
|
|
4003
3995
|
.\!shadow-focus {
|
|
4004
|
-
--tw-shadow: 0 0 0
|
|
4005
|
-
--tw-shadow-colored: 0 0 0
|
|
3996
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus)) !important;
|
|
3997
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color) !important;
|
|
4006
3998
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;
|
|
4007
3999
|
}
|
|
4008
4000
|
.\!shadow-none {
|
|
@@ -4016,8 +4008,8 @@ body {
|
|
|
4016
4008
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4017
4009
|
}
|
|
4018
4010
|
.shadow-focus {
|
|
4019
|
-
--tw-shadow: 0 0 0
|
|
4020
|
-
--tw-shadow-colored: 0 0 0
|
|
4011
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4012
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4021
4013
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4022
4014
|
}
|
|
4023
4015
|
.shadow-glass-md {
|
|
@@ -4300,8 +4292,8 @@ body {
|
|
|
4300
4292
|
text-decoration: underline;
|
|
4301
4293
|
text-underline-offset: 24%;
|
|
4302
4294
|
}
|
|
4303
|
-
.\[--table-row-bg-hover\:hsl\(var\(--alpha-high-
|
|
4304
|
-
--table-row-bg-hover: hsl(var(--alpha-high-
|
|
4295
|
+
.\[--table-row-bg-hover\:hsl\(var\(--alpha-high-hover\)\)\] {
|
|
4296
|
+
--table-row-bg-hover: hsl(var(--alpha-high-hover));
|
|
4305
4297
|
}
|
|
4306
4298
|
.\[--table-row-bg\:transparent\] {
|
|
4307
4299
|
--table-row-bg: transparent;
|
|
@@ -4578,9 +4570,6 @@ body {
|
|
|
4578
4570
|
.hover\:bg-alpha-high-90:hover {
|
|
4579
4571
|
background-color: hsl(var(--alpha-high-10));
|
|
4580
4572
|
}
|
|
4581
|
-
.hover\:bg-alpha-high-95:hover {
|
|
4582
|
-
background-color: hsl(var(--alpha-high-05));
|
|
4583
|
-
}
|
|
4584
4573
|
.hover\:bg-amber-100:hover {
|
|
4585
4574
|
--tw-bg-opacity: 1;
|
|
4586
4575
|
background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
|
|
@@ -4676,8 +4665,8 @@ body {
|
|
|
4676
4665
|
opacity: 0.65;
|
|
4677
4666
|
}
|
|
4678
4667
|
.hover\:shadow-focus:hover {
|
|
4679
|
-
--tw-shadow: 0 0 0
|
|
4680
|
-
--tw-shadow-colored: 0 0 0
|
|
4668
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4669
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4681
4670
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4682
4671
|
}
|
|
4683
4672
|
.hover\:shadow-soft-base:hover {
|
|
@@ -4763,13 +4752,13 @@ body {
|
|
|
4763
4752
|
color: hsl(var(--primary-fg));
|
|
4764
4753
|
}
|
|
4765
4754
|
.focus\:shadow-focus:focus {
|
|
4766
|
-
--tw-shadow: 0 0 0
|
|
4767
|
-
--tw-shadow-colored: 0 0 0
|
|
4755
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4756
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4768
4757
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4769
4758
|
}
|
|
4770
4759
|
.focus\:shadow-focus-error:focus {
|
|
4771
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4772
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4760
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4761
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4773
4762
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4774
4763
|
}
|
|
4775
4764
|
.focus\:shadow-soft-sm:focus {
|
|
@@ -4796,8 +4785,8 @@ body {
|
|
|
4796
4785
|
border-color: hsl(var(--status-error-secondary-border));
|
|
4797
4786
|
}
|
|
4798
4787
|
.invalid\:focus\:shadow-focus-error:focus:invalid {
|
|
4799
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4800
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4788
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4789
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4801
4790
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4802
4791
|
}
|
|
4803
4792
|
.read-only\:focus\:bg-secondary-bg-hover:focus:read-only {
|
|
@@ -4837,23 +4826,23 @@ body {
|
|
|
4837
4826
|
background-color: hsl(var(--secondary-bg-hover));
|
|
4838
4827
|
}
|
|
4839
4828
|
.focus-visible\:\!shadow-focus:focus-visible {
|
|
4840
|
-
--tw-shadow: 0 0 0
|
|
4841
|
-
--tw-shadow-colored: 0 0 0
|
|
4829
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus)) !important;
|
|
4830
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color) !important;
|
|
4842
4831
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;
|
|
4843
4832
|
}
|
|
4844
4833
|
.focus-visible\:shadow-focus:focus-visible {
|
|
4845
|
-
--tw-shadow: 0 0 0
|
|
4846
|
-
--tw-shadow-colored: 0 0 0
|
|
4834
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
4835
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4847
4836
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4848
4837
|
}
|
|
4849
4838
|
.focus-visible\:shadow-focus-error:focus-visible {
|
|
4850
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4851
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4839
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4840
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4852
4841
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4853
4842
|
}
|
|
4854
4843
|
.focus-visible\:shadow-inverse-focus:focus-visible {
|
|
4855
|
-
--tw-shadow: 0 0 0
|
|
4856
|
-
--tw-shadow-colored: 0 0 0
|
|
4844
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--inverse-primary-bg)), 0 0 0 1px hsl(var(--inverse-muted));
|
|
4845
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4857
4846
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4858
4847
|
}
|
|
4859
4848
|
.focus-visible\:outline-none:focus-visible {
|
|
@@ -4896,8 +4885,8 @@ body {
|
|
|
4896
4885
|
border-color: hsl(var(--status-error-secondary-border));
|
|
4897
4886
|
}
|
|
4898
4887
|
.invalid\:focus-visible\:shadow-focus-error:focus-visible:invalid {
|
|
4899
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
4900
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
4888
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
4889
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
4901
4890
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
4902
4891
|
}
|
|
4903
4892
|
.active\:cursor-grabbing:active {
|
|
@@ -5038,8 +5027,8 @@ body {
|
|
|
5038
5027
|
opacity: 1;
|
|
5039
5028
|
}
|
|
5040
5029
|
.group\/search-select-trigger:focus-within .group-focus-within\/search-select-trigger\:shadow-focus {
|
|
5041
|
-
--tw-shadow: 0 0 0
|
|
5042
|
-
--tw-shadow-colored: 0 0 0
|
|
5030
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5031
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5043
5032
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5044
5033
|
}
|
|
5045
5034
|
@media (hover: hover) and (pointer: fine) {
|
|
@@ -5155,8 +5144,8 @@ body {
|
|
|
5155
5144
|
opacity: 0.5;
|
|
5156
5145
|
}
|
|
5157
5146
|
.has-\[div\[data-input-group-element\=\'contenteditable\'\]\:focus\]\:shadow-focus:has(div[data-input-group-element='contenteditable']:focus) {
|
|
5158
|
-
--tw-shadow: 0 0 0
|
|
5159
|
-
--tw-shadow-colored: 0 0 0
|
|
5147
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5148
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5160
5149
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5161
5150
|
}
|
|
5162
5151
|
.has-\[input\:disabled\]\:shadow-soft-sm:has(input:disabled) {
|
|
@@ -5165,13 +5154,13 @@ body {
|
|
|
5165
5154
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5166
5155
|
}
|
|
5167
5156
|
.has-\[input\:focus\]\:shadow-focus:has(input:focus) {
|
|
5168
|
-
--tw-shadow: 0 0 0
|
|
5169
|
-
--tw-shadow-colored: 0 0 0
|
|
5157
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5158
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5170
5159
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5171
5160
|
}
|
|
5172
5161
|
.has-\[input\:invalid\]\:has-\[input\:focus\]\:shadow-focus-error:has(input:focus):has(input:invalid) {
|
|
5173
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
5174
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
5162
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
5163
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5175
5164
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5176
5165
|
}
|
|
5177
5166
|
.has-\[input\:invalid\]\:shadow-soft-base:has(input:invalid) {
|
|
@@ -5180,8 +5169,8 @@ body {
|
|
|
5180
5169
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5181
5170
|
}
|
|
5182
5171
|
.has-\[input\:read-only\:not\(\[type\=\'file\'\]\)\]\:has-\[input\:focus\]\:shadow-focus:has(input:focus):has(input:read-only:not([type='file'])) {
|
|
5183
|
-
--tw-shadow: 0 0 0
|
|
5184
|
-
--tw-shadow-colored: 0 0 0
|
|
5172
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5173
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5185
5174
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5186
5175
|
}
|
|
5187
5176
|
.has-\[input\:read-only\:not\(\[type\=\'file\'\]\)\]\:shadow-soft-sm:has(input:read-only:not([type='file'])) {
|
|
@@ -5190,8 +5179,8 @@ body {
|
|
|
5190
5179
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5191
5180
|
}
|
|
5192
5181
|
.has-\[input\[aria-invalid\=true\]\]\:has-\[input\:focus\]\:shadow-focus-error:has(input:focus):has(input[aria-invalid=true]) {
|
|
5193
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
5194
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
5182
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
5183
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5195
5184
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5196
5185
|
}
|
|
5197
5186
|
.has-\[input\[aria-invalid\=true\]\]\:shadow-soft-base:has(input[aria-invalid=true]) {
|
|
@@ -5251,8 +5240,8 @@ body {
|
|
|
5251
5240
|
border-color: hsl(var(--status-error-secondary-border));
|
|
5252
5241
|
}
|
|
5253
5242
|
.aria-\[invalid\=true\]\:focus\:shadow-focus-error:focus[aria-invalid="true"] {
|
|
5254
|
-
--tw-shadow: 0 0 0 1px hsl(var(--status-error));
|
|
5255
|
-
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
5243
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error));
|
|
5244
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5256
5245
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5257
5246
|
}
|
|
5258
5247
|
.data-\[disabled\=true\]\:pointer-events-none[data-disabled="true"] {
|
|
@@ -5664,13 +5653,13 @@ body {
|
|
|
5664
5653
|
}
|
|
5665
5654
|
}
|
|
5666
5655
|
.data-\[state\=checked\]\:focus-visible\:shadow-focus:focus-visible[data-state="checked"] {
|
|
5667
|
-
--tw-shadow: 0 0 0
|
|
5668
|
-
--tw-shadow-colored: 0 0 0
|
|
5656
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5657
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5669
5658
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5670
5659
|
}
|
|
5671
5660
|
.data-\[state\=indeterminate\]\:focus-visible\:shadow-focus:focus-visible[data-state="indeterminate"] {
|
|
5672
|
-
--tw-shadow: 0 0 0
|
|
5673
|
-
--tw-shadow-colored: 0 0 0
|
|
5661
|
+
--tw-shadow: 0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus));
|
|
5662
|
+
--tw-shadow-colored: 0 0 0 0.5px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);
|
|
5674
5663
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
5675
5664
|
}
|
|
5676
5665
|
.active\:data-\[state\=open\]\:bg-secondary-bg-hover[data-state="open"]:active {
|
package/dist/theme.css
CHANGED
|
@@ -115,9 +115,6 @@
|
|
|
115
115
|
--status-error-secondary-border: 0 96% 89%;
|
|
116
116
|
|
|
117
117
|
/** Alpha **/
|
|
118
|
-
--alpha-03: 210 40% 96% / 3%;
|
|
119
|
-
--alpha-05: 210 40% 96% / 5%;
|
|
120
|
-
--alpha-08: 210 40% 96% / 8%;
|
|
121
118
|
--alpha-10: 210 40% 96% / 10%;
|
|
122
119
|
--alpha-20: 210 40% 96% / 20%;
|
|
123
120
|
--alpha-30: 210 40% 96% / 30%;
|
|
@@ -128,9 +125,6 @@
|
|
|
128
125
|
--alpha-80: 210 40% 96% / 80%;
|
|
129
126
|
--alpha-90: 210 40% 96% / 90%;
|
|
130
127
|
|
|
131
|
-
--alpha-high-03: 229 84% 5% / 3%;
|
|
132
|
-
--alpha-high-05: 229 84% 5% / 5%;
|
|
133
|
-
--alpha-high-08: 229 84% 5% / 8%;
|
|
134
128
|
--alpha-high-10: 229 84% 5% / 10%;
|
|
135
129
|
--alpha-high-20: 229 84% 5% / 20%;
|
|
136
130
|
--alpha-high-30: 229 84% 5% / 30%;
|
|
@@ -141,8 +135,10 @@
|
|
|
141
135
|
--alpha-high-80: 229 84% 5% / 80%;
|
|
142
136
|
--alpha-high-90: 229 84% 5% / 90%;
|
|
143
137
|
|
|
138
|
+
--alpha-hover: 210 40% 96% / 6%;
|
|
144
139
|
--alpha-accent-primary: 210 40% 96% / 16%;
|
|
145
140
|
--alpha-accent-secondary: 210 40% 96% / 8%;
|
|
141
|
+
--alpha-high-hover: 229 84% 5% / 4%;
|
|
146
142
|
--alpha-accent-high-primary: 222 47% 11% / 16%;
|
|
147
143
|
--alpha-accent-high-secondary: 222 47% 11% / 8%;
|
|
148
144
|
|
|
@@ -286,9 +282,6 @@
|
|
|
286
282
|
--status-error-secondary-border: 0 63% 31%;
|
|
287
283
|
|
|
288
284
|
/** Alpha **/
|
|
289
|
-
--alpha-03: 229 84% 5% / 3%;
|
|
290
|
-
--alpha-05: 229 84% 5% / 5%;
|
|
291
|
-
--alpha-08: 229 84% 5% / 8%;
|
|
292
285
|
--alpha-10: 229 84% 5% / 10%;
|
|
293
286
|
--alpha-20: 229 84% 5% / 20%;
|
|
294
287
|
--alpha-30: 229 84% 5% / 30%;
|
|
@@ -299,9 +292,6 @@
|
|
|
299
292
|
--alpha-80: 229 84% 5% / 80%;
|
|
300
293
|
--alpha-90: 229 84% 5% / 90%;
|
|
301
294
|
|
|
302
|
-
--alpha-high-03: 210 40% 96% / 3%;
|
|
303
|
-
--alpha-high-05: 210 40% 96% / 5%;
|
|
304
|
-
--alpha-high-08: 210 40% 96% / 8%;
|
|
305
295
|
--alpha-high-10: 210 40% 96% / 10%;
|
|
306
296
|
--alpha-high-20: 210 40% 96% / 20%;
|
|
307
297
|
--alpha-high-30: 210 40% 96% / 30%;
|
|
@@ -312,8 +302,10 @@
|
|
|
312
302
|
--alpha-high-80: 210 40% 96% / 80%;
|
|
313
303
|
--alpha-high-90: 210 40% 96% / 90%;
|
|
314
304
|
|
|
305
|
+
--alpha-hover: 229 84% 5% / 4%;
|
|
315
306
|
--alpha-accent-primary: 222 47% 11% / 16%;
|
|
316
307
|
--alpha-accent-secondary: 222 47% 11% / 8%;
|
|
308
|
+
--alpha-high-hover: 210 40% 96% / 6%;
|
|
317
309
|
--alpha-accent-high-primary: 210 40% 96% / 16%;
|
|
318
310
|
--alpha-accent-high-secondary: 210 40% 96% / 8%;
|
|
319
311
|
|
|
@@ -93,7 +93,7 @@ const Q = "[&>*]:border-b [&>*]:border-secondary-border transition-colors", Z =
|
|
|
93
93
|
"bg-[color:var(--table-row-bg)] hover:bg-[color:var(--table-row-bg-hover)]",
|
|
94
94
|
// Обычная строка: подложку даёт `TableBody`, ховер — нейтральная альфа поверх неё
|
|
95
95
|
// (`alpha/high/97` в макете подписана как состояние строки `hover`).
|
|
96
|
-
"[--table-row-bg-hover:hsl(var(--alpha-high-
|
|
96
|
+
"[--table-row-bg-hover:hsl(var(--alpha-high-hover))] [--table-row-bg:transparent]",
|
|
97
97
|
j
|
|
98
98
|
]
|
|
99
99
|
}), $ = l.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ s("tr", { ref: t, className: Z({ className: e }), ...a }));
|
|
@@ -316,4 +316,4 @@ export {
|
|
|
316
316
|
xe as w,
|
|
317
317
|
Te as x
|
|
318
318
|
};
|
|
319
|
-
//# sourceMappingURL=treeModel-
|
|
319
|
+
//# sourceMappingURL=treeModel-BlJWP4sc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeModel-BlJWP4sc.js","sources":["../src/components/table/Table.tsx","../src/components/table/tree/treeGeometry.ts","../src/components/table/tree/TableTree.tsx","../src/components/table/tree/treeModel.ts"],"sourcesContent":["import * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { ScrollShadowContainer } from \"../scroll-shadow-container\";\nimport { STICKY_FOOTER, STICKY_HEADER } from \"./sticky/stickyCell\";\nimport { ScrollShadowContainerProps } from \"../scroll-shadow-container/ScrollShadowContainer\";\nimport { TABLE_ROW_TINT_LAYERS } from \"./rowTint\";\n\nconst tableStyles = tv({\n\tslots: {\n\t\twrapper: \"relative w-full overflow-x-auto rounded-lg border border-secondary-border\",\n\n\t\t// Раздельная модель границ вместо схлопнутой (умолчание Tailwind для таблиц).\n\t\t// В схлопнутой модели граница принадлежит сетке таблицы, а не ячейке: `position: sticky`\n\t\t// и `transform` уносят ячейку, а линия остаётся стоять на старом месте — из-за этого\n\t\t// прилипающим шапке и колонке приходилось гасить границу и рисовать её inset-тенью.\n\t\t// В раздельной модели граница входит в бокс ячейки и едет вместе с ней.\n\t\t//\n\t\t// Плата: `border` у групп строк (`thead`, `tbody`, `tfoot`) и у самих `tr` браузер\n\t\t// обязан игнорировать, поэтому все разделители живут на ячейках — см. `TABLE_ROW_ANATOMY`,\n\t\t// `tableHeaderStyles` и `tableFooterStyles`.\n\t\ttable: \"w-full caption-bottom border-separate border-spacing-0 text-xs\"\n\t}\n});\n\nexport type TableProps = React.HTMLAttributes<HTMLTableElement> & {\n\tcontainerClassName?: string;\n\tcontainerRef?: React.Ref<HTMLDivElement>;\n};\n\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\n\t({ className, containerClassName, containerRef, ...props }, ref) => {\n\t\tconst styles = tableStyles();\n\n\t\treturn (\n\t\t\t<div ref={containerRef} className={styles.wrapper({ className: containerClassName })}>\n\t\t\t\t<table ref={ref} className={styles.table({ className })} {...props} />\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nTable.displayName = \"Table\";\n\nconst tableHeaderStyles = tv({\n\t// Линия под шапкой — на ячейках, а не на `thead`: `border` у групп строк в раздельной\n\t// модели игнорируется (см. `tableStyles`). Заодно это ровно то, что нужно прилипающей\n\t// шапке: граница ячейки уезжает вместе с ячейкой, а не остаётся в сетке таблицы.\n\t//\n\t// Ту же нижнюю границу ячейкам шапки даёт и `TableRow`; дубль намеренный — разделитель\n\t// шапки и тела это контракт самого `TableHeader`, и он не должен пропадать из-за голого\n\t// `<tr>` в разметке потребителя. Одинаковые объявления одного свойства линию не задваивают.\n\t//\n\tbase: \"bg-primary-bg [&_th]:border-b [&_th]:border-secondary-border [&_tr]:[--table-row-bg-hover:transparent]\",\n\tvariants: {\n\t\tsticky: {\n\t\t\ttrue: STICKY_HEADER\n\t\t}\n\t}\n});\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\t/**\n\t * Шапка остаётся на месте при вертикальной прокрутке.\n\t *\n\t * Прокручивается контейнер таблицы, поэтому ему нужна ограниченная высота\n\t * (`containerClassName=\"max-h-80\"`): без неё прокручивать нечего и `position: sticky`\n\t * ничего не делает.\n\t *\n\t * Проп, а не набор классов в `className`, потому что вместе со `sticky` требуется\n\t * `z-index`, согласованный с закреплёнными колонками, — это знание кита, а не\n\t * потребителя (см. `STICKY_HEADER`).\n\t */\n\tsticky?: boolean;\n};\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n\t({ className, sticky, ...props }, ref) => (\n\t\t<thead ref={ref} className={tableHeaderStyles({ sticky, className })} {...props} />\n\t)\n);\n\nTableHeader.displayName = \"TableHeader\";\n\nconst tableBodyStyles = tv({\n\tbase: \"bg-secondary-bg [&_tr:last-child>*]:border-b-0\"\n});\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n\t({ className, ...props }, ref) => <tbody ref={ref} className={tableBodyStyles({ className })} {...props} />\n);\n\nTableBody.displayName = \"TableBody\";\n\nconst tableBodyContainerStyles = tv({\n\tbase: \"overflow-x-hidden\"\n});\n\nexport type TableBodyContainerProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\tcontainerClassName?: string;\n\tshadowSize?: ScrollShadowContainerProps[\"shadowSize\"];\n};\n\nexport const TableBodyContainer = React.forwardRef<HTMLTableSectionElement, TableBodyContainerProps>(\n\t({ className, containerClassName, shadowSize, ...props }, ref) => (\n\t\t<ScrollShadowContainer\n\t\t\tclassName={tableBodyContainerStyles({ className: containerClassName })}\n\t\t\tshadowSize={shadowSize}\n\t\t>\n\t\t\t<tbody ref={ref} className={tableBodyStyles({ className })} {...props} />\n\t\t</ScrollShadowContainer>\n\t)\n);\n\nTableBodyContainer.displayName = \"TableBodyContainer\";\n\nconst tableFooterStyles = tv({\n\t// Верхняя граница — на ячейках первой строки, нижняя снимается с ячеек последней:\n\t// собственный `border` у `tfoot` в раздельной модели игнорируется (см. `tableStyles`).\n\tbase: [\n\t\t\"bg-primary-bg font-medium\",\n\t\t\"[&>tr:first-child>*]:border-t [&>tr:first-child>*]:border-secondary-border\",\n\t\t\"[&>tr:last-child>*]:border-b-0\"\n\t],\n\tvariants: {\n\t\tsticky: {\n\t\t\ttrue: STICKY_FOOTER\n\t\t}\n\t}\n});\n\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\t/**\n\t * Итоги остаются на месте при вертикальной прокрутке.\n\t *\n\t * Зеркало `sticky` у `TableHeader`, и требует того же: прокручивается контейнер таблицы,\n\t * поэтому у него должна быть ограниченная высота — без неё прокручивать нечего.\n\t *\n\t * Проп, а не классы в `className`, по той же причине, что и у шапки: вместе со `sticky`\n\t * нужен `z-index`, согласованный с закреплёнными колонками (см. `STICKY_FOOTER`).\n\t */\n\tsticky?: boolean;\n};\n\nexport const TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n\t({ className, sticky, ...props }, ref) => (\n\t\t<tfoot ref={ref} className={tableFooterStyles({ sticky, className })} {...props} />\n\t)\n);\n\nTableFooter.displayName = \"TableFooter\";\n\nconst TABLE_ROW_ANATOMY = \"[&>*]:border-b [&>*]:border-secondary-border transition-colors\";\n\n/**\n * Строка красится двумя вещами: заливкой и слоями подкраски поверх неё.\n *\n * **Заливка** — `--table-row-bg` и `--table-row-bg-hover`: обычная строка и наведённая.\n * Это всё, что кит знает про цвет строки; ни выделения, ни деактивации у примитива нет —\n * что означает подсветка и когда её включать, знает прикладной код (см. `rowTint.ts`).\n *\n * **Слои подкраски** — `--table-row-tints`, их выставляет потребитель через `tableRowTints()`.\n * Полупрозрачные цвета поверх заливки: альфы складываются и между собой, и с заливкой, поэтому\n * выделенная деактивированная строка показывает обе подсветки, а не одну.\n *\n * Заливка и слои разведены не только по смыслу, но и по свойству: `background-color` против\n * `background-image`. Поэтому `className=\"bg-…\"` вытесняет заливку — и только её: слои\n * останутся на месте и лягут поверх любого цвета, который выбрал потребитель.\n */\nconst tableRowStyles = tv({\n\tbase: [\n\t\tTABLE_ROW_ANATOMY,\n\n\t\t// Заливку читает ровно один класс на состояние — обычный `bg-*` и `hover:bg-*`, —\n\t\t// поэтому любой `bg-*` из `className` вытесняет её штатно, без `!important`\n\t\t// и без повторения модификаторов.\n\t\t\"bg-[color:var(--table-row-bg)] hover:bg-[color:var(--table-row-bg-hover)]\",\n\n\t\t// Обычная строка: подложку даёт `TableBody`, ховер — нейтральная альфа поверх неё\n\t\t// (`alpha/high/97` в макете подписана как состояние строки `hover`).\n\t\t\"[--table-row-bg-hover:hsl(var(--alpha-high-hover))] [--table-row-bg:transparent]\",\n\n\t\tTABLE_ROW_TINT_LAYERS\n\t]\n});\n\nexport type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;\n\n/**\n * Строка таблицы.\n *\n * **Как перекрасить.** Обычными классами: `className=\"bg-… hover:bg-…\"`. Они выигрывают\n * штатно — ни `!important`, ни повторения модификаторов не нужно. Кто хочет сохранить\n * встроенное наведение и подменить только палитру — выставляет переменные `--table-row-bg`\n * и `--table-row-bg-hover`.\n *\n * **Как подсветить.** Слоями: `style={tableRowTints(…)}`, готовые цвета — в `TABLE_ROW_TINT`.\n * Слои складываются друг с другом и ложатся поверх заливки, какой бы она ни была, поэтому\n * подсветка и перекраска не конфликтуют. Подробности — в `rowTint.ts`.\n *\n * **Почему цвет читают отдельные классы, а не состояния.** Раньше `base` красил строку\n * четырьмя классами (`hover:bg-*`, `data-[state=selected]:bg-*`,\n * `data-[state=selected]:hover:bg-*`), и перебить их снаружи было нечем: `tailwind-merge`\n * снимает конфликт только между классами с одинаковым набором модификаторов, поэтому `bg-x`\n * из `className` не вытеснял ни один из них, а `data-[state=selected]:bg-*` вдобавок выигрывал\n * по специфичности — 0,2,0 против 0,1,0. Потребителю приходилось вручную повторять все четыре\n * комбинации модификаторов.\n */\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(({ className, ...props }, ref) => (\n\t<tr ref={ref} className={tableRowStyles({ className })} {...props} />\n));\n\nTableRow.displayName = \"TableRow\";\n\nconst tableHeadStyles = tv({\n\tbase: \"border-r border-secondary-border px-3 py-2.5 text-left align-middle font-medium text-muted last:border-r-0\",\n\tvariants: {\n\t\tinteractive: {\n\t\t\ttrue: [\n\t\t\t\t\"cursor-pointer p-0 transition-colors\",\n\t\t\t\t\"hover:bg-secondary-bg-hover\",\n\t\t\t\t\"data-[state=open]:bg-primary-bg-hover [&:has([data-state=open])]:bg-primary-bg-hover\"\n\t\t\t]\n\t\t}\n\t}\n});\n\nexport type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement> & {\n\t/**\n\t * Вся ячейка — интерактивная зона: меняет фон на наведении и на раскрытом меню,\n\t * и снимает собственный паддинг в пользу растянутого на всю ячейку триггера.\n\t */\n\tinteractive?: boolean;\n};\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n\t({ className, interactive, ...props }, ref) => (\n\t\t<th ref={ref} className={tableHeadStyles({ interactive, className })} {...props} />\n\t)\n);\n\nTableHead.displayName = \"TableHead\";\n\nconst tableCellStyles = tv({\n\tbase: \"border-r border-secondary-border px-3 py-2.5 align-middle last:border-r-0 [&:has([role=checkbox])]:pr-0\"\n});\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n\t({ className, ...props }, ref) => <td ref={ref} className={tableCellStyles({ className })} {...props} />\n);\n\nTableCell.displayName = \"TableCell\";\n\nconst tableResizeHandleStyles = tv({\n\tbase: [\n\t\t\"absolute right-0 top-0 z-10 h-full w-2 translate-x-1/2 cursor-col-resize touch-none select-none\",\n\t\t\"after:absolute after:left-1/2 after:top-0 after:h-full after:w-0.5 after:-translate-x-1/2\",\n\t\t\"after:bg-primary-border after:opacity-0 after:transition-opacity hover:after:opacity-100\"\n\t],\n\tvariants: {\n\t\tactive: {\n\t\t\ttrue: \"after:opacity-100\"\n\t\t}\n\t}\n});\n\nexport type TableResizeHandleProps = React.HTMLAttributes<HTMLDivElement> & {\n\t/** Держит индикатор подсвеченным во время drag-сессии, когда курсор уже ушёл с ручки. */\n\tactive?: boolean;\n};\n\n/**\n * Зона захвата для ресайза колонки. Кладётся внутрь `TableHead`, которому нужен `relative`.\n * Саму ширину не считает — работает в паре с `useColumnResize` из `./column-resize`.\n * Работает только если у `TableHead` нет `overflow: hidden`.\n */\nexport const TableResizeHandle = React.forwardRef<HTMLDivElement, TableResizeHandleProps>(\n\t({ className, active, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\trole=\"separator\"\n\t\t\taria-orientation=\"vertical\"\n\t\t\tclassName={tableResizeHandleStyles({ active, className })}\n\t\t\t{...props}\n\t\t/>\n\t)\n);\n\nTableResizeHandle.displayName = \"TableResizeHandle\";\n\nconst tableCaptionStyles = tv({\n\tbase: \"mt-4 text-muted\"\n});\n\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n\t({ className, ...props }, ref) => <caption ref={ref} className={tableCaptionStyles({ className })} {...props} />\n);\n\nTableCaption.displayName = \"TableCaption\";\n","/**\n * Геометрия линий иерархии.\n *\n * Значения связаны между собой — менять их можно только согласованно, поэтому производные\n * выражены формулами, а не числами.\n *\n * ```\n * ┌────────────────────────────────────────┐\n * │ ┌───┐ │\n * │ │ − │ Родитель │\n * │ └─┬─┘ │\n * ├─────┼──────────────────────────────────┤ ← граница ячеек; линию продлевает TREE_OVERHANG\n * │ │ ┌───┐ │\n * │ └────┤ + │ Потомок │ ← TREE_CONNECTOR_Y (центр первой строки)\n * │ └───┘ │\n * └────────────────────────────────────────┘\n *\n * ├─────┤ TREE_LINE_OFFSET — до вертикали нулевого уровня\n * ├──────┤ TREE_INDENT — шаг между вертикалями соседних уровней\n * ├────┤ TREE_STUB — отвод до левого края раскрывателя\n * ├───┤ TREE_TOGGLE — сторона квадрата, центр на своей вертикали\n * ```\n *\n * Схема не в масштабе — важны отношения величин, а не пропорции на картинке.\n */\n\n/** Шаг отступа на один уровень вложенности. */\nexport const TREE_INDENT = 18;\n\n/** Отступ от левого края ячейки до вертикали нулевой колонки. */\nexport const TREE_LINE_OFFSET = 13;\n\n/**\n * Сторона квадрата-раскрывателя. Центрируется ровно на вертикали своего уровня.\n *\n * Совпадает с чекбоксом (`size-4`): в одной строке они стоят рядом, и разный размер\n * у двух одинаковых по смыслу квадратов читается как небрежность.\n *\n * Сверху ограничен `2 * TREE_LINE_OFFSET` — иначе `treeCellPaddingLeft(0)` уходит в минус,\n * и раскрыватель корня вылезает за левый край ячейки. Практический потолок ниже:\n * при стороне больше `TREE_INDENT` обнуляется `TREE_STUB` и отвод к узлу исчезает.\n */\nexport const TREE_TOGGLE = 16;\n\n/**\n * Длина горизонтального отвода — от вертикали предка до левого края раскрывателя.\n *\n * Обязана равняться `TREE_INDENT - TREE_TOGGLE / 2`: раскрыватель смещён от своей вертикали\n * влево на половину стороны, и при любом другом значении между отводом и квадратом\n * остаётся щель либо отвод заезжает под квадрат.\n */\nexport const TREE_STUB = TREE_INDENT - TREE_TOGGLE / 2;\n\n/** Вертикальный паддинг ячейки таблицы (`py-2.5`). */\nconst TREE_CELL_PADDING_TOP = 10;\n\n/** Высота строки текста при `text-xs`. */\nconst TREE_TEXT_LINE_HEIGHT = 16;\n\n/**\n * Вертикальная позиция коннектора — центр ПЕРВОЙ строки текста, а не середина ячейки.\n *\n * Это принципиально для строк переменной высоты: при `top: 50%` середина ячейки уезжает вниз\n * от подписи, как только контент переносится, и уголок перестаёт указывать на узел.\n */\nexport const TREE_CONNECTOR_Y = TREE_CELL_PADDING_TOP + TREE_TEXT_LINE_HEIGHT / 2;\n\n/**\n * Насколько линии вылезают за padding-box ячейки сверху и снизу.\n *\n * Нижняя граница ячейки лежит вне её padding-box, и без этого выноса вертикаль обрывалась бы\n * на каждой границе — вместо сплошной линии получался пунктир.\n */\nexport const TREE_OVERHANG = 1;\n\n/**\n * Отступ раскрывателя сверху, при котором его центр совпадает с коннектором.\n *\n * Раньше здесь стоял `mt-0.5`, подобранный под сторону 12px. Теперь это разность:\n * содержимое ячейки начинается на `TREE_CELL_PADDING_TOP`, а центр квадрата должен\n * попасть на `TREE_CONNECTOR_Y`. При достаточно крупном раскрывателе значение\n * становится отрицательным — квадрат заходит в верхний паддинг, и это нормально.\n */\nexport const TREE_TOGGLE_MARGIN_TOP = TREE_CONNECTOR_Y - TREE_CELL_PADDING_TOP - TREE_TOGGLE / 2;\n\n/**\n * Горизонтальная позиция вертикали для колонки отступа.\n *\n * @example\n * treeLineX(0); // 13\n * treeLineX(2); // 49\n */\nexport const treeLineX = (column: number) => TREE_LINE_OFFSET + column * TREE_INDENT;\n\n/**\n * Левый отступ ячейки, при котором раскрыватель встаёт по центру вертикали своего уровня.\n *\n * @example\n * <TableCell style={{ paddingLeft: treeCellPaddingLeft(row.level) }}> // уровень 2 → 41px\n */\nexport const treeCellPaddingLeft = (level: number) => treeLineX(level) - TREE_TOGGLE / 2;\n","import * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Minus, Plus } from \"lucide-react\";\nimport { Icon } from \"../../icon/Icon\";\nimport { TableCell } from \"../Table\";\nimport { cn } from \"../../../lib/utils/cn\";\nimport {\n\tTREE_CONNECTOR_Y,\n\tTREE_OVERHANG,\n\tTREE_STUB,\n\tTREE_TOGGLE,\n\tTREE_TOGGLE_MARGIN_TOP,\n\ttreeCellPaddingLeft,\n\ttreeLineX\n} from \"./treeGeometry\";\nimport type { TreeLine, TreeRow } from \"./treeModel\";\n\nconst treeLineStyles = tv({\n\tbase: \"absolute bg-primary-border\",\n\tvariants: {\n\t\taxis: {\n\t\t\tvertical: \"w-px\",\n\t\t\thorizontal: \"h-px\"\n\t\t}\n\t}\n});\n\nexport type TableTreeLinesProps = {\n\t/**\n\t * Модель линий, по одному элементу на колонку отступа. Считается `flattenTree`.\n\t * Длина массива задаёт глубину узла — отдельный проп `level` не нужен.\n\t */\n\tlines: TreeLine[];\n\t/** Спуск от раскрывателя вниз, к первому потомку. Ставится у раскрытых узлов с потомками. */\n\tdescends?: boolean;\n\tclassName?: string;\n};\n\n/**\n * Линии связи для строки дерева или группы.\n *\n * Кладётся в ячейку с `position: relative` и `padding-left: treeCellPaddingLeft(level)` —\n * обычно этим занимается `TableTreeCell`.\n *\n * Все линии — абсолютно позиционированные блоки в 1px, а не рамки контейнеров: уровни\n * вложенности в таблице не образуют вложенных DOM-узлов, поэтому рисовать `border-left`\n * на контейнере уровня попросту негде.\n *\n * Разметка повторяет модель один в один и размечена data-атрибутами: на обёртке лежит вся\n * модель строки (`data-tree-lines=\"pass none end\"`), на каждом элементе — его роль\n * (`data-tree-line`) и номер колонки. Это делает отладку в DevTools прямой: видно не только\n * то, что нарисовано, но и то, что было велено нарисовать.\n *\n * @example\n * <TableCell className=\"relative\" style={{ paddingLeft: treeCellPaddingLeft(row.level) }}>\n * <TableTreeLines lines={row.lines} descends={row.descends} />\n * {row.node.name}\n * </TableCell>\n */\nexport const TableTreeLines = ({ lines, descends = false, className }: TableTreeLinesProps) => (\n\t<span\n\t\taria-hidden\n\t\tdata-tree-lines={lines.join(\" \")}\n\t\tdata-tree-level={lines.length}\n\t\tclassName={cn(\"pointer-events-none absolute inset-0\", className)}\n\t>\n\t\t{lines.map((kind, column) => {\n\t\t\tif (kind === \"none\") return null;\n\n\t\t\treturn (\n\t\t\t\t<React.Fragment key={column}>\n\t\t\t\t\t<span\n\t\t\t\t\t\tdata-tree-line={kind}\n\t\t\t\t\t\tdata-tree-column={column}\n\t\t\t\t\t\tclassName={treeLineStyles({ axis: \"vertical\" })}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: treeLineX(column),\n\t\t\t\t\t\t\ttop: -TREE_OVERHANG,\n\t\t\t\t\t\t\t// `end` — уголок: вертикаль обрывается на коннекторе, иначе протекла бы\n\t\t\t\t\t\t\t// под следующие строки, где ветки этого предка уже нет.\n\t\t\t\t\t\t\t...(kind === \"end\"\n\t\t\t\t\t\t\t\t? { height: TREE_CONNECTOR_Y + TREE_OVERHANG }\n\t\t\t\t\t\t\t\t: { bottom: -TREE_OVERHANG })\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{kind !== \"pass\" && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tdata-tree-line=\"stub\"\n\t\t\t\t\t\t\tdata-tree-column={column}\n\t\t\t\t\t\t\tclassName={treeLineStyles({ axis: \"horizontal\" })}\n\t\t\t\t\t\t\tstyle={{ left: treeLineX(column), top: TREE_CONNECTOR_Y, width: TREE_STUB }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t);\n\t\t})}\n\n\t\t{descends && (\n\t\t\t<span\n\t\t\t\tdata-tree-line=\"spur\"\n\t\t\t\tdata-tree-column={lines.length}\n\t\t\t\tclassName={treeLineStyles({ axis: \"vertical\" })}\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: treeLineX(lines.length),\n\t\t\t\t\ttop: TREE_CONNECTOR_Y + TREE_TOGGLE / 2,\n\t\t\t\t\tbottom: -TREE_OVERHANG\n\t\t\t\t}}\n\t\t\t/>\n\t\t)}\n\t</span>\n);\n\nTableTreeLines.displayName = \"TableTreeLines\";\n\nconst tableTreeToggleStyles = tv({\n\tbase: [\n\t\t// `z-10` поднимает раскрыватель над линиями, непрозрачный фон разрывает вертикаль под ним.\n\t\t\"relative z-10 flex shrink-0 items-center justify-center\",\n\t\t// Рамка, фон и скругление — как у `Checkbox`: в строке они стоят рядом и должны\n\t\t// читаться одинаково.\n\t\t\"rounded-sm border border-primary-border bg-secondary-bg text-muted\",\n\t\t\"hover:text-primary-fg focus-visible:shadow-focus focus-visible:outline-none\",\n\t\t// Невидимое расширение зоны нажатия до 24px. Именно псевдоэлементом, а не паддингом\n\t\t// или размером: квадрат обязан остаться на сетке линий, а промахиваться по 16px\n\t\t// на строке высотой 36px легко.\n\t\t\"before:absolute before:left-1/2 before:top-1/2 before:size-6 before:-translate-x-1/2 before:-translate-y-1/2\"\n\t]\n});\n\nexport type TableTreeToggleProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> & {\n\texpanded: boolean;\n};\n\n/** Квадрат раскрытия ветки. Иконка и `aria-expanded` следуют за `expanded`. */\nexport const TableTreeToggle = React.forwardRef<HTMLButtonElement, TableTreeToggleProps>(\n\t({ className, expanded, style, ...props }, ref) => (\n\t\t<button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\taria-expanded={expanded}\n\t\t\tclassName={tableTreeToggleStyles({ className })}\n\t\t\tstyle={{ width: TREE_TOGGLE, height: TREE_TOGGLE, marginTop: TREE_TOGGLE_MARGIN_TOP, ...style }}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Icon icon={expanded ? Minus : Plus} className=\"size-3\" />\n\t\t</button>\n\t)\n);\n\nTableTreeToggle.displayName = \"TableTreeToggle\";\n\n/**\n * Распорка на месте раскрывателя у листьев.\n *\n * Нужна, чтобы подписи узлов с потомками и без выравнивались по одной вертикали.\n * Отдельным компонентом, а не режимом `TableTreeToggle`, чтобы у листа не было\n * ни кнопки, ни `aria-expanded`.\n */\nexport const TableTreeSpacer = ({ className }: { className?: string }) => (\n\t<span aria-hidden className={cn(\"shrink-0\", className)} style={{ width: TREE_TOGGLE }} />\n);\n\nTableTreeSpacer.displayName = \"TableTreeSpacer\";\n\n/**\n * Всё, что ячейка иерархии знает о строке: где она стоит и что у неё с потомками.\n *\n * Структурный тип, а не generic: ячейке безразличен сам узел, поэтому в неё проходит любой\n * `TreeRow<T>` — и любой собранный вручную объект с этими пятью полями. Второе нужно там,\n * где дерева в памяти нет: список пришёл плоским, с готовым `level`, а линии считаются\n * `childTreeLines`.\n *\n * Инвариант: `lines.length === level`. Отступ берётся из `level`, а линии расставляются по\n * индексам `lines` — при расхождении уголок промахнётся мимо отступа.\n */\nexport type TableTreeCellRow = Pick<TreeRow<unknown>, \"level\" | \"lines\" | \"descends\" | \"hasChildren\" | \"isExpanded\">;\n\nexport type TableTreeCellProps = React.TdHTMLAttributes<HTMLTableCellElement> & {\n\t/**\n\t * Положение строки в иерархии: `level` — отступ, `lines` — линии связи, `descends` — спуск\n\t * к первому потомку, `hasChildren` — раскрыватель либо распорка на его месте, `isExpanded` —\n\t * знак в раскрывателе и `aria-expanded`.\n\t */\n\trow: TableTreeCellRow;\n\t/** Клик по раскрывателю. Без него раскрыватель рисуется, но ничего не делает. */\n\tonToggle?: React.MouseEventHandler<HTMLButtonElement>;\n\ttoggleLabel?: string;\n};\n\n/**\n * Ячейка с отступом, линиями и раскрывателем — весь столбец иерархии целиком.\n *\n * Собирает три вещи, которые иначе пришлось бы согласовывать вручную в каждой таблице:\n * `padding-left` по глубине, линии и раскрыватель либо распорку на его месте. Содержимое\n * остаётся за потребителем — внутрь идёт что угодно, от подписи до бейджей.\n *\n * `align-top` не косметика: при переносе текста в соседних колонках содержимое, выровненное\n * по центру, уедет вниз от коннектора, который привязан к первой строке.\n *\n * @example\n * <TableTreeCell row={row} onToggle={() => toggle(row.node.id)}>\n * {row.node.name}\n * </TableTreeCell>\n */\nexport const TableTreeCell = React.forwardRef<HTMLTableCellElement, TableTreeCellProps>(\n\t({ row, onToggle, toggleLabel, className, style, children, ...props }, ref) => (\n\t\t<TableCell\n\t\t\tref={ref}\n\t\t\tdata-tree-level={row.level}\n\t\t\tclassName={cn(\"relative align-top\", className)}\n\t\t\tstyle={{ paddingLeft: treeCellPaddingLeft(row.level), ...style }}\n\t\t\t{...props}\n\t\t>\n\t\t\t<TableTreeLines lines={row.lines} descends={row.descends} />\n\t\t\t<span className=\"flex items-start gap-1.5\">\n\t\t\t\t{row.hasChildren ? (\n\t\t\t\t\t<TableTreeToggle\n\t\t\t\t\t\texpanded={row.isExpanded}\n\t\t\t\t\t\taria-label={toggleLabel ?? (row.isExpanded ? \"Свернуть\" : \"Развернуть\")}\n\t\t\t\t\t\tonClick={onToggle}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<TableTreeSpacer />\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t</TableCell>\n\t)\n);\n\nTableTreeCell.displayName = \"TableTreeCell\";\n","/**\n * Модель строки дерева: что рисовать в каждой колонке отступа.\n *\n * Ровно эти четыре состояния использует классический вывод `tree` и почти все табличные\n * гриды (AG Grid, TanStack Table, rc-tree) — набор проверен и закрывает все случаи:\n *\n * - `pass` — сквозная вертикаль `│`: ветка предка продолжается ниже этой строки;\n * - `branch` — `├`: отвод к узлу, и у узла есть следующие соседи;\n * - `end` — `└`: отвод к последнему соседу, вертикаль обрывается на уголке;\n * - `none` — пусто: ветка предка закончилась выше.\n *\n * Ключевой инвариант: **индекс в массиве равен номеру колонки**, а `lines.length` равно\n * глубине узла. `branch`/`end` встречается только в последней колонке, `pass`/`none` — только\n * в предыдущих. Именно этот инвариант убирает класс ошибок «сдвиг на единицу»: раньше\n * массив хранил флаги предков, и колонка `level - 1` управлялась флагом родителя, хотя\n * должна была — признаком `isLast` самого узла. Сравнивать модель с картинкой теперь можно\n * глазами: `[\"pass\", \"none\", \"end\"]` читается как `│ └`.\n */\nexport type TreeLine = \"none\" | \"pass\" | \"branch\" | \"end\";\n\n/** Строка плоского списка со всем, что нужно для отрисовки узла дерева. */\nexport type TreeRow<T> = {\n\tnode: T;\n\t/** Родительский узел, `null` у корней. */\n\tparent: T | null;\n\t/** Глубина, 0 — корень. Равна `lines.length`. */\n\tlevel: number;\n\t/** Позиция среди соседей. */\n\tindex: number;\n\t/** Последний ли среди соседей — от этого зависит `└` вместо `├`. */\n\tisLast: boolean;\n\thasChildren: boolean;\n\t/** Раскрыт ли узел. У листьев всегда `false`. */\n\tisExpanded: boolean;\n\t/**\n\t * Нужен ли спуск от раскрывателя вниз, к первому потомку.\n\t *\n\t * Вертикаль потомка начинается от его собственной строки, поэтому участок между\n\t * раскрывателем и низом строки родителя рисует именно родитель.\n\t */\n\tdescends: boolean;\n\tlines: TreeLine[];\n\t/** Индексы от корня: `[0, 2, 1]`. Годится как стабильный ключ и как «1.3.2» в интерфейсе. */\n\tpath: number[];\n};\n\nexport type FlattenTreeOptions<T> = {\n\t/**\n\t * Потомки узла. Это функция поиска, а не имя поля: плоскому списку с `parentId` хватит\n\t * индекса `Map<parentId, T[]>`, перекладывать данные в узлы с `children` не нужно.\n\t */\n\tgetChildren: (node: T) => T[] | undefined;\n\t/** Раскрыт ли узел. Свёрнутые не отдают потомков. По умолчанию раскрыты все. */\n\tisExpanded?: (node: T) => boolean;\n};\n\n/**\n * Линии потомка, выведенные из линий родителя.\n *\n * Весь алгоритм — в двух строчках: у предков уголок превращается в продолжение (`branch` →\n * `pass`), а обрыв — в пустоту (`end` → `none`); своя колонка получает уголок по `isLast`.\n * Экспортируется отдельно, чтобы линии можно было считать и без обхода дерева — например,\n * для виртуализованного или подгружаемого списка, где полного дерева в памяти нет.\n *\n * Родительские линии в плоском списке удобно держать бегущим массивом `linesByLevel[level]`:\n * в списке, упорядоченном как при выводе, родитель всегда встречается раньше потомка.\n *\n * @example\n * childTreeLines([\"pass\", \"branch\"], false); // [\"pass\", \"pass\", \"branch\"]\n * childTreeLines([\"pass\", \"branch\"], true); // [\"pass\", \"pass\", \"end\"]\n */\nexport const childTreeLines = (parentLines: TreeLine[], isLast: boolean): TreeLine[] => [\n\t...parentLines.map((line): TreeLine => (line === \"pass\" || line === \"branch\" ? \"pass\" : \"none\")),\n\tisLast ? \"end\" : \"branch\"\n];\n\n/**\n * Разворачивает дерево в плоский список строк и попутно считает модель линий.\n *\n * Порядок — как при отображении: узел, затем его раскрытые потомки.\n *\n * @example\n * const rows = flattenTree(nodes, {\n * getChildren: (node) => node.children,\n * isExpanded: (node) => expanded.has(node.id)\n * });\n *\n * rows.map((row) => (\n * <TableRow key={row.path.join(\".\")}>\n * <TableTreeCell row={row} onToggle={() => toggle(row.node.id)}>{row.node.name}</TableTreeCell>\n * </TableRow>\n * ));\n */\nexport function flattenTree<T>(roots: T[], options: FlattenTreeOptions<T>): TreeRow<T>[] {\n\tconst { getChildren, isExpanded = () => true } = options;\n\tconst rows: TreeRow<T>[] = [];\n\n\tconst walk = (nodes: T[], parent: T | null, level: number, parentLines: TreeLine[], parentPath: number[]) => {\n\t\tnodes.forEach((node, index) => {\n\t\t\tconst isLast = index === nodes.length - 1;\n\t\t\tconst children = getChildren(node);\n\t\t\tconst hasChildren = Boolean(children?.length);\n\t\t\tconst expanded = hasChildren && isExpanded(node);\n\t\t\t// У корней нет предка — значит, нет и колонок отступа.\n\t\t\tconst lines = level === 0 ? [] : childTreeLines(parentLines, isLast);\n\t\t\tconst path = [...parentPath, index];\n\n\t\t\trows.push({\n\t\t\t\tnode,\n\t\t\t\tparent,\n\t\t\t\tlevel,\n\t\t\t\tindex,\n\t\t\t\tisLast,\n\t\t\t\thasChildren,\n\t\t\t\tisExpanded: expanded,\n\t\t\t\tdescends: expanded,\n\t\t\t\tlines,\n\t\t\t\tpath\n\t\t\t});\n\n\t\t\tif (expanded) walk(children!, node, level + 1, lines, path);\n\t\t});\n\t};\n\n\twalk(roots, null, 0, [], []);\n\treturn rows;\n}\n"],"names":["tableStyles","tv","Table","React","className","containerClassName","containerRef","props","ref","styles","jsx","tableHeaderStyles","STICKY_HEADER","TableHeader","sticky","tableBodyStyles","TableBody","tableBodyContainerStyles","TableBodyContainer","shadowSize","ScrollShadowContainer","tableFooterStyles","STICKY_FOOTER","TableFooter","TABLE_ROW_ANATOMY","tableRowStyles","TABLE_ROW_TINT_LAYERS","TableRow","tableHeadStyles","TableHead","interactive","tableCellStyles","TableCell","tableResizeHandleStyles","TableResizeHandle","active","tableCaptionStyles","TableCaption","TREE_INDENT","TREE_LINE_OFFSET","TREE_TOGGLE","TREE_STUB","TREE_CELL_PADDING_TOP","TREE_TEXT_LINE_HEIGHT","TREE_CONNECTOR_Y","TREE_OVERHANG","TREE_TOGGLE_MARGIN_TOP","treeLineX","column","treeCellPaddingLeft","level","treeLineStyles","TableTreeLines","lines","descends","jsxs","cn","kind","tableTreeToggleStyles","TableTreeToggle","expanded","style","Icon","Minus","Plus","TableTreeSpacer","TableTreeCell","row","onToggle","toggleLabel","children","childTreeLines","parentLines","isLast","line","flattenTree","roots","options","getChildren","isExpanded","rows","walk","nodes","parent","parentPath","node","index","hasChildren","path"],"mappings":"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"}
|
package/package.json
CHANGED
package/tailwind.preset.js
CHANGED
|
@@ -168,9 +168,6 @@ export default {
|
|
|
168
168
|
70: "hsl(var(--alpha-30))",
|
|
169
169
|
80: "hsl(var(--alpha-20))",
|
|
170
170
|
90: "hsl(var(--alpha-10))",
|
|
171
|
-
92: "hsl(var(--alpha-08))",
|
|
172
|
-
95: "hsl(var(--alpha-05))",
|
|
173
|
-
97: "hsl(var(--alpha-03))"
|
|
174
171
|
},
|
|
175
172
|
"alpha-high": {
|
|
176
173
|
10: "hsl(var(--alpha-high-90))",
|
|
@@ -182,10 +179,9 @@ export default {
|
|
|
182
179
|
70: "hsl(var(--alpha-high-30))",
|
|
183
180
|
80: "hsl(var(--alpha-high-20))",
|
|
184
181
|
90: "hsl(var(--alpha-high-10))",
|
|
185
|
-
92: "hsl(var(--alpha-high-08))",
|
|
186
|
-
95: "hsl(var(--alpha-high-05))",
|
|
187
|
-
97: "hsl(var(--alpha-high-03))"
|
|
188
182
|
},
|
|
183
|
+
"alpha-hover": "hsl(var(--alpha-hover))",
|
|
184
|
+
"alpha-high-hover": "hsl(var(--alpha-high-hover))",
|
|
189
185
|
"alpha-accent": {
|
|
190
186
|
primary: "hsl(var(--alpha-accent-primary))",
|
|
191
187
|
secondary: "hsl(var(--alpha-accent-secondary))"
|
|
@@ -241,9 +237,9 @@ export default {
|
|
|
241
237
|
"soft-xl": "0 6px 12px -6px rgba(15, 23, 42, 0.12), 0 16px 24px -6px rgba(15, 23, 42, 0.12)",
|
|
242
238
|
"soft-2xl": "0 24px 48px -12px rgba(15, 23, 42, 0.24)",
|
|
243
239
|
|
|
244
|
-
focus: "0 0 0
|
|
245
|
-
"inverse-focus": "0 0 0
|
|
246
|
-
"focus-error": "0 0 0 1px hsl(var(--status-error))",
|
|
240
|
+
focus: "0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--focus))",
|
|
241
|
+
"inverse-focus": "0 0 0 0.5px hsl(var(--inverse-primary-bg)), 0 0 0 1px hsl(var(--inverse-muted))",
|
|
242
|
+
"focus-error": "0 0 0 0.5px hsl(var(--primary-bg)), 0 0 0 1px hsl(var(--status-error))",
|
|
247
243
|
|
|
248
244
|
"hard-base":
|
|
249
245
|
"0 1px 3px 0 rgba(2, 6, 23, 0.50), 0 0 0.5px 0 rgba(255, 255, 255, 0.30) inset, 0 3px 8px 0 rgba(2, 6, 23, 0.35), 0 0.5px 0 0 rgba(255, 255, 255, 0.08) inset",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"treeModel-jvOXFZvK.js","sources":["../src/components/table/Table.tsx","../src/components/table/tree/treeGeometry.ts","../src/components/table/tree/TableTree.tsx","../src/components/table/tree/treeModel.ts"],"sourcesContent":["import * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { ScrollShadowContainer } from \"../scroll-shadow-container\";\nimport { STICKY_FOOTER, STICKY_HEADER } from \"./sticky/stickyCell\";\nimport { ScrollShadowContainerProps } from \"../scroll-shadow-container/ScrollShadowContainer\";\nimport { TABLE_ROW_TINT_LAYERS } from \"./rowTint\";\n\nconst tableStyles = tv({\n\tslots: {\n\t\twrapper: \"relative w-full overflow-x-auto rounded-lg border border-secondary-border\",\n\n\t\t// Раздельная модель границ вместо схлопнутой (умолчание Tailwind для таблиц).\n\t\t// В схлопнутой модели граница принадлежит сетке таблицы, а не ячейке: `position: sticky`\n\t\t// и `transform` уносят ячейку, а линия остаётся стоять на старом месте — из-за этого\n\t\t// прилипающим шапке и колонке приходилось гасить границу и рисовать её inset-тенью.\n\t\t// В раздельной модели граница входит в бокс ячейки и едет вместе с ней.\n\t\t//\n\t\t// Плата: `border` у групп строк (`thead`, `tbody`, `tfoot`) и у самих `tr` браузер\n\t\t// обязан игнорировать, поэтому все разделители живут на ячейках — см. `TABLE_ROW_ANATOMY`,\n\t\t// `tableHeaderStyles` и `tableFooterStyles`.\n\t\ttable: \"w-full caption-bottom border-separate border-spacing-0 text-xs\"\n\t}\n});\n\nexport type TableProps = React.HTMLAttributes<HTMLTableElement> & {\n\tcontainerClassName?: string;\n\tcontainerRef?: React.Ref<HTMLDivElement>;\n};\n\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\n\t({ className, containerClassName, containerRef, ...props }, ref) => {\n\t\tconst styles = tableStyles();\n\n\t\treturn (\n\t\t\t<div ref={containerRef} className={styles.wrapper({ className: containerClassName })}>\n\t\t\t\t<table ref={ref} className={styles.table({ className })} {...props} />\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nTable.displayName = \"Table\";\n\nconst tableHeaderStyles = tv({\n\t// Линия под шапкой — на ячейках, а не на `thead`: `border` у групп строк в раздельной\n\t// модели игнорируется (см. `tableStyles`). Заодно это ровно то, что нужно прилипающей\n\t// шапке: граница ячейки уезжает вместе с ячейкой, а не остаётся в сетке таблицы.\n\t//\n\t// Ту же нижнюю границу ячейкам шапки даёт и `TableRow`; дубль намеренный — разделитель\n\t// шапки и тела это контракт самого `TableHeader`, и он не должен пропадать из-за голого\n\t// `<tr>` в разметке потребителя. Одинаковые объявления одного свойства линию не задваивают.\n\t//\n\tbase: \"bg-primary-bg [&_th]:border-b [&_th]:border-secondary-border [&_tr]:[--table-row-bg-hover:transparent]\",\n\tvariants: {\n\t\tsticky: {\n\t\t\ttrue: STICKY_HEADER\n\t\t}\n\t}\n});\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\t/**\n\t * Шапка остаётся на месте при вертикальной прокрутке.\n\t *\n\t * Прокручивается контейнер таблицы, поэтому ему нужна ограниченная высота\n\t * (`containerClassName=\"max-h-80\"`): без неё прокручивать нечего и `position: sticky`\n\t * ничего не делает.\n\t *\n\t * Проп, а не набор классов в `className`, потому что вместе со `sticky` требуется\n\t * `z-index`, согласованный с закреплёнными колонками, — это знание кита, а не\n\t * потребителя (см. `STICKY_HEADER`).\n\t */\n\tsticky?: boolean;\n};\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n\t({ className, sticky, ...props }, ref) => (\n\t\t<thead ref={ref} className={tableHeaderStyles({ sticky, className })} {...props} />\n\t)\n);\n\nTableHeader.displayName = \"TableHeader\";\n\nconst tableBodyStyles = tv({\n\tbase: \"bg-secondary-bg [&_tr:last-child>*]:border-b-0\"\n});\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n\t({ className, ...props }, ref) => <tbody ref={ref} className={tableBodyStyles({ className })} {...props} />\n);\n\nTableBody.displayName = \"TableBody\";\n\nconst tableBodyContainerStyles = tv({\n\tbase: \"overflow-x-hidden\"\n});\n\nexport type TableBodyContainerProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\tcontainerClassName?: string;\n\tshadowSize?: ScrollShadowContainerProps[\"shadowSize\"];\n};\n\nexport const TableBodyContainer = React.forwardRef<HTMLTableSectionElement, TableBodyContainerProps>(\n\t({ className, containerClassName, shadowSize, ...props }, ref) => (\n\t\t<ScrollShadowContainer\n\t\t\tclassName={tableBodyContainerStyles({ className: containerClassName })}\n\t\t\tshadowSize={shadowSize}\n\t\t>\n\t\t\t<tbody ref={ref} className={tableBodyStyles({ className })} {...props} />\n\t\t</ScrollShadowContainer>\n\t)\n);\n\nTableBodyContainer.displayName = \"TableBodyContainer\";\n\nconst tableFooterStyles = tv({\n\t// Верхняя граница — на ячейках первой строки, нижняя снимается с ячеек последней:\n\t// собственный `border` у `tfoot` в раздельной модели игнорируется (см. `tableStyles`).\n\tbase: [\n\t\t\"bg-primary-bg font-medium\",\n\t\t\"[&>tr:first-child>*]:border-t [&>tr:first-child>*]:border-secondary-border\",\n\t\t\"[&>tr:last-child>*]:border-b-0\"\n\t],\n\tvariants: {\n\t\tsticky: {\n\t\t\ttrue: STICKY_FOOTER\n\t\t}\n\t}\n});\n\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement> & {\n\t/**\n\t * Итоги остаются на месте при вертикальной прокрутке.\n\t *\n\t * Зеркало `sticky` у `TableHeader`, и требует того же: прокручивается контейнер таблицы,\n\t * поэтому у него должна быть ограниченная высота — без неё прокручивать нечего.\n\t *\n\t * Проп, а не классы в `className`, по той же причине, что и у шапки: вместе со `sticky`\n\t * нужен `z-index`, согласованный с закреплёнными колонками (см. `STICKY_FOOTER`).\n\t */\n\tsticky?: boolean;\n};\n\nexport const TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n\t({ className, sticky, ...props }, ref) => (\n\t\t<tfoot ref={ref} className={tableFooterStyles({ sticky, className })} {...props} />\n\t)\n);\n\nTableFooter.displayName = \"TableFooter\";\n\nconst TABLE_ROW_ANATOMY = \"[&>*]:border-b [&>*]:border-secondary-border transition-colors\";\n\n/**\n * Строка красится двумя вещами: заливкой и слоями подкраски поверх неё.\n *\n * **Заливка** — `--table-row-bg` и `--table-row-bg-hover`: обычная строка и наведённая.\n * Это всё, что кит знает про цвет строки; ни выделения, ни деактивации у примитива нет —\n * что означает подсветка и когда её включать, знает прикладной код (см. `rowTint.ts`).\n *\n * **Слои подкраски** — `--table-row-tints`, их выставляет потребитель через `tableRowTints()`.\n * Полупрозрачные цвета поверх заливки: альфы складываются и между собой, и с заливкой, поэтому\n * выделенная деактивированная строка показывает обе подсветки, а не одну.\n *\n * Заливка и слои разведены не только по смыслу, но и по свойству: `background-color` против\n * `background-image`. Поэтому `className=\"bg-…\"` вытесняет заливку — и только её: слои\n * останутся на месте и лягут поверх любого цвета, который выбрал потребитель.\n */\nconst tableRowStyles = tv({\n\tbase: [\n\t\tTABLE_ROW_ANATOMY,\n\n\t\t// Заливку читает ровно один класс на состояние — обычный `bg-*` и `hover:bg-*`, —\n\t\t// поэтому любой `bg-*` из `className` вытесняет её штатно, без `!important`\n\t\t// и без повторения модификаторов.\n\t\t\"bg-[color:var(--table-row-bg)] hover:bg-[color:var(--table-row-bg-hover)]\",\n\n\t\t// Обычная строка: подложку даёт `TableBody`, ховер — нейтральная альфа поверх неё\n\t\t// (`alpha/high/97` в макете подписана как состояние строки `hover`).\n\t\t\"[--table-row-bg-hover:hsl(var(--alpha-high-03))] [--table-row-bg:transparent]\",\n\n\t\tTABLE_ROW_TINT_LAYERS\n\t]\n});\n\nexport type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;\n\n/**\n * Строка таблицы.\n *\n * **Как перекрасить.** Обычными классами: `className=\"bg-… hover:bg-…\"`. Они выигрывают\n * штатно — ни `!important`, ни повторения модификаторов не нужно. Кто хочет сохранить\n * встроенное наведение и подменить только палитру — выставляет переменные `--table-row-bg`\n * и `--table-row-bg-hover`.\n *\n * **Как подсветить.** Слоями: `style={tableRowTints(…)}`, готовые цвета — в `TABLE_ROW_TINT`.\n * Слои складываются друг с другом и ложатся поверх заливки, какой бы она ни была, поэтому\n * подсветка и перекраска не конфликтуют. Подробности — в `rowTint.ts`.\n *\n * **Почему цвет читают отдельные классы, а не состояния.** Раньше `base` красил строку\n * четырьмя классами (`hover:bg-*`, `data-[state=selected]:bg-*`,\n * `data-[state=selected]:hover:bg-*`), и перебить их снаружи было нечем: `tailwind-merge`\n * снимает конфликт только между классами с одинаковым набором модификаторов, поэтому `bg-x`\n * из `className` не вытеснял ни один из них, а `data-[state=selected]:bg-*` вдобавок выигрывал\n * по специфичности — 0,2,0 против 0,1,0. Потребителю приходилось вручную повторять все четыре\n * комбинации модификаторов.\n */\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(({ className, ...props }, ref) => (\n\t<tr ref={ref} className={tableRowStyles({ className })} {...props} />\n));\n\nTableRow.displayName = \"TableRow\";\n\nconst tableHeadStyles = tv({\n\tbase: \"border-r border-secondary-border px-3 py-2.5 text-left align-middle font-medium text-muted last:border-r-0\",\n\tvariants: {\n\t\tinteractive: {\n\t\t\ttrue: [\n\t\t\t\t\"cursor-pointer p-0 transition-colors\",\n\t\t\t\t\"hover:bg-secondary-bg-hover\",\n\t\t\t\t\"data-[state=open]:bg-primary-bg-hover [&:has([data-state=open])]:bg-primary-bg-hover\"\n\t\t\t]\n\t\t}\n\t}\n});\n\nexport type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement> & {\n\t/**\n\t * Вся ячейка — интерактивная зона: меняет фон на наведении и на раскрытом меню,\n\t * и снимает собственный паддинг в пользу растянутого на всю ячейку триггера.\n\t */\n\tinteractive?: boolean;\n};\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n\t({ className, interactive, ...props }, ref) => (\n\t\t<th ref={ref} className={tableHeadStyles({ interactive, className })} {...props} />\n\t)\n);\n\nTableHead.displayName = \"TableHead\";\n\nconst tableCellStyles = tv({\n\tbase: \"border-r border-secondary-border px-3 py-2.5 align-middle last:border-r-0 [&:has([role=checkbox])]:pr-0\"\n});\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n\t({ className, ...props }, ref) => <td ref={ref} className={tableCellStyles({ className })} {...props} />\n);\n\nTableCell.displayName = \"TableCell\";\n\nconst tableResizeHandleStyles = tv({\n\tbase: [\n\t\t\"absolute right-0 top-0 z-10 h-full w-2 translate-x-1/2 cursor-col-resize touch-none select-none\",\n\t\t\"after:absolute after:left-1/2 after:top-0 after:h-full after:w-0.5 after:-translate-x-1/2\",\n\t\t\"after:bg-primary-border after:opacity-0 after:transition-opacity hover:after:opacity-100\"\n\t],\n\tvariants: {\n\t\tactive: {\n\t\t\ttrue: \"after:opacity-100\"\n\t\t}\n\t}\n});\n\nexport type TableResizeHandleProps = React.HTMLAttributes<HTMLDivElement> & {\n\t/** Держит индикатор подсвеченным во время drag-сессии, когда курсор уже ушёл с ручки. */\n\tactive?: boolean;\n};\n\n/**\n * Зона захвата для ресайза колонки. Кладётся внутрь `TableHead`, которому нужен `relative`.\n * Саму ширину не считает — работает в паре с `useColumnResize` из `./column-resize`.\n * Работает только если у `TableHead` нет `overflow: hidden`.\n */\nexport const TableResizeHandle = React.forwardRef<HTMLDivElement, TableResizeHandleProps>(\n\t({ className, active, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\trole=\"separator\"\n\t\t\taria-orientation=\"vertical\"\n\t\t\tclassName={tableResizeHandleStyles({ active, className })}\n\t\t\t{...props}\n\t\t/>\n\t)\n);\n\nTableResizeHandle.displayName = \"TableResizeHandle\";\n\nconst tableCaptionStyles = tv({\n\tbase: \"mt-4 text-muted\"\n});\n\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n\t({ className, ...props }, ref) => <caption ref={ref} className={tableCaptionStyles({ className })} {...props} />\n);\n\nTableCaption.displayName = \"TableCaption\";\n","/**\n * Геометрия линий иерархии.\n *\n * Значения связаны между собой — менять их можно только согласованно, поэтому производные\n * выражены формулами, а не числами.\n *\n * ```\n * ┌────────────────────────────────────────┐\n * │ ┌───┐ │\n * │ │ − │ Родитель │\n * │ └─┬─┘ │\n * ├─────┼──────────────────────────────────┤ ← граница ячеек; линию продлевает TREE_OVERHANG\n * │ │ ┌───┐ │\n * │ └────┤ + │ Потомок │ ← TREE_CONNECTOR_Y (центр первой строки)\n * │ └───┘ │\n * └────────────────────────────────────────┘\n *\n * ├─────┤ TREE_LINE_OFFSET — до вертикали нулевого уровня\n * ├──────┤ TREE_INDENT — шаг между вертикалями соседних уровней\n * ├────┤ TREE_STUB — отвод до левого края раскрывателя\n * ├───┤ TREE_TOGGLE — сторона квадрата, центр на своей вертикали\n * ```\n *\n * Схема не в масштабе — важны отношения величин, а не пропорции на картинке.\n */\n\n/** Шаг отступа на один уровень вложенности. */\nexport const TREE_INDENT = 18;\n\n/** Отступ от левого края ячейки до вертикали нулевой колонки. */\nexport const TREE_LINE_OFFSET = 13;\n\n/**\n * Сторона квадрата-раскрывателя. Центрируется ровно на вертикали своего уровня.\n *\n * Совпадает с чекбоксом (`size-4`): в одной строке они стоят рядом, и разный размер\n * у двух одинаковых по смыслу квадратов читается как небрежность.\n *\n * Сверху ограничен `2 * TREE_LINE_OFFSET` — иначе `treeCellPaddingLeft(0)` уходит в минус,\n * и раскрыватель корня вылезает за левый край ячейки. Практический потолок ниже:\n * при стороне больше `TREE_INDENT` обнуляется `TREE_STUB` и отвод к узлу исчезает.\n */\nexport const TREE_TOGGLE = 16;\n\n/**\n * Длина горизонтального отвода — от вертикали предка до левого края раскрывателя.\n *\n * Обязана равняться `TREE_INDENT - TREE_TOGGLE / 2`: раскрыватель смещён от своей вертикали\n * влево на половину стороны, и при любом другом значении между отводом и квадратом\n * остаётся щель либо отвод заезжает под квадрат.\n */\nexport const TREE_STUB = TREE_INDENT - TREE_TOGGLE / 2;\n\n/** Вертикальный паддинг ячейки таблицы (`py-2.5`). */\nconst TREE_CELL_PADDING_TOP = 10;\n\n/** Высота строки текста при `text-xs`. */\nconst TREE_TEXT_LINE_HEIGHT = 16;\n\n/**\n * Вертикальная позиция коннектора — центр ПЕРВОЙ строки текста, а не середина ячейки.\n *\n * Это принципиально для строк переменной высоты: при `top: 50%` середина ячейки уезжает вниз\n * от подписи, как только контент переносится, и уголок перестаёт указывать на узел.\n */\nexport const TREE_CONNECTOR_Y = TREE_CELL_PADDING_TOP + TREE_TEXT_LINE_HEIGHT / 2;\n\n/**\n * Насколько линии вылезают за padding-box ячейки сверху и снизу.\n *\n * Нижняя граница ячейки лежит вне её padding-box, и без этого выноса вертикаль обрывалась бы\n * на каждой границе — вместо сплошной линии получался пунктир.\n */\nexport const TREE_OVERHANG = 1;\n\n/**\n * Отступ раскрывателя сверху, при котором его центр совпадает с коннектором.\n *\n * Раньше здесь стоял `mt-0.5`, подобранный под сторону 12px. Теперь это разность:\n * содержимое ячейки начинается на `TREE_CELL_PADDING_TOP`, а центр квадрата должен\n * попасть на `TREE_CONNECTOR_Y`. При достаточно крупном раскрывателе значение\n * становится отрицательным — квадрат заходит в верхний паддинг, и это нормально.\n */\nexport const TREE_TOGGLE_MARGIN_TOP = TREE_CONNECTOR_Y - TREE_CELL_PADDING_TOP - TREE_TOGGLE / 2;\n\n/**\n * Горизонтальная позиция вертикали для колонки отступа.\n *\n * @example\n * treeLineX(0); // 13\n * treeLineX(2); // 49\n */\nexport const treeLineX = (column: number) => TREE_LINE_OFFSET + column * TREE_INDENT;\n\n/**\n * Левый отступ ячейки, при котором раскрыватель встаёт по центру вертикали своего уровня.\n *\n * @example\n * <TableCell style={{ paddingLeft: treeCellPaddingLeft(row.level) }}> // уровень 2 → 41px\n */\nexport const treeCellPaddingLeft = (level: number) => treeLineX(level) - TREE_TOGGLE / 2;\n","import * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Minus, Plus } from \"lucide-react\";\nimport { Icon } from \"../../icon/Icon\";\nimport { TableCell } from \"../Table\";\nimport { cn } from \"../../../lib/utils/cn\";\nimport {\n\tTREE_CONNECTOR_Y,\n\tTREE_OVERHANG,\n\tTREE_STUB,\n\tTREE_TOGGLE,\n\tTREE_TOGGLE_MARGIN_TOP,\n\ttreeCellPaddingLeft,\n\ttreeLineX\n} from \"./treeGeometry\";\nimport type { TreeLine, TreeRow } from \"./treeModel\";\n\nconst treeLineStyles = tv({\n\tbase: \"absolute bg-primary-border\",\n\tvariants: {\n\t\taxis: {\n\t\t\tvertical: \"w-px\",\n\t\t\thorizontal: \"h-px\"\n\t\t}\n\t}\n});\n\nexport type TableTreeLinesProps = {\n\t/**\n\t * Модель линий, по одному элементу на колонку отступа. Считается `flattenTree`.\n\t * Длина массива задаёт глубину узла — отдельный проп `level` не нужен.\n\t */\n\tlines: TreeLine[];\n\t/** Спуск от раскрывателя вниз, к первому потомку. Ставится у раскрытых узлов с потомками. */\n\tdescends?: boolean;\n\tclassName?: string;\n};\n\n/**\n * Линии связи для строки дерева или группы.\n *\n * Кладётся в ячейку с `position: relative` и `padding-left: treeCellPaddingLeft(level)` —\n * обычно этим занимается `TableTreeCell`.\n *\n * Все линии — абсолютно позиционированные блоки в 1px, а не рамки контейнеров: уровни\n * вложенности в таблице не образуют вложенных DOM-узлов, поэтому рисовать `border-left`\n * на контейнере уровня попросту негде.\n *\n * Разметка повторяет модель один в один и размечена data-атрибутами: на обёртке лежит вся\n * модель строки (`data-tree-lines=\"pass none end\"`), на каждом элементе — его роль\n * (`data-tree-line`) и номер колонки. Это делает отладку в DevTools прямой: видно не только\n * то, что нарисовано, но и то, что было велено нарисовать.\n *\n * @example\n * <TableCell className=\"relative\" style={{ paddingLeft: treeCellPaddingLeft(row.level) }}>\n * <TableTreeLines lines={row.lines} descends={row.descends} />\n * {row.node.name}\n * </TableCell>\n */\nexport const TableTreeLines = ({ lines, descends = false, className }: TableTreeLinesProps) => (\n\t<span\n\t\taria-hidden\n\t\tdata-tree-lines={lines.join(\" \")}\n\t\tdata-tree-level={lines.length}\n\t\tclassName={cn(\"pointer-events-none absolute inset-0\", className)}\n\t>\n\t\t{lines.map((kind, column) => {\n\t\t\tif (kind === \"none\") return null;\n\n\t\t\treturn (\n\t\t\t\t<React.Fragment key={column}>\n\t\t\t\t\t<span\n\t\t\t\t\t\tdata-tree-line={kind}\n\t\t\t\t\t\tdata-tree-column={column}\n\t\t\t\t\t\tclassName={treeLineStyles({ axis: \"vertical\" })}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: treeLineX(column),\n\t\t\t\t\t\t\ttop: -TREE_OVERHANG,\n\t\t\t\t\t\t\t// `end` — уголок: вертикаль обрывается на коннекторе, иначе протекла бы\n\t\t\t\t\t\t\t// под следующие строки, где ветки этого предка уже нет.\n\t\t\t\t\t\t\t...(kind === \"end\"\n\t\t\t\t\t\t\t\t? { height: TREE_CONNECTOR_Y + TREE_OVERHANG }\n\t\t\t\t\t\t\t\t: { bottom: -TREE_OVERHANG })\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{kind !== \"pass\" && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tdata-tree-line=\"stub\"\n\t\t\t\t\t\t\tdata-tree-column={column}\n\t\t\t\t\t\t\tclassName={treeLineStyles({ axis: \"horizontal\" })}\n\t\t\t\t\t\t\tstyle={{ left: treeLineX(column), top: TREE_CONNECTOR_Y, width: TREE_STUB }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t);\n\t\t})}\n\n\t\t{descends && (\n\t\t\t<span\n\t\t\t\tdata-tree-line=\"spur\"\n\t\t\t\tdata-tree-column={lines.length}\n\t\t\t\tclassName={treeLineStyles({ axis: \"vertical\" })}\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: treeLineX(lines.length),\n\t\t\t\t\ttop: TREE_CONNECTOR_Y + TREE_TOGGLE / 2,\n\t\t\t\t\tbottom: -TREE_OVERHANG\n\t\t\t\t}}\n\t\t\t/>\n\t\t)}\n\t</span>\n);\n\nTableTreeLines.displayName = \"TableTreeLines\";\n\nconst tableTreeToggleStyles = tv({\n\tbase: [\n\t\t// `z-10` поднимает раскрыватель над линиями, непрозрачный фон разрывает вертикаль под ним.\n\t\t\"relative z-10 flex shrink-0 items-center justify-center\",\n\t\t// Рамка, фон и скругление — как у `Checkbox`: в строке они стоят рядом и должны\n\t\t// читаться одинаково.\n\t\t\"rounded-sm border border-primary-border bg-secondary-bg text-muted\",\n\t\t\"hover:text-primary-fg focus-visible:shadow-focus focus-visible:outline-none\",\n\t\t// Невидимое расширение зоны нажатия до 24px. Именно псевдоэлементом, а не паддингом\n\t\t// или размером: квадрат обязан остаться на сетке линий, а промахиваться по 16px\n\t\t// на строке высотой 36px легко.\n\t\t\"before:absolute before:left-1/2 before:top-1/2 before:size-6 before:-translate-x-1/2 before:-translate-y-1/2\"\n\t]\n});\n\nexport type TableTreeToggleProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> & {\n\texpanded: boolean;\n};\n\n/** Квадрат раскрытия ветки. Иконка и `aria-expanded` следуют за `expanded`. */\nexport const TableTreeToggle = React.forwardRef<HTMLButtonElement, TableTreeToggleProps>(\n\t({ className, expanded, style, ...props }, ref) => (\n\t\t<button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\taria-expanded={expanded}\n\t\t\tclassName={tableTreeToggleStyles({ className })}\n\t\t\tstyle={{ width: TREE_TOGGLE, height: TREE_TOGGLE, marginTop: TREE_TOGGLE_MARGIN_TOP, ...style }}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Icon icon={expanded ? Minus : Plus} className=\"size-3\" />\n\t\t</button>\n\t)\n);\n\nTableTreeToggle.displayName = \"TableTreeToggle\";\n\n/**\n * Распорка на месте раскрывателя у листьев.\n *\n * Нужна, чтобы подписи узлов с потомками и без выравнивались по одной вертикали.\n * Отдельным компонентом, а не режимом `TableTreeToggle`, чтобы у листа не было\n * ни кнопки, ни `aria-expanded`.\n */\nexport const TableTreeSpacer = ({ className }: { className?: string }) => (\n\t<span aria-hidden className={cn(\"shrink-0\", className)} style={{ width: TREE_TOGGLE }} />\n);\n\nTableTreeSpacer.displayName = \"TableTreeSpacer\";\n\n/**\n * Всё, что ячейка иерархии знает о строке: где она стоит и что у неё с потомками.\n *\n * Структурный тип, а не generic: ячейке безразличен сам узел, поэтому в неё проходит любой\n * `TreeRow<T>` — и любой собранный вручную объект с этими пятью полями. Второе нужно там,\n * где дерева в памяти нет: список пришёл плоским, с готовым `level`, а линии считаются\n * `childTreeLines`.\n *\n * Инвариант: `lines.length === level`. Отступ берётся из `level`, а линии расставляются по\n * индексам `lines` — при расхождении уголок промахнётся мимо отступа.\n */\nexport type TableTreeCellRow = Pick<TreeRow<unknown>, \"level\" | \"lines\" | \"descends\" | \"hasChildren\" | \"isExpanded\">;\n\nexport type TableTreeCellProps = React.TdHTMLAttributes<HTMLTableCellElement> & {\n\t/**\n\t * Положение строки в иерархии: `level` — отступ, `lines` — линии связи, `descends` — спуск\n\t * к первому потомку, `hasChildren` — раскрыватель либо распорка на его месте, `isExpanded` —\n\t * знак в раскрывателе и `aria-expanded`.\n\t */\n\trow: TableTreeCellRow;\n\t/** Клик по раскрывателю. Без него раскрыватель рисуется, но ничего не делает. */\n\tonToggle?: React.MouseEventHandler<HTMLButtonElement>;\n\ttoggleLabel?: string;\n};\n\n/**\n * Ячейка с отступом, линиями и раскрывателем — весь столбец иерархии целиком.\n *\n * Собирает три вещи, которые иначе пришлось бы согласовывать вручную в каждой таблице:\n * `padding-left` по глубине, линии и раскрыватель либо распорку на его месте. Содержимое\n * остаётся за потребителем — внутрь идёт что угодно, от подписи до бейджей.\n *\n * `align-top` не косметика: при переносе текста в соседних колонках содержимое, выровненное\n * по центру, уедет вниз от коннектора, который привязан к первой строке.\n *\n * @example\n * <TableTreeCell row={row} onToggle={() => toggle(row.node.id)}>\n * {row.node.name}\n * </TableTreeCell>\n */\nexport const TableTreeCell = React.forwardRef<HTMLTableCellElement, TableTreeCellProps>(\n\t({ row, onToggle, toggleLabel, className, style, children, ...props }, ref) => (\n\t\t<TableCell\n\t\t\tref={ref}\n\t\t\tdata-tree-level={row.level}\n\t\t\tclassName={cn(\"relative align-top\", className)}\n\t\t\tstyle={{ paddingLeft: treeCellPaddingLeft(row.level), ...style }}\n\t\t\t{...props}\n\t\t>\n\t\t\t<TableTreeLines lines={row.lines} descends={row.descends} />\n\t\t\t<span className=\"flex items-start gap-1.5\">\n\t\t\t\t{row.hasChildren ? (\n\t\t\t\t\t<TableTreeToggle\n\t\t\t\t\t\texpanded={row.isExpanded}\n\t\t\t\t\t\taria-label={toggleLabel ?? (row.isExpanded ? \"Свернуть\" : \"Развернуть\")}\n\t\t\t\t\t\tonClick={onToggle}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<TableTreeSpacer />\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t</TableCell>\n\t)\n);\n\nTableTreeCell.displayName = \"TableTreeCell\";\n","/**\n * Модель строки дерева: что рисовать в каждой колонке отступа.\n *\n * Ровно эти четыре состояния использует классический вывод `tree` и почти все табличные\n * гриды (AG Grid, TanStack Table, rc-tree) — набор проверен и закрывает все случаи:\n *\n * - `pass` — сквозная вертикаль `│`: ветка предка продолжается ниже этой строки;\n * - `branch` — `├`: отвод к узлу, и у узла есть следующие соседи;\n * - `end` — `└`: отвод к последнему соседу, вертикаль обрывается на уголке;\n * - `none` — пусто: ветка предка закончилась выше.\n *\n * Ключевой инвариант: **индекс в массиве равен номеру колонки**, а `lines.length` равно\n * глубине узла. `branch`/`end` встречается только в последней колонке, `pass`/`none` — только\n * в предыдущих. Именно этот инвариант убирает класс ошибок «сдвиг на единицу»: раньше\n * массив хранил флаги предков, и колонка `level - 1` управлялась флагом родителя, хотя\n * должна была — признаком `isLast` самого узла. Сравнивать модель с картинкой теперь можно\n * глазами: `[\"pass\", \"none\", \"end\"]` читается как `│ └`.\n */\nexport type TreeLine = \"none\" | \"pass\" | \"branch\" | \"end\";\n\n/** Строка плоского списка со всем, что нужно для отрисовки узла дерева. */\nexport type TreeRow<T> = {\n\tnode: T;\n\t/** Родительский узел, `null` у корней. */\n\tparent: T | null;\n\t/** Глубина, 0 — корень. Равна `lines.length`. */\n\tlevel: number;\n\t/** Позиция среди соседей. */\n\tindex: number;\n\t/** Последний ли среди соседей — от этого зависит `└` вместо `├`. */\n\tisLast: boolean;\n\thasChildren: boolean;\n\t/** Раскрыт ли узел. У листьев всегда `false`. */\n\tisExpanded: boolean;\n\t/**\n\t * Нужен ли спуск от раскрывателя вниз, к первому потомку.\n\t *\n\t * Вертикаль потомка начинается от его собственной строки, поэтому участок между\n\t * раскрывателем и низом строки родителя рисует именно родитель.\n\t */\n\tdescends: boolean;\n\tlines: TreeLine[];\n\t/** Индексы от корня: `[0, 2, 1]`. Годится как стабильный ключ и как «1.3.2» в интерфейсе. */\n\tpath: number[];\n};\n\nexport type FlattenTreeOptions<T> = {\n\t/**\n\t * Потомки узла. Это функция поиска, а не имя поля: плоскому списку с `parentId` хватит\n\t * индекса `Map<parentId, T[]>`, перекладывать данные в узлы с `children` не нужно.\n\t */\n\tgetChildren: (node: T) => T[] | undefined;\n\t/** Раскрыт ли узел. Свёрнутые не отдают потомков. По умолчанию раскрыты все. */\n\tisExpanded?: (node: T) => boolean;\n};\n\n/**\n * Линии потомка, выведенные из линий родителя.\n *\n * Весь алгоритм — в двух строчках: у предков уголок превращается в продолжение (`branch` →\n * `pass`), а обрыв — в пустоту (`end` → `none`); своя колонка получает уголок по `isLast`.\n * Экспортируется отдельно, чтобы линии можно было считать и без обхода дерева — например,\n * для виртуализованного или подгружаемого списка, где полного дерева в памяти нет.\n *\n * Родительские линии в плоском списке удобно держать бегущим массивом `linesByLevel[level]`:\n * в списке, упорядоченном как при выводе, родитель всегда встречается раньше потомка.\n *\n * @example\n * childTreeLines([\"pass\", \"branch\"], false); // [\"pass\", \"pass\", \"branch\"]\n * childTreeLines([\"pass\", \"branch\"], true); // [\"pass\", \"pass\", \"end\"]\n */\nexport const childTreeLines = (parentLines: TreeLine[], isLast: boolean): TreeLine[] => [\n\t...parentLines.map((line): TreeLine => (line === \"pass\" || line === \"branch\" ? \"pass\" : \"none\")),\n\tisLast ? \"end\" : \"branch\"\n];\n\n/**\n * Разворачивает дерево в плоский список строк и попутно считает модель линий.\n *\n * Порядок — как при отображении: узел, затем его раскрытые потомки.\n *\n * @example\n * const rows = flattenTree(nodes, {\n * getChildren: (node) => node.children,\n * isExpanded: (node) => expanded.has(node.id)\n * });\n *\n * rows.map((row) => (\n * <TableRow key={row.path.join(\".\")}>\n * <TableTreeCell row={row} onToggle={() => toggle(row.node.id)}>{row.node.name}</TableTreeCell>\n * </TableRow>\n * ));\n */\nexport function flattenTree<T>(roots: T[], options: FlattenTreeOptions<T>): TreeRow<T>[] {\n\tconst { getChildren, isExpanded = () => true } = options;\n\tconst rows: TreeRow<T>[] = [];\n\n\tconst walk = (nodes: T[], parent: T | null, level: number, parentLines: TreeLine[], parentPath: number[]) => {\n\t\tnodes.forEach((node, index) => {\n\t\t\tconst isLast = index === nodes.length - 1;\n\t\t\tconst children = getChildren(node);\n\t\t\tconst hasChildren = Boolean(children?.length);\n\t\t\tconst expanded = hasChildren && isExpanded(node);\n\t\t\t// У корней нет предка — значит, нет и колонок отступа.\n\t\t\tconst lines = level === 0 ? [] : childTreeLines(parentLines, isLast);\n\t\t\tconst path = [...parentPath, index];\n\n\t\t\trows.push({\n\t\t\t\tnode,\n\t\t\t\tparent,\n\t\t\t\tlevel,\n\t\t\t\tindex,\n\t\t\t\tisLast,\n\t\t\t\thasChildren,\n\t\t\t\tisExpanded: expanded,\n\t\t\t\tdescends: expanded,\n\t\t\t\tlines,\n\t\t\t\tpath\n\t\t\t});\n\n\t\t\tif (expanded) walk(children!, node, level + 1, lines, path);\n\t\t});\n\t};\n\n\twalk(roots, null, 0, [], []);\n\treturn rows;\n}\n"],"names":["tableStyles","tv","Table","React","className","containerClassName","containerRef","props","ref","styles","jsx","tableHeaderStyles","STICKY_HEADER","TableHeader","sticky","tableBodyStyles","TableBody","tableBodyContainerStyles","TableBodyContainer","shadowSize","ScrollShadowContainer","tableFooterStyles","STICKY_FOOTER","TableFooter","TABLE_ROW_ANATOMY","tableRowStyles","TABLE_ROW_TINT_LAYERS","TableRow","tableHeadStyles","TableHead","interactive","tableCellStyles","TableCell","tableResizeHandleStyles","TableResizeHandle","active","tableCaptionStyles","TableCaption","TREE_INDENT","TREE_LINE_OFFSET","TREE_TOGGLE","TREE_STUB","TREE_CELL_PADDING_TOP","TREE_TEXT_LINE_HEIGHT","TREE_CONNECTOR_Y","TREE_OVERHANG","TREE_TOGGLE_MARGIN_TOP","treeLineX","column","treeCellPaddingLeft","level","treeLineStyles","TableTreeLines","lines","descends","jsxs","cn","kind","tableTreeToggleStyles","TableTreeToggle","expanded","style","Icon","Minus","Plus","TableTreeSpacer","TableTreeCell","row","onToggle","toggleLabel","children","childTreeLines","parentLines","isLast","line","flattenTree","roots","options","getChildren","isExpanded","rows","walk","nodes","parent","parentPath","node","index","hasChildren","path"],"mappings":";;;;;;;;;;AAOA,MAAMA,IAAcC,EAAG;AAAA,EACtB,OAAO;AAAA,IACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWT,OAAO;AAAA,EAAA;AAET,CAAC,GAOYC,IAAQC,EAAM;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,oBAAAC,GAAoB,cAAAC,GAAc,GAAGC,KAASC,MAAQ;AACnE,UAAMC,IAAST,EAAY;AAG1B,WAAA,gBAAAU,EAAC,OAAI,EAAA,KAAKJ,GAAc,WAAWG,EAAO,QAAQ,EAAE,WAAWJ,EAAoB,CAAA,GAClF,4BAAC,SAAM,EAAA,KAAAG,GAAU,WAAWC,EAAO,MAAM,EAAE,WAAAL,GAAW,GAAI,GAAGG,EAAA,CAAO,EACrE,CAAA;AAAA,EAAA;AAGH;AAEAL,EAAM,cAAc;AAEpB,MAAMS,IAAoBV,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS5B,MAAM;AAAA,EACN,UAAU;AAAA,IACT,QAAQ;AAAA,MACP,MAAMW;AAAA,IAAA;AAAA,EACP;AAEF,CAAC,GAiBYC,IAAcV,EAAM;AAAA,EAChC,CAAC,EAAE,WAAAC,GAAW,QAAAU,GAAQ,GAAGP,EAAA,GAASC,MACjC,gBAAAE,EAAC,WAAM,KAAAF,GAAU,WAAWG,EAAkB,EAAE,QAAAG,GAAQ,WAAAV,EAAW,CAAA,GAAI,GAAGG,EAAO,CAAA;AAEnF;AAEAM,EAAY,cAAc;AAE1B,MAAME,IAAkBd,EAAG;AAAA,EAC1B,MAAM;AACP,CAAC,GAEYe,IAAYb,EAAM;AAAA,EAC9B,CAAC,EAAE,WAAAC,GAAW,GAAGG,KAASC,MAAQ,gBAAAE,EAAC,SAAM,EAAA,KAAAF,GAAU,WAAWO,EAAgB,EAAE,WAAAX,GAAW,GAAI,GAAGG,EAAO,CAAA;AAC1G;AAEAS,EAAU,cAAc;AAExB,MAAMC,IAA2BhB,EAAG;AAAA,EACnC,MAAM;AACP,CAAC,GAOYiB,IAAqBf,EAAM;AAAA,EACvC,CAAC,EAAE,WAAAC,GAAW,oBAAAC,GAAoB,YAAAc,GAAY,GAAGZ,EAAA,GAASC,MACzD,gBAAAE;AAAA,IAACU;AAAA,IAAA;AAAA,MACA,WAAWH,EAAyB,EAAE,WAAWZ,GAAoB;AAAA,MACrE,YAAAc;AAAA,MAEA,UAAA,gBAAAT,EAAC,SAAM,EAAA,KAAAF,GAAU,WAAWO,EAAgB,EAAE,WAAAX,EAAU,CAAC,GAAI,GAAGG,EAAO,CAAA;AAAA,IAAA;AAAA,EAAA;AAG1E;AAEAW,EAAmB,cAAc;AAEjC,MAAMG,IAAoBpB,EAAG;AAAA;AAAA;AAAA,EAG5B,MAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,UAAU;AAAA,IACT,QAAQ;AAAA,MACP,MAAMqB;AAAA,IAAA;AAAA,EACP;AAEF,CAAC,GAeYC,IAAcpB,EAAM;AAAA,EAChC,CAAC,EAAE,WAAAC,GAAW,QAAAU,GAAQ,GAAGP,EAAA,GAASC,MACjC,gBAAAE,EAAC,WAAM,KAAAF,GAAU,WAAWa,EAAkB,EAAE,QAAAP,GAAQ,WAAAV,EAAW,CAAA,GAAI,GAAGG,EAAO,CAAA;AAEnF;AAEAgB,EAAY,cAAc;AAE1B,MAAMC,IAAoB,kEAiBpBC,IAAiBxB,EAAG;AAAA,EACzB,MAAM;AAAA,IACLuB;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA;AAAA;AAAA,IAIA;AAAA,IAEAE;AAAA,EAAA;AAEF,CAAC,GAwBYC,IAAWxB,EAAM,WAA+C,CAAC,EAAE,WAAAC,GAAW,GAAGG,EAAS,GAAAC,wBACrG,MAAG,EAAA,KAAAA,GAAU,WAAWiB,EAAe,EAAE,WAAArB,GAAW,GAAI,GAAGG,GAAO,CACnE;AAEDoB,EAAS,cAAc;AAEvB,MAAMC,KAAkB3B,EAAG;AAAA,EAC1B,MAAM;AAAA,EACN,UAAU;AAAA,IACT,aAAa;AAAA,MACZ,MAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACD;AAAA,EACD;AAEF,CAAC,GAUY4B,KAAY1B,EAAM;AAAA,EAC9B,CAAC,EAAE,WAAAC,GAAW,aAAA0B,GAAa,GAAGvB,EAAA,GAASC,MACtC,gBAAAE,EAAC,QAAG,KAAAF,GAAU,WAAWoB,GAAgB,EAAE,aAAAE,GAAa,WAAA1B,EAAW,CAAA,GAAI,GAAGG,EAAO,CAAA;AAEnF;AAEAsB,GAAU,cAAc;AAExB,MAAME,KAAkB9B,EAAG;AAAA,EAC1B,MAAM;AACP,CAAC,GAEY+B,IAAY7B,EAAM;AAAA,EAC9B,CAAC,EAAE,WAAAC,GAAW,GAAGG,KAASC,MAAQ,gBAAAE,EAAC,MAAG,EAAA,KAAAF,GAAU,WAAWuB,GAAgB,EAAE,WAAA3B,GAAW,GAAI,GAAGG,EAAO,CAAA;AACvG;AAEAyB,EAAU,cAAc;AAExB,MAAMC,KAA0BhC,EAAG;AAAA,EAClC,MAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,UAAU;AAAA,IACT,QAAQ;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACP;AAEF,CAAC,GAYYiC,KAAoB/B,EAAM;AAAA,EACtC,CAAC,EAAE,WAAAC,GAAW,QAAA+B,GAAQ,GAAG5B,KAASC,MACjC,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,KAAAF;AAAA,MACA,MAAK;AAAA,MACL,oBAAiB;AAAA,MACjB,WAAWyB,GAAwB,EAAE,QAAAE,GAAQ,WAAA/B,GAAW;AAAA,MACvD,GAAGG;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA2B,GAAkB,cAAc;AAEhC,MAAME,KAAqBnC,EAAG;AAAA,EAC7B,MAAM;AACP,CAAC,GAEYoC,KAAelC,EAAM;AAAA,EACjC,CAAC,EAAE,WAAAC,GAAW,GAAGG,KAASC,MAAQ,gBAAAE,EAAC,WAAQ,EAAA,KAAAF,GAAU,WAAW4B,GAAmB,EAAE,WAAAhC,GAAW,GAAI,GAAGG,EAAO,CAAA;AAC/G;AAEA8B,GAAa,cAAc;AC9QpB,MAAMC,IAAc,IAGdC,KAAmB,IAYnBC,IAAc,IASdC,KAAYH,IAAcE,IAAc,GAG/CE,IAAwB,IAGxBC,KAAwB,IAQjBC,IAAmBF,IAAwBC,KAAwB,GAQnEE,KAAgB,GAUhBC,KAAyBF,IAAmBF,IAAwBF,IAAc,GASlFO,IAAY,CAACC,MAAmBT,KAAmBS,IAASV,GAQ5DW,KAAsB,CAACC,MAAkBH,EAAUG,CAAK,IAAIV,IAAc,GCnFjFW,IAAiBlD,EAAG;AAAA,EACzB,MAAM;AAAA,EACN,UAAU;AAAA,IACT,MAAM;AAAA,MACL,UAAU;AAAA,MACV,YAAY;AAAA,IAAA;AAAA,EACb;AAEF,CAAC,GAkCYmD,IAAiB,CAAC,EAAE,OAAAC,GAAO,UAAAC,IAAW,IAAO,WAAAlD,QACzD,gBAAAmD;AAAA,EAAC;AAAA,EAAA;AAAA,IACA,eAAW;AAAA,IACX,mBAAiBF,EAAM,KAAK,GAAG;AAAA,IAC/B,mBAAiBA,EAAM;AAAA,IACvB,WAAWG,EAAG,wCAAwCpD,CAAS;AAAA,IAE9D,UAAA;AAAA,MAAMiD,EAAA,IAAI,CAACI,GAAMT,MACbS,MAAS,SAAe,OAG3B,gBAAAF,EAACpD,EAAM,UAAN,EACA,UAAA;AAAA,QAAA,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACA,kBAAgB+C;AAAA,YAChB,oBAAkBT;AAAA,YAClB,WAAWG,EAAe,EAAE,MAAM,YAAY;AAAA,YAC9C,OAAO;AAAA,cACN,MAAMJ,EAAUC,CAAM;AAAA,cACtB,KAAK;AAAA;AAAA;AAAA,cAGL,GAAIS,MAAS,QACV,EAAE,QAAQb,IAAmBC,GAC7B,IAAA,EAAE,QAAQ,GAAe;AAAA,YAAA;AAAA,UAC7B;AAAA,QACD;AAAA,QACCY,MAAS,UACT,gBAAA/C;AAAA,UAAC;AAAA,UAAA;AAAA,YACA,kBAAe;AAAA,YACf,oBAAkBsC;AAAA,YAClB,WAAWG,EAAe,EAAE,MAAM,cAAc;AAAA,YAChD,OAAO,EAAE,MAAMJ,EAAUC,CAAM,GAAG,KAAKJ,GAAkB,OAAOH,GAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3E,EAAA,GArBmBO,CAuBrB,CAED;AAAA,MAEAM,KACA,gBAAA5C;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,kBAAe;AAAA,UACf,oBAAkB2C,EAAM;AAAA,UACxB,WAAWF,EAAe,EAAE,MAAM,YAAY;AAAA,UAC9C,OAAO;AAAA,YACN,MAAMJ,EAAUM,EAAM,MAAM;AAAA,YAC5B,KAAKT,IAAmBJ,IAAc;AAAA,YACtC,QAAQ;AAAA,UAAC;AAAA,QACV;AAAA,MAAA;AAAA,IACD;AAAA,EAAA;AAEF;AAGDY,EAAe,cAAc;AAE7B,MAAMM,KAAwBzD,EAAG;AAAA,EAChC,MAAM;AAAA;AAAA,IAEL;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,EAAA;AAEF,CAAC,GAOY0D,IAAkBxD,EAAM;AAAA,EACpC,CAAC,EAAE,WAAAC,GAAW,UAAAwD,GAAU,OAAAC,GAAO,GAAGtD,EAAA,GAASC,MAC1C,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,KAAAF;AAAA,MACA,MAAK;AAAA,MACL,iBAAeoD;AAAA,MACf,WAAWF,GAAsB,EAAE,WAAAtD,GAAW;AAAA,MAC9C,OAAO,EAAE,OAAOoC,GAAa,QAAQA,GAAa,WAAWM,IAAwB,GAAGe,EAAM;AAAA,MAC7F,GAAGtD;AAAA,MAEJ,4BAACuD,GAAK,EAAA,MAAMF,IAAWG,IAAQC,GAAM,WAAU,SAAS,CAAA;AAAA,IAAA;AAAA,EAAA;AAG3D;AAEAL,EAAgB,cAAc;AASvB,MAAMM,IAAkB,CAAC,EAAE,WAAA7D,EACjC,MAAA,gBAAAM,EAAC,UAAK,eAAW,IAAC,WAAW8C,EAAG,YAAYpD,CAAS,GAAG,OAAO,EAAE,OAAOoC,IAAe,CAAA;AAGxFyB,EAAgB,cAAc;AA0CvB,MAAMC,KAAgB/D,EAAM;AAAA,EAClC,CAAC,EAAE,KAAAgE,GAAK,UAAAC,GAAU,aAAAC,GAAa,WAAAjE,GAAW,OAAAyD,GAAO,UAAAS,GAAU,GAAG/D,KAASC,MACtE,gBAAA+C;AAAA,IAACvB;AAAA,IAAA;AAAA,MACA,KAAAxB;AAAA,MACA,mBAAiB2D,EAAI;AAAA,MACrB,WAAWX,EAAG,sBAAsBpD,CAAS;AAAA,MAC7C,OAAO,EAAE,aAAa6C,GAAoBkB,EAAI,KAAK,GAAG,GAAGN,EAAM;AAAA,MAC9D,GAAGtD;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAG,EAAC0C,KAAe,OAAOe,EAAI,OAAO,UAAUA,EAAI,UAAU;AAAA,QAC1D,gBAAAZ,EAAC,QAAK,EAAA,WAAU,4BACd,UAAA;AAAA,UAAAY,EAAI,cACJ,gBAAAzD;AAAA,YAACiD;AAAA,YAAA;AAAA,cACA,UAAUQ,EAAI;AAAA,cACd,cAAYE,MAAgBF,EAAI,aAAa,aAAa;AAAA,cAC1D,SAASC;AAAA,YAAA;AAAA,UAAA,sBAGTH,GAAgB,EAAA;AAAA,UAEjBK;AAAA,QAAA,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGH;AAEAJ,GAAc,cAAc;AC/Jf,MAAAK,KAAiB,CAACC,GAAyBC,MAAgC;AAAA,EACvF,GAAGD,EAAY,IAAI,CAACE,MAAoBA,MAAS,UAAUA,MAAS,WAAW,SAAS,MAAO;AAAA,EAC/FD,IAAS,QAAQ;AAClB;AAmBgB,SAAAE,GAAeC,GAAYC,GAA8C;AACxF,QAAM,EAAE,aAAAC,GAAa,YAAAC,IAAa,MAAM,GAAS,IAAAF,GAC3CG,IAAqB,CAAC,GAEtBC,IAAO,CAACC,GAAYC,GAAkBjC,GAAesB,GAAyBY,MAAyB;AACtG,IAAAF,EAAA,QAAQ,CAACG,GAAMC,MAAU;AACxB,YAAAb,IAASa,MAAUJ,EAAM,SAAS,GAClCZ,IAAWQ,EAAYO,CAAI,GAC3BE,IAAc,EAAQjB,GAAU,QAChCV,IAAW2B,KAAeR,EAAWM,CAAI,GAEzChC,IAAQH,MAAU,IAAI,CAAK,IAAAqB,GAAeC,GAAaC,CAAM,GAC7De,IAAO,CAAC,GAAGJ,GAAYE,CAAK;AAElC,MAAAN,EAAK,KAAK;AAAA,QACT,MAAAK;AAAA,QACA,QAAAF;AAAA,QACA,OAAAjC;AAAA,QACA,OAAAoC;AAAA,QACA,QAAAb;AAAA,QACA,aAAAc;AAAA,QACA,YAAY3B;AAAA,QACZ,UAAUA;AAAA,QACV,OAAAP;AAAA,QACA,MAAAmC;AAAA,MAAA,CACA,GAEG5B,KAAeqB,EAAAX,GAAWe,GAAMnC,IAAQ,GAAGG,GAAOmC,CAAI;AAAA,IAAA,CAC1D;AAAA,EACF;AAEA,SAAAP,EAAKL,GAAO,MAAM,GAAG,CAAA,GAAI,CAAA,CAAE,GACpBI;AACR;"}
|