qt-ui-kit 1.0.114 → 1.0.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -2,6 +2,15 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { ReactNode, ReactElement } from 'react';
4
4
 
5
+ declare enum FilterCategory {
6
+ FIRES = "fires",
7
+ INSIGHTS = "insights",
8
+ NEW = "new",
9
+ DONE = "done"
10
+ }
11
+ declare enum MoreFilter {
12
+ MORE = "more"
13
+ }
5
14
  declare enum IntegrationService {
6
15
  SLACK = "slack",
7
16
  GMAIL = "google_mail",
@@ -75,7 +84,7 @@ interface PreviewBadgeData {
75
84
  type: BadgeType;
76
85
  label?: string;
77
86
  }
78
- type Props$a = {
87
+ type Props$9 = {
79
88
  eventID: string;
80
89
  onSelected?: (eventID: string) => void;
81
90
  selected?: boolean;
@@ -94,28 +103,28 @@ type Props$a = {
94
103
  eventBadges?: PreviewBadgeData[];
95
104
  onOverride?: (eventID: string, selectedItem: string) => void;
96
105
  };
97
- declare function PreviewCard({ eventID, onSelected, selected, onChecked, checked, service, subjectLine, body, sender, source, date, onClickGoToSource, eventCategory, read, overrideItems, eventBadges, onOverride, }: Props$a): react_jsx_runtime.JSX.Element;
106
+ declare function PreviewCard({ eventID, onSelected, selected, onChecked, checked, service, subjectLine, body, sender, source, date, onClickGoToSource, eventCategory, read, overrideItems, eventBadges, onOverride, }: Props$9): react_jsx_runtime.JSX.Element;
98
107
 
99
108
  type NavButtonKey = "queue" | "account" | "logout";
100
109
  type NavButtonConfig$1 = {
101
110
  active?: boolean;
102
111
  onClick?: () => void;
103
112
  };
104
- type Props$9 = {
113
+ type Props$8 = {
105
114
  buttons?: Partial<Record<NavButtonKey, NavButtonConfig$1>>;
106
115
  };
107
- declare function NavBar({ buttons }: Props$9): react_jsx_runtime.JSX.Element;
116
+ declare function NavBar({ buttons }: Props$8): react_jsx_runtime.JSX.Element;
108
117
 
109
- type Props$8 = {
118
+ type Props$7 = {
110
119
  eventType?: EventType;
111
120
  eventData?: EventGroup[];
112
121
  groupUrgency?: UrgencyLevel;
113
122
  groupUrgencyText?: string;
114
123
  groupSummary?: string;
115
124
  };
116
- declare function EventCard({ eventType, eventData, groupUrgency, groupUrgencyText, groupSummary, }: Props$8): react_jsx_runtime.JSX.Element;
125
+ declare function EventCard({ eventType, eventData, groupUrgency, groupUrgencyText, groupSummary, }: Props$7): react_jsx_runtime.JSX.Element;
117
126
 
118
- type Props$7 = {
127
+ type Props$6 = {
119
128
  subjectLine?: string;
120
129
  to?: string;
121
130
  date?: string;
@@ -125,9 +134,9 @@ type Props$7 = {
125
134
  attachments?: string;
126
135
  body?: string;
127
136
  };
128
- declare function EmailBody({ subjectLine, to, date, from, CC, BCC, attachments, body, }: Props$7): react_jsx_runtime.JSX.Element;
137
+ declare function EmailBody({ subjectLine, to, date, from, CC, BCC, attachments, body, }: Props$6): react_jsx_runtime.JSX.Element;
129
138
 
130
- type Props$6 = {
139
+ type Props$5 = {
131
140
  messages?: ChatData[];
132
141
  };
133
142
  type ChatData = {
@@ -141,9 +150,9 @@ type ChatData = {
141
150
  images?: string[];
142
151
  emojis?: string[];
143
152
  };
144
- declare function ChatBody({ messages }: Props$6): react_jsx_runtime.JSX.Element;
153
+ declare function ChatBody({ messages }: Props$5): react_jsx_runtime.JSX.Element;
145
154
 
146
- type Props$5 = {
155
+ type Props$4 = {
147
156
  issueNumber?: string;
148
157
  notification?: string;
149
158
  project?: string;
@@ -158,13 +167,13 @@ type Props$5 = {
158
167
  description?: string;
159
168
  comments?: TicketComment[];
160
169
  };
161
- declare function TicketBody({ issueNumber, notification, project, task, dueDate, startDate, assignees, reporter, team, location, related, description, comments, }: Props$5): react_jsx_runtime.JSX.Element;
170
+ declare function TicketBody({ issueNumber, notification, project, task, dueDate, startDate, assignees, reporter, team, location, related, description, comments, }: Props$4): react_jsx_runtime.JSX.Element;
162
171
 
163
172
  type SearchResult = {
164
173
  label: string;
165
174
  count: number;
166
175
  };
167
- type Props$4 = {
176
+ type Props$3 = {
168
177
  loading?: boolean;
169
178
  results?: SearchResult[];
170
179
  initialText?: string;
@@ -172,19 +181,19 @@ type Props$4 = {
172
181
  /** Optional debounce for onUpdate calls (ms). Defaults to 250ms. */
173
182
  debounceMs?: number;
174
183
  };
175
- declare function SearchBar({ loading, results, initialText, onUpdate, debounceMs, }: Props$4): react_jsx_runtime.JSX.Element;
184
+ declare function SearchBar({ loading, results, initialText, onUpdate, debounceMs, }: Props$3): react_jsx_runtime.JSX.Element;
176
185
 
177
- type FilterButtonKey = "fires" | "insights" | "unread" | "done" | "more" | IntegrationService;
186
+ type FilterButtonKey = FilterCategory | IntegrationService | MoreFilter;
178
187
  type NavButtonConfig = {
179
188
  active?: boolean;
180
189
  onClick?: () => void;
181
190
  disabled?: boolean;
182
191
  count?: string | number;
183
192
  };
184
- type Props$3 = {
193
+ type FilterBarProps = {
185
194
  buttons?: Partial<Record<FilterButtonKey, NavButtonConfig>>;
186
195
  };
187
- declare function FilterBar({ buttons }: Props$3): react_jsx_runtime.JSX.Element;
196
+ declare function FilterBar({ buttons }: FilterBarProps): react_jsx_runtime.JSX.Element;
188
197
 
189
198
  type IconSize = 16 | 20 | 24 | 36;
190
199
 
@@ -339,4 +348,4 @@ type Event = {
339
348
 
340
349
  declare const fakeMessages: ChatData[];
341
350
 
342
- export { AccountInfoField, AccountInfoSection, AccountIntegrationCard, AccountIntegrationCardItem, type Attachment, BaseIconName, BrandIcon, type CalendarData, ChatBody, type ChatData, ColorVariants, ConfirmationModal, type ConfirmationVariant, EmailBody, type EmailData, type Event, EventCard, type EventData, type EventGroup, EventState, type EventSummaryParts, EventType, type ExternalPerson, FilterBar, type FilterButtonKey, type IconSize, IntegrationService, type MessageData, Modal, NavBar, PreviewCard, SearchBar, type SearchResult, TicketBody, type TicketComment, type TicketData, UrgencyLevel, fakeMessages };
351
+ export { AccountInfoField, AccountInfoSection, AccountIntegrationCard, AccountIntegrationCardItem, type Attachment, BaseIconName, BrandIcon, type CalendarData, ChatBody, type ChatData, ColorVariants, ConfirmationModal, type ConfirmationVariant, EmailBody, type EmailData, type Event, EventCard, type EventData, type EventGroup, EventState, type EventSummaryParts, EventType, type ExternalPerson, FilterBar, type FilterButtonKey, FilterCategory, type IconSize, IntegrationService, type MessageData, Modal, MoreFilter, NavBar, PreviewCard, SearchBar, type SearchResult, TicketBody, type TicketComment, type TicketData, UrgencyLevel, fakeMessages };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,15 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { ReactNode, ReactElement } from 'react';
4
4
 
5
+ declare enum FilterCategory {
6
+ FIRES = "fires",
7
+ INSIGHTS = "insights",
8
+ NEW = "new",
9
+ DONE = "done"
10
+ }
11
+ declare enum MoreFilter {
12
+ MORE = "more"
13
+ }
5
14
  declare enum IntegrationService {
6
15
  SLACK = "slack",
7
16
  GMAIL = "google_mail",
@@ -75,7 +84,7 @@ interface PreviewBadgeData {
75
84
  type: BadgeType;
76
85
  label?: string;
77
86
  }
78
- type Props$a = {
87
+ type Props$9 = {
79
88
  eventID: string;
80
89
  onSelected?: (eventID: string) => void;
81
90
  selected?: boolean;
@@ -94,28 +103,28 @@ type Props$a = {
94
103
  eventBadges?: PreviewBadgeData[];
95
104
  onOverride?: (eventID: string, selectedItem: string) => void;
96
105
  };
97
- declare function PreviewCard({ eventID, onSelected, selected, onChecked, checked, service, subjectLine, body, sender, source, date, onClickGoToSource, eventCategory, read, overrideItems, eventBadges, onOverride, }: Props$a): react_jsx_runtime.JSX.Element;
106
+ declare function PreviewCard({ eventID, onSelected, selected, onChecked, checked, service, subjectLine, body, sender, source, date, onClickGoToSource, eventCategory, read, overrideItems, eventBadges, onOverride, }: Props$9): react_jsx_runtime.JSX.Element;
98
107
 
99
108
  type NavButtonKey = "queue" | "account" | "logout";
100
109
  type NavButtonConfig$1 = {
101
110
  active?: boolean;
102
111
  onClick?: () => void;
103
112
  };
104
- type Props$9 = {
113
+ type Props$8 = {
105
114
  buttons?: Partial<Record<NavButtonKey, NavButtonConfig$1>>;
106
115
  };
107
- declare function NavBar({ buttons }: Props$9): react_jsx_runtime.JSX.Element;
116
+ declare function NavBar({ buttons }: Props$8): react_jsx_runtime.JSX.Element;
108
117
 
109
- type Props$8 = {
118
+ type Props$7 = {
110
119
  eventType?: EventType;
111
120
  eventData?: EventGroup[];
112
121
  groupUrgency?: UrgencyLevel;
113
122
  groupUrgencyText?: string;
114
123
  groupSummary?: string;
115
124
  };
116
- declare function EventCard({ eventType, eventData, groupUrgency, groupUrgencyText, groupSummary, }: Props$8): react_jsx_runtime.JSX.Element;
125
+ declare function EventCard({ eventType, eventData, groupUrgency, groupUrgencyText, groupSummary, }: Props$7): react_jsx_runtime.JSX.Element;
117
126
 
118
- type Props$7 = {
127
+ type Props$6 = {
119
128
  subjectLine?: string;
120
129
  to?: string;
121
130
  date?: string;
@@ -125,9 +134,9 @@ type Props$7 = {
125
134
  attachments?: string;
126
135
  body?: string;
127
136
  };
128
- declare function EmailBody({ subjectLine, to, date, from, CC, BCC, attachments, body, }: Props$7): react_jsx_runtime.JSX.Element;
137
+ declare function EmailBody({ subjectLine, to, date, from, CC, BCC, attachments, body, }: Props$6): react_jsx_runtime.JSX.Element;
129
138
 
130
- type Props$6 = {
139
+ type Props$5 = {
131
140
  messages?: ChatData[];
132
141
  };
133
142
  type ChatData = {
@@ -141,9 +150,9 @@ type ChatData = {
141
150
  images?: string[];
142
151
  emojis?: string[];
143
152
  };
144
- declare function ChatBody({ messages }: Props$6): react_jsx_runtime.JSX.Element;
153
+ declare function ChatBody({ messages }: Props$5): react_jsx_runtime.JSX.Element;
145
154
 
146
- type Props$5 = {
155
+ type Props$4 = {
147
156
  issueNumber?: string;
148
157
  notification?: string;
149
158
  project?: string;
@@ -158,13 +167,13 @@ type Props$5 = {
158
167
  description?: string;
159
168
  comments?: TicketComment[];
160
169
  };
161
- declare function TicketBody({ issueNumber, notification, project, task, dueDate, startDate, assignees, reporter, team, location, related, description, comments, }: Props$5): react_jsx_runtime.JSX.Element;
170
+ declare function TicketBody({ issueNumber, notification, project, task, dueDate, startDate, assignees, reporter, team, location, related, description, comments, }: Props$4): react_jsx_runtime.JSX.Element;
162
171
 
163
172
  type SearchResult = {
164
173
  label: string;
165
174
  count: number;
166
175
  };
167
- type Props$4 = {
176
+ type Props$3 = {
168
177
  loading?: boolean;
169
178
  results?: SearchResult[];
170
179
  initialText?: string;
@@ -172,19 +181,19 @@ type Props$4 = {
172
181
  /** Optional debounce for onUpdate calls (ms). Defaults to 250ms. */
173
182
  debounceMs?: number;
174
183
  };
175
- declare function SearchBar({ loading, results, initialText, onUpdate, debounceMs, }: Props$4): react_jsx_runtime.JSX.Element;
184
+ declare function SearchBar({ loading, results, initialText, onUpdate, debounceMs, }: Props$3): react_jsx_runtime.JSX.Element;
176
185
 
177
- type FilterButtonKey = "fires" | "insights" | "unread" | "done" | "more" | IntegrationService;
186
+ type FilterButtonKey = FilterCategory | IntegrationService | MoreFilter;
178
187
  type NavButtonConfig = {
179
188
  active?: boolean;
180
189
  onClick?: () => void;
181
190
  disabled?: boolean;
182
191
  count?: string | number;
183
192
  };
184
- type Props$3 = {
193
+ type FilterBarProps = {
185
194
  buttons?: Partial<Record<FilterButtonKey, NavButtonConfig>>;
186
195
  };
187
- declare function FilterBar({ buttons }: Props$3): react_jsx_runtime.JSX.Element;
196
+ declare function FilterBar({ buttons }: FilterBarProps): react_jsx_runtime.JSX.Element;
188
197
 
189
198
  type IconSize = 16 | 20 | 24 | 36;
190
199
 
@@ -339,4 +348,4 @@ type Event = {
339
348
 
340
349
  declare const fakeMessages: ChatData[];
341
350
 
342
- export { AccountInfoField, AccountInfoSection, AccountIntegrationCard, AccountIntegrationCardItem, type Attachment, BaseIconName, BrandIcon, type CalendarData, ChatBody, type ChatData, ColorVariants, ConfirmationModal, type ConfirmationVariant, EmailBody, type EmailData, type Event, EventCard, type EventData, type EventGroup, EventState, type EventSummaryParts, EventType, type ExternalPerson, FilterBar, type FilterButtonKey, type IconSize, IntegrationService, type MessageData, Modal, NavBar, PreviewCard, SearchBar, type SearchResult, TicketBody, type TicketComment, type TicketData, UrgencyLevel, fakeMessages };
351
+ export { AccountInfoField, AccountInfoSection, AccountIntegrationCard, AccountIntegrationCardItem, type Attachment, BaseIconName, BrandIcon, type CalendarData, ChatBody, type ChatData, ColorVariants, ConfirmationModal, type ConfirmationVariant, EmailBody, type EmailData, type Event, EventCard, type EventData, type EventGroup, EventState, type EventSummaryParts, EventType, type ExternalPerson, FilterBar, type FilterButtonKey, FilterCategory, type IconSize, IntegrationService, type MessageData, Modal, MoreFilter, NavBar, PreviewCard, SearchBar, type SearchResult, TicketBody, type TicketComment, type TicketData, UrgencyLevel, fakeMessages };
package/dist/index.js CHANGED
@@ -11191,8 +11191,10 @@ __export(index_exports, {
11191
11191
  EventState: () => EventState,
11192
11192
  EventType: () => EventType,
11193
11193
  FilterBar: () => FilterBar,
11194
+ FilterCategory: () => FilterCategory,
11194
11195
  IntegrationService: () => IntegrationService,
11195
11196
  Modal: () => Modal,
11197
+ MoreFilter: () => MoreFilter,
11196
11198
  NavBar: () => NavBar,
11197
11199
  PreviewCard: () => PreviewCard,
11198
11200
  SearchBar: () => SearchBar,
@@ -11206,17 +11208,28 @@ module.exports = __toCommonJS(index_exports);
11206
11208
  var import_react2 = require("react");
11207
11209
 
11208
11210
  // src/types/global.ts
11209
- var IntegrationService = /* @__PURE__ */ ((IntegrationService5) => {
11210
- IntegrationService5["SLACK"] = "slack";
11211
- IntegrationService5["GMAIL"] = "google_mail";
11212
- IntegrationService5["GCAL"] = "google_calendar";
11213
- IntegrationService5["MSTEAMS"] = "microsoft_teams";
11214
- IntegrationService5["MSMAIL"] = "microsoft_mail";
11215
- IntegrationService5["MSCAL"] = "microsoft_calendar";
11216
- IntegrationService5["AJIRA"] = "atlassian_jira";
11217
- IntegrationService5["CLKUP"] = "clickup";
11218
- IntegrationService5["ASANA"] = "asana";
11219
- return IntegrationService5;
11211
+ var FilterCategory = /* @__PURE__ */ ((FilterCategory2) => {
11212
+ FilterCategory2["FIRES"] = "fires";
11213
+ FilterCategory2["INSIGHTS"] = "insights";
11214
+ FilterCategory2["NEW"] = "new";
11215
+ FilterCategory2["DONE"] = "done";
11216
+ return FilterCategory2;
11217
+ })(FilterCategory || {});
11218
+ var MoreFilter = /* @__PURE__ */ ((MoreFilter3) => {
11219
+ MoreFilter3["MORE"] = "more";
11220
+ return MoreFilter3;
11221
+ })(MoreFilter || {});
11222
+ var IntegrationService = /* @__PURE__ */ ((IntegrationService4) => {
11223
+ IntegrationService4["SLACK"] = "slack";
11224
+ IntegrationService4["GMAIL"] = "google_mail";
11225
+ IntegrationService4["GCAL"] = "google_calendar";
11226
+ IntegrationService4["MSTEAMS"] = "microsoft_teams";
11227
+ IntegrationService4["MSMAIL"] = "microsoft_mail";
11228
+ IntegrationService4["MSCAL"] = "microsoft_calendar";
11229
+ IntegrationService4["AJIRA"] = "atlassian_jira";
11230
+ IntegrationService4["CLKUP"] = "clickup";
11231
+ IntegrationService4["ASANA"] = "asana";
11232
+ return IntegrationService4;
11220
11233
  })(IntegrationService || {});
11221
11234
  var BaseIconName = /* @__PURE__ */ ((BaseIconName2) => {
11222
11235
  BaseIconName2["SEARCH"] = "search";
@@ -17304,160 +17317,116 @@ function FilterNavButton({ icon, label, active, onClick, totalItems }) {
17304
17317
 
17305
17318
  // src/components/organisms/filter_bar/filter_bar.tsx
17306
17319
  var import_jsx_runtime45 = require("react/jsx-runtime");
17307
- function FilterBar({ buttons }) {
17308
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex h-full min-h-0 flex-col w-[54px] items-center gap-4", children: [
17309
- !buttons?.fires?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17310
- FilterNavButton,
17320
+ var CATEGORY_FILTERS = [
17321
+ {
17322
+ filter: "fires" /* FIRES */,
17323
+ label: "Fires",
17324
+ icon: (active) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(FireIcon, { variant: active ? void 0 : "none" /* OUTLINED */ })
17325
+ },
17326
+ {
17327
+ filter: "insights" /* INSIGHTS */,
17328
+ label: "Q Insights",
17329
+ icon: (active) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(InsightsIcon, { variant: active ? void 0 : "none" /* OUTLINED */ })
17330
+ },
17331
+ {
17332
+ filter: "new" /* NEW */,
17333
+ label: "Unread",
17334
+ icon: (active) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Mail, { size: 36, fillColor: active ? "#BFF4F6" : void 0 })
17335
+ },
17336
+ {
17337
+ filter: "done" /* DONE */,
17338
+ label: "Done",
17339
+ icon: (active) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17340
+ CheckBox,
17311
17341
  {
17312
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17313
- FireIcon,
17314
- {
17315
- variant: buttons?.fires?.active ? void 0 : "none" /* OUTLINED */
17316
- }
17317
- ),
17318
- label: "Fires",
17319
- onClick: buttons?.fires?.onClick,
17320
- totalItems: buttons?.fires?.count
17342
+ size: 36,
17343
+ color: "#000000",
17344
+ fillColor: active ? "#E8FE99" : void 0
17321
17345
  }
17322
- ),
17323
- !buttons?.insights?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17346
+ )
17347
+ }
17348
+ ];
17349
+ var INTEGRATION_FILTERS = [
17350
+ { services: ["slack" /* SLACK */], label: "Slack", icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SlackIcon, {}) },
17351
+ {
17352
+ services: ["google_mail" /* GMAIL */],
17353
+ label: "Gmail",
17354
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(GoogleMailIcon, {})
17355
+ },
17356
+ {
17357
+ services: ["google_calendar" /* GCAL */],
17358
+ label: "Gcal",
17359
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(GoogleCalendarIcon, {})
17360
+ },
17361
+ {
17362
+ services: ["atlassian_jira" /* AJIRA */],
17363
+ label: "Jira",
17364
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(AtlassianIcon, {})
17365
+ },
17366
+ {
17367
+ services: ["microsoft_teams" /* MSTEAMS */],
17368
+ label: "Teams",
17369
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MicrosoftTeamsIcon, {})
17370
+ },
17371
+ {
17372
+ services: ["microsoft_mail" /* MSMAIL */, "microsoft_calendar" /* MSCAL */],
17373
+ label: "Outlook",
17374
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MicrosoftOutlookMailIcon, {})
17375
+ },
17376
+ {
17377
+ services: ["clickup" /* CLKUP */],
17378
+ label: "ClickUp",
17379
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ClickupIcon, {})
17380
+ },
17381
+ { services: ["asana" /* ASANA */], label: "Asana", icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(AsanaIcon, {}) }
17382
+ ];
17383
+ function FilterBar({ buttons }) {
17384
+ const renderCategoryButton = ({ filter, label, icon }) => {
17385
+ const config = buttons?.[filter];
17386
+ if (config?.disabled) return null;
17387
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17324
17388
  FilterNavButton,
17325
17389
  {
17326
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17327
- InsightsIcon,
17328
- {
17329
- variant: buttons?.insights?.active ? void 0 : "none" /* OUTLINED */
17330
- }
17331
- ),
17332
- label: "Q Insights",
17333
- onClick: buttons?.insights?.onClick,
17334
- totalItems: buttons?.insights?.count
17335
- }
17336
- ),
17337
- !buttons?.unread?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17390
+ icon: icon(config?.active),
17391
+ label,
17392
+ onClick: config?.onClick,
17393
+ totalItems: config?.count
17394
+ },
17395
+ filter
17396
+ );
17397
+ };
17398
+ const renderIntegrationButton = ({
17399
+ services,
17400
+ label,
17401
+ icon
17402
+ }) => {
17403
+ const configs = services.map((service) => buttons?.[service]);
17404
+ const allDisabled = configs.every((c) => c?.disabled);
17405
+ if (allDisabled) return null;
17406
+ const anyActive = configs.some((c) => c?.active);
17407
+ const onClick = configs.find((c) => c?.onClick)?.onClick;
17408
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17338
17409
  FilterNavButton,
17339
17410
  {
17340
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17341
- Mail,
17342
- {
17343
- size: 36,
17344
- fillColor: buttons?.unread?.active ? "#BFF4F6" : void 0
17345
- }
17346
- ),
17347
- label: "Unread",
17348
- onClick: buttons?.unread?.onClick,
17349
- totalItems: buttons?.unread?.count
17350
- }
17351
- ),
17352
- !buttons?.done?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17411
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: anyActive ? "" : "grayscale", children: icon }),
17412
+ label,
17413
+ onClick
17414
+ },
17415
+ services.join("-")
17416
+ );
17417
+ };
17418
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex h-full w-[54px] min-h-0 flex-col items-center gap-4", children: [
17419
+ CATEGORY_FILTERS.map(renderCategoryButton),
17420
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("hr", { className: "w-full border-0.5 text-qtneutral-700" }),
17421
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex-1 w-full min-h-0 min-w-[58px] overflow-y-auto flex flex-col items-center gap-4 overscroll-contain", children: INTEGRATION_FILTERS.map(renderIntegrationButton) }),
17422
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("hr", { className: "w-full border-0.5 text-qtneutral-700" }),
17423
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17353
17424
  FilterNavButton,
17354
17425
  {
17355
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17356
- CheckBox,
17357
- {
17358
- size: 36,
17359
- color: "#000000",
17360
- fillColor: buttons?.done?.active ? "#E8FE99" : void 0
17361
- }
17362
- ),
17363
- label: "Done",
17364
- onClick: buttons?.done?.onClick,
17365
- totalItems: buttons?.done?.count
17426
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(PlusLarge, { size: 36 }),
17427
+ onClick: buttons?.more?.onClick
17366
17428
  }
17367
- ),
17368
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("hr", { className: "w-full border-0.5 text-qtneutral-700" }),
17369
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex-1 min-h-0 w-full overflow-y-auto flex flex-col gap-4 overscroll-contain items-center min-w-[58px]", children: [
17370
- !buttons?.slack?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17371
- FilterNavButton,
17372
- {
17373
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: buttons?.slack?.active ? "" : "grayscale", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SlackIcon, {}) }),
17374
- label: "slack",
17375
- onClick: buttons?.slack?.onClick
17376
- }
17377
- ),
17378
- !buttons?.google_mail?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17379
- FilterNavButton,
17380
- {
17381
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: buttons?.google_mail?.active ? "" : "grayscale", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(GoogleMailIcon, {}) }),
17382
- label: "Gmail",
17383
- onClick: buttons?.google_mail?.onClick
17384
- }
17385
- ),
17386
- !buttons?.google_calendar?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17387
- FilterNavButton,
17388
- {
17389
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17390
- "div",
17391
- {
17392
- className: buttons?.google_calendar?.active ? "" : "grayscale",
17393
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(GoogleCalendarIcon, {})
17394
- }
17395
- ),
17396
- label: "Gcal",
17397
- onClick: buttons?.google_calendar?.onClick
17398
- }
17399
- ),
17400
- !buttons?.atlassian_jira?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17401
- FilterNavButton,
17402
- {
17403
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17404
- "div",
17405
- {
17406
- className: buttons?.atlassian_jira?.active ? "" : "grayscale",
17407
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(AtlassianIcon, {})
17408
- }
17409
- ),
17410
- label: "Jira",
17411
- onClick: buttons?.atlassian_jira?.onClick
17412
- }
17413
- ),
17414
- !buttons?.microsoft_teams?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17415
- FilterNavButton,
17416
- {
17417
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17418
- "div",
17419
- {
17420
- className: buttons?.microsoft_teams?.active ? "" : "grayscale",
17421
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MicrosoftTeamsIcon, {})
17422
- }
17423
- ),
17424
- label: "Teams",
17425
- onClick: buttons?.microsoft_teams?.onClick
17426
- }
17427
- ),
17428
- !(buttons?.microsoft_mail?.disabled && buttons?.microsoft_calendar?.disabled) && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17429
- FilterNavButton,
17430
- {
17431
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17432
- "div",
17433
- {
17434
- className: buttons?.microsoft_calendar?.active || buttons?.microsoft_mail?.active ? "" : "grayscale",
17435
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MicrosoftOutlookMailIcon, {})
17436
- }
17437
- ),
17438
- label: "Outlook",
17439
- onClick: buttons?.microsoft_mail?.onClick || buttons?.microsoft_calendar?.onClick
17440
- }
17441
- ),
17442
- !buttons?.clickup?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17443
- FilterNavButton,
17444
- {
17445
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: buttons?.clickup?.active ? "" : "grayscale", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ClickupIcon, {}) }),
17446
- label: "ClickUp",
17447
- onClick: buttons?.clickup?.onClick
17448
- }
17449
- ),
17450
- !buttons?.asana?.disabled && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
17451
- FilterNavButton,
17452
- {
17453
- icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: buttons?.asana?.active ? "" : "grayscale", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(AsanaIcon, {}) }),
17454
- label: "Asana",
17455
- onClick: buttons?.asana?.onClick
17456
- }
17457
- )
17458
- ] }),
17459
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("hr", { className: "w-full border-0.5 text-qtneutral-700" }),
17460
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { onClick: buttons?.more?.onClick, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(FilterNavButton, { icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(PlusLarge, { size: 36 }) }) })
17429
+ )
17461
17430
  ] });
17462
17431
  }
17463
17432
 
@@ -17817,8 +17786,10 @@ This is a *markdown* **example**.
17817
17786
  EventState,
17818
17787
  EventType,
17819
17788
  FilterBar,
17789
+ FilterCategory,
17820
17790
  IntegrationService,
17821
17791
  Modal,
17792
+ MoreFilter,
17822
17793
  NavBar,
17823
17794
  PreviewCard,
17824
17795
  SearchBar,