From 3118185b313d454af3da4fde2b77368d7767f6fb Mon Sep 17 00:00:00 2001 From: Fang_Zhijian Date: Sun, 22 Feb 2026 22:11:47 +0800 Subject: [PATCH] update 1.0.7 --- .edaignore | 1 - CHANGELOG.md | 6 + extension.json | 6 +- iframe/css/index.css | 1504 +++++++++++++++++++++++++----------------- iframe/export.html | 645 +++++++++--------- iframe/settings.html | 29 +- package.json | 6 +- src/index.ts | 68 +- 8 files changed, 1299 insertions(+), 966 deletions(-) diff --git a/.edaignore b/.edaignore index 1ddc2f0..13ded8b 100644 --- a/.edaignore +++ b/.edaignore @@ -18,4 +18,3 @@ /package.json /tsconfig.json debug.log -/iframe/js/s_* diff --git a/CHANGELOG.md b/CHANGELOG.md index b6428fb..e10db95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.0.7 + +1. 新增“出库自动填充 BOM”选项:开启后,打开出库界面将自动填充 BOM +2. 新增“自动检查更新”选项:开启后,插件将在 EDA 启动时自动检查更新并提示用户 +3. 移除不必要的依赖包 + # 1.0.6 1. 增加远程扫码入库功能 diff --git a/extension.json b/extension.json index 41c18b7..6e52d25 100644 --- a/extension.json +++ b/extension.json @@ -3,7 +3,7 @@ "uuid": "944f7c94a8ca485e848f1118effcbb9a", "displayName": "LEYE", "description": "LEYE 电子元器件库存管理系统 EDA 联动扩展", - "version": "1.0.6", + "version": "1.0.7", "publisher": "Mr_Fang", "engines": { "eda": "^3.2.80" @@ -14,9 +14,7 @@ "url": "https://gitea.miri.site/Mr_Fang/eext-leye" }, "categories": "Schematic", - "keywords": [ - "Tools", "库管", "库存管理" - ], + "keywords": ["Tools", "库管", "库存管理"], "images": { "logo": "./images/logo.png" }, diff --git a/iframe/css/index.css b/iframe/css/index.css index 29588f6..d28afc8 100644 --- a/iframe/css/index.css +++ b/iframe/css/index.css @@ -1,109 +1,111 @@ -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; +*, +::before, +::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; } ::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; } /* @@ -118,19 +120,19 @@ *, ::before, ::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #e5e7eb; - /* 2 */ + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ } ::before, ::after { - --tw-content: ''; + --tw-content: ''; } /* @@ -145,23 +147,23 @@ html, :host { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 4 */ - font-feature-settings: normal; - /* 5 */ - font-variation-settings: normal; - /* 6 */ - -webkit-tap-highlight-color: transparent; - /* 7 */ + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ } /* @@ -170,10 +172,10 @@ html, */ body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ } /* @@ -183,12 +185,12 @@ body { */ hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ } /* @@ -196,8 +198,8 @@ Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; } /* @@ -210,8 +212,8 @@ h3, h4, h5, h6 { - font-size: inherit; - font-weight: inherit; + font-size: inherit; + font-weight: inherit; } /* @@ -219,8 +221,8 @@ Reset links to optimize for opt-in styling instead of opt-out. */ a { - color: inherit; - text-decoration: inherit; + color: inherit; + text-decoration: inherit; } /* @@ -229,7 +231,7 @@ Add the correct font weight in Edge and Safari. b, strong { - font-weight: bolder; + font-weight: bolder; } /* @@ -243,14 +245,14 @@ code, kbd, samp, pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - /* 1 */ - font-feature-settings: normal; - /* 2 */ - font-variation-settings: normal; - /* 3 */ - font-size: 1em; - /* 4 */ + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ } /* @@ -258,7 +260,7 @@ Add the correct font size in all browsers. */ small { - font-size: 80%; + font-size: 80%; } /* @@ -267,18 +269,18 @@ Prevent `sub` and `sup` elements from affecting the line height in all browsers. sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; } sub { - bottom: -0.25em; + bottom: -0.25em; } sup { - top: -0.5em; + top: -0.5em; } /* @@ -288,12 +290,12 @@ sup { */ table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ } /* @@ -307,26 +309,26 @@ input, optgroup, select, textarea { - font-family: inherit; - /* 1 */ - font-feature-settings: inherit; - /* 1 */ - font-variation-settings: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - letter-spacing: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ } /* @@ -335,7 +337,7 @@ Remove the inheritance of text transform in Edge and Firefox. button, select { - text-transform: none; + text-transform: none; } /* @@ -347,12 +349,12 @@ button, input:where([type='button']), input:where([type='reset']), input:where([type='submit']) { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ } /* @@ -360,7 +362,7 @@ Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { - outline: auto; + outline: auto; } /* @@ -368,7 +370,7 @@ Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/ */ :-moz-ui-invalid { - box-shadow: none; + box-shadow: none; } /* @@ -376,7 +378,7 @@ Add the correct vertical alignment in Chrome and Firefox. */ progress { - vertical-align: baseline; + vertical-align: baseline; } /* @@ -385,7 +387,7 @@ Correct the cursor style of increment and decrement buttons in Safari. ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { - height: auto; + height: auto; } /* @@ -394,10 +396,10 @@ Correct the cursor style of increment and decrement buttons in Safari. */ [type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ } /* @@ -405,7 +407,7 @@ Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { - -webkit-appearance: none; + -webkit-appearance: none; } /* @@ -414,10 +416,10 @@ Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ } /* @@ -425,7 +427,7 @@ Add the correct display in Chrome and Safari. */ summary { - display: list-item; + display: list-item; } /* @@ -445,24 +447,24 @@ hr, figure, p, pre { - margin: 0; + margin: 0; } fieldset { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } legend { - padding: 0; + padding: 0; } ol, ul, menu { - list-style: none; - margin: 0; - padding: 0; + list-style: none; + margin: 0; + padding: 0; } /* @@ -470,7 +472,7 @@ Reset default styling for dialogs. */ dialog { - padding: 0; + padding: 0; } /* @@ -478,7 +480,7 @@ Prevent resizing textareas horizontally by default. */ textarea { - resize: vertical; + resize: vertical; } /* @@ -486,19 +488,20 @@ textarea { 2. Set the default placeholder color to the user's configured gray 400 color. */ -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ +input::-moz-placeholder, +textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ } input::placeholder, textarea::placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ } /* @@ -506,8 +509,8 @@ Set the default cursor for buttons. */ button, -[role="button"] { - cursor: pointer; +[role='button'] { + cursor: pointer; } /* @@ -515,7 +518,7 @@ Make sure disabled buttons don't get the pointer cursor. */ :disabled { - cursor: default; + cursor: default; } /* @@ -532,10 +535,10 @@ audio, iframe, embed, object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ } /* @@ -544,1139 +547,1394 @@ Constrain images and videos to the parent width and preserve their intrinsic asp img, video { - max-width: 100%; - height: auto; + max-width: 100%; + height: auto; } /* Make elements with the HTML hidden attribute stay hidden by default */ -[hidden]:where(:not([hidden="until-found"])) { - display: none; +[hidden]:where(:not([hidden='until-found'])) { + display: none; } .container { - width: 100%; + width: 100%; } @media (min-width: 640px) { - .container { - max-width: 640px; - } + .container { + max-width: 640px; + } } @media (min-width: 768px) { - .container { - max-width: 768px; - } + .container { + max-width: 768px; + } } @media (min-width: 1024px) { - .container { - max-width: 1024px; - } + .container { + max-width: 1024px; + } } @media (min-width: 1280px) { - .container { - max-width: 1280px; - } + .container { + max-width: 1280px; + } } @media (min-width: 1536px) { - .container { - max-width: 1536px; - } + .container { + max-width: 1536px; + } } .visible { - visibility: visible; + visibility: visible; } .collapse { - visibility: collapse; + visibility: collapse; } .static { - position: static; + position: static; } .fixed { - position: fixed; + position: fixed; } .absolute { - position: absolute; + position: absolute; } .relative { - position: relative; + position: relative; } .sticky { - position: sticky; + position: sticky; } .inset-0 { - inset: 0px; + inset: 0px; } .bottom-0 { - bottom: 0px; + bottom: 0px; } .left-0 { - left: 0px; + left: 0px; } .right-0 { - right: 0px; + right: 0px; +} + +.top-0 { + top: 0px; +} + +.z-10 { + z-index: 10; +} + +.z-40 { + z-index: 40; } .z-50 { - z-index: 50; + z-index: 50; +} + +.order-1 { + order: 1; +} + +.order-2 { + order: 2; +} + +.order-3 { + order: 3; } .col-span-2 { - grid-column: span 2 / span 2; + grid-column: span 2 / span 2; } .m-1 { - margin: 0.25rem; + margin: 0.25rem; +} + +.m-2 { + margin: 0.5rem; } .m-3 { - margin: 0.75rem; + margin: 0.75rem; } .m-auto { - margin: auto; + margin: auto; } .mx-auto { - margin-left: auto; - margin-right: auto; + margin-left: auto; + margin-right: auto; } .mb-1 { - margin-bottom: 0.25rem; + margin-bottom: 0.25rem; } .mb-2 { - margin-bottom: 0.5rem; + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; } .mb-4 { - margin-bottom: 1rem; + margin-bottom: 1rem; } .ml-2 { - margin-left: 0.5rem; + margin-left: 0.5rem; } .ml-4 { - margin-left: 1rem; + margin-left: 1rem; } .ml-6 { - margin-left: 1.5rem; + margin-left: 1.5rem; } .ml-8 { - margin-left: 2rem; + margin-left: 2rem; } .mr-1 { - margin-right: 0.25rem; + margin-right: 0.25rem; } .mr-2 { - margin-right: 0.5rem; + margin-right: 0.5rem; } .mt-2 { - margin-top: 0.5rem; + margin-top: 0.5rem; } .mt-4 { - margin-top: 1rem; + margin-top: 1rem; } .mt-auto { - margin-top: auto; + margin-top: auto; } .block { - display: block; + display: block; } .inline { - display: inline; + display: inline; } .flex { - display: flex; + display: flex; } .inline-flex { - display: inline-flex; + display: inline-flex; } .table { - display: table; + display: table; } .table-cell { - display: table-cell; + display: table-cell; } .table-column { - display: table-column; + display: table-column; } .table-column-group { - display: table-column-group; + display: table-column-group; } .table-row-group { - display: table-row-group; + display: table-row-group; } .table-row { - display: table-row; + display: table-row; } .grid { - display: grid; + display: grid; } .contents { - display: contents; + display: contents; } .hidden { - display: none; + display: none; } .size-1 { - width: 0.25rem; - height: 0.25rem; + width: 0.25rem; + height: 0.25rem; } .h-0 { - height: 0px; + height: 0px; } .h-0\.5 { - height: 0.125rem; + height: 0.125rem; } .h-1 { - height: 0.25rem; + height: 0.25rem; } .h-4 { - height: 1rem; + height: 1rem; +} + +.h-5 { + height: 1.25rem; } .h-\[200px\] { - height: 200px; + height: 200px; } .h-\[250px\] { - height: 250px; + height: 250px; } .h-full { - height: 100%; + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.max-h-full { + max-height: 100%; +} + +.min-h-0 { + min-height: 0px; } .min-h-screen { - min-height: 100vh; + min-height: 100vh; } .w-1 { - width: 0.25rem; + width: 0.25rem; } .w-12 { - width: 3rem; + width: 3rem; } .w-16 { - width: 4rem; + width: 4rem; } .w-20 { - width: 5rem; + width: 5rem; } .w-24 { - width: 6rem; + width: 6rem; } .w-32 { - width: 8rem; + width: 8rem; } .w-4 { - width: 1rem; + width: 1rem; } .w-40 { - width: 10rem; + width: 10rem; } .w-48 { - width: 12rem; + width: 12rem; +} + +.w-5 { + width: 1.25rem; } .w-56 { - width: 14rem; + width: 14rem; } .w-60 { - width: 15rem; + width: 15rem; } .w-64 { - width: 16rem; + width: 16rem; } .w-80 { - width: 20rem; + width: 20rem; } .w-96 { - width: 24rem; + width: 24rem; } .w-\[250px\] { - width: 250px; + width: 250px; } .w-\[400px\] { - width: 400px; + width: 400px; } .w-\[450px\] { - width: 450px; + width: 450px; } .w-\[5\%\] { - width: 5%; + width: 5%; } .w-\[92\%\] { - width: 92%; + width: 92%; +} + +.w-auto { + width: auto; +} + +.w-fit { + width: -moz-fit-content; + width: fit-content; } .w-full { - width: 100%; + width: 100%; +} + +.min-w-0 { + min-width: 0px; } .min-w-full { - min-width: 100%; + min-width: 100%; } .max-w-full { - max-width: 100%; + max-width: 100%; +} + +.max-w-md { + max-width: 28rem; } .flex-1 { - flex: 1 1 0%; + flex: 1 1 0%; +} + +.flex-none { + flex: none; } .flex-shrink { - flex-shrink: 1; + flex-shrink: 1; } .flex-shrink-0 { - flex-shrink: 0; + flex-shrink: 0; } .flex-grow { - flex-grow: 1; + flex-grow: 1; } .border-collapse { - border-collapse: collapse; + border-collapse: collapse; } .transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .cursor-pointer { - cursor: pointer; + cursor: pointer; } .select-all { - -webkit-user-select: all; - -moz-user-select: all; - user-select: all; + -webkit-user-select: all; + -moz-user-select: all; + user-select: all; } .resize { - resize: both; + resize: both; +} + +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.flex-row { + flex-direction: row; } .flex-col { - flex-direction: column; + flex-direction: column; } .flex-wrap { - flex-wrap: wrap; + flex-wrap: wrap; +} + +.items-start { + align-items: flex-start; } .items-center { - align-items: center; + align-items: center; } .justify-end { - justify-content: flex-end; + justify-content: flex-end; } .justify-center { - justify-content: center; + justify-content: center; } .justify-between { - justify-content: space-between; + justify-content: space-between; +} + +.gap-1 { + gap: 0.25rem; } .gap-2 { - gap: 0.5rem; + gap: 0.5rem; } .gap-3 { - gap: 0.75rem; + gap: 0.75rem; +} + +.gap-4 { + gap: 1rem; } .space-x-1 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.25rem * var(--tw-space-x-reverse)); - margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); + --tw-space-x-reverse: 0; + margin-right: calc(0.25rem * var(--tw-space-x-reverse)); + margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-2 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.5rem * var(--tw-space-x-reverse)); - margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.75rem * var(--tw-space-x-reverse)); - margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); + --tw-space-x-reverse: 0; + margin-right: calc(0.75rem * var(--tw-space-x-reverse)); + margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); } .space-x-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1rem * var(--tw-space-x-reverse)); - margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1.5rem * var(--tw-space-x-reverse)); + margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); } .space-y-0 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0px * var(--tw-space-y-reverse)); + --tw-space-y-reverse: 0; + margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0px * var(--tw-space-y-reverse)); } .space-y-0\.5 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.125rem * var(--tw-space-y-reverse)); + --tw-space-y-reverse: 0; + margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.125rem * var(--tw-space-y-reverse)); } .space-y-1 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); + --tw-space-y-reverse: 0; + margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } .space-y-2 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .space-y-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); + --tw-space-y-reverse: 0; + margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .space-y-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1rem * var(--tw-space-y-reverse)); + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} + +.space-y-5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .divide-y > :not([hidden]) ~ :not([hidden]) { - --tw-divide-y-reverse: 0; - border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); - border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); + --tw-divide-y-reverse: 0; + border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); +} + +.divide-gray-100 > :not([hidden]) ~ :not([hidden]) { + --tw-divide-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1)); } .divide-gray-200 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-divide-opacity, 1)); + --tw-divide-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-divide-opacity, 1)); +} + +.overflow-auto { + overflow: auto; } .overflow-hidden { - overflow: hidden; + overflow: hidden; } .overflow-x-auto { - overflow-x: auto; + overflow-x: auto; } .overflow-y-auto { - overflow-y: auto; + overflow-y: auto; } .truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.whitespace-nowrap { + white-space: nowrap; } .rounded { - border-radius: 0.25rem; + border-radius: 0.25rem; } .rounded-lg { - border-radius: 0.5rem; + border-radius: 0.5rem; } .rounded-md { - border-radius: 0.375rem; + border-radius: 0.375rem; +} + +.rounded-xl { + border-radius: 0.75rem; } .border { - border-width: 1px; + border-width: 1px; } .border-0 { - border-width: 0px; + border-width: 0px; } .border-2 { - border-width: 2px; + border-width: 2px; } .border-b { - border-bottom-width: 1px; + border-bottom-width: 1px; +} + +.border-b-0 { + border-bottom-width: 0px; } .border-l { - border-left-width: 1px; + border-left-width: 1px; +} + +.border-r { + border-right-width: 1px; } .border-t { - border-top-width: 1px; + border-top-width: 1px; } .border-dashed { - border-style: dashed; + border-style: dashed; } .border-blue-100 { - --tw-border-opacity: 1; - border-color: rgb(219 234 254 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(219 234 254 / var(--tw-border-opacity, 1)); } .border-blue-300 { - --tw-border-opacity: 1; - border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); +} + +.border-blue-500 { + --tw-border-opacity: 1; + border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-blue-600 { - --tw-border-opacity: 1; - border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)); } .border-gray-100 { - --tw-border-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); } .border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); } .border-gray-300 { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .border-red-300 { - --tw-border-opacity: 1; - border-color: rgb(252 165 165 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(252 165 165 / var(--tw-border-opacity, 1)); } .border-red-600 { - --tw-border-opacity: 1; - border-color: rgb(220 38 38 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 1; + border-color: rgb(220 38 38 / var(--tw-border-opacity, 1)); } .bg-black { - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); } .bg-blue-100 { - --tw-bg-opacity: 1; - background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .bg-blue-50 { - --tw-bg-opacity: 1; - background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .bg-blue-500 { - --tw-bg-opacity: 1; - background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .bg-blue-600 { - --tw-bg-opacity: 1; - background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); } .bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .bg-gray-50 { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .bg-gray-600 { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); } .bg-green-600 { - --tw-bg-opacity: 1; - background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); } .bg-red-50 { - --tw-bg-opacity: 1; - background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .bg-red-600 { - --tw-bg-opacity: 1; - background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); +} + +.bg-slate-900 { + --tw-bg-opacity: 1; + background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1)); } .bg-transparent { - background-color: transparent; + background-color: transparent; } .bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .bg-opacity-50 { - --tw-bg-opacity: 0.5; + --tw-bg-opacity: 0.5; } .object-cover { - -o-object-fit: cover; - object-fit: cover; + -o-object-fit: cover; + object-fit: cover; } .p-1 { - padding: 0.25rem; + padding: 0.25rem; } .p-2 { - padding: 0.5rem; + padding: 0.5rem; } .p-3 { - padding: 0.75rem; + padding: 0.75rem; } .p-4 { - padding: 1rem; + padding: 1rem; +} + +.p-5 { + padding: 1.25rem; } .p-6 { - padding: 1.5rem; + padding: 1.5rem; } .px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; + padding-left: 0.25rem; + padding-right: 0.25rem; } .px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; } .px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; + padding-left: 0.75rem; + padding-right: 0.75rem; } .px-4 { - padding-left: 1rem; - padding-right: 1rem; + padding-left: 1rem; + padding-right: 1rem; +} + +.px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; } .px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; + padding-left: 1.5rem; + padding-right: 1.5rem; } .px-8 { - padding-left: 2rem; - padding-right: 2rem; + padding-left: 2rem; + padding-right: 2rem; } .py-0 { - padding-top: 0px; - padding-bottom: 0px; + padding-top: 0px; + padding-bottom: 0px; } .py-0\.5 { - padding-top: 0.125rem; - padding-bottom: 0.125rem; + padding-top: 0.125rem; + padding-bottom: 0.125rem; } .py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; } .py-1\.5 { - padding-top: 0.375rem; - padding-bottom: 0.375rem; + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} + +.py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; } .py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; } .py-20 { - padding-top: 5rem; - padding-bottom: 5rem; + padding-top: 5rem; + padding-bottom: 5rem; } .py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; } .py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; } .pb-1 { - padding-bottom: 0.25rem; + padding-bottom: 0.25rem; +} + +.pb-2 { + padding-bottom: 0.5rem; } .pb-20 { - padding-bottom: 5rem; + padding-bottom: 5rem; } .pl-2 { - padding-left: 0.5rem; + padding-left: 0.5rem; } .pr-24 { - padding-right: 6rem; + padding-right: 6rem; } .pt-0 { - padding-top: 0px; + padding-top: 0px; } .text-left { - text-align: left; + text-align: left; } .text-center { - text-align: center; + text-align: center; } .text-right { - text-align: right; + text-align: right; } .font-mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; } .font-sans { - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; } .text-2xl { - font-size: 1.5rem; - line-height: 2rem; + font-size: 1.5rem; + line-height: 2rem; } .text-\[10px\] { - font-size: 10px; + font-size: 10px; } .text-\[12px\] { - font-size: 12px; + font-size: 12px; } .text-base { - font-size: 1rem; - line-height: 1.5rem; + font-size: 1rem; + line-height: 1.5rem; } .text-lg { - font-size: 1.125rem; - line-height: 1.75rem; + font-size: 1.125rem; + line-height: 1.75rem; } .text-sm { - font-size: 0.875rem; - line-height: 1.25rem; + font-size: 0.875rem; + line-height: 1.25rem; } .text-xs { - font-size: 0.75rem; - line-height: 1rem; + font-size: 0.75rem; + line-height: 1rem; } .font-bold { - font-weight: 700; + font-weight: 700; } .font-light { - font-weight: 300; + font-weight: 300; } .font-medium { - font-weight: 500; + font-weight: 500; } .font-semibold { - font-weight: 600; + font-weight: 600; } .uppercase { - text-transform: uppercase; + text-transform: uppercase; } .italic { - font-style: italic; + font-style: italic; } .tracking-wider { - letter-spacing: 0.05em; + letter-spacing: 0.05em; } .text-blue-600 { - --tw-text-opacity: 1; - color: rgb(37 99 235 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity, 1)); +} + +.text-blue-700 { + --tw-text-opacity: 1; + color: rgb(29 78 216 / var(--tw-text-opacity, 1)); +} + +.text-blue-800 { + --tw-text-opacity: 1; + color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); } .text-gray-600 { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .text-gray-800 { - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .text-green-600 { - --tw-text-opacity: 1; - color: rgb(22 163 74 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(22 163 74 / var(--tw-text-opacity, 1)); } .text-orange-600 { - --tw-text-opacity: 1; - color: rgb(234 88 12 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .text-red-500 { - --tw-text-opacity: 1; - color: rgb(239 68 68 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .text-red-600 { - --tw-text-opacity: 1; - color: rgb(220 38 38 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .underline { - text-decoration-line: underline; + text-decoration-line: underline; } .placeholder-gray-400::-moz-placeholder { - --tw-placeholder-opacity: 1; - color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1)); + --tw-placeholder-opacity: 1; + color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1)); } .placeholder-gray-400::placeholder { - --tw-placeholder-opacity: 1; - color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1)); + --tw-placeholder-opacity: 1; + color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1)); } .opacity-50 { - opacity: 0.5; + opacity: 0.5; } .shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-2xl { + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-\[0_0_8px_rgba\(59\2c 130\2c 246\2c 0\.8\)\] { - --tw-shadow: 0 0 8px rgba(59,130,246,0.8); - --tw-shadow-colored: 0 0 8px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 0 8px rgba(59, 130, 246, 0.8); + --tw-shadow-colored: 0 0 8px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-inner { - --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-lg { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-md { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-sm { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-xl { - --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .outline-none { - outline: 2px solid transparent; - outline-offset: 2px; + outline: 2px solid transparent; + outline-offset: 2px; } .\!outline { - outline-style: solid !important; + outline-style: solid !important; } .outline { - outline-style: solid; + outline-style: solid; +} + +.ring-blue-500 { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .blur { - --tw-blur: blur(8px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) + var(--tw-sepia) var(--tw-drop-shadow); } .invert { - --tw-invert: invert(100%); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + --tw-invert: invert(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) + var(--tw-sepia) var(--tw-drop-shadow); } .filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) + var(--tw-sepia) var(--tw-drop-shadow); +} + +.backdrop-blur-sm { + --tw-backdrop-blur: blur(4px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) + var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) + var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-filter { + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) + var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) + var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; + transition-property: + color, + background-color, + border-color, + text-decoration-color, + fill, + stroke, + opacity, + box-shadow, + transform, + filter, + -webkit-backdrop-filter; + transition-property: + color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: + color, + background-color, + border-color, + text-decoration-color, + fill, + stroke, + opacity, + box-shadow, + transform, + filter, + backdrop-filter, + -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-transform { + transition-property: transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; } .duration-300 { - transition-duration: 300ms; + transition-duration: 300ms; } .ease-in-out { - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } .ease-out { - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); } .checked\:bg-blue-600:checked { - --tw-bg-opacity: 1; - background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1)); } .hover\:text-blue-600:hover { - --tw-text-opacity: 1; - color: rgb(37 99 235 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .hover\:text-blue-800:hover { - --tw-text-opacity: 1; - color: rgb(30 64 175 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .hover\:text-gray-600:hover { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .hover\:text-red-700:hover { - --tw-text-opacity: 1; - color: rgb(185 28 28 / var(--tw-text-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .hover\:underline:hover { - text-decoration-line: underline; + text-decoration-line: underline; } .focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; + outline: 2px solid transparent; + outline-offset: 2px; } .focus\:ring-0:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-1:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-2:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-4:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-blue-300:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1)); + --tw-ring-opacity: 1; + --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-500:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); + --tw-ring-opacity: 1; + --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .disabled\:opacity-30:disabled { - opacity: 0.3; + opacity: 0.3; } .disabled\:opacity-50:disabled { - opacity: 0.5; + opacity: 0.5; } diff --git a/iframe/export.html b/iframe/export.html index caae2cf..b92dc8d 100644 --- a/iframe/export.html +++ b/iframe/export.html @@ -1,151 +1,188 @@ - - - - 批量出库 - LEYE - - - - -
-
- 立创商城编号导入 - - - -
- -
-
- - -
-
- 待出库总数:0 -
-
- -
-
- - - - - - - - - - - - - - - - - -
选择型号位号封装厂商数量CID操作
获取 BOM...
-
-
- -
-

建议“器件标准化”后使用此功能

- - - -
-
- - - + window.removeItem = (index) => { + outboundList.splice(index, 1); + renderTable(); + }; + + document.getElementById('add-manual-btn').onclick = async () => { + const cid = document.getElementById('input-cid').value.trim().toUpperCase(); + const qty = parseInt(document.getElementById('input-qty').value); + if (!cid || !qty) return; + + const devs = await eda.lib_Device.getByLcscIds([cid]); + let detail = { name: '-', value: '-', footprint: '-', brand: '-', designatorStr: '手动添加', selected: false }; + + if (devs[0]) { + const infoRes = await eda.sys_ClientUrl.request('https://client/api/v2/devices/' + devs[0].uuid, 'GET', null, { + headers: { path: '0819f05c4eef4c71ace90d822a990e87' }, + }); + const info = (await infoRes.json()).result; + detail.name = info.attributes['Manufacturer Part'] || '-'; + detail.value = info.attributes['Value'] || '-'; + detail.footprint = info.attributes['Supplier Footprint'] || '-'; + detail.brand = info.attributes['Manufacturer'] || '-'; + if (cachedCIDs.has(cid)) detail.selected = true; + } + + outboundList.push({ ...detail, lcscId: cid, quantity: qty }); + renderTable(); + document.getElementById('input-cid').value = ''; + }; + + document.getElementById('clear-list-btn').onclick = () => { + outboundList = []; + renderTable(); + }; + + document.getElementById('outbound-btn').onclick = async () => { + const selectedItems = outboundList.filter((item) => item.selected && item.lcscId); + + if (selectedItems.length === 0) { + return eda.sys_Message.showToastMessage('请先勾选要出库的器件', ESYS_ToastMessageType.WARNING); + } + + const SERVER = (await eda.sys_Storage.getExtensionUserConfig('server-host')) || 'http://localhost:21816'; + const AUTO_RUN = (await eda.sys_Storage.getExtensionUserConfig('server-auto-run')) || true; + let successCount = 0; + let failItems = []; + + // eda.sys_Message.showToastMessage(`正在处理 ${selectedItems.length} 项出库...`, ESYS_ToastMessageType.INFO); + + for (const item of selectedItems) { + try { + let getRes = await eda.sys_ClientUrl.request(`${SERVER}/getLeyeList?lcscId=${item.lcscId}`, 'GET'); + let getResult = await getRes.json(); + + if (AUTO_RUN && !getResult.success) { + window.open('leye://open'); + for (let i = 0; i < 3 && !getResult.success; i++) { + eda.sys_Message.showToastMessage('等待拉起本地服务端...', ESYS_ToastMessageType.INFO); + getRes = await eda.sys_ClientUrl.request(`${SERVER}/getLeyeList?lcscId=${item.lcscId}`, 'GET'); + getResult = await getRes.json(); + await new Promise((resolve) => setTimeout(resolve, 1500)); + } + } + + if (getResult.success && getResult.data && getResult.data.length > 0) { + const remoteData = getResult.data[0]; + const remoteId = remoteData.id; + const remoteQty = remoteData.quantity; + + const newQuantity = remoteQty - item.quantity; + + if (newQuantity < 0) { + failItems.push(`${item.lcscId} (库存不足: 剩${remoteQty})`); + continue; + } + + const postRes = await eda.sys_ClientUrl.request( + SERVER + '/editLeyeList', + 'POST', + JSON.stringify({ + id: remoteId, + quantity: newQuantity, + }), + { headers: { 'Content-Type': 'application/json' } }, + ); + + const postResult = await postRes.json(); + if (postResult.success) { + successCount++; + item.selected = false; + } else { + failItems.push(`${item.lcscId} (更新失败)`); + } + } else { + failItems.push(`${item.lcscId} (库内未找到)`); + } + } catch (e) { + console.error(`出库请求异常: ${item.lcscId}`, e); + eda.sys_Log.add(`出库请求异常: ${item.lcscId}: ${e.message}`); + failItems.push(`${item.lcscId} (网络异常)`); + } + } + + renderTable(); + + if (failItems.length === 0) { + eda.sys_Message.showToastMessage(`成功出库 ${successCount} 项!`, ESYS_ToastMessageType.SUCCESS); + } else { + const errorMsg = failItems.join('; '); + eda.sys_Message.showToastMessage(`出库完成:成功:${successCount},失败:${failItems.length}`, ESYS_ToastMessageType.WARNING); + eda.sys_Log.add(errorMsg); + } + }; + + document.getElementById('fill-bom-btn').onclick = () => scanSchematic(); + + document.getElementById('cancel-btn').onclick = () => eda.sys_IFrame.closeIFrame(); + + await initCache(); + if (eda.sys_Storage.getExtensionUserConfig('auto-fill-bom')) await scanSchematic(); + }); + + diff --git a/iframe/settings.html b/iframe/settings.html index b063be1..3e0d37a 100644 --- a/iframe/settings.html +++ b/iframe/settings.html @@ -109,16 +109,27 @@ +
+ + +

高级设置 实验或调试选项

+
+ + +
@@ -128,10 +139,14 @@ document.addEventListener('DOMContentLoaded', async () => { const serverHostInput = document.getElementById('settings-server-host'); const serverAutoRun = document.getElementById('settings-server-auto-run'); + const autoFillBomInput = document.getElementById('settings-auto-fill-bom'); + const autoCheckUpdateInput = document.getElementById('settings-auto-check-update'); const cleanCacheBtn = document.getElementById('settings-clean-cache'); serverHostInput.value = (await eda.sys_Storage.getExtensionUserConfig('server-host')) ?? 'http://localhost:21816/api'; serverAutoRun.checked = (await eda.sys_Storage.getExtensionUserConfig('server-auto-run')) ?? true; + autoFillBomInput.checked = (await eda.sys_Storage.getExtensionUserConfig('auto-fill-bom')) ?? false; + autoCheckUpdateInput.checked = (await eda.sys_Storage.getExtensionUserConfig('auto-check-update')) ?? true; serverHostInput.addEventListener('change', async () => { saveConfig('server-host', serverHostInput.value); @@ -139,16 +154,22 @@ serverAutoRun.addEventListener('change', async () => { saveConfig('server-auto-run', serverAutoRun.checked); }); + autoFillBomInput.addEventListener('change', async () => { + saveConfig('auto-fill-bom', autoFillBomInput.checked); + }); + autoCheckUpdateInput.addEventListener('change', async () => { + saveConfig('auto-check-update', autoCheckUpdateInput.checked); + }); cleanCacheBtn.addEventListener('click', async () => { - eda.sys_Storage.deleteExtensionUserConfig('cache-leye-device-details').then(s => { + eda.sys_Storage.deleteExtensionUserConfig('cache-leye-device-details').then((s) => { if (s) { eda.sys_Message.showToastMessage('缓存清除成功!', ESYS_ToastMessageType.SUCCESS); } else { eda.sys_Message.showToastMessage('缓存清除失败...', ESYS_ToastMessageType.ERROR); } - }) - }) + }); + }); }); function saveConfig(key, value) { diff --git a/package.json b/package.json index f82a0fc..0e54ae3 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,7 @@ "eslint:all": "eslint --ext .ts --fix .", "fix": "npm run prettier:all && npm run eslint:all", "tailwind": "tailwindcss -i ./iframe/css/input.css -o ./iframe/css/index.css", - "obf": "node -e \"const g=require('glob');const {execSync}=require('child_process');const p=require('path');g.sync('iframe/js/s_*.js').forEach(f=>{const d=p.dirname(f),b=p.basename(f,'.js').slice(2)+'.js';execSync(`javascript-obfuscator \\\"${f}\\\" --string-array-encoding rc4 --output \\\"${p.join(d,b)}\\\"`)})\"", - "build": "npm run tailwind && npm run obf && npm run compile && ts-node ./build/packaged.ts" + "build": "npm run tailwind && npm run compile && ts-node ./build/packaged.ts" }, "devDependencies": { "@jlceda/pro-api-types": "^0.1.175", @@ -36,8 +35,7 @@ "rimraf": "^6.0.1", "tailwindcss": "^3.4.17", "ts-node": "^10.9.2", - "typescript": "^5.7.3", - "javascript-obfuscator": "^4.1.1" + "typescript": "^5.7.3" }, "lint-staged": { "*.ts": "eslint --cache --fix", diff --git a/src/index.ts b/src/index.ts index d3fa315..e4e37c0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -45,38 +45,56 @@ if (!globalThis['__LEYE_INIT_FLAG__']) { // @ts-ignore globalThis['__LEYE_INIT_FLAG__'] = true; // @ts-ignore - eda.sys_ShortcutKey.unregisterShortcutKey(['Shift+L']).then(r => console.log('[LEYE] 注销快捷键: ', r)); + eda.sys_ShortcutKey.unregisterShortcutKey(['Shift+L']).then((r) => console.log('[LEYE] 注销快捷键: ', r)); // @ts-ignore - eda.sys_ShortcutKey.registerShortcutKey(['Shift+L'], 'openLeyeIFrame', async () => { - await openLeyeIFrameNew(); - }).then(r => console.log('[LEYE] 注册快捷键: ', r)); + eda.sys_ShortcutKey + .registerShortcutKey(['Shift+L'], 'openLeyeIFrame', async () => { + await openLeyeIFrameNew(); + }) + .then((r) => console.log('[LEYE] 注册快捷键: ', r)); // 获取公告 console.log('[LEYE] 获取公告和更新'); - eda.sys_ClientUrl.request('https://leye.dragon.edu.kg/release/notice.json').then(async (res: any) => { - const data = await res.json(); - console.log('[LEYE] 获取公告: ', data); - if (eda.sys_Storage.getExtensionUserConfig('cache-notice-id') !== data.notices[0].id) { - await eda.sys_Storage.setExtensionUserConfig('cache-notice-id', data.notices[0].id); - eda.sys_Dialog.showInformationMessage(data.notices[0].content, data.notices[0].title, '知道了'); - } - }).catch((err: any) => { - console.error('[LEYE] 获取公告和更新失败: ', err); - }); + eda.sys_ClientUrl + .request('https://leye.dragon.edu.kg/release/notice.json') + .then(async (res: any) => { + const data = await res.json(); + console.log('[LEYE] 获取公告: ', data); + if (eda.sys_Storage.getExtensionUserConfig('cache-notice-id') !== data.notices[0].id) { + await eda.sys_Storage.setExtensionUserConfig('cache-notice-id', data.notices[0].id); + eda.sys_Dialog.showInformationMessage(data.notices[0].content, data.notices[0].title, '知道了'); + } + }) + .catch((err: any) => { + console.error('[LEYE] 获取公告和更新失败: ', err); + }); // 获取最新版本 console.log('[LEYE] 获取最新版本'); - eda.sys_ClientUrl.request('https://leye.dragon.edu.kg/release/eext.ver.json').then(async (res: any) => { - const data = await res.json(); - console.log('[LEYE] 获取最新版本: ', data); - if (extensionConfig.version !== data.versions[0].ver) { - eda.sys_Dialog.showConfirmationMessage(data.versions[0].changelog, `LEYE 有新版本 ${data.versions[0].ver} 可用,是否前往下载?`, '前往下载', '算了', async (r) => { - if (r) { - eda.sys_Window.open('https://lrurl.top/LeyeEEXT', ESYS_WindowOpenTarget.BLANK); + if (eda.sys_Storage.getExtensionUserConfig('auto-check-update') ?? true) { + eda.sys_ClientUrl + .request('https://leye.dragon.edu.kg/release/eext.ver.json') + .then(async (res: any) => { + const data = await res.json(); + console.log('[LEYE] 获取最新版本: ', data); + if (extensionConfig.version !== data.versions[0].ver) { + eda.sys_Dialog.showConfirmationMessage( + data.versions[0].changelog, + `LEYE 有新版本 ${data.versions[0].ver} 可用,是否前往下载?`, + '前往下载', + '算了', + async (r) => { + if (r) { + eda.sys_Window.open('https://lrurl.top/LeyeEEXT', ESYS_WindowOpenTarget.BLANK); + } + }, + ); } }) - } - }).catch((err: any) => { - console.error('[LEYE] 获取最新版本: ', err); - }); + .catch((err: any) => { + console.error('[LEYE] 获取最新版本失败: ', err); + }); + } else { + console.log('[LEYE] 用户主动关闭自动检查更新'); + } }