iris-chatbot 4.1.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iris-chatbot",
3
- "version": "4.1.0",
3
+ "version": "5.0.1",
4
4
  "private": false,
5
5
  "description": "One-command installer for the Iris project template.",
6
6
  "bin": {
@@ -0,0 +1,11 @@
1
+ # Projects plan – Sidebar UI addendum
2
+
3
+ When implementing the Sidebar for Projects, apply these UI details:
4
+
5
+ 1. **Folder icon**
6
+ - **Remove** the folder icon from chat/thread rows (individual chats).
7
+ - **Add** the folder icon next to **project names** (each project in the project list, including "Inbox" if shown as a project).
8
+
9
+ 2. **"Your Chats" label**
10
+ - Use the exact label **'Your Chats'** (title case).
11
+ - Do **not** render it in all caps: remove the `uppercase` class from the section heading (currently in Sidebar around line 86: `text-[11px] uppercase tracking-[0.18em]` → use the same size/tracking but drop `uppercase`) so it displays as **Your Chats**, not "YOUR CHATS".
@@ -1,6 +1,6 @@
1
1
  /// <reference types="next" />
2
2
  /// <reference types="next/image-types/global" />
3
- import "./.next/dev/types/routes.d.ts";
3
+ import "./.next/types/routes.d.ts";
4
4
 
5
5
  // NOTE: This file should not be edited
6
6
  // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "iris",
3
- "version": "4.1.0",
3
+ "version": "5.0.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "iris",
9
- "version": "4.1.0",
9
+ "version": "5.0.1",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.72.1",
12
12
  "clsx": "^2.1.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iris",
3
- "version": "4.1.0",
3
+ "version": "5.0.1",
4
4
  "private": true,
5
5
  "description": "One-command installer for the Iris project template.",
6
6
  "engines": {
@@ -3,7 +3,7 @@
3
3
 
4
4
  :root {
5
5
  --topbar-height: 64px;
6
- --bg: #171819;
6
+ --bg: #212121;
7
7
  --bg-alt: #1b1c1d;
8
8
  --sidebar: #181818;
9
9
  --sidebar-border: #202020;
@@ -15,6 +15,7 @@
15
15
  --text-muted: #b1b7bf;
16
16
  --accent: #10a37f;
17
17
  --accent-2: #0e8e6f;
18
+ --accent-ring: var(--accent-2);
18
19
  --danger: #ef4444;
19
20
  --border: #2a2a2a;
20
21
  --border-strong: #3a3a3a;
@@ -38,7 +39,7 @@
38
39
  body {
39
40
  background: var(--bg);
40
41
  color: var(--text-primary);
41
- font-family: var(--app-font, var(--font-sans));
42
+ font-family: var(--app-font, var(--font-poppins));
42
43
  min-height: 100vh;
43
44
  -webkit-font-smoothing: antialiased;
44
45
  text-rendering: optimizeLegibility;
@@ -48,6 +49,21 @@ a {
48
49
  color: var(--accent);
49
50
  }
50
51
 
52
+ input:focus,
53
+ select:focus,
54
+ textarea:focus,
55
+ button:focus {
56
+ outline: none;
57
+ }
58
+
59
+ input:focus-visible,
60
+ select:focus-visible,
61
+ textarea:focus-visible,
62
+ button:focus-visible {
63
+ outline: none;
64
+ box-shadow: inset 0 0 0 1px var(--border-strong);
65
+ }
66
+
51
67
  .chat-shell {
52
68
  display: grid;
53
69
  grid-template-columns: 248px minmax(0, 1fr);
@@ -82,10 +98,21 @@ a {
82
98
  background: transparent !important;
83
99
  backdrop-filter: none;
84
100
  box-shadow: none;
85
- position: sticky;
101
+ position: absolute;
86
102
  top: 0;
103
+ left: 0;
104
+ right: 0;
87
105
  z-index: 40;
88
106
  height: var(--topbar-height);
107
+ pointer-events: none;
108
+ }
109
+
110
+ .topbar>*,
111
+ .topbar button,
112
+ .topbar a,
113
+ .topbar [role="listbox"],
114
+ .topbar [role="option"] {
115
+ pointer-events: auto;
89
116
  }
90
117
 
91
118
 
@@ -249,7 +276,7 @@ a {
249
276
  }
250
277
 
251
278
  .assistant-card .message-content {
252
- color: #f8fafc;
279
+ color: var(--text-primary);
253
280
  }
254
281
 
255
282
  .message-loading-spinner {
@@ -271,7 +298,7 @@ a {
271
298
  .composer-bar {
272
299
  position: sticky;
273
300
  bottom: 0;
274
- background: transparent;
301
+ background: var(--bg);
275
302
  z-index: 30;
276
303
  }
277
304
 
@@ -299,13 +326,14 @@ a {
299
326
  --sidebar: #ffffff;
300
327
  --sidebar-border: #e5e5e5;
301
328
  --panel: #ffffff;
302
- --panel-2: #f0f0f0;
303
- --panel-3: #e8e8e8;
329
+ --panel-2: #f6f6f6;
330
+ --panel-3: #f0f0f0;
304
331
  --text-primary: #111111;
305
332
  --text-secondary: #4a4a4a;
306
333
  --text-muted: #6f6f6f;
307
334
  --accent: #0e8e6f;
308
335
  --accent-2: #0b7a5f;
336
+ --accent-ring: color-mix(in srgb, var(--accent) 55%, #000);
309
337
  --danger: #dc2626;
310
338
  --border: #d5d5d5;
311
339
  --border-strong: #bdbdbd;
@@ -313,6 +341,51 @@ a {
313
341
  --user-bubble: #d7f2ea;
314
342
  }
315
343
 
344
+ /* Dark mode: white button background (no data-theme or data-theme="dark") */
345
+ :root .settings-tab-active,
346
+ :root .settings-btn-accent {
347
+ background: white !important;
348
+ color: #111111 !important;
349
+ }
350
+
351
+ [data-theme="dark"] .settings-tab-active,
352
+ [data-theme="dark"] .settings-btn-accent {
353
+ background: white !important;
354
+ color: #111111 !important;
355
+ }
356
+
357
+ /* Light mode: black for selected tab and Save button */
358
+ [data-theme="light"] .settings-tab-active,
359
+ [data-theme="light"] .settings-btn-accent {
360
+ background: #111111 !important;
361
+ color: #ffffff !important;
362
+ }
363
+
364
+ [data-theme="light"] .message-content pre,
365
+ [data-theme="light"] .message-content pre code {
366
+ color: #e5e7eb;
367
+ }
368
+
369
+ [data-theme="light"] .message-content code {
370
+ background: rgba(0, 0, 0, 0.06);
371
+ color: var(--text-primary);
372
+ }
373
+
374
+ [data-theme="light"] .message-loading-spinner {
375
+ border-color: rgba(0, 0, 0, 0.15);
376
+ border-top-color: #111111;
377
+ }
378
+
379
+ [data-theme="light"] .send-button.active {
380
+ background: #111111;
381
+ color: #ffffff;
382
+ border-color: transparent;
383
+ }
384
+
385
+ [data-theme="light"] .send-button.active svg {
386
+ color: #ffffff;
387
+ }
388
+
316
389
  .message-content h1,
317
390
  .message-content h2,
318
391
  .message-content h3,
@@ -506,12 +579,16 @@ a {
506
579
  }
507
580
 
508
581
  .composer {
509
- background: var(--panel);
582
+ background: #303030;
510
583
  border: 1px solid var(--border);
511
584
  border-radius: 18px;
512
585
  padding: 10px 12px;
513
586
  }
514
587
 
588
+ [data-theme="light"] .composer {
589
+ background: transparent;
590
+ }
591
+
515
592
  .thread-shelf {
516
593
  margin-top: 12px;
517
594
  padding-top: 8px;
@@ -582,10 +659,22 @@ a {
582
659
  line-height: 1.4;
583
660
  padding-top: 7px;
584
661
  padding-bottom: 9px;
662
+ padding-left: 6px;
585
663
  /* One line by default; height grows with content in Composer.tsx */
586
664
  min-height: calc(1.4em + 7px + 9px);
587
665
  }
588
666
 
667
+ .composer-textarea:focus,
668
+ .composer-textarea:focus-visible {
669
+ box-shadow: none;
670
+ }
671
+
672
+ .search-modal-input:focus,
673
+ .search-modal-input:focus-visible {
674
+ outline: none;
675
+ box-shadow: none;
676
+ }
677
+
589
678
  .send-button {
590
679
  height: 40px;
591
680
  width: 40px;
@@ -800,9 +889,174 @@ a {
800
889
  }
801
890
 
802
891
  .chat-scroll {
803
- padding-top: calc(var(--topbar-height) - 20px);
892
+ padding-top: calc(var(--topbar-height) + 24px);
893
+ position: relative;
804
894
  }
805
895
 
806
896
  .chat-scroll.empty {
807
- padding-top: var(--topbar-height);
897
+ padding-top: calc(var(--topbar-height) + 24px);
898
+ }
899
+
900
+ /* ─── Ask Selection Button ─── */
901
+
902
+ .ask-selection-button {
903
+ position: absolute;
904
+ z-index: 50;
905
+ transform: translateX(-50%);
906
+ display: inline-flex;
907
+ align-items: center;
908
+ gap: 6px;
909
+ padding: 7px 14px;
910
+ border-radius: 10px;
911
+ border: 1px solid rgba(255, 255, 255, 0.15);
912
+ background: rgba(50, 50, 50, 0.92);
913
+ backdrop-filter: blur(12px);
914
+ -webkit-backdrop-filter: blur(12px);
915
+ color: #f0f0f0;
916
+ font-size: 13px;
917
+ font-weight: 600;
918
+ letter-spacing: 0.01em;
919
+ cursor: pointer;
920
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35), 0 0 0 0.5px rgba(255, 255, 255, 0.06);
921
+ animation: ask-button-enter 0.18s ease-out;
922
+ transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
923
+ white-space: nowrap;
924
+ user-select: none;
925
+ -webkit-user-select: none;
926
+ }
927
+
928
+ .ask-selection-button:hover {
929
+ background: rgba(60, 60, 60, 0.95);
930
+ border-color: rgba(255, 255, 255, 0.22);
931
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.4), 0 0 0 0.5px rgba(255, 255, 255, 0.1);
932
+ transform: translateX(-50%) translateY(-1px);
933
+ }
934
+
935
+ .ask-selection-button:active {
936
+ transform: translateX(-50%) translateY(0);
937
+ background: rgba(70, 70, 70, 0.95);
938
+ }
939
+
940
+ @keyframes ask-button-enter {
941
+ from {
942
+ opacity: 0;
943
+ transform: translateX(-50%) translateY(6px) scale(0.92);
944
+ }
945
+
946
+ to {
947
+ opacity: 1;
948
+ transform: translateX(-50%) translateY(0) scale(1);
949
+ }
950
+ }
951
+
952
+ /* ─── Quoted Context Container ─── */
953
+
954
+ .composer-wrapper {
955
+ display: flex;
956
+ flex-direction: column;
957
+ gap: 0;
958
+ }
959
+
960
+ .quoted-context-container {
961
+ display: flex;
962
+ align-items: flex-start;
963
+ gap: 10px;
964
+ padding: 12px 14px;
965
+ margin-bottom: 0;
966
+ background: #2b2b2b;
967
+ border: 1px solid var(--border);
968
+ border-bottom: none;
969
+ border-radius: 18px 18px 0 0;
970
+ animation: quoted-context-enter 0.22s ease-out;
971
+ }
972
+
973
+ .quoted-context-container+.composer {
974
+ border-top-left-radius: 0;
975
+ border-top-right-radius: 0;
976
+ border-top-color: var(--border);
977
+ }
978
+
979
+ .quoted-context-content {
980
+ flex: 1;
981
+ display: flex;
982
+ align-items: flex-start;
983
+ gap: 10px;
984
+ min-width: 0;
985
+ }
986
+
987
+ .quoted-context-icon {
988
+ flex-shrink: 0;
989
+ width: 18px;
990
+ height: 18px;
991
+ color: var(--text-muted);
992
+ margin-top: 1px;
993
+ }
994
+
995
+ .quoted-context-text {
996
+ font-size: 13px;
997
+ line-height: 1.5;
998
+ color: var(--text-secondary);
999
+ overflow: hidden;
1000
+ display: -webkit-box;
1001
+ -webkit-line-clamp: 3;
1002
+ line-clamp: 3;
1003
+ -webkit-box-orient: vertical;
1004
+ word-break: break-word;
1005
+ }
1006
+
1007
+ .quoted-context-dismiss {
1008
+ flex-shrink: 0;
1009
+ display: inline-flex;
1010
+ align-items: center;
1011
+ justify-content: center;
1012
+ width: 24px;
1013
+ height: 24px;
1014
+ border-radius: 999px;
1015
+ border: none;
1016
+ background: transparent;
1017
+ color: var(--text-muted);
1018
+ cursor: pointer;
1019
+ transition: color 0.15s ease, background 0.15s ease;
1020
+ }
1021
+
1022
+ .quoted-context-dismiss:hover {
1023
+ color: var(--text-primary);
1024
+ background: rgba(255, 255, 255, 0.08);
1025
+ }
1026
+
1027
+ @keyframes quoted-context-enter {
1028
+ from {
1029
+ opacity: 0;
1030
+ transform: translateY(6px);
1031
+ max-height: 0;
1032
+ }
1033
+
1034
+ to {
1035
+ opacity: 1;
1036
+ transform: translateY(0);
1037
+ max-height: 200px;
1038
+ }
1039
+ }
1040
+
1041
+ /* ─── Light theme overrides ─── */
1042
+
1043
+ [data-theme="light"] .ask-selection-button {
1044
+ background: rgba(255, 255, 255, 0.94);
1045
+ border-color: rgba(0, 0, 0, 0.12);
1046
+ color: #111111;
1047
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12), 0 0 0 0.5px rgba(0, 0, 0, 0.05);
1048
+ }
1049
+
1050
+ [data-theme="light"] .ask-selection-button:hover {
1051
+ background: #ffffff;
1052
+ border-color: rgba(0, 0, 0, 0.18);
1053
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15), 0 0 0 0.5px rgba(0, 0, 0, 0.08);
1054
+ }
1055
+
1056
+ [data-theme="light"] .quoted-context-container {
1057
+ background: transparent;
1058
+ }
1059
+
1060
+ [data-theme="light"] .quoted-context-dismiss:hover {
1061
+ background: rgba(0, 0, 0, 0.06);
808
1062
  }
@@ -12,6 +12,8 @@ import {
12
12
  createNewThread,
13
13
  deleteConversation,
14
14
  deleteThread,
15
+ DEFAULT_ACCENT_DARK,
16
+ DEFAULT_ACCENT_LIGHT,
15
17
  } from "../lib/data";
16
18
  import { db } from "../lib/db";
17
19
  import {
@@ -122,7 +124,7 @@ export default function Home() {
122
124
  ? "var(--font-sora)"
123
125
  : settings.font === "space"
124
126
  ? "var(--font-space)"
125
- : "var(--font-sans)";
127
+ : "var(--font-poppins)";
126
128
  document.documentElement.style.setProperty("--app-font", fontVar);
127
129
  document.body.style.fontFamily = fontVar;
128
130
  }, [settings, connectionOverrideId, setConnectionOverrideId]);
@@ -331,10 +333,23 @@ export default function Home() {
331
333
  <div
332
334
  className={`chat-shell ${sidebarCollapsed ? "collapsed" : ""}`}
333
335
  style={
334
- {
335
- "--accent": settings?.accentColor || "#66706e",
336
- "--accent-2": settings?.accentColor || "#66706e",
337
- } as CSSProperties
336
+ (() => {
337
+ const stored = settings?.accentColor || DEFAULT_ACCENT_DARK;
338
+ const isDefaultGray = stored === DEFAULT_ACCENT_DARK;
339
+ const isLight =
340
+ settings?.theme === "light" ||
341
+ (typeof document !== "undefined" &&
342
+ document.documentElement.dataset.theme === "light");
343
+ const effective =
344
+ isDefaultGray && isLight ? DEFAULT_ACCENT_LIGHT : stored;
345
+ return {
346
+ "--accent": effective,
347
+ "--accent-2": effective,
348
+ ...(isLight && {
349
+ "--accent-ring": "color-mix(in srgb, var(--accent) 55%, #000)",
350
+ }),
351
+ } as CSSProperties;
352
+ })()
338
353
  }
339
354
  >
340
355
  <Sidebar
@@ -387,7 +402,7 @@ export default function Home() {
387
402
  onOpenSearch={() => setSearchOpen(true)}
388
403
  />
389
404
 
390
- <div className="flex h-screen min-w-0 flex-col overflow-hidden">
405
+ <div className="relative flex h-screen min-w-0 flex-col overflow-hidden">
391
406
  <TopBar
392
407
  connectionId={connection?.id ?? ""}
393
408
  connectionName={connection?.name ?? "No connection"}