moelove commited on
Commit
03bd69e
·
1 Parent(s): fed58aa

introduce tailwind css

Browse files

Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>

Files changed (9) hide show
  1. CHANGELOG.md +55 -0
  2. package-lock.json +1437 -19
  3. package.json +3 -0
  4. postcss.config.js +6 -0
  5. src/App.jsx +38 -38
  6. src/index.css +403 -740
  7. src/main.jsx +2 -1
  8. src/tailwind.css +3 -0
  9. tailwind.config.js +41 -0
CHANGELOG.md ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [0.1.1] - 2025-03-23
8
+
9
+ ### Added
10
+ - Summarization profile API endpoint for conversation summaries
11
+
12
+ ### Changed
13
+ - Bumped version to 0.1.1
14
+
15
+ ## [0.1.0] - 2025-03-21
16
+
17
+ ### Added
18
+ - Streaming support for chat interactions (#1)
19
+ - Multiple chat profile support
20
+ - Summarization profile configuration in settings
21
+ - Enhanced UI styling and theming
22
+
23
+ ### Changed
24
+ - Updated package dependencies to latest versions
25
+ - Refactored ChatList component to remove unnecessary header
26
+ - Reorganized summarization profile settings for better clarity
27
+ - Removed profile name input from summarization settings
28
+
29
+ ### Fixed
30
+ - Style inconsistencies in chat interface
31
+
32
+ ### Documentation
33
+ - Updated README with detailed feature descriptions
34
+ - Added chat profile configuration guidelines
35
+ - Included license information
36
+
37
+ ## [0.0.1] - 2025-01-31
38
+
39
+ ### Initial Release
40
+ - Basic chat functionality
41
+ - Initial project setup and configuration
42
+ fed58aa 2025-03-23 Bump version to 0.1.1
43
+ f2fe7c8 2025-03-21 refactor: remove unnecessary header from ChatList component
44
+ 77aaa1f 2025-03-20 docs: update README to enhance feature descriptions and add chat profile configuration details
45
+ 4218b1b 2025-03-20 refactor: reorganize summarization profile settings for improved clarity
46
+ d2876cb 2025-03-20 refactor: remove profile name input from summarization profile settings
47
+ 2316bca 2025-03-20 feat: add summarization profile support and API endpoint for conversation summaries
48
+ 434a486 2025-03-04 feat: update package dependencies and enhance UI styling
49
+ fa4edd5 2025-03-03 Add multiple profiles
50
+ ee61dec 2025-03-03 fix style
51
+ 5def997 2025-03-01 Enhances API endpoint handling
52
+ fe9f896 2025-02-22 add streaming support (#1)
53
+ c9d7e50 2025-01-31 Create LICENSE
54
+ 863741a 2025-01-31 Update README for hf
55
+ ddac6a2 2025-01-31 init version
package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
  {
2
  "name": "thinking-model-client",
3
- "version": "0.1.0",
4
  "lockfileVersion": 3,
5
  "requires": true,
6
  "packages": {
7
  "": {
8
  "name": "thinking-model-client",
9
- "version": "0.1.0",
10
  "dependencies": {
11
  "cors": "^2.8.5",
12
  "express": "^4.18.2",
@@ -19,10 +19,25 @@
19
  "@types/react": "^18.2.15",
20
  "@types/react-dom": "^18.2.7",
21
  "@vitejs/plugin-react": "^4.0.3",
 
22
  "concurrently": "^8.2.0",
 
 
23
  "vite": "^4.4.5"
24
  }
25
  },
 
 
 
 
 
 
 
 
 
 
 
 
26
  "node_modules/@ampproject/remapping": {
27
  "version": "2.3.0",
28
  "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -654,6 +669,102 @@
654
  "node": ">=12"
655
  }
656
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
  "node_modules/@jridgewell/gen-mapping": {
658
  "version": "0.3.8",
659
  "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
@@ -702,6 +813,51 @@
702
  "@jridgewell/sourcemap-codec": "^1.4.14"
703
  }
704
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705
  "node_modules/@types/babel__core": {
706
  "version": "7.20.5",
707
  "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -873,11 +1029,73 @@
873
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
874
  }
875
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
876
  "node_modules/array-flatten": {
877
  "version": "1.1.1",
878
  "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
879
  "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
880
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
881
  "node_modules/bail": {
882
  "version": "2.0.2",
883
  "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
@@ -887,6 +1105,24 @@
887
  "url": "https://github.com/sponsors/wooorm"
888
  }
889
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
890
  "node_modules/body-parser": {
891
  "version": "1.20.3",
892
  "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
@@ -923,6 +1159,27 @@
923
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
924
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
925
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
926
  "node_modules/browserslist": {
927
  "version": "4.24.4",
928
  "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
@@ -990,10 +1247,19 @@
990
  "url": "https://github.com/sponsors/ljharb"
991
  }
992
  },
 
 
 
 
 
 
 
 
 
993
  "node_modules/caniuse-lite": {
994
- "version": "1.0.30001696",
995
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz",
996
- "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==",
997
  "dev": true,
998
  "funding": [
999
  {
@@ -1083,6 +1349,42 @@
1083
  "url": "https://github.com/sponsors/wooorm"
1084
  }
1085
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1086
  "node_modules/cliui": {
1087
  "version": "8.0.1",
1088
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -1124,6 +1426,15 @@
1124
  "url": "https://github.com/sponsors/wooorm"
1125
  }
1126
  },
 
 
 
 
 
 
 
 
 
1127
  "node_modules/concurrently": {
1128
  "version": "8.2.2",
1129
  "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
@@ -1201,6 +1512,32 @@
1201
  "node": ">= 0.10"
1202
  }
1203
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1204
  "node_modules/csstype": {
1205
  "version": "3.1.3",
1206
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -1283,6 +1620,17 @@
1283
  "npm": "1.2.8000 || >= 1.4.16"
1284
  }
1285
  },
 
 
 
 
 
 
 
 
 
 
 
1286
  "node_modules/devlop": {
1287
  "version": "1.1.0",
1288
  "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
@@ -1295,6 +1643,18 @@
1295
  "url": "https://github.com/sponsors/wooorm"
1296
  }
1297
  },
 
 
 
 
 
 
 
 
 
 
 
 
1298
  "node_modules/dunder-proto": {
1299
  "version": "1.0.1",
1300
  "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -1308,6 +1668,12 @@
1308
  "node": ">= 0.4"
1309
  }
1310
  },
 
 
 
 
 
 
1311
  "node_modules/ee-first": {
1312
  "version": "1.1.1",
1313
  "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -1491,6 +1857,43 @@
1491
  "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1492
  "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1493
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1494
  "node_modules/fetch-blob": {
1495
  "version": "3.2.0",
1496
  "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
@@ -1513,6 +1916,18 @@
1513
  "node": "^12.20 || >= 14.13"
1514
  }
1515
  },
 
 
 
 
 
 
 
 
 
 
 
 
1516
  "node_modules/finalhandler": {
1517
  "version": "1.3.1",
1518
  "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
@@ -1543,6 +1958,22 @@
1543
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1544
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1545
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1546
  "node_modules/formdata-polyfill": {
1547
  "version": "4.0.10",
1548
  "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
@@ -1562,6 +1993,19 @@
1562
  "node": ">= 0.6"
1563
  }
1564
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
1565
  "node_modules/fresh": {
1566
  "version": "0.5.2",
1567
  "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -1645,16 +2089,48 @@
1645
  "node": ">= 0.4"
1646
  }
1647
  },
1648
- "node_modules/globals": {
1649
- "version": "11.12.0",
1650
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1651
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1652
  "dev": true,
1653
- "engines": {
1654
- "node": ">=4"
 
 
 
 
 
 
 
 
 
 
 
1655
  }
1656
  },
1657
- "node_modules/gopd": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1658
  "version": "1.2.0",
1659
  "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
1660
  "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
@@ -1809,6 +2285,33 @@
1809
  "url": "https://github.com/sponsors/wooorm"
1810
  }
1811
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1812
  "node_modules/is-decimal": {
1813
  "version": "2.0.1",
1814
  "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
@@ -1818,6 +2321,15 @@
1818
  "url": "https://github.com/sponsors/wooorm"
1819
  }
1820
  },
 
 
 
 
 
 
 
 
 
1821
  "node_modules/is-fullwidth-code-point": {
1822
  "version": "3.0.0",
1823
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -1827,6 +2339,18 @@
1827
  "node": ">=8"
1828
  }
1829
  },
 
 
 
 
 
 
 
 
 
 
 
 
1830
  "node_modules/is-hexadecimal": {
1831
  "version": "2.0.1",
1832
  "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
@@ -1836,6 +2360,15 @@
1836
  "url": "https://github.com/sponsors/wooorm"
1837
  }
1838
  },
 
 
 
 
 
 
 
 
 
1839
  "node_modules/is-plain-obj": {
1840
  "version": "4.1.0",
1841
  "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -1847,6 +2380,36 @@
1847
  "url": "https://github.com/sponsors/sindresorhus"
1848
  }
1849
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1850
  "node_modules/js-tokens": {
1851
  "version": "4.0.0",
1852
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1876,6 +2439,261 @@
1876
  "node": ">=6"
1877
  }
1878
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1879
  "node_modules/lodash": {
1880
  "version": "4.17.21",
1881
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -2080,6 +2898,15 @@
2080
  "url": "https://github.com/sponsors/sindresorhus"
2081
  }
2082
  },
 
 
 
 
 
 
 
 
 
2083
  "node_modules/methods": {
2084
  "version": "1.1.2",
2085
  "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -2509,6 +3336,19 @@
2509
  }
2510
  ]
2511
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
2512
  "node_modules/mime": {
2513
  "version": "1.6.0",
2514
  "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -2539,11 +3379,46 @@
2539
  "node": ">= 0.6"
2540
  }
2541
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2542
  "node_modules/ms": {
2543
  "version": "2.1.3",
2544
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2545
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2546
  },
 
 
 
 
 
 
 
 
 
 
 
2547
  "node_modules/nanoid": {
2548
  "version": "3.3.8",
2549
  "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
@@ -2611,14 +3486,41 @@
2611
  "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
2612
  "dev": true
2613
  },
2614
- "node_modules/object-assign": {
2615
- "version": "4.1.1",
2616
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2617
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
 
2618
  "engines": {
2619
  "node": ">=0.10.0"
2620
  }
2621
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2622
  "node_modules/object-inspect": {
2623
  "version": "1.13.3",
2624
  "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
@@ -2641,6 +3543,12 @@
2641
  "node": ">= 0.8"
2642
  }
2643
  },
 
 
 
 
 
 
2644
  "node_modules/parse-entities": {
2645
  "version": "4.0.2",
2646
  "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
@@ -2672,6 +3580,43 @@
2672
  "node": ">= 0.8"
2673
  }
2674
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2675
  "node_modules/path-to-regexp": {
2676
  "version": "0.1.12",
2677
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
@@ -2683,10 +3628,40 @@
2683
  "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
2684
  "dev": true
2685
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2686
  "node_modules/postcss": {
2687
- "version": "8.5.1",
2688
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
2689
- "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
2690
  "dev": true,
2691
  "funding": [
2692
  {
@@ -2711,6 +3686,133 @@
2711
  "node": "^10 || ^12 || >=14"
2712
  }
2713
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2714
  "node_modules/property-information": {
2715
  "version": "7.0.0",
2716
  "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
@@ -2746,6 +3848,26 @@
2746
  "url": "https://github.com/sponsors/ljharb"
2747
  }
2748
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2749
  "node_modules/range-parser": {
2750
  "version": "1.2.1",
2751
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -2826,6 +3948,27 @@
2826
  "node": ">=0.10.0"
2827
  }
2828
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2829
  "node_modules/regenerator-runtime": {
2830
  "version": "0.14.1",
2831
  "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
@@ -2872,6 +4015,36 @@
2872
  "node": ">=0.10.0"
2873
  }
2874
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2875
  "node_modules/rollup": {
2876
  "version": "3.29.5",
2877
  "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz",
@@ -2888,6 +4061,29 @@
2888
  "fsevents": "~2.3.2"
2889
  }
2890
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2891
  "node_modules/rxjs": {
2892
  "version": "7.8.1",
2893
  "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -3001,6 +4197,27 @@
3001
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
3002
  "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
3003
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3004
  "node_modules/shell-quote": {
3005
  "version": "1.8.2",
3006
  "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
@@ -3081,6 +4298,18 @@
3081
  "url": "https://github.com/sponsors/ljharb"
3082
  }
3083
  },
 
 
 
 
 
 
 
 
 
 
 
 
3084
  "node_modules/source-map-js": {
3085
  "version": "1.2.1",
3086
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -3127,6 +4356,21 @@
3127
  "node": ">=8"
3128
  }
3129
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3130
  "node_modules/stringify-entities": {
3131
  "version": "4.0.4",
3132
  "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
@@ -3152,6 +4396,19 @@
3152
  "node": ">=8"
3153
  }
3154
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
3155
  "node_modules/style-to-object": {
3156
  "version": "1.0.8",
3157
  "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
@@ -3160,6 +4417,28 @@
3160
  "inline-style-parser": "0.2.4"
3161
  }
3162
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3163
  "node_modules/supports-color": {
3164
  "version": "8.1.1",
3165
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -3175,6 +4454,88 @@
3175
  "url": "https://github.com/chalk/supports-color?sponsor=1"
3176
  }
3177
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3178
  "node_modules/toidentifier": {
3179
  "version": "1.0.1",
3180
  "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -3210,6 +4571,12 @@
3210
  "url": "https://github.com/sponsors/wooorm"
3211
  }
3212
  },
 
 
 
 
 
 
3213
  "node_modules/tslib": {
3214
  "version": "2.8.1",
3215
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -3347,6 +4714,12 @@
3347
  "browserslist": ">= 4.21.0"
3348
  }
3349
  },
 
 
 
 
 
 
3350
  "node_modules/utils-merge": {
3351
  "version": "1.0.1",
3352
  "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -3452,6 +4825,21 @@
3452
  "node": ">= 8"
3453
  }
3454
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3455
  "node_modules/wrap-ansi": {
3456
  "version": "7.0.0",
3457
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -3469,6 +4857,24 @@
3469
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3470
  }
3471
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3472
  "node_modules/y18n": {
3473
  "version": "5.0.8",
3474
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -3484,6 +4890,18 @@
3484
  "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
3485
  "dev": true
3486
  },
 
 
 
 
 
 
 
 
 
 
 
 
3487
  "node_modules/yargs": {
3488
  "version": "17.7.2",
3489
  "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
 
1
  {
2
  "name": "thinking-model-client",
3
+ "version": "0.1.1",
4
  "lockfileVersion": 3,
5
  "requires": true,
6
  "packages": {
7
  "": {
8
  "name": "thinking-model-client",
9
+ "version": "0.1.1",
10
  "dependencies": {
11
  "cors": "^2.8.5",
12
  "express": "^4.18.2",
 
19
  "@types/react": "^18.2.15",
20
  "@types/react-dom": "^18.2.7",
21
  "@vitejs/plugin-react": "^4.0.3",
22
+ "autoprefixer": "^10.4.21",
23
  "concurrently": "^8.2.0",
24
+ "postcss": "^8.5.3",
25
+ "tailwindcss": "^3.3.5",
26
  "vite": "^4.4.5"
27
  }
28
  },
29
+ "node_modules/@alloc/quick-lru": {
30
+ "version": "5.2.0",
31
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
32
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
33
+ "dev": true,
34
+ "engines": {
35
+ "node": ">=10"
36
+ },
37
+ "funding": {
38
+ "url": "https://github.com/sponsors/sindresorhus"
39
+ }
40
+ },
41
  "node_modules/@ampproject/remapping": {
42
  "version": "2.3.0",
43
  "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
 
669
  "node": ">=12"
670
  }
671
  },
672
+ "node_modules/@isaacs/cliui": {
673
+ "version": "8.0.2",
674
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
675
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
676
+ "dev": true,
677
+ "dependencies": {
678
+ "string-width": "^5.1.2",
679
+ "string-width-cjs": "npm:string-width@^4.2.0",
680
+ "strip-ansi": "^7.0.1",
681
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
682
+ "wrap-ansi": "^8.1.0",
683
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
684
+ },
685
+ "engines": {
686
+ "node": ">=12"
687
+ }
688
+ },
689
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
690
+ "version": "6.1.0",
691
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
692
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
693
+ "dev": true,
694
+ "engines": {
695
+ "node": ">=12"
696
+ },
697
+ "funding": {
698
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
699
+ }
700
+ },
701
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
702
+ "version": "6.2.1",
703
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
704
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
705
+ "dev": true,
706
+ "engines": {
707
+ "node": ">=12"
708
+ },
709
+ "funding": {
710
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
711
+ }
712
+ },
713
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
714
+ "version": "9.2.2",
715
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
716
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
717
+ "dev": true
718
+ },
719
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
720
+ "version": "5.1.2",
721
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
722
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
723
+ "dev": true,
724
+ "dependencies": {
725
+ "eastasianwidth": "^0.2.0",
726
+ "emoji-regex": "^9.2.2",
727
+ "strip-ansi": "^7.0.1"
728
+ },
729
+ "engines": {
730
+ "node": ">=12"
731
+ },
732
+ "funding": {
733
+ "url": "https://github.com/sponsors/sindresorhus"
734
+ }
735
+ },
736
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
737
+ "version": "7.1.0",
738
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
739
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
740
+ "dev": true,
741
+ "dependencies": {
742
+ "ansi-regex": "^6.0.1"
743
+ },
744
+ "engines": {
745
+ "node": ">=12"
746
+ },
747
+ "funding": {
748
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
749
+ }
750
+ },
751
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
752
+ "version": "8.1.0",
753
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
754
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
755
+ "dev": true,
756
+ "dependencies": {
757
+ "ansi-styles": "^6.1.0",
758
+ "string-width": "^5.0.1",
759
+ "strip-ansi": "^7.0.1"
760
+ },
761
+ "engines": {
762
+ "node": ">=12"
763
+ },
764
+ "funding": {
765
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
766
+ }
767
+ },
768
  "node_modules/@jridgewell/gen-mapping": {
769
  "version": "0.3.8",
770
  "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
 
813
  "@jridgewell/sourcemap-codec": "^1.4.14"
814
  }
815
  },
816
+ "node_modules/@nodelib/fs.scandir": {
817
+ "version": "2.1.5",
818
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
819
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
820
+ "dev": true,
821
+ "dependencies": {
822
+ "@nodelib/fs.stat": "2.0.5",
823
+ "run-parallel": "^1.1.9"
824
+ },
825
+ "engines": {
826
+ "node": ">= 8"
827
+ }
828
+ },
829
+ "node_modules/@nodelib/fs.stat": {
830
+ "version": "2.0.5",
831
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
832
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
833
+ "dev": true,
834
+ "engines": {
835
+ "node": ">= 8"
836
+ }
837
+ },
838
+ "node_modules/@nodelib/fs.walk": {
839
+ "version": "1.2.8",
840
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
841
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
842
+ "dev": true,
843
+ "dependencies": {
844
+ "@nodelib/fs.scandir": "2.1.5",
845
+ "fastq": "^1.6.0"
846
+ },
847
+ "engines": {
848
+ "node": ">= 8"
849
+ }
850
+ },
851
+ "node_modules/@pkgjs/parseargs": {
852
+ "version": "0.11.0",
853
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
854
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
855
+ "dev": true,
856
+ "optional": true,
857
+ "engines": {
858
+ "node": ">=14"
859
+ }
860
+ },
861
  "node_modules/@types/babel__core": {
862
  "version": "7.20.5",
863
  "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
 
1029
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1030
  }
1031
  },
1032
+ "node_modules/any-promise": {
1033
+ "version": "1.3.0",
1034
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1035
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1036
+ "dev": true
1037
+ },
1038
+ "node_modules/anymatch": {
1039
+ "version": "3.1.3",
1040
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1041
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1042
+ "dev": true,
1043
+ "dependencies": {
1044
+ "normalize-path": "^3.0.0",
1045
+ "picomatch": "^2.0.4"
1046
+ },
1047
+ "engines": {
1048
+ "node": ">= 8"
1049
+ }
1050
+ },
1051
+ "node_modules/arg": {
1052
+ "version": "5.0.2",
1053
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1054
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1055
+ "dev": true
1056
+ },
1057
  "node_modules/array-flatten": {
1058
  "version": "1.1.1",
1059
  "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
1060
  "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
1061
  },
1062
+ "node_modules/autoprefixer": {
1063
+ "version": "10.4.21",
1064
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
1065
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
1066
+ "dev": true,
1067
+ "funding": [
1068
+ {
1069
+ "type": "opencollective",
1070
+ "url": "https://opencollective.com/postcss/"
1071
+ },
1072
+ {
1073
+ "type": "tidelift",
1074
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
1075
+ },
1076
+ {
1077
+ "type": "github",
1078
+ "url": "https://github.com/sponsors/ai"
1079
+ }
1080
+ ],
1081
+ "dependencies": {
1082
+ "browserslist": "^4.24.4",
1083
+ "caniuse-lite": "^1.0.30001702",
1084
+ "fraction.js": "^4.3.7",
1085
+ "normalize-range": "^0.1.2",
1086
+ "picocolors": "^1.1.1",
1087
+ "postcss-value-parser": "^4.2.0"
1088
+ },
1089
+ "bin": {
1090
+ "autoprefixer": "bin/autoprefixer"
1091
+ },
1092
+ "engines": {
1093
+ "node": "^10 || ^12 || >=14"
1094
+ },
1095
+ "peerDependencies": {
1096
+ "postcss": "^8.1.0"
1097
+ }
1098
+ },
1099
  "node_modules/bail": {
1100
  "version": "2.0.2",
1101
  "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
 
1105
  "url": "https://github.com/sponsors/wooorm"
1106
  }
1107
  },
1108
+ "node_modules/balanced-match": {
1109
+ "version": "1.0.2",
1110
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1111
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1112
+ "dev": true
1113
+ },
1114
+ "node_modules/binary-extensions": {
1115
+ "version": "2.3.0",
1116
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1117
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1118
+ "dev": true,
1119
+ "engines": {
1120
+ "node": ">=8"
1121
+ },
1122
+ "funding": {
1123
+ "url": "https://github.com/sponsors/sindresorhus"
1124
+ }
1125
+ },
1126
  "node_modules/body-parser": {
1127
  "version": "1.20.3",
1128
  "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
 
1159
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1160
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1161
  },
1162
+ "node_modules/brace-expansion": {
1163
+ "version": "2.0.1",
1164
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1165
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1166
+ "dev": true,
1167
+ "dependencies": {
1168
+ "balanced-match": "^1.0.0"
1169
+ }
1170
+ },
1171
+ "node_modules/braces": {
1172
+ "version": "3.0.3",
1173
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1174
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1175
+ "dev": true,
1176
+ "dependencies": {
1177
+ "fill-range": "^7.1.1"
1178
+ },
1179
+ "engines": {
1180
+ "node": ">=8"
1181
+ }
1182
+ },
1183
  "node_modules/browserslist": {
1184
  "version": "4.24.4",
1185
  "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
 
1247
  "url": "https://github.com/sponsors/ljharb"
1248
  }
1249
  },
1250
+ "node_modules/camelcase-css": {
1251
+ "version": "2.0.1",
1252
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1253
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1254
+ "dev": true,
1255
+ "engines": {
1256
+ "node": ">= 6"
1257
+ }
1258
+ },
1259
  "node_modules/caniuse-lite": {
1260
+ "version": "1.0.30001709",
1261
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001709.tgz",
1262
+ "integrity": "sha512-NgL3vUTnDrPCZ3zTahp4fsugQ4dc7EKTSzwQDPEel6DMoMnfH2jhry9n2Zm8onbSR+f/QtKHFOA+iAQu4kbtWA==",
1263
  "dev": true,
1264
  "funding": [
1265
  {
 
1349
  "url": "https://github.com/sponsors/wooorm"
1350
  }
1351
  },
1352
+ "node_modules/chokidar": {
1353
+ "version": "3.6.0",
1354
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
1355
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
1356
+ "dev": true,
1357
+ "dependencies": {
1358
+ "anymatch": "~3.1.2",
1359
+ "braces": "~3.0.2",
1360
+ "glob-parent": "~5.1.2",
1361
+ "is-binary-path": "~2.1.0",
1362
+ "is-glob": "~4.0.1",
1363
+ "normalize-path": "~3.0.0",
1364
+ "readdirp": "~3.6.0"
1365
+ },
1366
+ "engines": {
1367
+ "node": ">= 8.10.0"
1368
+ },
1369
+ "funding": {
1370
+ "url": "https://paulmillr.com/funding/"
1371
+ },
1372
+ "optionalDependencies": {
1373
+ "fsevents": "~2.3.2"
1374
+ }
1375
+ },
1376
+ "node_modules/chokidar/node_modules/glob-parent": {
1377
+ "version": "5.1.2",
1378
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1379
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1380
+ "dev": true,
1381
+ "dependencies": {
1382
+ "is-glob": "^4.0.1"
1383
+ },
1384
+ "engines": {
1385
+ "node": ">= 6"
1386
+ }
1387
+ },
1388
  "node_modules/cliui": {
1389
  "version": "8.0.1",
1390
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
 
1426
  "url": "https://github.com/sponsors/wooorm"
1427
  }
1428
  },
1429
+ "node_modules/commander": {
1430
+ "version": "4.1.1",
1431
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1432
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1433
+ "dev": true,
1434
+ "engines": {
1435
+ "node": ">= 6"
1436
+ }
1437
+ },
1438
  "node_modules/concurrently": {
1439
  "version": "8.2.2",
1440
  "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
 
1512
  "node": ">= 0.10"
1513
  }
1514
  },
1515
+ "node_modules/cross-spawn": {
1516
+ "version": "7.0.6",
1517
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1518
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1519
+ "dev": true,
1520
+ "dependencies": {
1521
+ "path-key": "^3.1.0",
1522
+ "shebang-command": "^2.0.0",
1523
+ "which": "^2.0.1"
1524
+ },
1525
+ "engines": {
1526
+ "node": ">= 8"
1527
+ }
1528
+ },
1529
+ "node_modules/cssesc": {
1530
+ "version": "3.0.0",
1531
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1532
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1533
+ "dev": true,
1534
+ "bin": {
1535
+ "cssesc": "bin/cssesc"
1536
+ },
1537
+ "engines": {
1538
+ "node": ">=4"
1539
+ }
1540
+ },
1541
  "node_modules/csstype": {
1542
  "version": "3.1.3",
1543
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
 
1620
  "npm": "1.2.8000 || >= 1.4.16"
1621
  }
1622
  },
1623
+ "node_modules/detect-libc": {
1624
+ "version": "2.0.3",
1625
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
1626
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
1627
+ "dev": true,
1628
+ "optional": true,
1629
+ "peer": true,
1630
+ "engines": {
1631
+ "node": ">=8"
1632
+ }
1633
+ },
1634
  "node_modules/devlop": {
1635
  "version": "1.1.0",
1636
  "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
 
1643
  "url": "https://github.com/sponsors/wooorm"
1644
  }
1645
  },
1646
+ "node_modules/didyoumean": {
1647
+ "version": "1.2.2",
1648
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1649
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1650
+ "dev": true
1651
+ },
1652
+ "node_modules/dlv": {
1653
+ "version": "1.1.3",
1654
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1655
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1656
+ "dev": true
1657
+ },
1658
  "node_modules/dunder-proto": {
1659
  "version": "1.0.1",
1660
  "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
 
1668
  "node": ">= 0.4"
1669
  }
1670
  },
1671
+ "node_modules/eastasianwidth": {
1672
+ "version": "0.2.0",
1673
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1674
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
1675
+ "dev": true
1676
+ },
1677
  "node_modules/ee-first": {
1678
  "version": "1.1.1",
1679
  "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 
1857
  "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1858
  "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1859
  },
1860
+ "node_modules/fast-glob": {
1861
+ "version": "3.3.3",
1862
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
1863
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
1864
+ "dev": true,
1865
+ "dependencies": {
1866
+ "@nodelib/fs.stat": "^2.0.2",
1867
+ "@nodelib/fs.walk": "^1.2.3",
1868
+ "glob-parent": "^5.1.2",
1869
+ "merge2": "^1.3.0",
1870
+ "micromatch": "^4.0.8"
1871
+ },
1872
+ "engines": {
1873
+ "node": ">=8.6.0"
1874
+ }
1875
+ },
1876
+ "node_modules/fast-glob/node_modules/glob-parent": {
1877
+ "version": "5.1.2",
1878
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1879
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1880
+ "dev": true,
1881
+ "dependencies": {
1882
+ "is-glob": "^4.0.1"
1883
+ },
1884
+ "engines": {
1885
+ "node": ">= 6"
1886
+ }
1887
+ },
1888
+ "node_modules/fastq": {
1889
+ "version": "1.19.1",
1890
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
1891
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
1892
+ "dev": true,
1893
+ "dependencies": {
1894
+ "reusify": "^1.0.4"
1895
+ }
1896
+ },
1897
  "node_modules/fetch-blob": {
1898
  "version": "3.2.0",
1899
  "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
 
1916
  "node": "^12.20 || >= 14.13"
1917
  }
1918
  },
1919
+ "node_modules/fill-range": {
1920
+ "version": "7.1.1",
1921
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1922
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1923
+ "dev": true,
1924
+ "dependencies": {
1925
+ "to-regex-range": "^5.0.1"
1926
+ },
1927
+ "engines": {
1928
+ "node": ">=8"
1929
+ }
1930
+ },
1931
  "node_modules/finalhandler": {
1932
  "version": "1.3.1",
1933
  "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
 
1958
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1959
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1960
  },
1961
+ "node_modules/foreground-child": {
1962
+ "version": "3.3.1",
1963
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
1964
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
1965
+ "dev": true,
1966
+ "dependencies": {
1967
+ "cross-spawn": "^7.0.6",
1968
+ "signal-exit": "^4.0.1"
1969
+ },
1970
+ "engines": {
1971
+ "node": ">=14"
1972
+ },
1973
+ "funding": {
1974
+ "url": "https://github.com/sponsors/isaacs"
1975
+ }
1976
+ },
1977
  "node_modules/formdata-polyfill": {
1978
  "version": "4.0.10",
1979
  "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
 
1993
  "node": ">= 0.6"
1994
  }
1995
  },
1996
+ "node_modules/fraction.js": {
1997
+ "version": "4.3.7",
1998
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
1999
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
2000
+ "dev": true,
2001
+ "engines": {
2002
+ "node": "*"
2003
+ },
2004
+ "funding": {
2005
+ "type": "patreon",
2006
+ "url": "https://github.com/sponsors/rawify"
2007
+ }
2008
+ },
2009
  "node_modules/fresh": {
2010
  "version": "0.5.2",
2011
  "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 
2089
  "node": ">= 0.4"
2090
  }
2091
  },
2092
+ "node_modules/glob": {
2093
+ "version": "10.4.5",
2094
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
2095
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
2096
  "dev": true,
2097
+ "dependencies": {
2098
+ "foreground-child": "^3.1.0",
2099
+ "jackspeak": "^3.1.2",
2100
+ "minimatch": "^9.0.4",
2101
+ "minipass": "^7.1.2",
2102
+ "package-json-from-dist": "^1.0.0",
2103
+ "path-scurry": "^1.11.1"
2104
+ },
2105
+ "bin": {
2106
+ "glob": "dist/esm/bin.mjs"
2107
+ },
2108
+ "funding": {
2109
+ "url": "https://github.com/sponsors/isaacs"
2110
  }
2111
  },
2112
+ "node_modules/glob-parent": {
2113
+ "version": "6.0.2",
2114
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2115
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2116
+ "dev": true,
2117
+ "dependencies": {
2118
+ "is-glob": "^4.0.3"
2119
+ },
2120
+ "engines": {
2121
+ "node": ">=10.13.0"
2122
+ }
2123
+ },
2124
+ "node_modules/globals": {
2125
+ "version": "11.12.0",
2126
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
2127
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
2128
+ "dev": true,
2129
+ "engines": {
2130
+ "node": ">=4"
2131
+ }
2132
+ },
2133
+ "node_modules/gopd": {
2134
  "version": "1.2.0",
2135
  "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
2136
  "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
 
2285
  "url": "https://github.com/sponsors/wooorm"
2286
  }
2287
  },
2288
+ "node_modules/is-binary-path": {
2289
+ "version": "2.1.0",
2290
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2291
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2292
+ "dev": true,
2293
+ "dependencies": {
2294
+ "binary-extensions": "^2.0.0"
2295
+ },
2296
+ "engines": {
2297
+ "node": ">=8"
2298
+ }
2299
+ },
2300
+ "node_modules/is-core-module": {
2301
+ "version": "2.16.1",
2302
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
2303
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
2304
+ "dev": true,
2305
+ "dependencies": {
2306
+ "hasown": "^2.0.2"
2307
+ },
2308
+ "engines": {
2309
+ "node": ">= 0.4"
2310
+ },
2311
+ "funding": {
2312
+ "url": "https://github.com/sponsors/ljharb"
2313
+ }
2314
+ },
2315
  "node_modules/is-decimal": {
2316
  "version": "2.0.1",
2317
  "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
 
2321
  "url": "https://github.com/sponsors/wooorm"
2322
  }
2323
  },
2324
+ "node_modules/is-extglob": {
2325
+ "version": "2.1.1",
2326
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2327
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2328
+ "dev": true,
2329
+ "engines": {
2330
+ "node": ">=0.10.0"
2331
+ }
2332
+ },
2333
  "node_modules/is-fullwidth-code-point": {
2334
  "version": "3.0.0",
2335
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
 
2339
  "node": ">=8"
2340
  }
2341
  },
2342
+ "node_modules/is-glob": {
2343
+ "version": "4.0.3",
2344
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2345
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2346
+ "dev": true,
2347
+ "dependencies": {
2348
+ "is-extglob": "^2.1.1"
2349
+ },
2350
+ "engines": {
2351
+ "node": ">=0.10.0"
2352
+ }
2353
+ },
2354
  "node_modules/is-hexadecimal": {
2355
  "version": "2.0.1",
2356
  "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
 
2360
  "url": "https://github.com/sponsors/wooorm"
2361
  }
2362
  },
2363
+ "node_modules/is-number": {
2364
+ "version": "7.0.0",
2365
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2366
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2367
+ "dev": true,
2368
+ "engines": {
2369
+ "node": ">=0.12.0"
2370
+ }
2371
+ },
2372
  "node_modules/is-plain-obj": {
2373
  "version": "4.1.0",
2374
  "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
 
2380
  "url": "https://github.com/sponsors/sindresorhus"
2381
  }
2382
  },
2383
+ "node_modules/isexe": {
2384
+ "version": "2.0.0",
2385
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2386
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2387
+ "dev": true
2388
+ },
2389
+ "node_modules/jackspeak": {
2390
+ "version": "3.4.3",
2391
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
2392
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
2393
+ "dev": true,
2394
+ "dependencies": {
2395
+ "@isaacs/cliui": "^8.0.2"
2396
+ },
2397
+ "funding": {
2398
+ "url": "https://github.com/sponsors/isaacs"
2399
+ },
2400
+ "optionalDependencies": {
2401
+ "@pkgjs/parseargs": "^0.11.0"
2402
+ }
2403
+ },
2404
+ "node_modules/jiti": {
2405
+ "version": "1.21.7",
2406
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
2407
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
2408
+ "dev": true,
2409
+ "bin": {
2410
+ "jiti": "bin/jiti.js"
2411
+ }
2412
+ },
2413
  "node_modules/js-tokens": {
2414
  "version": "4.0.0",
2415
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
 
2439
  "node": ">=6"
2440
  }
2441
  },
2442
+ "node_modules/lightningcss": {
2443
+ "version": "1.29.2",
2444
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz",
2445
+ "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==",
2446
+ "dev": true,
2447
+ "optional": true,
2448
+ "peer": true,
2449
+ "dependencies": {
2450
+ "detect-libc": "^2.0.3"
2451
+ },
2452
+ "engines": {
2453
+ "node": ">= 12.0.0"
2454
+ },
2455
+ "funding": {
2456
+ "type": "opencollective",
2457
+ "url": "https://opencollective.com/parcel"
2458
+ },
2459
+ "optionalDependencies": {
2460
+ "lightningcss-darwin-arm64": "1.29.2",
2461
+ "lightningcss-darwin-x64": "1.29.2",
2462
+ "lightningcss-freebsd-x64": "1.29.2",
2463
+ "lightningcss-linux-arm-gnueabihf": "1.29.2",
2464
+ "lightningcss-linux-arm64-gnu": "1.29.2",
2465
+ "lightningcss-linux-arm64-musl": "1.29.2",
2466
+ "lightningcss-linux-x64-gnu": "1.29.2",
2467
+ "lightningcss-linux-x64-musl": "1.29.2",
2468
+ "lightningcss-win32-arm64-msvc": "1.29.2",
2469
+ "lightningcss-win32-x64-msvc": "1.29.2"
2470
+ }
2471
+ },
2472
+ "node_modules/lightningcss-darwin-arm64": {
2473
+ "version": "1.29.2",
2474
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz",
2475
+ "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==",
2476
+ "cpu": [
2477
+ "arm64"
2478
+ ],
2479
+ "dev": true,
2480
+ "optional": true,
2481
+ "os": [
2482
+ "darwin"
2483
+ ],
2484
+ "peer": true,
2485
+ "engines": {
2486
+ "node": ">= 12.0.0"
2487
+ },
2488
+ "funding": {
2489
+ "type": "opencollective",
2490
+ "url": "https://opencollective.com/parcel"
2491
+ }
2492
+ },
2493
+ "node_modules/lightningcss-darwin-x64": {
2494
+ "version": "1.29.2",
2495
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz",
2496
+ "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==",
2497
+ "cpu": [
2498
+ "x64"
2499
+ ],
2500
+ "dev": true,
2501
+ "optional": true,
2502
+ "os": [
2503
+ "darwin"
2504
+ ],
2505
+ "peer": true,
2506
+ "engines": {
2507
+ "node": ">= 12.0.0"
2508
+ },
2509
+ "funding": {
2510
+ "type": "opencollective",
2511
+ "url": "https://opencollective.com/parcel"
2512
+ }
2513
+ },
2514
+ "node_modules/lightningcss-freebsd-x64": {
2515
+ "version": "1.29.2",
2516
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz",
2517
+ "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==",
2518
+ "cpu": [
2519
+ "x64"
2520
+ ],
2521
+ "dev": true,
2522
+ "optional": true,
2523
+ "os": [
2524
+ "freebsd"
2525
+ ],
2526
+ "peer": true,
2527
+ "engines": {
2528
+ "node": ">= 12.0.0"
2529
+ },
2530
+ "funding": {
2531
+ "type": "opencollective",
2532
+ "url": "https://opencollective.com/parcel"
2533
+ }
2534
+ },
2535
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
2536
+ "version": "1.29.2",
2537
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz",
2538
+ "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==",
2539
+ "cpu": [
2540
+ "arm"
2541
+ ],
2542
+ "dev": true,
2543
+ "optional": true,
2544
+ "os": [
2545
+ "linux"
2546
+ ],
2547
+ "peer": true,
2548
+ "engines": {
2549
+ "node": ">= 12.0.0"
2550
+ },
2551
+ "funding": {
2552
+ "type": "opencollective",
2553
+ "url": "https://opencollective.com/parcel"
2554
+ }
2555
+ },
2556
+ "node_modules/lightningcss-linux-arm64-gnu": {
2557
+ "version": "1.29.2",
2558
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz",
2559
+ "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==",
2560
+ "cpu": [
2561
+ "arm64"
2562
+ ],
2563
+ "dev": true,
2564
+ "optional": true,
2565
+ "os": [
2566
+ "linux"
2567
+ ],
2568
+ "peer": true,
2569
+ "engines": {
2570
+ "node": ">= 12.0.0"
2571
+ },
2572
+ "funding": {
2573
+ "type": "opencollective",
2574
+ "url": "https://opencollective.com/parcel"
2575
+ }
2576
+ },
2577
+ "node_modules/lightningcss-linux-arm64-musl": {
2578
+ "version": "1.29.2",
2579
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz",
2580
+ "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==",
2581
+ "cpu": [
2582
+ "arm64"
2583
+ ],
2584
+ "dev": true,
2585
+ "optional": true,
2586
+ "os": [
2587
+ "linux"
2588
+ ],
2589
+ "peer": true,
2590
+ "engines": {
2591
+ "node": ">= 12.0.0"
2592
+ },
2593
+ "funding": {
2594
+ "type": "opencollective",
2595
+ "url": "https://opencollective.com/parcel"
2596
+ }
2597
+ },
2598
+ "node_modules/lightningcss-linux-x64-gnu": {
2599
+ "version": "1.29.2",
2600
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz",
2601
+ "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==",
2602
+ "cpu": [
2603
+ "x64"
2604
+ ],
2605
+ "dev": true,
2606
+ "optional": true,
2607
+ "os": [
2608
+ "linux"
2609
+ ],
2610
+ "peer": true,
2611
+ "engines": {
2612
+ "node": ">= 12.0.0"
2613
+ },
2614
+ "funding": {
2615
+ "type": "opencollective",
2616
+ "url": "https://opencollective.com/parcel"
2617
+ }
2618
+ },
2619
+ "node_modules/lightningcss-linux-x64-musl": {
2620
+ "version": "1.29.2",
2621
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz",
2622
+ "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==",
2623
+ "cpu": [
2624
+ "x64"
2625
+ ],
2626
+ "dev": true,
2627
+ "optional": true,
2628
+ "os": [
2629
+ "linux"
2630
+ ],
2631
+ "peer": true,
2632
+ "engines": {
2633
+ "node": ">= 12.0.0"
2634
+ },
2635
+ "funding": {
2636
+ "type": "opencollective",
2637
+ "url": "https://opencollective.com/parcel"
2638
+ }
2639
+ },
2640
+ "node_modules/lightningcss-win32-arm64-msvc": {
2641
+ "version": "1.29.2",
2642
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz",
2643
+ "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==",
2644
+ "cpu": [
2645
+ "arm64"
2646
+ ],
2647
+ "dev": true,
2648
+ "optional": true,
2649
+ "os": [
2650
+ "win32"
2651
+ ],
2652
+ "peer": true,
2653
+ "engines": {
2654
+ "node": ">= 12.0.0"
2655
+ },
2656
+ "funding": {
2657
+ "type": "opencollective",
2658
+ "url": "https://opencollective.com/parcel"
2659
+ }
2660
+ },
2661
+ "node_modules/lightningcss-win32-x64-msvc": {
2662
+ "version": "1.29.2",
2663
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz",
2664
+ "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==",
2665
+ "cpu": [
2666
+ "x64"
2667
+ ],
2668
+ "dev": true,
2669
+ "optional": true,
2670
+ "os": [
2671
+ "win32"
2672
+ ],
2673
+ "peer": true,
2674
+ "engines": {
2675
+ "node": ">= 12.0.0"
2676
+ },
2677
+ "funding": {
2678
+ "type": "opencollective",
2679
+ "url": "https://opencollective.com/parcel"
2680
+ }
2681
+ },
2682
+ "node_modules/lilconfig": {
2683
+ "version": "2.1.0",
2684
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
2685
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
2686
+ "dev": true,
2687
+ "engines": {
2688
+ "node": ">=10"
2689
+ }
2690
+ },
2691
+ "node_modules/lines-and-columns": {
2692
+ "version": "1.2.4",
2693
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
2694
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
2695
+ "dev": true
2696
+ },
2697
  "node_modules/lodash": {
2698
  "version": "4.17.21",
2699
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
 
2898
  "url": "https://github.com/sponsors/sindresorhus"
2899
  }
2900
  },
2901
+ "node_modules/merge2": {
2902
+ "version": "1.4.1",
2903
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2904
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2905
+ "dev": true,
2906
+ "engines": {
2907
+ "node": ">= 8"
2908
+ }
2909
+ },
2910
  "node_modules/methods": {
2911
  "version": "1.1.2",
2912
  "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 
3336
  }
3337
  ]
3338
  },
3339
+ "node_modules/micromatch": {
3340
+ "version": "4.0.8",
3341
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
3342
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
3343
+ "dev": true,
3344
+ "dependencies": {
3345
+ "braces": "^3.0.3",
3346
+ "picomatch": "^2.3.1"
3347
+ },
3348
+ "engines": {
3349
+ "node": ">=8.6"
3350
+ }
3351
+ },
3352
  "node_modules/mime": {
3353
  "version": "1.6.0",
3354
  "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
 
3379
  "node": ">= 0.6"
3380
  }
3381
  },
3382
+ "node_modules/minimatch": {
3383
+ "version": "9.0.5",
3384
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
3385
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
3386
+ "dev": true,
3387
+ "dependencies": {
3388
+ "brace-expansion": "^2.0.1"
3389
+ },
3390
+ "engines": {
3391
+ "node": ">=16 || 14 >=14.17"
3392
+ },
3393
+ "funding": {
3394
+ "url": "https://github.com/sponsors/isaacs"
3395
+ }
3396
+ },
3397
+ "node_modules/minipass": {
3398
+ "version": "7.1.2",
3399
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
3400
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
3401
+ "dev": true,
3402
+ "engines": {
3403
+ "node": ">=16 || 14 >=14.17"
3404
+ }
3405
+ },
3406
  "node_modules/ms": {
3407
  "version": "2.1.3",
3408
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
3409
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
3410
  },
3411
+ "node_modules/mz": {
3412
+ "version": "2.7.0",
3413
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
3414
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
3415
+ "dev": true,
3416
+ "dependencies": {
3417
+ "any-promise": "^1.0.0",
3418
+ "object-assign": "^4.0.1",
3419
+ "thenify-all": "^1.0.0"
3420
+ }
3421
+ },
3422
  "node_modules/nanoid": {
3423
  "version": "3.3.8",
3424
  "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
 
3486
  "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
3487
  "dev": true
3488
  },
3489
+ "node_modules/normalize-path": {
3490
+ "version": "3.0.0",
3491
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3492
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
3493
+ "dev": true,
3494
  "engines": {
3495
  "node": ">=0.10.0"
3496
  }
3497
  },
3498
+ "node_modules/normalize-range": {
3499
+ "version": "0.1.2",
3500
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
3501
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
3502
+ "dev": true,
3503
+ "engines": {
3504
+ "node": ">=0.10.0"
3505
+ }
3506
+ },
3507
+ "node_modules/object-assign": {
3508
+ "version": "4.1.1",
3509
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
3510
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
3511
+ "engines": {
3512
+ "node": ">=0.10.0"
3513
+ }
3514
+ },
3515
+ "node_modules/object-hash": {
3516
+ "version": "3.0.0",
3517
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
3518
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
3519
+ "dev": true,
3520
+ "engines": {
3521
+ "node": ">= 6"
3522
+ }
3523
+ },
3524
  "node_modules/object-inspect": {
3525
  "version": "1.13.3",
3526
  "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
 
3543
  "node": ">= 0.8"
3544
  }
3545
  },
3546
+ "node_modules/package-json-from-dist": {
3547
+ "version": "1.0.1",
3548
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
3549
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
3550
+ "dev": true
3551
+ },
3552
  "node_modules/parse-entities": {
3553
  "version": "4.0.2",
3554
  "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
 
3580
  "node": ">= 0.8"
3581
  }
3582
  },
3583
+ "node_modules/path-key": {
3584
+ "version": "3.1.1",
3585
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3586
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3587
+ "dev": true,
3588
+ "engines": {
3589
+ "node": ">=8"
3590
+ }
3591
+ },
3592
+ "node_modules/path-parse": {
3593
+ "version": "1.0.7",
3594
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
3595
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
3596
+ "dev": true
3597
+ },
3598
+ "node_modules/path-scurry": {
3599
+ "version": "1.11.1",
3600
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
3601
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
3602
+ "dev": true,
3603
+ "dependencies": {
3604
+ "lru-cache": "^10.2.0",
3605
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
3606
+ },
3607
+ "engines": {
3608
+ "node": ">=16 || 14 >=14.18"
3609
+ },
3610
+ "funding": {
3611
+ "url": "https://github.com/sponsors/isaacs"
3612
+ }
3613
+ },
3614
+ "node_modules/path-scurry/node_modules/lru-cache": {
3615
+ "version": "10.4.3",
3616
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
3617
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
3618
+ "dev": true
3619
+ },
3620
  "node_modules/path-to-regexp": {
3621
  "version": "0.1.12",
3622
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
 
3628
  "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
3629
  "dev": true
3630
  },
3631
+ "node_modules/picomatch": {
3632
+ "version": "2.3.1",
3633
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3634
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
3635
+ "dev": true,
3636
+ "engines": {
3637
+ "node": ">=8.6"
3638
+ },
3639
+ "funding": {
3640
+ "url": "https://github.com/sponsors/jonschlinkert"
3641
+ }
3642
+ },
3643
+ "node_modules/pify": {
3644
+ "version": "2.3.0",
3645
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
3646
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
3647
+ "dev": true,
3648
+ "engines": {
3649
+ "node": ">=0.10.0"
3650
+ }
3651
+ },
3652
+ "node_modules/pirates": {
3653
+ "version": "4.0.7",
3654
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
3655
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
3656
+ "dev": true,
3657
+ "engines": {
3658
+ "node": ">= 6"
3659
+ }
3660
+ },
3661
  "node_modules/postcss": {
3662
+ "version": "8.5.3",
3663
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
3664
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
3665
  "dev": true,
3666
  "funding": [
3667
  {
 
3686
  "node": "^10 || ^12 || >=14"
3687
  }
3688
  },
3689
+ "node_modules/postcss-import": {
3690
+ "version": "15.1.0",
3691
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
3692
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
3693
+ "dev": true,
3694
+ "dependencies": {
3695
+ "postcss-value-parser": "^4.0.0",
3696
+ "read-cache": "^1.0.0",
3697
+ "resolve": "^1.1.7"
3698
+ },
3699
+ "engines": {
3700
+ "node": ">=14.0.0"
3701
+ },
3702
+ "peerDependencies": {
3703
+ "postcss": "^8.0.0"
3704
+ }
3705
+ },
3706
+ "node_modules/postcss-js": {
3707
+ "version": "4.0.1",
3708
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
3709
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
3710
+ "dev": true,
3711
+ "dependencies": {
3712
+ "camelcase-css": "^2.0.1"
3713
+ },
3714
+ "engines": {
3715
+ "node": "^12 || ^14 || >= 16"
3716
+ },
3717
+ "funding": {
3718
+ "type": "opencollective",
3719
+ "url": "https://opencollective.com/postcss/"
3720
+ },
3721
+ "peerDependencies": {
3722
+ "postcss": "^8.4.21"
3723
+ }
3724
+ },
3725
+ "node_modules/postcss-load-config": {
3726
+ "version": "4.0.2",
3727
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
3728
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
3729
+ "dev": true,
3730
+ "funding": [
3731
+ {
3732
+ "type": "opencollective",
3733
+ "url": "https://opencollective.com/postcss/"
3734
+ },
3735
+ {
3736
+ "type": "github",
3737
+ "url": "https://github.com/sponsors/ai"
3738
+ }
3739
+ ],
3740
+ "dependencies": {
3741
+ "lilconfig": "^3.0.0",
3742
+ "yaml": "^2.3.4"
3743
+ },
3744
+ "engines": {
3745
+ "node": ">= 14"
3746
+ },
3747
+ "peerDependencies": {
3748
+ "postcss": ">=8.0.9",
3749
+ "ts-node": ">=9.0.0"
3750
+ },
3751
+ "peerDependenciesMeta": {
3752
+ "postcss": {
3753
+ "optional": true
3754
+ },
3755
+ "ts-node": {
3756
+ "optional": true
3757
+ }
3758
+ }
3759
+ },
3760
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
3761
+ "version": "3.1.3",
3762
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
3763
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
3764
+ "dev": true,
3765
+ "engines": {
3766
+ "node": ">=14"
3767
+ },
3768
+ "funding": {
3769
+ "url": "https://github.com/sponsors/antonk52"
3770
+ }
3771
+ },
3772
+ "node_modules/postcss-nested": {
3773
+ "version": "6.2.0",
3774
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
3775
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
3776
+ "dev": true,
3777
+ "funding": [
3778
+ {
3779
+ "type": "opencollective",
3780
+ "url": "https://opencollective.com/postcss/"
3781
+ },
3782
+ {
3783
+ "type": "github",
3784
+ "url": "https://github.com/sponsors/ai"
3785
+ }
3786
+ ],
3787
+ "dependencies": {
3788
+ "postcss-selector-parser": "^6.1.1"
3789
+ },
3790
+ "engines": {
3791
+ "node": ">=12.0"
3792
+ },
3793
+ "peerDependencies": {
3794
+ "postcss": "^8.2.14"
3795
+ }
3796
+ },
3797
+ "node_modules/postcss-selector-parser": {
3798
+ "version": "6.1.2",
3799
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
3800
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
3801
+ "dev": true,
3802
+ "dependencies": {
3803
+ "cssesc": "^3.0.0",
3804
+ "util-deprecate": "^1.0.2"
3805
+ },
3806
+ "engines": {
3807
+ "node": ">=4"
3808
+ }
3809
+ },
3810
+ "node_modules/postcss-value-parser": {
3811
+ "version": "4.2.0",
3812
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
3813
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3814
+ "dev": true
3815
+ },
3816
  "node_modules/property-information": {
3817
  "version": "7.0.0",
3818
  "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
 
3848
  "url": "https://github.com/sponsors/ljharb"
3849
  }
3850
  },
3851
+ "node_modules/queue-microtask": {
3852
+ "version": "1.2.3",
3853
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
3854
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
3855
+ "dev": true,
3856
+ "funding": [
3857
+ {
3858
+ "type": "github",
3859
+ "url": "https://github.com/sponsors/feross"
3860
+ },
3861
+ {
3862
+ "type": "patreon",
3863
+ "url": "https://www.patreon.com/feross"
3864
+ },
3865
+ {
3866
+ "type": "consulting",
3867
+ "url": "https://feross.org/support"
3868
+ }
3869
+ ]
3870
+ },
3871
  "node_modules/range-parser": {
3872
  "version": "1.2.1",
3873
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
 
3948
  "node": ">=0.10.0"
3949
  }
3950
  },
3951
+ "node_modules/read-cache": {
3952
+ "version": "1.0.0",
3953
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
3954
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
3955
+ "dev": true,
3956
+ "dependencies": {
3957
+ "pify": "^2.3.0"
3958
+ }
3959
+ },
3960
+ "node_modules/readdirp": {
3961
+ "version": "3.6.0",
3962
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3963
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3964
+ "dev": true,
3965
+ "dependencies": {
3966
+ "picomatch": "^2.2.1"
3967
+ },
3968
+ "engines": {
3969
+ "node": ">=8.10.0"
3970
+ }
3971
+ },
3972
  "node_modules/regenerator-runtime": {
3973
  "version": "0.14.1",
3974
  "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
 
4015
  "node": ">=0.10.0"
4016
  }
4017
  },
4018
+ "node_modules/resolve": {
4019
+ "version": "1.22.10",
4020
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
4021
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
4022
+ "dev": true,
4023
+ "dependencies": {
4024
+ "is-core-module": "^2.16.0",
4025
+ "path-parse": "^1.0.7",
4026
+ "supports-preserve-symlinks-flag": "^1.0.0"
4027
+ },
4028
+ "bin": {
4029
+ "resolve": "bin/resolve"
4030
+ },
4031
+ "engines": {
4032
+ "node": ">= 0.4"
4033
+ },
4034
+ "funding": {
4035
+ "url": "https://github.com/sponsors/ljharb"
4036
+ }
4037
+ },
4038
+ "node_modules/reusify": {
4039
+ "version": "1.1.0",
4040
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
4041
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
4042
+ "dev": true,
4043
+ "engines": {
4044
+ "iojs": ">=1.0.0",
4045
+ "node": ">=0.10.0"
4046
+ }
4047
+ },
4048
  "node_modules/rollup": {
4049
  "version": "3.29.5",
4050
  "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz",
 
4061
  "fsevents": "~2.3.2"
4062
  }
4063
  },
4064
+ "node_modules/run-parallel": {
4065
+ "version": "1.2.0",
4066
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
4067
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
4068
+ "dev": true,
4069
+ "funding": [
4070
+ {
4071
+ "type": "github",
4072
+ "url": "https://github.com/sponsors/feross"
4073
+ },
4074
+ {
4075
+ "type": "patreon",
4076
+ "url": "https://www.patreon.com/feross"
4077
+ },
4078
+ {
4079
+ "type": "consulting",
4080
+ "url": "https://feross.org/support"
4081
+ }
4082
+ ],
4083
+ "dependencies": {
4084
+ "queue-microtask": "^1.2.2"
4085
+ }
4086
+ },
4087
  "node_modules/rxjs": {
4088
  "version": "7.8.1",
4089
  "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
 
4197
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
4198
  "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
4199
  },
4200
+ "node_modules/shebang-command": {
4201
+ "version": "2.0.0",
4202
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
4203
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
4204
+ "dev": true,
4205
+ "dependencies": {
4206
+ "shebang-regex": "^3.0.0"
4207
+ },
4208
+ "engines": {
4209
+ "node": ">=8"
4210
+ }
4211
+ },
4212
+ "node_modules/shebang-regex": {
4213
+ "version": "3.0.0",
4214
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
4215
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
4216
+ "dev": true,
4217
+ "engines": {
4218
+ "node": ">=8"
4219
+ }
4220
+ },
4221
  "node_modules/shell-quote": {
4222
  "version": "1.8.2",
4223
  "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
 
4298
  "url": "https://github.com/sponsors/ljharb"
4299
  }
4300
  },
4301
+ "node_modules/signal-exit": {
4302
+ "version": "4.1.0",
4303
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
4304
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
4305
+ "dev": true,
4306
+ "engines": {
4307
+ "node": ">=14"
4308
+ },
4309
+ "funding": {
4310
+ "url": "https://github.com/sponsors/isaacs"
4311
+ }
4312
+ },
4313
  "node_modules/source-map-js": {
4314
  "version": "1.2.1",
4315
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
 
4356
  "node": ">=8"
4357
  }
4358
  },
4359
+ "node_modules/string-width-cjs": {
4360
+ "name": "string-width",
4361
+ "version": "4.2.3",
4362
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
4363
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
4364
+ "dev": true,
4365
+ "dependencies": {
4366
+ "emoji-regex": "^8.0.0",
4367
+ "is-fullwidth-code-point": "^3.0.0",
4368
+ "strip-ansi": "^6.0.1"
4369
+ },
4370
+ "engines": {
4371
+ "node": ">=8"
4372
+ }
4373
+ },
4374
  "node_modules/stringify-entities": {
4375
  "version": "4.0.4",
4376
  "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
 
4396
  "node": ">=8"
4397
  }
4398
  },
4399
+ "node_modules/strip-ansi-cjs": {
4400
+ "name": "strip-ansi",
4401
+ "version": "6.0.1",
4402
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
4403
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
4404
+ "dev": true,
4405
+ "dependencies": {
4406
+ "ansi-regex": "^5.0.1"
4407
+ },
4408
+ "engines": {
4409
+ "node": ">=8"
4410
+ }
4411
+ },
4412
  "node_modules/style-to-object": {
4413
  "version": "1.0.8",
4414
  "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
 
4417
  "inline-style-parser": "0.2.4"
4418
  }
4419
  },
4420
+ "node_modules/sucrase": {
4421
+ "version": "3.35.0",
4422
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
4423
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
4424
+ "dev": true,
4425
+ "dependencies": {
4426
+ "@jridgewell/gen-mapping": "^0.3.2",
4427
+ "commander": "^4.0.0",
4428
+ "glob": "^10.3.10",
4429
+ "lines-and-columns": "^1.1.6",
4430
+ "mz": "^2.7.0",
4431
+ "pirates": "^4.0.1",
4432
+ "ts-interface-checker": "^0.1.9"
4433
+ },
4434
+ "bin": {
4435
+ "sucrase": "bin/sucrase",
4436
+ "sucrase-node": "bin/sucrase-node"
4437
+ },
4438
+ "engines": {
4439
+ "node": ">=16 || 14 >=14.17"
4440
+ }
4441
+ },
4442
  "node_modules/supports-color": {
4443
  "version": "8.1.1",
4444
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
 
4454
  "url": "https://github.com/chalk/supports-color?sponsor=1"
4455
  }
4456
  },
4457
+ "node_modules/supports-preserve-symlinks-flag": {
4458
+ "version": "1.0.0",
4459
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
4460
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
4461
+ "dev": true,
4462
+ "engines": {
4463
+ "node": ">= 0.4"
4464
+ },
4465
+ "funding": {
4466
+ "url": "https://github.com/sponsors/ljharb"
4467
+ }
4468
+ },
4469
+ "node_modules/tailwindcss": {
4470
+ "version": "3.3.5",
4471
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
4472
+ "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
4473
+ "dev": true,
4474
+ "dependencies": {
4475
+ "@alloc/quick-lru": "^5.2.0",
4476
+ "arg": "^5.0.2",
4477
+ "chokidar": "^3.5.3",
4478
+ "didyoumean": "^1.2.2",
4479
+ "dlv": "^1.1.3",
4480
+ "fast-glob": "^3.3.0",
4481
+ "glob-parent": "^6.0.2",
4482
+ "is-glob": "^4.0.3",
4483
+ "jiti": "^1.19.1",
4484
+ "lilconfig": "^2.1.0",
4485
+ "micromatch": "^4.0.5",
4486
+ "normalize-path": "^3.0.0",
4487
+ "object-hash": "^3.0.0",
4488
+ "picocolors": "^1.0.0",
4489
+ "postcss": "^8.4.23",
4490
+ "postcss-import": "^15.1.0",
4491
+ "postcss-js": "^4.0.1",
4492
+ "postcss-load-config": "^4.0.1",
4493
+ "postcss-nested": "^6.0.1",
4494
+ "postcss-selector-parser": "^6.0.11",
4495
+ "resolve": "^1.22.2",
4496
+ "sucrase": "^3.32.0"
4497
+ },
4498
+ "bin": {
4499
+ "tailwind": "lib/cli.js",
4500
+ "tailwindcss": "lib/cli.js"
4501
+ },
4502
+ "engines": {
4503
+ "node": ">=14.0.0"
4504
+ }
4505
+ },
4506
+ "node_modules/thenify": {
4507
+ "version": "3.3.1",
4508
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
4509
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
4510
+ "dev": true,
4511
+ "dependencies": {
4512
+ "any-promise": "^1.0.0"
4513
+ }
4514
+ },
4515
+ "node_modules/thenify-all": {
4516
+ "version": "1.6.0",
4517
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
4518
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
4519
+ "dev": true,
4520
+ "dependencies": {
4521
+ "thenify": ">= 3.1.0 < 4"
4522
+ },
4523
+ "engines": {
4524
+ "node": ">=0.8"
4525
+ }
4526
+ },
4527
+ "node_modules/to-regex-range": {
4528
+ "version": "5.0.1",
4529
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
4530
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
4531
+ "dev": true,
4532
+ "dependencies": {
4533
+ "is-number": "^7.0.0"
4534
+ },
4535
+ "engines": {
4536
+ "node": ">=8.0"
4537
+ }
4538
+ },
4539
  "node_modules/toidentifier": {
4540
  "version": "1.0.1",
4541
  "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
 
4571
  "url": "https://github.com/sponsors/wooorm"
4572
  }
4573
  },
4574
+ "node_modules/ts-interface-checker": {
4575
+ "version": "0.1.13",
4576
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
4577
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
4578
+ "dev": true
4579
+ },
4580
  "node_modules/tslib": {
4581
  "version": "2.8.1",
4582
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
 
4714
  "browserslist": ">= 4.21.0"
4715
  }
4716
  },
4717
+ "node_modules/util-deprecate": {
4718
+ "version": "1.0.2",
4719
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
4720
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
4721
+ "dev": true
4722
+ },
4723
  "node_modules/utils-merge": {
4724
  "version": "1.0.1",
4725
  "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
 
4825
  "node": ">= 8"
4826
  }
4827
  },
4828
+ "node_modules/which": {
4829
+ "version": "2.0.2",
4830
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
4831
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
4832
+ "dev": true,
4833
+ "dependencies": {
4834
+ "isexe": "^2.0.0"
4835
+ },
4836
+ "bin": {
4837
+ "node-which": "bin/node-which"
4838
+ },
4839
+ "engines": {
4840
+ "node": ">= 8"
4841
+ }
4842
+ },
4843
  "node_modules/wrap-ansi": {
4844
  "version": "7.0.0",
4845
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
 
4857
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
4858
  }
4859
  },
4860
+ "node_modules/wrap-ansi-cjs": {
4861
+ "name": "wrap-ansi",
4862
+ "version": "7.0.0",
4863
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
4864
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
4865
+ "dev": true,
4866
+ "dependencies": {
4867
+ "ansi-styles": "^4.0.0",
4868
+ "string-width": "^4.1.0",
4869
+ "strip-ansi": "^6.0.0"
4870
+ },
4871
+ "engines": {
4872
+ "node": ">=10"
4873
+ },
4874
+ "funding": {
4875
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
4876
+ }
4877
+ },
4878
  "node_modules/y18n": {
4879
  "version": "5.0.8",
4880
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
 
4890
  "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
4891
  "dev": true
4892
  },
4893
+ "node_modules/yaml": {
4894
+ "version": "2.7.1",
4895
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
4896
+ "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
4897
+ "dev": true,
4898
+ "bin": {
4899
+ "yaml": "bin.mjs"
4900
+ },
4901
+ "engines": {
4902
+ "node": ">= 14"
4903
+ }
4904
+ },
4905
  "node_modules/yargs": {
4906
  "version": "17.7.2",
4907
  "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
package.json CHANGED
@@ -23,7 +23,10 @@
23
  "@types/react": "^18.2.15",
24
  "@types/react-dom": "^18.2.7",
25
  "@vitejs/plugin-react": "^4.0.3",
 
26
  "concurrently": "^8.2.0",
 
 
27
  "vite": "^4.4.5"
28
  }
29
  }
 
23
  "@types/react": "^18.2.15",
24
  "@types/react-dom": "^18.2.7",
25
  "@vitejs/plugin-react": "^4.0.3",
26
+ "autoprefixer": "^10.4.21",
27
  "concurrently": "^8.2.0",
28
+ "postcss": "^8.5.3",
29
+ "tailwindcss": "^3.3.5",
30
  "vite": "^4.4.5"
31
  }
32
  }
postcss.config.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
src/App.jsx CHANGED
@@ -14,7 +14,7 @@ function App() {
14
  model: 'DeepSeek-R1'
15
  }
16
  ]);
17
-
18
  const [summarizationProfile, setSummarizationProfile] = useLocalStorage('summarizationProfile', {
19
  id: 'default-summarization-profile',
20
  name: 'Summarization Profile',
@@ -22,9 +22,9 @@ function App() {
22
  apiKey: '',
23
  model: 'DeepSeek-R1'
24
  });
25
-
26
  const [activeProfileId, setActiveProfileId] = useLocalStorage('activeProfileId', 'default');
27
-
28
  const [chats, setChats] = useLocalStorage('chats', []);
29
  const [currentChatId, setCurrentChatId] = useState(null);
30
  const [error, setError] = useState(null);
@@ -70,25 +70,25 @@ function App() {
70
  };
71
 
72
  return (
73
- <div className="app-container">
74
- <div className="app-header">
75
- <div className="left-section">
76
- <h1 className="app-title">Thinking Model Client</h1>
77
  </div>
78
- <div className="right-section">
79
- <div className="profile-dropdown-container">
80
- <button
81
- className="profile-dropdown-button"
82
  onClick={toggleProfileDropdown}
83
  >
84
  {activeProfile.name} ▼
85
  </button>
86
  {showProfileDropdown && (
87
- <div className="profile-dropdown-menu">
88
  {profiles.map(profile => (
89
- <div
90
- key={profile.id}
91
- className={`profile-option ${profile.id === activeProfileId ? 'active' : ''}`}
92
  onClick={() => handleProfileSelect(profile.id)}
93
  >
94
  {profile.name}
@@ -97,8 +97,8 @@ function App() {
97
  </div>
98
  )}
99
  </div>
100
- <button
101
- className="settings-button"
102
  onClick={toggleSettings}
103
  >
104
  Settings
@@ -106,12 +106,12 @@ function App() {
106
  </div>
107
  </div>
108
 
109
- <div className="app-content">
110
- <div className={`sidebar ${sidebarCollapsed ? 'collapsed' : ''}`}>
111
- <div className="sidebar-header">
112
- <h2>Conversations</h2>
113
- <button
114
- className="toggle-sidebar-button"
115
  onClick={toggleSidebar}
116
  >
117
  {sidebarCollapsed ? '→' : '←'}
@@ -127,23 +127,23 @@ function App() {
127
  />
128
  </div>
129
 
130
- <div className="main-content">
131
  {currentChatId ? (
132
- <ChatWindow
133
  chat={chats.find(c => c.id === currentChatId)}
134
  profile={activeProfile}
135
  summarizationProfile={summarizationProfile}
136
  onUpdateChat={(updatedChat) => {
137
- setChats(chats.map(c =>
138
  c.id === updatedChat.id ? updatedChat : c
139
  ));
140
  }}
141
  />
142
  ) : (
143
- <div className="welcome-screen">
144
- <h2>Welcome to Thinking Model Client</h2>
145
- <p>Start a new conversation or select an existing one.</p>
146
- <button className="new-chat-button" onClick={createNewChat}>
147
  Start New Conversation
148
  </button>
149
  </div>
@@ -152,16 +152,16 @@ function App() {
152
  </div>
153
 
154
  {showSettings && (
155
- <div className="settings-overlay">
156
- <div className="settings-modal">
157
- <button
158
- className="close-settings-button"
159
  onClick={toggleSettings}
160
  >
161
  ×
162
  </button>
163
- <Settings
164
- profiles={profiles}
165
  activeProfileId={activeProfileId}
166
  onSaveProfiles={(newProfiles) => {
167
  setProfiles(newProfiles);
@@ -180,12 +180,12 @@ function App() {
180
  )}
181
 
182
  {error && (
183
- <div className="error-message">
184
  Error: {error}
185
  </div>
186
  )}
187
  {loading && (
188
- <div className="loading">
189
  Loading...
190
  </div>
191
  )}
 
14
  model: 'DeepSeek-R1'
15
  }
16
  ]);
17
+
18
  const [summarizationProfile, setSummarizationProfile] = useLocalStorage('summarizationProfile', {
19
  id: 'default-summarization-profile',
20
  name: 'Summarization Profile',
 
22
  apiKey: '',
23
  model: 'DeepSeek-R1'
24
  });
25
+
26
  const [activeProfileId, setActiveProfileId] = useLocalStorage('activeProfileId', 'default');
27
+
28
  const [chats, setChats] = useLocalStorage('chats', []);
29
  const [currentChatId, setCurrentChatId] = useState(null);
30
  const [error, setError] = useState(null);
 
70
  };
71
 
72
  return (
73
+ <div className="flex flex-col h-screen w-full overflow-hidden">
74
+ <div className="flex justify-between items-center px-5 h-header border-b border-border bg-background">
75
+ <div className="flex items-center">
76
+ <h1 className="text-xl font-semibold text-text">Thinking Model Client</h1>
77
  </div>
78
+ <div className="flex items-center gap-2.5">
79
+ <div className="relative">
80
+ <button
81
+ className="py-1.5 px-3 bg-background border border-border rounded text-sm text-text cursor-pointer flex items-center gap-1.5"
82
  onClick={toggleProfileDropdown}
83
  >
84
  {activeProfile.name} ▼
85
  </button>
86
  {showProfileDropdown && (
87
+ <div className="absolute top-full right-0 w-[200px] bg-background border border-border rounded shadow-md z-10 mt-1.5">
88
  {profiles.map(profile => (
89
+ <div
90
+ key={profile.id}
91
+ className={`p-3 cursor-pointer transition-colors duration-200 text-sm ${profile.id === activeProfileId ? 'bg-active font-medium' : 'hover:bg-hover'}`}
92
  onClick={() => handleProfileSelect(profile.id)}
93
  >
94
  {profile.name}
 
97
  </div>
98
  )}
99
  </div>
100
+ <button
101
+ className="py-1.5 px-3 bg-background border border-border rounded text-sm text-text cursor-pointer hover:bg-hover"
102
  onClick={toggleSettings}
103
  >
104
  Settings
 
106
  </div>
107
  </div>
108
 
109
+ <div className="flex flex-1 overflow-hidden">
110
+ <div className={`w-sidebar border-r border-border flex flex-col transition-[width] duration-300 ease-in-out bg-background ${sidebarCollapsed ? 'w-[50px] overflow-hidden' : ''}`}>
111
+ <div className="flex justify-between items-center py-3 px-4 border-b border-border">
112
+ <h2 className="text-sm font-semibold text-light-text m-0">Conversations</h2>
113
+ <button
114
+ className="bg-transparent border-0 text-base text-lightest-text cursor-pointer flex items-center justify-center z-10 w-6 h-6 hover:text-text"
115
  onClick={toggleSidebar}
116
  >
117
  {sidebarCollapsed ? '→' : '←'}
 
127
  />
128
  </div>
129
 
130
+ <div className="flex-1 flex flex-col overflow-hidden bg-background">
131
  {currentChatId ? (
132
+ <ChatWindow
133
  chat={chats.find(c => c.id === currentChatId)}
134
  profile={activeProfile}
135
  summarizationProfile={summarizationProfile}
136
  onUpdateChat={(updatedChat) => {
137
+ setChats(chats.map(c =>
138
  c.id === updatedChat.id ? updatedChat : c
139
  ));
140
  }}
141
  />
142
  ) : (
143
+ <div className="flex flex-col items-center justify-center h-full p-5 text-center">
144
+ <h2 className="text-2xl font-semibold mb-2.5 text-text">Welcome to Thinking Model Client</h2>
145
+ <p className="text-light-text mb-5 text-sm">Start a new conversation or select an existing one.</p>
146
+ <button className="py-2.5 px-5 bg-primary text-white border-none rounded cursor-pointer text-sm transition-colors duration-200 hover:bg-primary-hover" onClick={createNewChat}>
147
  Start New Conversation
148
  </button>
149
  </div>
 
152
  </div>
153
 
154
  {showSettings && (
155
+ <div className="fixed inset-0 bg-black/50 flex items-center justify-center z-[1000]">
156
+ <div className="bg-background rounded-lg w-[600px] max-w-[90%] max-h-[90vh] overflow-y-auto relative p-6 shadow-md">
157
+ <button
158
+ className="absolute top-4 right-4 bg-transparent border-none text-xl cursor-pointer text-lightest-text w-6 h-6 flex items-center justify-center rounded hover:bg-hover hover:text-text"
159
  onClick={toggleSettings}
160
  >
161
  ×
162
  </button>
163
+ <Settings
164
+ profiles={profiles}
165
  activeProfileId={activeProfileId}
166
  onSaveProfiles={(newProfiles) => {
167
  setProfiles(newProfiles);
 
180
  )}
181
 
182
  {error && (
183
+ <div className="fixed bottom-5 left-1/2 -translate-x-1/2 bg-red-100 text-red-600 py-2.5 px-5 rounded text-sm shadow-md z-[1000]">
184
  Error: {error}
185
  </div>
186
  )}
187
  {loading && (
188
+ <div className="fixed bottom-5 left-1/2 -translate-x-1/2 bg-blue-50 text-blue-700 py-2.5 px-5 rounded text-sm shadow-md z-[1000]">
189
  Loading...
190
  </div>
191
  )}
src/index.css CHANGED
@@ -1,3 +1,7 @@
 
 
 
 
1
  /* Base styles */
2
  :root {
3
  --primary-color: #3e6ae1;
@@ -31,858 +35,517 @@ body {
31
  background-color: var(--background-color);
32
  }
33
 
34
- /* App container */
35
- .app-container {
36
- display: flex;
37
- flex-direction: column;
38
- height: 100vh;
39
- width: 100%;
40
- overflow: hidden;
41
- }
42
 
43
- /* Header styles */
44
- .app-header {
45
- display: flex;
46
- justify-content: space-between;
47
- align-items: center;
48
- padding: 0 20px;
49
- height: var(--header-height);
50
- border-bottom: 1px solid var(--border-color);
51
- background-color: var(--background-color);
52
- }
53
 
54
- .left-section {
55
- display: flex;
56
- align-items: center;
57
- }
58
 
59
- .right-section {
60
- display: flex;
61
- align-items: center;
62
- gap: 10px;
63
- }
64
 
65
- .app-title {
66
- font-size: 1.25rem;
67
- font-weight: 600;
68
- color: var(--text-color);
69
  }
70
 
71
- /* Profile dropdown */
72
- .profile-dropdown-container {
73
- position: relative;
74
- }
 
75
 
76
- .profile-dropdown-button {
77
- padding: 6px 12px;
78
- background-color: var(--background-color);
79
- border: 1px solid var(--border-color);
80
- border-radius: 4px;
81
- font-size: 0.875rem;
82
- color: var(--text-color);
83
- cursor: pointer;
84
- display: flex;
85
- align-items: center;
86
- gap: 5px;
87
- }
88
 
89
- .profile-dropdown-menu {
90
- position: absolute;
91
- top: 100%;
92
- right: 0;
93
- width: 200px;
94
- background-color: var(--background-color);
95
- border: 1px solid var(--border-color);
96
- border-radius: 4px;
97
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
98
- z-index: 100;
99
- margin-top: 5px;
100
- }
101
 
102
- .profile-option {
103
- padding: 8px 12px;
104
- cursor: pointer;
105
- transition: background-color 0.2s;
106
- font-size: 0.875rem;
107
- }
108
 
109
- .profile-option:hover {
110
- background-color: var(--hover-color);
111
- }
112
 
113
- .profile-option.active {
114
- background-color: var(--active-color);
115
- font-weight: 500;
116
  }
117
 
118
- .settings-button {
119
- padding: 6px 12px;
120
- background-color: var(--background-color);
121
- border: 1px solid var(--border-color);
122
- border-radius: 4px;
123
- font-size: 0.875rem;
124
- color: var(--text-color);
125
- cursor: pointer;
126
- }
127
 
128
- .settings-button:hover {
129
- background-color: var(--hover-color);
130
- }
131
 
132
- /* Main content area */
133
- .app-content {
134
- display: flex;
135
- flex: 1;
136
- overflow: hidden;
137
  }
138
 
139
- /* Sidebar */
140
- .sidebar {
141
- width: var(--sidebar-width);
142
- border-right: 1px solid var(--border-color);
143
- display: flex;
144
- flex-direction: column;
145
- transition: width 0.3s ease;
146
- background-color: var(--background-color);
147
- }
148
 
149
- .sidebar.collapsed {
150
- width: 50px;
151
- overflow: hidden;
152
- }
153
 
154
- .sidebar.collapsed .chat-list,
155
- .sidebar.collapsed .sidebar-header h2 {
156
- display: none;
157
- }
158
 
159
- .sidebar-header {
160
- display: flex;
161
- justify-content: space-between;
162
- align-items: center;
163
- padding: 12px 15px;
164
- border-bottom: 1px solid var(--border-color);
165
- }
166
 
167
- .sidebar.collapsed .sidebar-header {
168
- padding: 12px 5px;
169
- justify-content: center;
170
- }
171
 
172
- .sidebar-header h2 {
173
- font-size: 0.875rem;
174
- font-weight: 600;
175
- color: var(--light-text);
176
- margin: 0;
177
- }
178
 
179
- .toggle-sidebar-button {
180
- background: none;
181
- border: none;
182
- font-size: 1rem;
183
- color: var(--lightest-text);
184
- cursor: pointer;
185
- display: flex;
186
- align-items: center;
187
- justify-content: center;
188
- z-index: 10;
189
- width: 24px;
190
- height: 24px;
191
- }
192
 
193
- .toggle-sidebar-button:hover {
194
- color: var(--text-color);
 
195
  }
196
 
197
- /* Chat list */
198
- .chat-list {
199
- flex: 1;
200
- overflow-y: auto;
201
- padding: 10px;
202
- }
203
 
204
- .new-chat {
205
- width: 100%;
206
- padding: 8px 12px;
207
- background-color: var(--primary-color);
208
- color: white;
209
- border: none;
210
- border-radius: 4px;
211
- cursor: pointer;
212
- font-size: 0.875rem;
213
- margin-bottom: 15px;
214
- transition: background-color 0.2s;
215
- display: flex;
216
- align-items: center;
217
- justify-content: center;
218
- }
219
 
220
- .new-chat:hover {
221
- background-color: var(--primary-hover);
222
- }
223
 
224
- .chat-item {
225
- display: flex;
226
- justify-content: space-between;
227
- align-items: center;
228
- padding: 8px 10px;
229
- border-radius: 4px;
230
- cursor: pointer;
231
- margin-bottom: 2px;
232
- transition: background-color 0.2s;
233
- font-size: 0.875rem;
234
- color: var(--light-text);
235
- }
236
 
237
- .chat-item:hover {
238
- background-color: var(--hover-color);
239
- }
240
 
241
- .chat-item.active {
242
- background-color: var(--active-color);
243
- color: var(--primary-color);
244
- }
245
 
246
- .delete-btn {
247
- opacity: 0;
248
- background: none;
249
- border: none;
250
- color: var(--lightest-text);
251
- cursor: pointer;
252
- font-size: 0.75rem;
253
- transition: color 0.2s, opacity 0.2s;
254
- padding: 2px 5px;
255
- }
256
 
257
- .chat-item:hover .delete-btn {
258
- opacity: 1;
259
- }
260
 
261
- .delete-btn:hover {
262
- color: #e53e3e;
263
- }
264
-
265
- .empty-state {
266
- color: var(--lightest-text);
267
- text-align: center;
268
- padding: 20px;
269
- font-size: 0.875rem;
270
- }
271
-
272
- /* Main chat area */
273
- .main-content {
274
- flex: 1;
275
- display: flex;
276
- flex-direction: column;
277
- overflow: hidden;
278
- background-color: var(--background-color);
279
- }
280
-
281
- /* Welcome screen */
282
- .welcome-screen {
283
- display: flex;
284
- flex-direction: column;
285
- align-items: center;
286
- justify-content: center;
287
- height: 100%;
288
- padding: 20px;
289
- text-align: center;
290
- }
291
-
292
- .welcome-screen h2 {
293
- font-size: 1.5rem;
294
- font-weight: 600;
295
- margin-bottom: 10px;
296
- color: var(--text-color);
297
- }
298
-
299
- .welcome-screen p {
300
- color: var(--light-text);
301
- margin-bottom: 20px;
302
- font-size: 0.875rem;
303
- }
304
-
305
- .new-chat-button {
306
- padding: 10px 20px;
307
- background-color: var(--primary-color);
308
- color: white;
309
- border: none;
310
- border-radius: 4px;
311
- cursor: pointer;
312
- font-size: 0.875rem;
313
- transition: background-color 0.2s;
314
- }
315
-
316
- .new-chat-button:hover {
317
- background-color: var(--primary-hover);
318
- }
319
-
320
- /* Chat window */
321
- .chat-window {
322
- display: flex;
323
- flex-direction: column;
324
- height: 100%;
325
- overflow: hidden;
326
- }
327
-
328
- .chat-messages {
329
- flex: 1;
330
- overflow-y: auto;
331
- padding: 20px;
332
- display: flex;
333
- flex-direction: column;
334
- gap: 24px;
335
- }
336
-
337
- /* Message styles */
338
- .message {
339
- display: flex;
340
- flex-direction: column;
341
- max-width: 800px;
342
- margin: 0 auto;
343
- width: 100%;
344
- }
345
-
346
- .message.user {
347
- align-items: flex-end;
348
- }
349
-
350
- .message.assistant {
351
- align-items: flex-start;
352
- }
353
 
354
- .reasoning-container {
355
- width: 100%;
356
- border: 1px solid var(--border-color);
357
- border-radius: 8px;
358
- overflow: hidden;
359
- margin-bottom: 10px;
360
- background-color: var(--reasoning-background);
361
  }
362
 
363
- .reasoning-header {
364
- display: flex;
365
- justify-content: space-between;
366
- align-items: center;
367
- padding: 8px 12px;
368
- cursor: pointer;
369
- font-size: 0.8125rem;
370
- color: var(--light-text);
371
- background-color: #f5f5f5;
372
- border-bottom: 1px solid var(--border-color);
373
- }
374
 
375
- .toggle-icon {
376
- font-size: 0.625rem;
377
- }
 
378
 
379
- .reasoning-content {
380
- padding: 12px;
381
- font-size: 0.8125rem;
382
- white-space: pre-wrap;
383
- overflow-x: auto;
384
- color: var(--light-text);
385
- max-height: 300px;
386
- overflow-y: auto;
387
- }
388
 
389
- .message-content {
390
- padding: 12px 16px;
391
- border-radius: 6px;
392
- font-size: 0.9375rem;
393
- line-height: 1.5;
394
- word-wrap: break-word;
395
- max-width: 90%;
396
- position: relative;
397
- }
398
 
399
- .message.user .message-content {
400
- background-color: var(--user-message-bg);
401
- color: var(--user-message-color);
402
- border-radius: 6px 6px 0 6px;
403
- }
404
-
405
- .message.assistant .message-content {
406
- background-color: var(--assistant-message-bg);
407
- color: var(--assistant-message-color);
408
- border-radius: 6px 6px 6px 0;
409
- }
410
 
411
- .copy-button {
412
- position: absolute;
413
- right: 8px;
414
- bottom: 8px;
415
- background-color: rgba(255, 255, 255, 0.8);
416
- border: 1px solid var(--border-color);
417
- border-radius: 4px;
418
- padding: 4px 8px;
419
- font-size: 0.75rem;
420
- cursor: pointer;
421
- opacity: 0;
422
- transition: opacity 0.2s ease;
423
  }
424
 
425
- .message-content:hover .copy-button {
426
- opacity: 1;
427
- }
 
 
428
 
429
- .copy-button.copied {
430
- background-color: #10B981;
431
- color: white;
432
- border-color: #059669;
433
  }
434
 
435
- .message.user .copy-button {
436
- background-color: rgba(255, 255, 255, 0.9);
437
- color: var(--light-text);
438
- }
 
439
 
440
- .message.user .copy-button:hover {
441
- background-color: white;
442
- color: var(--text-color);
443
- }
444
 
445
- .message.assistant .copy-button {
446
- background-color: rgba(249, 249, 249, 0.9);
447
- color: var(--text-color);
448
- }
449
 
450
- .message.assistant .copy-button:hover {
451
- background-color: var(--background-color);
452
- }
453
 
454
- /* Add styles for markdown content */
455
- .message-content p {
456
- margin-bottom: 1em;
457
- }
458
 
459
- .message-content p:last-child {
460
- margin-bottom: 0;
461
- }
462
 
463
- .message-content pre {
464
- background-color: rgba(0, 0, 0, 0.05);
465
- padding: 12px;
466
- border-radius: 4px;
467
- overflow-x: auto;
468
- margin: 1em 0;
469
- }
470
 
471
- .message-content code {
472
- background-color: rgba(0, 0, 0, 0.05);
473
- padding: 2px 4px;
474
- border-radius: 3px;
475
- font-family: monospace;
476
- }
477
 
478
- .message-content pre code {
479
- background-color: transparent;
480
- padding: 0;
481
- }
482
 
483
- .message-content ul,
484
- .message-content ol {
485
- margin: 1em 0;
486
- padding-left: 2em;
487
  }
488
 
489
- .message-content li {
490
- margin: 0.5em 0;
491
- }
 
492
 
493
- .message-content blockquote {
494
- border-left: 4px solid var(--border-color);
495
- margin: 1em 0;
496
- padding-left: 1em;
497
- color: var(--light-text);
498
- }
499
 
500
- .message-content img {
501
- max-width: 100%;
502
- height: auto;
503
- margin: 1em 0;
504
- border-radius: 4px;
505
- }
506
 
507
- .message-content table {
508
- border-collapse: collapse;
509
- width: 100%;
510
- margin: 1em 0;
511
- }
512
 
513
- .message-content th,
514
- .message-content td {
515
- border: 1px solid var(--border-color);
516
- padding: 8px;
517
- text-align: left;
518
- }
519
 
520
- .message-content th {
521
- background-color: var(--hover-color);
522
- }
523
 
524
- .message-time {
525
- font-size: 0.75rem;
526
- color: var(--lightest-text);
527
- margin-top: 4px;
528
- }
529
 
530
- /* Input area */
531
- .chat-input {
532
- display: flex;
533
- padding: 16px;
534
- border-top: 1px solid var(--border-color);
535
- gap: 10px;
536
- background-color: var(--background-color);
537
- }
538
 
539
- .message-input {
540
- flex: 1;
541
- padding: 12px 16px;
542
- border: 1px solid var(--border-color);
543
- border-radius: 6px;
544
- font-size: 0.9375rem;
545
- resize: none;
546
- min-height: 24px;
547
- max-height: 200px;
548
- color: var(--text-color);
549
- outline: none;
550
- transition: border-color 0.2s;
551
- }
552
 
553
- .message-input:focus {
554
- border-color: var(--primary-color);
555
- }
556
 
557
- .send-button {
558
- padding: 0 20px;
559
- background-color: var(--primary-color);
560
- color: white;
561
- border: none;
562
- border-radius: 6px;
563
- cursor: pointer;
564
- font-size: 0.9375rem;
565
- transition: background-color 0.2s;
566
- display: flex;
567
- align-items: center;
568
- justify-content: center;
569
- }
570
 
571
- .send-button:hover:not(:disabled) {
572
- background-color: var(--primary-hover);
573
- }
574
 
575
- .send-button:disabled {
576
- background-color: #a0aec0;
577
- cursor: not-allowed;
578
- opacity: 0.7;
579
- }
580
 
581
- /* Loading cursor */
582
- .loading-cursor {
583
- display: inline-block;
584
- width: 2px;
585
- height: 1.2em;
586
- background-color: currentColor;
587
- margin-left: 2px;
588
- animation: blink 1s infinite;
589
- vertical-align: text-bottom;
590
- }
591
 
592
- @keyframes blink {
593
- 0%, 100% { opacity: 1; }
594
- 50% { opacity: 0; }
595
- }
596
 
597
- /* Settings modal */
598
- .settings-overlay {
599
- position: fixed;
600
- top: 0;
601
- left: 0;
602
- right: 0;
603
- bottom: 0;
604
- background-color: rgba(0, 0, 0, 0.5);
605
- display: flex;
606
- align-items: center;
607
- justify-content: center;
608
- z-index: 1000;
609
- }
610
 
611
- .settings-modal {
612
- background-color: var(--background-color);
613
- border-radius: 8px;
614
- width: 600px;
615
- max-width: 90%;
616
- max-height: 90vh;
617
- overflow-y: auto;
618
- position: relative;
619
- padding: 24px;
620
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
621
- }
 
 
622
 
623
- .settings-panel h2 {
624
- font-size: 1.25rem;
625
- font-weight: 600;
626
- margin-bottom: 20px;
627
- color: var(--text-color);
628
- }
629
 
630
- .close-settings-button {
631
- position: absolute;
632
- top: 16px;
633
- right: 16px;
634
- background: none;
635
- border: none;
636
- font-size: 1.25rem;
637
- cursor: pointer;
638
- color: var(--lightest-text);
639
- width: 24px;
640
- height: 24px;
641
- display: flex;
642
- align-items: center;
643
- justify-content: center;
644
- border-radius: 4px;
645
- }
646
 
647
- .close-settings-button:hover {
648
- background-color: var(--hover-color);
649
- color: var(--text-color);
650
- }
651
 
652
- /* Profile management in settings */
653
- .profiles-section {
654
- margin-bottom: 24px;
655
- border-bottom: 1px solid var(--border-color);
656
- padding-bottom: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
  }
658
 
659
- .profiles-header {
660
- display: flex;
661
- justify-content: space-between;
662
- align-items: center;
663
- margin-bottom: 12px;
664
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
 
666
- .profiles-header h3 {
667
- font-size: 1rem;
668
- font-weight: 600;
669
- color: var(--text-color);
670
- }
671
 
672
- .add-profile-button {
673
- padding: 4px 8px;
674
- background-color: transparent;
675
- border: 1px solid var(--border-color);
676
- border-radius: 4px;
677
- font-size: 0.875rem;
678
- color: var(--text-color);
679
- cursor: pointer;
680
- transition: all 0.2s;
681
- }
682
 
683
- .add-profile-button:hover {
684
- background-color: var(--hover-color);
685
- }
686
 
687
- .profiles-list {
688
- display: flex;
689
- flex-wrap: wrap;
690
- gap: 8px;
691
- margin-bottom: 16px;
692
- }
693
 
694
- .profile-item {
695
- padding: 8px 12px;
696
- background-color: var(--background-color);
697
- border: 1px solid var(--border-color);
698
- border-radius: 4px;
699
- font-size: 0.875rem;
700
- cursor: pointer;
701
- transition: all 0.2s;
702
- display: flex;
703
- align-items: center;
704
- gap: 8px;
705
- }
706
 
707
- .profile-item:hover {
708
- background-color: var(--hover-color);
709
- }
710
 
711
- .profile-item.active {
712
- background-color: var(--active-color);
713
- border-color: var(--primary-color);
714
- }
715
 
716
- .delete-profile-button {
717
- background: none;
718
- border: none;
719
- color: var(--lightest-text);
720
- cursor: pointer;
721
- font-size: 1rem;
722
- transition: color 0.2s;
723
- display: flex;
724
- align-items: center;
725
- justify-content: center;
726
- width: 20px;
727
- height: 20px;
728
- }
729
 
730
- .delete-profile-button:hover {
731
- color: #e53e3e;
732
- }
733
 
734
- .current-profile-section h3 {
735
- font-size: 1rem;
736
- font-weight: 600;
737
- color: var(--text-color);
738
- margin-bottom: 16px;
739
- }
740
 
741
- .setting-item {
742
- margin-bottom: 16px;
743
- }
744
 
745
- .setting-item label {
746
- display: block;
747
- margin-bottom: 6px;
748
- font-size: 0.875rem;
749
- color: var(--light-text);
750
- }
751
 
752
- .setting-item input {
753
- width: 100%;
754
- padding: 8px 12px;
755
- border: 1px solid var(--border-color);
756
- border-radius: 4px;
757
- font-size: 0.875rem;
758
- transition: border-color 0.2s;
759
- }
760
 
761
- .setting-item input:focus {
762
- outline: none;
763
- border-color: var(--primary-color);
764
- }
765
 
766
- .setting-hint {
767
- margin-top: 4px;
768
- }
769
 
770
- .hint-toggle {
771
- background: none;
772
- border: none;
773
- color: var(--primary-color);
774
- cursor: pointer;
775
- font-size: 0.75rem;
776
- padding: 0;
777
- text-align: left;
778
- }
779
 
780
- .hint-content {
781
- display: none;
782
- margin-top: 8px;
783
- font-size: 0.75rem;
784
- color: var(--light-text);
785
- background-color: var(--hover-color);
786
- padding: 8px;
787
- border-radius: 4px;
788
- }
789
 
790
- .hint-content.expanded {
791
- display: block;
792
- }
793
 
794
- .hint-content p {
795
- margin-bottom: 6px;
796
- }
797
 
798
- .hint-content ul {
799
- margin-left: 20px;
800
- }
801
 
802
- .hint-content li {
803
- margin-bottom: 4px;
804
- }
805
 
806
- .settings-actions {
807
- display: flex;
808
- justify-content: flex-end;
809
- gap: 10px;
810
- margin-top: 24px;
811
- }
812
 
813
- .save-button {
814
- padding: 8px 16px;
815
- background-color: var(--primary-color);
816
- color: white;
817
- border: none;
818
- border-radius: 4px;
819
- cursor: pointer;
820
- font-size: 0.875rem;
821
- transition: background-color 0.2s;
822
- }
823
 
824
- .save-button:hover {
825
- background-color: var(--primary-hover);
826
- }
827
 
828
- .cancel-button {
829
- padding: 8px 16px;
830
- background-color: transparent;
831
- border: 1px solid var(--border-color);
832
- border-radius: 4px;
833
- cursor: pointer;
834
- font-size: 0.875rem;
835
- transition: all 0.2s;
836
- }
837
 
838
- .cancel-button:hover {
839
- background-color: var(--hover-color);
 
840
  }
841
 
842
- /* Error and notification styles */
843
- .error-message {
844
- position: fixed;
845
- bottom: 20px;
846
- left: 50%;
847
- transform: translateX(-50%);
848
- background-color: #fee2e2;
849
- color: #dc2626;
850
- padding: 10px 20px;
851
- border-radius: 4px;
852
- font-size: 0.875rem;
853
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
854
- z-index: 1000;
855
- }
856
 
857
- .loading {
858
- position: fixed;
859
- bottom: 20px;
860
- left: 50%;
861
- transform: translateX(-50%);
862
- background-color: #e6f2ff;
863
- color: #0369a1;
864
- padding: 10px 20px;
865
- border-radius: 4px;
866
- font-size: 0.875rem;
867
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
868
- z-index: 1000;
869
  }
870
 
871
- /* Custom scrollbar */
872
- ::-webkit-scrollbar {
873
- width: 6px;
874
- height: 6px;
875
- }
876
 
877
- ::-webkit-scrollbar-track {
878
- background-color: transparent;
879
- }
880
 
881
- ::-webkit-scrollbar-thumb {
882
- background-color: #d1d5db;
883
- border-radius: 3px;
884
- }
885
 
886
- ::-webkit-scrollbar-thumb:hover {
887
- background-color: #9ca3af;
 
888
  }
 
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
  /* Base styles */
6
  :root {
7
  --primary-color: #3e6ae1;
 
35
  background-color: var(--background-color);
36
  }
37
 
38
+ @layer components {
39
+ /* App container */
40
+ .app-container {
41
+ @apply flex flex-col h-screen w-full overflow-hidden;
42
+ }
 
 
 
43
 
44
+ /* Header styles */
45
+ .app-header {
46
+ @apply flex justify-between items-center px-5 h-header border-b border-border bg-background;
47
+ }
 
 
 
 
 
 
48
 
49
+ .left-section {
50
+ @apply flex items-center;
51
+ }
 
52
 
53
+ .right-section {
54
+ @apply flex items-center gap-2.5;
55
+ }
 
 
56
 
57
+ .app-title {
58
+ @apply text-xl font-semibold text-text;
59
+ }
 
60
  }
61
 
62
+ @layer components {
63
+ /* Profile dropdown */
64
+ .profile-dropdown-container {
65
+ @apply relative;
66
+ }
67
 
68
+ .profile-dropdown-button {
69
+ @apply py-1.5 px-3 bg-background border border-border rounded text-sm text-text cursor-pointer flex items-center gap-1.5;
70
+ }
 
 
 
 
 
 
 
 
 
71
 
72
+ .profile-dropdown-menu {
73
+ @apply absolute top-full right-0 w-[200px] bg-background border border-border rounded shadow-md z-10 mt-1.5;
74
+ }
 
 
 
 
 
 
 
 
 
75
 
76
+ .profile-option {
77
+ @apply p-3 cursor-pointer transition-colors duration-200 text-sm;
78
+ }
 
 
 
79
 
80
+ .profile-option:hover {
81
+ @apply bg-hover;
82
+ }
83
 
84
+ .profile-option.active {
85
+ @apply bg-active font-medium;
86
+ }
87
  }
88
 
89
+ @layer components {
90
+ .settings-button {
91
+ @apply py-1.5 px-3 bg-background border border-border rounded text-sm text-text cursor-pointer;
92
+ }
 
 
 
 
 
93
 
94
+ .settings-button:hover {
95
+ @apply bg-hover;
96
+ }
97
 
98
+ /* Main content area */
99
+ .app-content {
100
+ @apply flex flex-1 overflow-hidden;
101
+ }
 
102
  }
103
 
104
+ @layer components {
105
+ /* Sidebar */
106
+ .sidebar {
107
+ @apply w-sidebar border-r border-border flex flex-col transition-[width] duration-300 ease-in-out bg-background;
108
+ }
 
 
 
 
109
 
110
+ .sidebar.collapsed {
111
+ @apply w-[50px] overflow-hidden;
112
+ }
 
113
 
114
+ .sidebar.collapsed .chat-list,
115
+ .sidebar.collapsed .sidebar-header h2 {
116
+ @apply hidden;
117
+ }
118
 
119
+ .sidebar-header {
120
+ @apply flex justify-between items-center py-3 px-4 border-b border-border;
121
+ }
 
 
 
 
122
 
123
+ .sidebar.collapsed .sidebar-header {
124
+ @apply py-3 px-[5px] justify-center;
125
+ }
 
126
 
127
+ .sidebar-header h2 {
128
+ @apply text-sm font-semibold text-light-text m-0;
129
+ }
 
 
 
130
 
131
+ .toggle-sidebar-button {
132
+ @apply bg-transparent border-0 text-base text-lightest-text cursor-pointer flex items-center justify-center z-10 w-6 h-6;
133
+ }
 
 
 
 
 
 
 
 
 
 
134
 
135
+ .toggle-sidebar-button:hover {
136
+ @apply text-text;
137
+ }
138
  }
139
 
140
+ @layer components {
141
+ /* Chat list */
142
+ .chat-list {
143
+ @apply flex-1 overflow-y-auto p-2.5;
144
+ }
 
145
 
146
+ .new-chat {
147
+ @apply w-full py-2 px-3 bg-primary text-white border-none rounded cursor-pointer text-sm mb-4 transition-colors duration-200 flex items-center justify-center;
148
+ }
 
 
 
 
 
 
 
 
 
 
 
 
149
 
150
+ .new-chat:hover {
151
+ @apply bg-primary-hover;
152
+ }
153
 
154
+ .chat-item {
155
+ @apply flex justify-between items-center py-2 px-2.5 rounded cursor-pointer mb-0.5 transition-colors duration-200 text-sm text-light-text;
156
+ }
 
 
 
 
 
 
 
 
 
157
 
158
+ .chat-item:hover {
159
+ @apply bg-hover;
160
+ }
161
 
162
+ .chat-item.active {
163
+ @apply bg-active text-primary;
164
+ }
 
165
 
166
+ .delete-btn {
167
+ @apply opacity-0 bg-transparent border-none text-lightest-text cursor-pointer text-xs transition-all duration-200 py-0.5 px-[5px];
168
+ }
 
 
 
 
 
 
 
169
 
170
+ .chat-item:hover .delete-btn {
171
+ @apply opacity-100;
172
+ }
173
 
174
+ .delete-btn:hover {
175
+ @apply text-red-600;
176
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
 
178
+ .empty-state {
179
+ @apply text-lightest-text text-center p-5 text-sm;
180
+ }
 
 
 
 
181
  }
182
 
183
+ @layer components {
184
+ /* Main chat area */
185
+ .main-content {
186
+ @apply flex-1 flex flex-col overflow-hidden bg-background;
187
+ }
 
 
 
 
 
 
188
 
189
+ /* Welcome screen */
190
+ .welcome-screen {
191
+ @apply flex flex-col items-center justify-center h-full p-5 text-center;
192
+ }
193
 
194
+ .welcome-screen h2 {
195
+ @apply text-2xl font-semibold mb-2.5 text-text;
196
+ }
 
 
 
 
 
 
197
 
198
+ .welcome-screen p {
199
+ @apply text-light-text mb-5 text-sm;
200
+ }
 
 
 
 
 
 
201
 
202
+ .new-chat-button {
203
+ @apply py-2.5 px-5 bg-primary text-white border-none rounded cursor-pointer text-sm transition-colors duration-200;
204
+ }
 
 
 
 
 
 
 
 
205
 
206
+ .new-chat-button:hover {
207
+ @apply bg-primary-hover;
208
+ }
 
 
 
 
 
 
 
 
 
209
  }
210
 
211
+ @layer components {
212
+ /* Chat window */
213
+ .chat-window {
214
+ @apply flex flex-col h-full overflow-hidden;
215
+ }
216
 
217
+ .chat-messages {
218
+ @apply flex-1 overflow-y-auto p-5 flex flex-col gap-6;
219
+ }
 
220
  }
221
 
222
+ @layer components {
223
+ /* Message styles */
224
+ .message {
225
+ @apply flex flex-col max-w-[800px] mx-auto w-full;
226
+ }
227
 
228
+ .message.user {
229
+ @apply items-end;
230
+ }
 
231
 
232
+ .message.assistant {
233
+ @apply items-start;
234
+ }
 
235
 
236
+ .reasoning-container {
237
+ @apply w-full border border-border rounded-lg overflow-hidden mb-2.5 bg-reasoning-bg;
238
+ }
239
 
240
+ .reasoning-header {
241
+ @apply flex justify-between items-center py-2 px-3 cursor-pointer text-[0.8125rem] text-light-text bg-[#f5f5f5] border-b border-border;
242
+ }
 
243
 
244
+ .toggle-icon {
245
+ @apply text-[0.625rem];
246
+ }
247
 
248
+ .reasoning-content {
249
+ @apply p-3 text-[0.8125rem] whitespace-pre-wrap overflow-x-auto text-light-text max-h-[300px] overflow-y-auto;
250
+ }
 
 
 
 
251
 
252
+ .message-content {
253
+ @apply py-3 px-4 rounded-md text-[0.9375rem] leading-normal break-words max-w-[90%] relative;
254
+ }
 
 
 
255
 
256
+ .message.user .message-content {
257
+ @apply bg-user-message-bg text-user-message-color rounded-[6px_6px_0_6px];
258
+ }
 
259
 
260
+ .message.assistant .message-content {
261
+ @apply bg-assistant-message-bg text-assistant-message-color rounded-[6px_6px_6px_0];
262
+ }
 
263
  }
264
 
265
+ @layer components {
266
+ .copy-button {
267
+ @apply absolute right-2 bottom-2 bg-white/80 border border-border rounded py-1 px-2 text-xs cursor-pointer opacity-0 transition-opacity duration-200;
268
+ }
269
 
270
+ .message-content:hover .copy-button {
271
+ @apply opacity-100;
272
+ }
 
 
 
273
 
274
+ .copy-button.copied {
275
+ @apply bg-emerald-500 text-white border-emerald-600;
276
+ }
 
 
 
277
 
278
+ .message.user .copy-button {
279
+ @apply bg-white/90 text-light-text;
280
+ }
 
 
281
 
282
+ .message.user .copy-button:hover {
283
+ @apply bg-white text-text;
284
+ }
 
 
 
285
 
286
+ .message.assistant .copy-button {
287
+ @apply bg-[rgba(249,249,249,0.9)] text-text;
288
+ }
289
 
290
+ .message.assistant .copy-button:hover {
291
+ @apply bg-background;
292
+ }
 
 
293
 
294
+ /* Add styles for markdown content */
295
+ .message-content p {
296
+ @apply mb-4;
297
+ }
 
 
 
 
298
 
299
+ .message-content p:last-child {
300
+ @apply mb-0;
301
+ }
 
 
 
 
 
 
 
 
 
 
302
 
303
+ .message-content pre {
304
+ @apply bg-black/5 p-3 rounded overflow-x-auto my-4;
305
+ }
306
 
307
+ .message-content code {
308
+ @apply bg-black/5 py-0.5 px-1 rounded font-mono;
309
+ }
 
 
 
 
 
 
 
 
 
 
310
 
311
+ .message-content pre code {
312
+ @apply bg-transparent p-0;
313
+ }
314
 
315
+ .message-content ul,
316
+ .message-content ol {
317
+ @apply my-4 pl-8;
318
+ }
 
319
 
320
+ .message-content li {
321
+ @apply my-2;
322
+ }
323
+
324
+ .message-content blockquote {
325
+ @apply border-l-4 border-border my-4 pl-4 text-light-text;
326
+ }
 
 
 
327
 
328
+ .message-content img {
329
+ @apply max-w-full h-auto my-4 rounded;
330
+ }
 
331
 
332
+ .message-content table {
333
+ @apply border-collapse w-full my-4;
334
+ }
 
 
 
 
 
 
 
 
 
 
335
 
336
+ .message-content th,
337
+ .message-content td {
338
+ @apply border border-border p-2 text-left;
339
+ }
340
+
341
+ .message-content th {
342
+ @apply bg-hover;
343
+ }
344
+
345
+ .message-time {
346
+ @apply text-xs text-lightest-text mt-1;
347
+ }
348
+ }
349
 
350
+ @layer components {
351
+ /* Input area */
352
+ .chat-input {
353
+ @apply flex p-4 border-t border-border gap-2.5 bg-background;
354
+ }
 
355
 
356
+ .message-input {
357
+ @apply flex-1 py-3 px-4 border border-border rounded-md text-[0.9375rem] resize-none min-h-[24px] max-h-[200px] text-text outline-none transition-colors duration-200;
358
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
359
 
360
+ .message-input:focus {
361
+ @apply border-primary;
362
+ }
 
363
 
364
+ .send-button {
365
+ @apply px-5 bg-primary text-white border-none rounded-md cursor-pointer text-[0.9375rem] transition-colors duration-200 flex items-center justify-center;
366
+ }
367
+
368
+ .send-button:hover:not(:disabled) {
369
+ @apply bg-primary-hover;
370
+ }
371
+
372
+ .send-button:disabled {
373
+ @apply bg-slate-400 cursor-not-allowed opacity-70;
374
+ }
375
+
376
+ /* Loading cursor */
377
+ .loading-cursor {
378
+ @apply inline-block w-0.5 h-[1.2em] bg-current ml-0.5 animate-blink align-text-bottom;
379
+ }
380
+
381
+ @keyframes blink {
382
+ 0%, 100% { opacity: 1; }
383
+ 50% { opacity: 0; }
384
+ }
385
  }
386
 
387
+ @layer components {
388
+ /* Settings modal */
389
+ .settings-overlay {
390
+ @apply fixed inset-0 bg-black/50 flex items-center justify-center z-[1000];
391
+ }
392
+
393
+ .settings-modal {
394
+ @apply bg-background rounded-lg w-[600px] max-w-[90%] max-h-[90vh] overflow-y-auto relative p-6 shadow-md;
395
+ }
396
+
397
+ .settings-panel h2 {
398
+ @apply text-xl font-semibold mb-5 text-text;
399
+ }
400
+
401
+ .close-settings-button {
402
+ @apply absolute top-4 right-4 bg-transparent border-none text-xl cursor-pointer text-lightest-text w-6 h-6 flex items-center justify-center rounded;
403
+ }
404
+
405
+ .close-settings-button:hover {
406
+ @apply bg-hover text-text;
407
+ }
408
+
409
+ /* Profile management in settings */
410
+ .profiles-section {
411
+ @apply mb-6 border-b border-border pb-5;
412
+ }
413
+
414
+ .profiles-header {
415
+ @apply flex justify-between items-center mb-3;
416
+ }
417
 
418
+ .profiles-header h3 {
419
+ @apply text-base font-semibold text-text;
420
+ }
 
 
421
 
422
+ .add-profile-button {
423
+ @apply py-1 px-2 bg-transparent border border-border rounded text-sm text-text cursor-pointer transition-all duration-200;
424
+ }
 
 
 
 
 
 
 
425
 
426
+ .add-profile-button:hover {
427
+ @apply bg-hover;
428
+ }
429
 
430
+ .profiles-list {
431
+ @apply flex flex-wrap gap-2 mb-4;
432
+ }
 
 
 
433
 
434
+ .profile-item {
435
+ @apply py-2 px-3 bg-background border border-border rounded text-sm cursor-pointer transition-all duration-200 flex items-center gap-2;
436
+ }
 
 
 
 
 
 
 
 
 
437
 
438
+ .profile-item:hover {
439
+ @apply bg-hover;
440
+ }
441
 
442
+ .profile-item.active {
443
+ @apply bg-active border-primary;
444
+ }
 
445
 
446
+ .delete-profile-button {
447
+ @apply bg-transparent border-none text-lightest-text cursor-pointer text-base transition-colors duration-200 flex items-center justify-center w-5 h-5;
448
+ }
 
 
 
 
 
 
 
 
 
 
449
 
450
+ .delete-profile-button:hover {
451
+ @apply text-red-600;
452
+ }
453
 
454
+ .current-profile-section h3 {
455
+ @apply text-base font-semibold text-text mb-4;
456
+ }
 
 
 
457
 
458
+ .setting-item {
459
+ @apply mb-4;
460
+ }
461
 
462
+ .setting-item label {
463
+ @apply block mb-1.5 text-sm text-light-text;
464
+ }
 
 
 
465
 
466
+ .setting-item input {
467
+ @apply w-full py-2 px-3 border border-border rounded text-sm transition-colors duration-200;
468
+ }
 
 
 
 
 
469
 
470
+ .setting-item input:focus {
471
+ @apply outline-none border-primary;
472
+ }
 
473
 
474
+ .setting-hint {
475
+ @apply mt-1;
476
+ }
477
 
478
+ .hint-toggle {
479
+ @apply bg-transparent border-none text-primary cursor-pointer text-xs p-0 text-left;
480
+ }
 
 
 
 
 
 
481
 
482
+ .hint-content {
483
+ @apply hidden mt-2 text-xs text-light-text bg-hover p-2 rounded;
484
+ }
 
 
 
 
 
 
485
 
486
+ .hint-content.expanded {
487
+ @apply block;
488
+ }
489
 
490
+ .hint-content p {
491
+ @apply mb-1.5;
492
+ }
493
 
494
+ .hint-content ul {
495
+ @apply ml-5;
496
+ }
497
 
498
+ .hint-content li {
499
+ @apply mb-1;
500
+ }
501
 
502
+ .settings-actions {
503
+ @apply flex justify-end gap-2.5 mt-6;
504
+ }
 
 
 
505
 
506
+ .save-button {
507
+ @apply py-2 px-4 bg-primary text-white border-none rounded cursor-pointer text-sm transition-colors duration-200;
508
+ }
 
 
 
 
 
 
 
509
 
510
+ .save-button:hover {
511
+ @apply bg-primary-hover;
512
+ }
513
 
514
+ .cancel-button {
515
+ @apply py-2 px-4 bg-transparent border border-border rounded cursor-pointer text-sm transition-all duration-200;
516
+ }
 
 
 
 
 
 
517
 
518
+ .cancel-button:hover {
519
+ @apply bg-hover;
520
+ }
521
  }
522
 
523
+ @layer components {
524
+ /* Error and notification styles */
525
+ .error-message {
526
+ @apply fixed bottom-5 left-1/2 -translate-x-1/2 bg-red-100 text-red-600 py-2.5 px-5 rounded text-sm shadow-md z-[1000];
527
+ }
 
 
 
 
 
 
 
 
 
528
 
529
+ .loading {
530
+ @apply fixed bottom-5 left-1/2 -translate-x-1/2 bg-blue-50 text-blue-700 py-2.5 px-5 rounded text-sm shadow-md z-[1000];
531
+ }
 
 
 
 
 
 
 
 
 
532
  }
533
 
534
+ @layer utilities {
535
+ /* Custom scrollbar */
536
+ ::-webkit-scrollbar {
537
+ @apply w-1.5 h-1.5;
538
+ }
539
 
540
+ ::-webkit-scrollbar-track {
541
+ @apply bg-transparent;
542
+ }
543
 
544
+ ::-webkit-scrollbar-thumb {
545
+ @apply bg-gray-300 rounded-sm;
546
+ }
 
547
 
548
+ ::-webkit-scrollbar-thumb:hover {
549
+ @apply bg-gray-400;
550
+ }
551
  }
src/main.jsx CHANGED
@@ -1,10 +1,11 @@
1
  import React from 'react'
2
  import ReactDOM from 'react-dom/client'
3
  import App from './App'
 
4
  import './index.css'
5
 
6
  ReactDOM.createRoot(document.getElementById('root')).render(
7
  <React.StrictMode>
8
  <App />
9
  </React.StrictMode>,
10
- )
 
1
  import React from 'react'
2
  import ReactDOM from 'react-dom/client'
3
  import App from './App'
4
+ import './tailwind.css'
5
  import './index.css'
6
 
7
  ReactDOM.createRoot(document.getElementById('root')).render(
8
  <React.StrictMode>
9
  <App />
10
  </React.StrictMode>,
11
+ )
src/tailwind.css ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
tailwind.config.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /** @type {import('tailwindcss').Config} */
2
+ export default {
3
+ content: [
4
+ "./index.html",
5
+ "./src/**/*.{js,ts,jsx,tsx}",
6
+ ],
7
+ theme: {
8
+ extend: {
9
+ colors: {
10
+ primary: 'var(--primary-color)',
11
+ 'primary-hover': 'var(--primary-hover)',
12
+ 'text': 'var(--text-color)',
13
+ 'light-text': 'var(--light-text)',
14
+ 'lightest-text': 'var(--lightest-text)',
15
+ 'border': 'var(--border-color)',
16
+ 'background': 'var(--background-color)',
17
+ 'reasoning-bg': 'var(--reasoning-background)',
18
+ 'user-message-bg': 'var(--user-message-bg)',
19
+ 'user-message-color': 'var(--user-message-color)',
20
+ 'assistant-message-bg': 'var(--assistant-message-bg)',
21
+ 'assistant-message-color': 'var(--assistant-message-color)',
22
+ 'hover': 'var(--hover-color)',
23
+ 'active': 'var(--active-color)',
24
+ },
25
+ spacing: {
26
+ 'sidebar': 'var(--sidebar-width)',
27
+ 'header': 'var(--header-height)',
28
+ },
29
+ animation: {
30
+ 'blink': 'blink 1s infinite',
31
+ },
32
+ keyframes: {
33
+ blink: {
34
+ '0%, 100%': { opacity: 1 },
35
+ '50%': { opacity: 0 },
36
+ },
37
+ },
38
+ },
39
+ },
40
+ plugins: [],
41
+ }