intable 0.0.34 → 0.0.35

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 huodoushigemi
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 huodoushigemi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
- ---
2
- name: intable
3
- description: A high-performance, plugin-based Excel-like table component for SolidJS with virtual scroll, cell editing, validation, copy/paste, row grouping, tree data, column/row drag, merge cells, diff view, and multi-framework support (Vue, React).
4
- ---
5
-
6
- # intable
7
-
8
- ## [🚀 在线体验 Demo](https://huodoushigemi.github.io/intable)
9
-
10
- ## [📃 文档 Docs](https://github.com/huodoushigemi/intable/blob/main/.github/instructions/intable-scenarios.instructions.md)
1
+ ---
2
+ name: intable
3
+ description: A high-performance, plugin-based Excel-like table component for SolidJS with virtual scroll, cell editing, validation, copy/paste, row grouping, tree data, column/row drag, merge cells, diff view, and multi-framework support (Vue, React).
4
+ ---
5
+
6
+ # intable
7
+
8
+ ## [🚀 在线体验 Demo](https://huodoushigemi.github.io/intable)
9
+
10
+ ## [📃 文档 Docs](https://github.com/huodoushigemi/intable/blob/main/.github/instructions/intable-scenarios.instructions.md)
package/dist/__uno.css CHANGED
@@ -1 +1 @@
1
- @supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--un-bg-opacity:100%;--un-leading:initial;--un-content:"";--un-translate-x:initial;--un-translate-y:initial;--un-translate-z:initial;--un-text-opacity:100%;--un-border-opacity:100%;--un-space-y-reverse:initial;--un-space-x-reverse:initial;--un-outline-style:solid;--un-outline-opacity:100%}}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-leading{syntax:"*";inherits:false}@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --un-outline-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-inset-ring-color{syntax:"*";inherits:false}@property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow-color{syntax:"*";inherits:false}@property --un-ring-color{syntax:"*";inherits:false}@property --un-ring-inset{syntax:"*";inherits:false}@property --un-ring-offset-color{syntax:"*";inherits:false}@property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow-color{syntax:"*";inherits:false}@property --un-translate-x{syntax:"*";inherits:false;initial-value:0}@property --un-translate-y{syntax:"*";inherits:false;initial-value:0}@property --un-translate-z{syntax:"*";inherits:false;initial-value:0}@property --un-numeric-figure{syntax:"*";inherits:false}@property --un-numeric-fraction{syntax:"*";inherits:false}@property --un-numeric-spacing{syntax:"*";inherits:false}@property --un-ordinal{syntax:"*";inherits:false}@property --un-slashed-zero{syntax:"*";inherits:false}@property --un-space-y-reverse{syntax:"*";inherits:false;initial-value:0}:root,:host{--spacing:.25rem;--radius-DEFAULT:.25rem;--colors-gray-DEFAULT:#99a1af;--leading-snug:1.375;--colors-gray-800:#1e2939;--colors-white:#fff;--colors-gray-100:#f3f4f6;--colors-gray-900:#101828;--text-sm-fontSize:.875rem;--text-sm-lineHeight:1.25rem;--text-xs-fontSize:.75rem;--text-xs-lineHeight:1rem;--default-transition-timingFunction:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--radius-md:.375rem;--radius-xl:.75rem;--fontWeight-medium:500;--fontWeight-semibold:600;--tracking-wide:.025em;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--radius-sm:.25rem;--colors-blue-DEFAULT:#54a2ff;--colors-red-DEFAULT:#ff6568;--text-2xl-fontSize:1.5rem;--text-2xl-lineHeight:2rem;--colors-green-DEFAULT:#05df72;--colors-black:#000;--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-font-family:var(--font-sans);--default-monoFont-family:var(--font-mono)}@supports (color:lab(0% 0 0)){:root,:host{--colors-gray-DEFAULT:lab(65.9269% -.832707 -8.17474);--colors-gray-800:lab(16.1051% -1.18239 -11.7533);--colors-gray-100:lab(96.1596% -.082314 -1.13575);--colors-gray-900:lab(8.11897% .811279 -12.254);--colors-blue-DEFAULT:lab(65.0361% -1.42062 -56.9803);--colors-red-DEFAULT:lab(63.7053% 60.7449 31.3109);--colors-green-DEFAULT:lab(78.503% -64.9265 39.7492)}}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-featureSettings,normal);font-variation-settings:var(--default-font-variationSettings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-monoFont-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-monoFont-featureSettings,normal);font-variation-settings:var(--default-monoFont-variationSettings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden~=until-found])){display:none!important}.container{width:100%}.aic{align-items:center}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.text-2xl{font-size:var(--text-2xl-fontSize);line-height:var(--un-leading,var(--text-2xl-lineHeight))}.text-3{font-size:.75rem}.text-3\.5{font-size:.875rem}.text-4{font-size:1rem}.text-sm{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.text-xs{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight))}.c-\[--c-primary\]{color:color-mix(in oklab,var(--c-primary)var(--un-text-opacity),transparent)}.c-\#1e3a8a{color:color-mix(in oklab,#1e3a8a var(--un-text-opacity),transparent)}.c-\#7c2d12{color:color-mix(in oklab,#7c2d12 var(--un-text-opacity),transparent)}.c-blue{color:color-mix(in srgb,var(--colors-blue-DEFAULT)var(--un-text-opacity),transparent)}.c-gray\/70{color:color-mix(in srgb,var(--colors-gray-DEFAULT)70%,transparent)}.c-red\/75{color:color-mix(in srgb,var(--colors-red-DEFAULT)75%,transparent)}.leading-5{--un-leading:calc(4px*5);line-height:20px}.lh-\[1\]{--un-leading:1;line-height:1}.tracking-wide{--un-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.font-medium{--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium)}.font-mono{font-family:var(--font-mono)}.font-semibold{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.m9{margin:36px}.mx-1{margin-inline:4px}.mx-3\!{margin-inline:12px!important}.my-1{margin-block:4px}.ml{margin-left:16px}.ml-\.5{margin-left:2px}.ml-1{margin-left:4px}.mr--1{margin-right:-4px}.mr-1{margin-right:4px}.mr-2{margin-right:8px}.mr-2\.5{margin-right:10px}.mt-1{margin-top:4px}.p-1{padding:4px}.p-4\!{padding:16px!important}.px,.px-4{padding-inline:16px}.px-1\.5{padding-inline:6px}.px-2{padding-inline:8px}.px-3{padding-inline:12px}.py-1{padding-block:4px}.py-1\.5{padding-block:6px}.py-2{padding-block:8px}.pl-1{padding-left:4px}.pl-4{padding-left:16px}.pr-4{padding-right:16px}.ps{padding-inline-start:16px}.outline-0{outline-style:var(--un-outline-style);outline-width:0}.outline-2{outline-style:var(--un-outline-style);outline-width:2px}.outline-blue{outline-color:color-mix(in srgb,var(--colors-blue-DEFAULT)var(--un-outline-opacity),transparent)}.outline-none{--un-outline-style:none;outline-style:none}.b,.b-1,.border{border-width:1px}.b-2px{border-width:2px}.b-r-0{border-right-width:0}.b-\[--table-bg\]{border-color:color-mix(in oklab,var(--table-bg)var(--un-border-opacity),transparent)}.b-\#00000000\!{border-color:color-mix(in oklab,#0000 var(--un-border-opacity),transparent)!important}.b-\#4f7ff0{border-color:color-mix(in oklab,#4f7ff0 var(--un-border-opacity),transparent)}.b-\#f59e0b{border-color:color-mix(in oklab,#f59e0b var(--un-border-opacity),transparent)}.rd-1{border-radius:.25rem}.rd-1\.5{border-radius:.375rem}.rd-2{border-radius:.5rem}.rd-sm{border-radius:var(--radius-sm)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rd-l-4{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.b-dashed{--un-border-style:dashed;border-style:dashed}.b-solid{--un-border-style:solid;border-style:solid}.bg-\[--c-primary\]{background-color:color-mix(in oklab,var(--c-primary)var(--un-bg-opacity),transparent)}.bg-\[--table-header-bg\]{background-color:color-mix(in oklab,var(--table-header-bg)var(--un-bg-opacity),transparent)}.bg-\#dbe6ff\/75{background-color:#dbe6ffbf;background-color:lab(91.0303% -.143617 -13.4803/.75)}.bg-\#fff{background-color:color-mix(in oklab,#fff var(--un-bg-opacity),transparent)}.bg-\#fff3d6\/85{background-color:#fff3d6d9;background-color:lab(96.236% .744224 15.5662/.85)}.bg-blue\/20\!{background-color:color-mix(in srgb,var(--colors-blue-DEFAULT)20%,transparent)!important}.bg-gray\/20{background-color:color-mix(in srgb,var(--colors-gray-DEFAULT)20%,transparent)}.bg-green\!{background-color:color-mix(in srgb,var(--colors-green-DEFAULT)var(--un-bg-opacity),transparent)!important}.bg-red\!{background-color:color-mix(in srgb,var(--colors-red-DEFAULT)var(--un-bg-opacity),transparent)!important}.bg-transparent{background-color:#0000}.hover\:bg-\[--li-hover-bg\]:hover{background-color:color-mix(in oklab,var(--li-hover-bg)var(--un-bg-opacity),transparent)}.hover\:bg-black\/8:hover{background-color:color-mix(in srgb,var(--colors-black)8%,transparent)}.op-0{opacity:0}.op-15{opacity:.15}.op-60{opacity:.6}.op-75{opacity:.75}.op40{opacity:.4}.opacity-50{opacity:.5}.group:hover .group-hover\:op-100{opacity:1}.hover\:underline:hover{text-decoration-line:underline}.flex{display:flex}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.gap-1{gap:4px}.gap-1\.5{gap:6px}.gap-2{gap:8px}.grid{display:grid}.size-3\.5{width:14px;height:14px}.size-4\!{width:16px!important;height:16px!important}.size-full{width:100%;height:100%}.h-1\!{height:4px!important}.h-2\.5{height:10px}.h-3\.5{height:14px}.h-6{height:24px}.h-6\.5{height:26px}.h-a\!{height:auto!important}.h-full{height:100%}.max-h-100{max-height:400px}.max-h-60{max-height:240px}.max-h-inherit{max-height:inherit}.min-h-16{min-height:64px}.min-h-40{min-height:160px}.min-h-a\!{min-height:auto!important}.min-w-24{min-width:96px}.min-w-44{min-width:176px}.min-w-52{min-width:208px}.w-10{width:40px}.w-10px\!{width:10px!important}.w-2\.5{width:10px}.w-3\.5{width:14px}.w-6\.5{width:26px}.w-a\!{width:auto!important}.w-full{width:100%}.after\:h-1:after{height:4px}.after\:w-1:after{width:4px}.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.contents{display:contents}.hidden{display:none}.visible{visibility:visible}.collapse{visibility:collapse}.cursor-pointer{cursor:pointer}.cursor-crosshair{cursor:crosshair}.cursor-s-resize{cursor:s-resize}.cursor-w-resize{cursor:w-resize}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.resize{resize:both}.resize-none{resize:none}.select-none{-webkit-user-select:none;user-select:none}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uppercase{text-transform:uppercase}.shadow-inner{--un-shadow:inset 0 2px 4px 0 var(--un-shadow-color,#0000000d);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-sm{--un-shadow:0 1px 3px 0 var(--un-shadow-color,#0000001a),0 1px 2px -1px var(--un-shadow-color,#0000001a);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-xl{--un-shadow:0 20px 25px -5px var(--un-shadow-color,#0000001a),0 8px 10px -6px var(--un-shadow-color,#0000001a);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.translate-x--1\/2{--un-translate-x:-50%;translate:var(--un-translate-x)var(--un-translate-y)}.translate-x-1\/2{--un-translate-x:50%;translate:var(--un-translate-x)var(--un-translate-y)}.translate-y--1\/2{--un-translate-y:-50%;translate:var(--un-translate-x)var(--un-translate-y)}.transform{transform:var(--un-rotate-x)var(--un-rotate-y)var(--un-rotate-z)var(--un-skew-x)var(--un-skew-y)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.items-start{align-items:flex-start}.items-center{align-items:center}.box-border{box-sizing:border-box}.inset-0{inset:0}.bottom-0{bottom:0}.left--0,.left-0{left:0}.right-0{right:0}.top-0{top:0}.top-1\/2{top:50%}.justify-end\!{justify-content:flex-end!important}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.z--1{z-index:-1}.z-1{z-index:1}.z-2{z-index:2}.z-9{z-index:9}.overflow-auto{overflow:auto}.of-y-auto{overflow-y:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.filter{filter:var(--un-blur,)var(--un-brightness,)var(--un-contrast,)var(--un-grayscale,)var(--un-hue-rotate,)var(--un-invert,)var(--un-saturate,)var(--un-sepia,)var(--un-drop-shadow,)}.table{display:table}.table-cell{display:table-cell}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,)var(--un-slashed-zero,)var(--un-numeric-figure,)var(--un-numeric-spacing,)var(--un-numeric-fraction,)}:where(.space-y-5>:not(:last-child)){--un-space-y-reverse:0;margin-block-start:calc(calc(4px*5)*var(--un-space-y-reverse));margin-block-end:calc(calc(4px*5)*calc(1 - var(--un-space-y-reverse)))}@supports (color:color-mix(in lab, red, red)){.c-blue{color:color-mix(in oklab,var(--colors-blue-DEFAULT)var(--un-text-opacity),transparent)}.c-gray\/70{color:color-mix(in oklab,var(--colors-gray-DEFAULT)70%,transparent)}.c-red\/75{color:color-mix(in oklab,var(--colors-red-DEFAULT)75%,transparent)}.outline-blue{outline-color:color-mix(in oklab,var(--colors-blue-DEFAULT)var(--un-outline-opacity),transparent)}.bg-blue\/20\!{background-color:color-mix(in oklab,var(--colors-blue-DEFAULT)20%,transparent)!important}.bg-gray\/20{background-color:color-mix(in oklab,var(--colors-gray-DEFAULT)20%,transparent)}.bg-green\!{background-color:color-mix(in oklab,var(--colors-green-DEFAULT)var(--un-bg-opacity),transparent)!important}.bg-red\!{background-color:color-mix(in oklab,var(--colors-red-DEFAULT)var(--un-bg-opacity),transparent)!important}.hover\:bg-black\/8:hover{background-color:color-mix(in oklab,var(--colors-black)8%,transparent)}}
1
+ @supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--un-bg-opacity:100%;--un-leading:initial;--un-content:"";--un-translate-x:initial;--un-translate-y:initial;--un-translate-z:initial;--un-text-opacity:100%;--un-border-opacity:100%;--un-space-y-reverse:initial;--un-space-x-reverse:initial;--un-outline-style:solid;--un-outline-opacity:100%}}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-leading{syntax:"*";inherits:false}@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --un-outline-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-inset-ring-color{syntax:"*";inherits:false}@property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow-color{syntax:"*";inherits:false}@property --un-ring-color{syntax:"*";inherits:false}@property --un-ring-inset{syntax:"*";inherits:false}@property --un-ring-offset-color{syntax:"*";inherits:false}@property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow-color{syntax:"*";inherits:false}@property --un-translate-x{syntax:"*";inherits:false;initial-value:0}@property --un-translate-y{syntax:"*";inherits:false;initial-value:0}@property --un-translate-z{syntax:"*";inherits:false;initial-value:0}@property --un-numeric-figure{syntax:"*";inherits:false}@property --un-numeric-fraction{syntax:"*";inherits:false}@property --un-numeric-spacing{syntax:"*";inherits:false}@property --un-ordinal{syntax:"*";inherits:false}@property --un-slashed-zero{syntax:"*";inherits:false}@property --un-space-y-reverse{syntax:"*";inherits:false;initial-value:0}:root,:host{--spacing:.25rem;--radius-DEFAULT:.25rem;--colors-gray-DEFAULT:#99a1af;--leading-snug:1.375;--colors-gray-800:#1e2939;--colors-white:#fff;--colors-gray-100:#f3f4f6;--colors-gray-900:#101828;--text-sm-fontSize:.875rem;--text-sm-lineHeight:1.25rem;--text-xs-fontSize:.75rem;--text-xs-lineHeight:1rem;--default-transition-timingFunction:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--radius-md:.375rem;--radius-xl:.75rem;--fontWeight-medium:500;--fontWeight-semibold:600;--tracking-wide:.025em;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--radius-sm:.25rem;--colors-blue-DEFAULT:#54a2ff;--colors-red-DEFAULT:#ff6568;--text-2xl-fontSize:1.5rem;--text-2xl-lineHeight:2rem;--colors-green-DEFAULT:#05df72;--colors-black:#000;--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-font-family:var(--font-sans);--default-monoFont-family:var(--font-mono)}@supports (color:lab(0% 0 0)){:root,:host{--colors-gray-DEFAULT:lab(65.9269% -.832677 -8.17474);--colors-gray-800:lab(16.1051% -1.18239 -11.7533);--colors-gray-100:lab(96.1596% -.082314 -1.13575);--colors-gray-900:lab(8.11897% .811271 -12.254);--colors-blue-DEFAULT:lab(65.0361% -1.42065 -56.9802);--colors-red-DEFAULT:lab(63.7053% 60.745 31.3109);--colors-green-DEFAULT:lab(78.503% -64.9264 39.7492)}}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-featureSettings,normal);font-variation-settings:var(--default-font-variationSettings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-monoFont-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-monoFont-featureSettings,normal);font-variation-settings:var(--default-monoFont-variationSettings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden~=until-found])){display:none!important}.container{width:100%}.aic{align-items:center}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.text-2xl{font-size:var(--text-2xl-fontSize);line-height:var(--un-leading,var(--text-2xl-lineHeight))}.text-3{font-size:.75rem}.text-3\.5{font-size:.875rem}.text-4{font-size:1rem}.text-sm{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.text-xs{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight))}.c-\[--c-primary\]{color:color-mix(in oklab,var(--c-primary)var(--un-text-opacity),transparent)}.c-\#1e3a8a{color:color-mix(in oklab,#1e3a8a var(--un-text-opacity),transparent)}.c-\#7c2d12{color:color-mix(in oklab,#7c2d12 var(--un-text-opacity),transparent)}.c-blue{color:color-mix(in srgb,var(--colors-blue-DEFAULT)var(--un-text-opacity),transparent)}.c-gray\/70{color:color-mix(in srgb,var(--colors-gray-DEFAULT)70%,transparent)}.c-red\/75{color:color-mix(in srgb,var(--colors-red-DEFAULT)75%,transparent)}.leading-5{--un-leading:calc(4px*5);line-height:20px}.lh-\[1\]{--un-leading:1;line-height:1}.tracking-wide{--un-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.font-medium{--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium)}.font-mono{font-family:var(--font-mono)}.font-semibold{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.m9{margin:36px}.mx-1{margin-inline:4px}.mx-3\!{margin-inline:12px!important}.my-1{margin-block:4px}.ml{margin-left:16px}.ml-\.5{margin-left:2px}.ml-1{margin-left:4px}.mr--1{margin-right:-4px}.mr-1{margin-right:4px}.mr-2{margin-right:8px}.mr-2\.5{margin-right:10px}.mt-1{margin-top:4px}.p-1{padding:4px}.p-4\!{padding:16px!important}.px,.px-4{padding-inline:16px}.px-1\.5{padding-inline:6px}.px-2{padding-inline:8px}.px-3{padding-inline:12px}.py-1{padding-block:4px}.py-1\.5{padding-block:6px}.py-2{padding-block:8px}.pl-1{padding-left:4px}.pl-4{padding-left:16px}.pr-4{padding-right:16px}.ps{padding-inline-start:16px}.outline-0{outline-style:var(--un-outline-style);outline-width:0}.outline-1\.5px{outline-style:var(--un-outline-style);outline-width:1.5px}.outline-2{outline-style:var(--un-outline-style);outline-width:2px}.outline-\[--c-primary\]{outline-color:color-mix(in oklab,var(--c-primary)var(--un-outline-opacity),transparent)}.outline-blue{outline-color:color-mix(in srgb,var(--colors-blue-DEFAULT)var(--un-outline-opacity),transparent)}.outline-none{--un-outline-style:none;outline-style:none}.outline-solid{--un-outline-style:solid;outline-style:solid}.b,.b-1,.border{border-width:1px}.b-2px{border-width:2px}.b-r-0{border-right-width:0}.b-\[--table-bg\]{border-color:color-mix(in oklab,var(--table-bg)var(--un-border-opacity),transparent)}.b-\#00000000\!{border-color:color-mix(in oklab,#0000 var(--un-border-opacity),transparent)!important}.b-\#4f7ff0{border-color:color-mix(in oklab,#4f7ff0 var(--un-border-opacity),transparent)}.b-\#f59e0b{border-color:color-mix(in oklab,#f59e0b var(--un-border-opacity),transparent)}.rd-1{border-radius:.25rem}.rd-1\.5{border-radius:.375rem}.rd-2{border-radius:.5rem}.rd-sm{border-radius:var(--radius-sm)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rd-l-4{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.b-dashed{--un-border-style:dashed;border-style:dashed}.b-solid{--un-border-style:solid;border-style:solid}.bg-\[--c-primary\]{background-color:color-mix(in oklab,var(--c-primary)var(--un-bg-opacity),transparent)}.bg-\[--table-bg\]{background-color:color-mix(in oklab,var(--table-bg)var(--un-bg-opacity),transparent)}.bg-\[--table-header-bg\]{background-color:color-mix(in oklab,var(--table-header-bg)var(--un-bg-opacity),transparent)}.bg-\#dbe6ff\/75{background-color:#dbe6ffbf;background-color:lab(91.0303% -.143617 -13.4803/.75)}.bg-\#fff{background-color:color-mix(in oklab,#fff var(--un-bg-opacity),transparent)}.bg-\#fff3d6\/85{background-color:#fff3d6d9;background-color:lab(96.236% .744313 15.5662/.85)}.bg-blue\/20\!{background-color:color-mix(in srgb,var(--colors-blue-DEFAULT)20%,transparent)!important}.bg-gray\/20{background-color:color-mix(in srgb,var(--colors-gray-DEFAULT)20%,transparent)}.bg-green\!{background-color:color-mix(in srgb,var(--colors-green-DEFAULT)var(--un-bg-opacity),transparent)!important}.bg-red\!{background-color:color-mix(in srgb,var(--colors-red-DEFAULT)var(--un-bg-opacity),transparent)!important}.bg-transparent{background-color:#0000}.hover\:bg-\[--li-hover-bg\]:hover{background-color:color-mix(in oklab,var(--li-hover-bg)var(--un-bg-opacity),transparent)}.hover\:bg-black\/8:hover{background-color:color-mix(in srgb,var(--colors-black)8%,transparent)}.op-0{opacity:0}.op-15{opacity:.15}.op-60{opacity:.6}.op-75{opacity:.75}.op40{opacity:.4}.opacity-50{opacity:.5}.group:hover .group-hover\:op-100{opacity:1}.hover\:underline:hover{text-decoration-line:underline}.flex{display:flex}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.gap-1{gap:4px}.gap-1\.5{gap:6px}.gap-2{gap:8px}.grid{display:grid}.size-3\.5{width:14px;height:14px}.size-4\!{width:16px!important;height:16px!important}.size-full{width:100%;height:100%}.h-1\!{height:4px!important}.h-2\.5{height:10px}.h-3\.5{height:14px}.h-6{height:24px}.h-6\.5{height:26px}.h-a\!{height:auto!important}.h-full{height:100%}.max-h-100{max-height:400px}.max-h-60{max-height:240px}.max-h-inherit{max-height:inherit}.min-h-16{min-height:64px}.min-h-40{min-height:160px}.min-h-a\!{min-height:auto!important}.min-w-24{min-width:96px}.min-w-44{min-width:176px}.min-w-52{min-width:208px}.w-10{width:40px}.w-10px\!{width:10px!important}.w-2\.5{width:10px}.w-3\.5{width:14px}.w-6\.5{width:26px}.w-a\!{width:auto!important}.w-full{width:100%}.after\:h-1:after{height:4px}.after\:w-1:after{width:4px}.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.contents{display:contents}.hidden{display:none}.visible{visibility:visible}.collapse{visibility:collapse}.cursor-pointer{cursor:pointer}.cursor-crosshair{cursor:crosshair}.cursor-s-resize{cursor:s-resize}.cursor-w-resize{cursor:w-resize}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.resize{resize:both}.resize-none{resize:none}.select-none{-webkit-user-select:none;user-select:none}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uppercase{text-transform:uppercase}.shadow-inner{--un-shadow:inset 0 2px 4px 0 var(--un-shadow-color,#0000000d);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-sm{--un-shadow:0 1px 3px 0 var(--un-shadow-color,#0000001a),0 1px 2px -1px var(--un-shadow-color,#0000001a);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-xl{--un-shadow:0 20px 25px -5px var(--un-shadow-color,#0000001a),0 8px 10px -6px var(--un-shadow-color,#0000001a);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.translate-x--1\/2{--un-translate-x:-50%;translate:var(--un-translate-x)var(--un-translate-y)}.translate-x-1\/2{--un-translate-x:50%;translate:var(--un-translate-x)var(--un-translate-y)}.translate-y--1\/2{--un-translate-y:-50%;translate:var(--un-translate-x)var(--un-translate-y)}.transform{transform:var(--un-rotate-x)var(--un-rotate-y)var(--un-rotate-z)var(--un-skew-x)var(--un-skew-y)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.items-start{align-items:flex-start}.items-center{align-items:center}.box-border{box-sizing:border-box}.inset-0{inset:0}.bottom-0{bottom:0}.left--0,.left-0{left:0}.right-0{right:0}.top-0{top:0}.top-1\/2{top:50%}.justify-end\!{justify-content:flex-end!important}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.z--1{z-index:-1}.z-1{z-index:1}.z-2{z-index:2}.z-9{z-index:9}.overflow-auto{overflow:auto}.of-y-auto{overflow-y:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.filter{filter:var(--un-blur,)var(--un-brightness,)var(--un-contrast,)var(--un-grayscale,)var(--un-hue-rotate,)var(--un-invert,)var(--un-saturate,)var(--un-sepia,)var(--un-drop-shadow,)}.table{display:table}.table-cell{display:table-cell}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,)var(--un-slashed-zero,)var(--un-numeric-figure,)var(--un-numeric-spacing,)var(--un-numeric-fraction,)}:where(.space-y-5>:not(:last-child)){--un-space-y-reverse:0;margin-block-start:calc(calc(4px*5)*var(--un-space-y-reverse));margin-block-end:calc(calc(4px*5)*calc(1 - var(--un-space-y-reverse)))}@supports (color:color-mix(in lab, red, red)){.c-blue{color:color-mix(in oklab,var(--colors-blue-DEFAULT)var(--un-text-opacity),transparent)}.c-gray\/70{color:color-mix(in oklab,var(--colors-gray-DEFAULT)70%,transparent)}.c-red\/75{color:color-mix(in oklab,var(--colors-red-DEFAULT)75%,transparent)}.outline-blue{outline-color:color-mix(in oklab,var(--colors-blue-DEFAULT)var(--un-outline-opacity),transparent)}.bg-blue\/20\!{background-color:color-mix(in oklab,var(--colors-blue-DEFAULT)20%,transparent)!important}.bg-gray\/20{background-color:color-mix(in oklab,var(--colors-gray-DEFAULT)20%,transparent)}.bg-green\!{background-color:color-mix(in oklab,var(--colors-green-DEFAULT)var(--un-bg-opacity),transparent)!important}.bg-red\!{background-color:color-mix(in oklab,var(--colors-red-DEFAULT)var(--un-bg-opacity),transparent)!important}.hover\:bg-black\/8:hover{background-color:color-mix(in oklab,var(--colors-black)8%,transparent)}}
@@ -0,0 +1,14 @@
1
+ import { type JSX } from 'solid-js';
2
+ type AutoSize = boolean | {
3
+ minRows?: number;
4
+ maxRows?: number;
5
+ };
6
+ export interface TextAreaProps extends Omit<JSX.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onInput' | 'onChange'> {
7
+ value?: string;
8
+ defaultValue?: string;
9
+ autosize?: AutoSize;
10
+ onInput?: (value: string) => void;
11
+ onChange?: (value: string) => void;
12
+ }
13
+ export declare const Textarea: (rawProps: TextAreaProps) => JSX.Element;
14
+ export default Textarea;
@@ -0,0 +1,68 @@
1
+ import { mergeProps, spread, template, use } from "solid-js/web";
2
+ import { createEffect, createSignal, mergeProps as mergeProps$1, splitProps } from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template("<textarea>");
4
+ function getLineHeight(e) {
5
+ let o = getComputedStyle(e), s = parseFloat(o.lineHeight);
6
+ if (Number.isFinite(s)) return s;
7
+ let c = parseFloat(o.fontSize);
8
+ return Number.isFinite(c) ? c * 1.2 : 20;
9
+ }
10
+ function normalizeAutoSize(e) {
11
+ return e ? e === !0 ? {
12
+ minRows: void 0,
13
+ maxRows: void 0
14
+ } : e : null;
15
+ }
16
+ const Textarea = (s) => {
17
+ let d = mergeProps$1({
18
+ defaultValue: "",
19
+ autosize: !1
20
+ }, s), [f, p] = splitProps(d, [
21
+ "value",
22
+ "defaultValue",
23
+ "autosize",
24
+ "ref",
25
+ "onInput",
26
+ "onChange"
27
+ ]), [m, h] = createSignal(f.value ?? f.defaultValue ?? ""), g, _ = () => {
28
+ if (!g) return;
29
+ let e = normalizeAutoSize(f.autosize);
30
+ if (!e) return;
31
+ let o = getComputedStyle(g), s = parseFloat(o.borderTopWidth || "0") + parseFloat(o.borderBottomWidth || "0"), c = parseFloat(o.paddingTop || "0") + parseFloat(o.paddingBottom || "0"), l = getLineHeight(g);
32
+ g.style.height = "";
33
+ let u = g.scrollHeight;
34
+ if (e.minRows) {
35
+ let o = e.minRows * l + c + s;
36
+ u = Math.max(u, o);
37
+ }
38
+ if (e.maxRows) {
39
+ let o = e.maxRows * l + c + s;
40
+ u = Math.min(u, o), g.style.overflowY = g.scrollHeight > o ? "auto" : "hidden";
41
+ } else g.style.overflowY = "hidden";
42
+ g.style.height = `${Math.ceil(u)}px`;
43
+ };
44
+ return createEffect(() => {
45
+ let e = f.value;
46
+ e != null && h(e);
47
+ }), createEffect(() => {
48
+ m(), f.autosize, queueMicrotask(_);
49
+ }), (() => {
50
+ var s = _tmpl$();
51
+ return use((e) => {
52
+ g = e, typeof f.ref == "function" && f.ref(e), queueMicrotask(_);
53
+ }, s), spread(s, mergeProps(p, {
54
+ get value() {
55
+ return m();
56
+ },
57
+ onInput: (e) => {
58
+ let o = e.currentTarget.value;
59
+ f.value ?? h(o), f.onInput?.(o), queueMicrotask(_);
60
+ },
61
+ onChange: (e) => {
62
+ f.onChange?.(e.currentTarget.value);
63
+ }
64
+ }), !1, !1), s;
65
+ })();
66
+ };
67
+ var Textarea_default = Textarea;
68
+ export { Textarea, Textarea_default as default };
@@ -11,6 +11,8 @@ export declare function useSelector<T = any>(opt: UseSelectorOpt<T>): {
11
11
  add: (v: T) => void;
12
12
  del: (v: T) => void;
13
13
  toggle: (v: T) => void;
14
+ isAll: (data: T[]) => boolean;
15
+ selectAll: (data: T[]) => void;
14
16
  readonly value: T;
15
17
  };
16
18
  export {};
@@ -61,6 +61,10 @@ function useSelector(a) {
61
61
  add: _,
62
62
  del: v,
63
63
  toggle: y,
64
+ isAll: (e) => !!e.length && e.every((e) => p(e)),
65
+ selectAll: (e) => {
66
+ f(new u(e)), s?.(b());
67
+ },
64
68
  get value() {
65
69
  return b();
66
70
  }
package/dist/index.d.ts CHANGED
@@ -54,7 +54,7 @@ export interface Plugin {
54
54
  */
55
55
  keybindings?: (store: TableStore) => Record<string, (e?: KeyboardEvent) => void>;
56
56
  }
57
- export type Plugin$0 = Plugin | ((store: TableStore) => Plugin);
57
+ export type Plugin$0 = Plugin | Plugin[] | ((store: TableStore) => Plugin);
58
58
  export interface TableProps {
59
59
  store?: {
60
60
  value: TableStore;
@@ -126,7 +126,7 @@ export type TDProps = {
126
126
  type Obj = Record<string | symbol, any>;
127
127
  export interface TableColumn extends Obj {
128
128
  id: any;
129
- name?: string;
129
+ name?: any;
130
130
  width?: number;
131
131
  fixed?: 'left' | 'right';
132
132
  class?: any;
package/dist/index.js CHANGED
@@ -51,7 +51,7 @@ const Ctx = createContext({
51
51
  ...defaultsPlugins,
52
52
  ..._.plugins || [],
53
53
  RenderPlugin
54
- ].map(Y).sort((_, K) => (K.priority || 0) - (_.priority || 0))), Q = difference(X, q);
54
+ ].flat().map(Y).sort((_, K) => (K.priority || 0) - (_.priority || 0))), Q = difference(X, q);
55
55
  return runWithOwner(K, () => {
56
56
  Q.forEach((_) => Object.assign(J, _.store?.(J)));
57
57
  }), X;
@@ -396,6 +396,7 @@ const defaultsPlugins = [
396
396
  } }),
397
397
  rewriteProps: { columns: ({ columns: _ }, { store: K }) => K.props?.index ? [K.$index, ..._ || []] : _ }
398
398
  },
399
+ FilterPlugin,
399
400
  SortPlugin,
400
401
  ValidatorPlugin,
401
402
  EditablePlugin,
@@ -424,7 +425,6 @@ const defaultsPlugins = [
424
425
  ResizePlugin,
425
426
  AggregatePlugin,
426
427
  AutoFillPlugin,
427
- FilterPlugin,
428
428
  ImportExportPlugin,
429
429
  TooltipPlugin
430
430
  ];
@@ -1,5 +1,6 @@
1
1
  import { chooseFile, resolveOptions, unFn } from "../utils.js";
2
2
  import { Checkbox, Files } from "./RenderPlugin/components.js";
3
+ import Textarea_default from "../components/Textarea.js";
3
4
  import { Ctx } from "../index.js";
4
5
  import { addEventListener, createComponent, delegateEvents, effect, insert, memo, mergeProps, spread, template, use } from "solid-js/web";
5
6
  import { createComputed, createEffect, createMemo, createRoot, createSignal, on, onCleanup, useContext } from "solid-js";
@@ -7,41 +8,41 @@ import { createMutable } from "solid-js/store";
7
8
  import { combineProps } from "@solid-primitives/props";
8
9
  import { createAsyncMemo } from "@solid-primitives/memo";
9
10
  import { delay } from "es-toolkit";
10
- var _tmpl$ = /* @__PURE__ */ template("<div class=in-cell-edit-wrapper tabindex=-1>"), _tmpl$2 = /* @__PURE__ */ template("<span class=cell-validating>"), _tmpl$3 = /* @__PURE__ */ template("<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>"), _tmpl$4 = /* @__PURE__ */ template("<input>"), _tmpl$5 = /* @__PURE__ */ template("<textarea>"), _tmpl$6 = /* @__PURE__ */ template("<label class=\"h-full flex items-center\">"), _tmpl$7 = /* @__PURE__ */ template("<select>"), _tmpl$8 = /* @__PURE__ */ template("<option>");
11
+ var _tmpl$ = /* @__PURE__ */ template("<div class=in-cell-edit-wrapper tabindex=-1>"), _tmpl$2 = /* @__PURE__ */ template("<span class=cell-validating>"), _tmpl$3 = /* @__PURE__ */ template("<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>"), _tmpl$4 = /* @__PURE__ */ template("<input>"), _tmpl$5 = /* @__PURE__ */ template("<label class=\"h-full flex items-center\">"), _tmpl$6 = /* @__PURE__ */ template("<select><option value>-"), _tmpl$7 = /* @__PURE__ */ template("<option>");
11
12
  const EditablePlugin = {
12
13
  name: "editable",
13
14
  store: () => ({ editors: { ...editors } }),
14
15
  rewriteProps: {
15
- editable: ({ editable: e }, { store: v }) => (b) => {
16
- let x = [b.col.editable, e].filter((e) => e != null);
17
- return !!x.length && x.every((e) => unFn(e, b)) && !b.data[v.internal] && !b.col[v.internal];
16
+ editable: ({ editable: e }, { store: y }) => (x) => {
17
+ let S = [x.col.editable, e].filter((e) => e != null);
18
+ return !!S.length && S.every((e) => unFn(e, x)) && !x.data[y.internal] && !x.col[y.internal];
18
19
  },
19
- Td: ({ Td: e }, { store: v }) => (b) => {
20
- let x, { props: w } = useContext(Ctx), [T, D] = createSignal(!1), O = "", j = () => unFn(w.editable, b), M = () => (([e, v]) => b.x == e && b.y == v)(v.selected.start || []), N = () => M() && j() && !T(), [P, F] = createSignal(!1), I = createAsyncMemo(() => {
21
- if (T()) {
22
- let e = !1, y = b.data[b.col.id], x = ((e) => typeof e == "string" ? v.editors[e] : e)(b.col.editor ?? b.col.type ?? "text"), S = {
23
- props: b.col.editorProps,
24
- col: b.col,
25
- eventKey: O,
26
- data: b.data,
27
- value: y,
20
+ Td: ({ Td: e }, { store: y }) => (x) => {
21
+ let S, { props: C } = useContext(Ctx), [E, D] = createSignal(!1), k = "", A = () => unFn(C.editable, x), M = () => (([e, y]) => x.x == e && x.y == y)(y.selected.start || []), N = () => M() && A() && !E(), [P, F] = createSignal(!1), I = createAsyncMemo(() => {
22
+ if (E()) {
23
+ let e = !1, b = x.data[x.col.id], S = ((e) => typeof e == "string" ? y.editors[e] : e)(x.col.editor ?? x.col.type ?? (x.col.enum ? "select" : "text")), w = {
24
+ props: x.col.editorProps,
25
+ col: x.col,
26
+ eventKey: k,
27
+ data: x.data,
28
+ value: b,
28
29
  ok: async () => {
29
- await L(C.getValue()), D(!1);
30
+ await L(T.getValue()), D(!1);
30
31
  },
31
32
  cancel: () => (e = !0, D(!1)),
32
- onChange: (e) => T() && L(e).catch(() => {})
33
- }, C = x(S);
33
+ onChange: (e) => E() && L(e).catch(() => {})
34
+ }, T = S(w);
34
35
  return onCleanup(() => {
35
- !e && C.getValue() !== y && v.commands.rowChange({
36
- ...w.data[b.y],
37
- [b.col.id]: C.getValue()
38
- }), e || L(C.getValue()).catch(() => {}), O = "", C.destroy();
39
- }), [S, C];
36
+ !e && T.getValue() !== b && y.commands.rowChange({
37
+ ...C.data[x.y],
38
+ [x.col.id]: T.getValue()
39
+ }), e || L(T.getValue()).catch(() => {}), k = "", T.destroy();
40
+ }), [w, T];
40
41
  }
41
42
  });
42
43
  async function L(e) {
43
44
  try {
44
- F(!0), await v.validateCell(e, b.data, b.col);
45
+ F(!0), await y.validateCell(e, x.data, x.col);
45
46
  } finally {
46
47
  F(!1);
47
48
  }
@@ -49,8 +50,8 @@ const EditablePlugin = {
49
50
  createEffect(() => {
50
51
  I()?.[1]?.focus?.();
51
52
  }), createEffect(() => {
52
- if (T()) {
53
- let e = createMemo(() => JSON.stringify(v.selected ?? "{}"));
53
+ if (E()) {
54
+ let e = createMemo(() => JSON.stringify(y.selected ?? "{}"));
54
55
  createEffect(on(e, () => D(!1), { defer: !0 }));
55
56
  }
56
57
  });
@@ -58,32 +59,32 @@ const EditablePlugin = {
58
59
  w: 0,
59
60
  h: 0
60
61
  });
61
- return createComputed(() => T() && (z.w = x.getBoundingClientRect().width, z.h = x.getBoundingClientRect().height)), b = combineProps(b, {
62
- ref: (e) => x = e,
62
+ return createComputed(() => E() && (z.w = S.getBoundingClientRect().width, z.h = S.getBoundingClientRect().height)), x = combineProps(x, {
63
+ ref: (e) => S = e,
63
64
  get class() {
64
- return T() ? "is-editing" : "";
65
+ return E() ? "is-editing" : "";
65
66
  },
66
67
  get style() {
67
- return T() ? `width: ${z.w}px; height: ${z.h}px; padding: 0; ` : "";
68
+ return E() ? `width: ${z.w}px; height: ${z.h}px; padding: 0; ` : "";
68
69
  },
69
70
  onClick: () => R?.focus?.(),
70
- onDblClick: () => D(j()),
71
+ onDblClick: () => D(A()),
71
72
  onKeyDown: (e) => e.key == "Escape" && I()?.[0].cancel()
72
- }), createComponent(e, mergeProps(b, { get children() {
73
+ }), createComponent(e, mergeProps(x, { get children() {
73
74
  return [memo(() => memo(() => !!I()?.[1]?.el)() ? (() => {
74
75
  var e = _tmpl$();
75
76
  return addEventListener(e, "keydown", (e) => {
76
- e.stopPropagation(), e.key == "Enter" && !e.shiftKey && I()?.[0].ok(), e.key == "Escape" && I()?.[0].cancel();
77
+ e.stopPropagation(), e.key == "Enter" && !e.shiftKey && (I()?.[0].ok(), e.preventDefault()), e.key == "Escape" && I()?.[0].cancel();
77
78
  }), addEventListener(e, "pointerdown", (e) => e.stopPropagation()), insert(e, () => I()?.[1]?.el, null), insert(e, (() => {
78
79
  var e = memo(() => !!P());
79
80
  return () => e() && _tmpl$2();
80
81
  })(), null), e;
81
- })() : b.children), memo(() => memo(() => !!N())() && (() => {
82
+ })() : x.children), memo(() => memo(() => !!N())() && (() => {
82
83
  var e = _tmpl$3();
83
84
  return e.addEventListener("compositionend", () => {
84
85
  D(!0);
85
86
  }), e.$$input = (e) => {
86
- O = e.target.value, D(!e.isComposing);
87
+ k = e.target.value, D(!e.isComposing);
87
88
  }, e.$$keydown = (e) => {
88
89
  e.key == " " && e.preventDefault();
89
90
  }, use((e) => {
@@ -94,35 +95,39 @@ const EditablePlugin = {
94
95
  }
95
96
  }
96
97
  };
97
- var createEditor = (e, y, b) => ({ eventKey: x, value: S, col: C, ok: w, cancel: T, props: E, onChange: D }) => createRoot((T) => {
98
- let [O, k] = createSignal(x || S), A;
98
+ var createEditor = (e, b, x) => ({ eventKey: S, value: C, col: w, ok: T, cancel: E, props: D, onChange: O }) => createRoot((E) => {
99
+ let [k, A] = createSignal(S || C), j;
99
100
  return createComponent(e, mergeProps({
100
- ref: (e) => A = e,
101
+ ref: (e) => j = e,
101
102
  class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
102
103
  get value() {
103
- return O();
104
+ return k();
104
105
  },
105
- onInput: (e) => (k(e instanceof Event ? e.target.value : e), D?.(O())),
106
- onChange: (e) => (k(e instanceof Event ? e.target.value : e), D?.(O()), b && w()),
106
+ onInput: (e) => (A(e instanceof Event ? e.target.value : e), O?.(k())),
107
+ onChange: (e) => (A(e instanceof Event ? e.target.value : e), O?.(k()), x && T()),
107
108
  get options() {
108
- return memo(() => !!C.enum)() ? resolveOptions(C.enum ?? []) : void 0;
109
+ return memo(() => !!w.enum)() ? resolveOptions(w.enum ?? []) : void 0;
109
110
  }
110
- }, y, E)), {
111
- el: A,
112
- getValue: O,
113
- focus: () => A.focus(),
114
- destroy: T
111
+ }, b, D)), setTimeout(() => {
112
+ x && j?.showPicker?.();
113
+ }, 0), {
114
+ el: j,
115
+ getValue: k,
116
+ focus: () => j.focus(),
117
+ destroy: E
115
118
  };
116
119
  }), Input = (e) => (() => {
117
- var v = _tmpl$4();
118
- return spread(v, e, !1, !1), v;
120
+ var y = _tmpl$4();
121
+ return spread(y, e, !1, !1), y;
119
122
  })();
120
123
  const editors = {
121
124
  text: createEditor(Input),
122
- textarea: createEditor((e) => (() => {
123
- var v = _tmpl$5();
124
- return spread(v, e, !1, !1), v;
125
- })()),
125
+ textarea: createEditor((e) => createComponent(Textarea_default, mergeProps({ autosize: {
126
+ minRows: 2,
127
+ maxRows: 3
128
+ } }, e, { get class() {
129
+ return `${e.class} bg-[--table-bg] outline-1.5px outline-solid outline-[--c-primary]`;
130
+ } }))),
126
131
  number: createEditor(Input, { type: "number" }),
127
132
  range: createEditor(Input, { type: "range" }),
128
133
  date: createEditor(Input, { type: "date" }, !0),
@@ -131,27 +136,27 @@ const editors = {
131
136
  color: createEditor(Input, { type: "color" }),
132
137
  tel: createEditor(Input, { type: "tel" }),
133
138
  password: createEditor(Input, { type: "password" }),
134
- file: createEditor((v) => createComponent(Files, mergeProps(v, {
139
+ file: createEditor((y) => createComponent(Files, mergeProps(y, {
135
140
  class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
136
- onAdd: () => chooseFile({ multiple: !0 }).then((e) => v.onChange([...v.value || [], ...e.map((e) => ({
141
+ onAdd: () => chooseFile({ multiple: !0 }).then((e) => y.onChange([...y.value || [], ...e.map((e) => ({
137
142
  name: e.name,
138
143
  size: e.size
139
144
  }))]))
140
145
  }))),
141
146
  checkbox: createEditor((e) => (() => {
142
- var v = _tmpl$6(), y = e.ref;
143
- return typeof y == "function" ? use(y, v) : e.ref = v, insert(v, createComponent(Checkbox, mergeProps(e, {
147
+ var y = _tmpl$5(), b = e.ref;
148
+ return typeof b == "function" ? use(b, y) : e.ref = y, insert(y, createComponent(Checkbox, mergeProps(e, {
144
149
  ref: () => {},
145
150
  onInput: () => {},
146
151
  class: "mx-3!"
147
- }))), v;
152
+ }))), y;
148
153
  })()),
149
154
  select: createEditor((e) => (() => {
150
- var v = _tmpl$7();
151
- return spread(v, e, !1, !0), insert(v, () => e.options?.map((e) => (() => {
152
- var v = _tmpl$8();
153
- return insert(v, () => e.label), effect(() => v.value = e.value), v;
154
- })())), v;
155
+ var y = _tmpl$6();
156
+ return y.firstChild, spread(y, e, !1, !0), insert(y, () => e.options?.map((y) => (() => {
157
+ var b = _tmpl$7();
158
+ return insert(b, () => y.label), effect(() => b.selected = y.value === e.value), effect(() => b.value = y.value), b;
159
+ })()), null), y;
155
160
  })(), {}, !0)
156
161
  };
157
162
  delegateEvents(["keydown", "input"]);
@@ -4,29 +4,41 @@ import { useSelector } from "../hooks/useSelector.js";
4
4
  import { createComponent, insert, template } from "solid-js/web";
5
5
  import { mergeProps as mergeProps$1 } from "solid-js";
6
6
  import { defaultsDeep } from "es-toolkit/compat";
7
- var _tmpl$ = /* @__PURE__ */ template("<label>");
7
+ var _tmpl$ = /* @__PURE__ */ template("<label class=\"flex items-center justify-center w-full h-full\">"), _tmpl$2 = /* @__PURE__ */ template("<label>");
8
8
  const RowSelectionPlugin = {
9
9
  name: "row-selection",
10
10
  priority: -Infinity,
11
- store: (c) => ({ rowSelectionCol: {
12
- [c.internal]: 1,
11
+ store: (l) => ({ rowSelectionCol: {
12
+ [l.internal]: 1,
13
13
  id: Symbol("row-selection"),
14
14
  fixed: "left",
15
15
  class: "row-selection",
16
16
  width: 45,
17
17
  resizable: !1,
18
+ name: solidComponent((e) => l.props.rowSelection?.multiple && (() => {
19
+ var e = _tmpl$();
20
+ return insert(e, createComponent(Checkbox, {
21
+ get value() {
22
+ return l.commands.rowSelector.isAll(l.props.data);
23
+ },
24
+ onChange: (e) => e ? l.commands.rowSelector.selectAll(l.props.data) : l.commands.rowSelector.clear(),
25
+ get disabled() {
26
+ return !l.props?.data?.length;
27
+ }
28
+ })), e;
29
+ })()),
18
30
  render: solidComponent((e) => (() => {
19
- var l = _tmpl$();
20
- return insert(l, createComponent(Checkbox, {
31
+ var u = _tmpl$2();
32
+ return insert(u, createComponent(Checkbox, {
21
33
  style: "position: absolute",
22
34
  get value() {
23
- return c.commands.rowSelector.has(e.data);
35
+ return l.commands.rowSelector.has(e.data);
24
36
  },
25
- onChange: (s) => s ? c.commands.rowSelector.add(e.data) : c.commands.rowSelector.del(e.data),
37
+ onChange: (c) => c ? l.commands.rowSelector.add(e.data) : l.commands.rowSelector.del(e.data),
26
38
  get disabled() {
27
- return !c.props?.rowSelection?.selectable?.(e.data);
39
+ return !l.props?.rowSelection?.selectable?.(e.data);
28
40
  }
29
- })), l;
41
+ })), u;
30
42
  })())
31
43
  } }),
32
44
  commands: (e) => ({ rowSelector: useSelector(mergeProps$1(() => ({ ...e.props?.rowSelection }))) }),
@@ -36,7 +48,7 @@ const RowSelectionPlugin = {
36
48
  multiple: !1,
37
49
  selectable: () => !0
38
50
  }),
39
- columns: ({ columns: e }, { store: s }) => s.props?.rowSelection?.enable ? [s.rowSelectionCol, ...e] : e
51
+ columns: ({ columns: e }, { store: c }) => c.props?.rowSelection?.enable ? [c.rowSelectionCol, ...e] : e
40
52
  }
41
53
  };
42
54
  export { RowSelectionPlugin };
@@ -1,4 +1,4 @@
1
- import { type Plugin } from '..';
1
+ import { type Plugin$0 } from '..';
2
2
  import { useControlled } from '../hooks/useControlled';
3
3
  export type SortOrder = 'asc' | 'desc';
4
4
  export interface SortKey {
@@ -37,4 +37,4 @@ declare module '../index' {
37
37
  sort: ReturnType<typeof useControlled<Exclude<TableProps['sort'], undefined>>>;
38
38
  }
39
39
  }
40
- export declare const SortPlugin: Plugin;
40
+ export declare const SortPlugin: Plugin$0;