@lateralus-ai/shipping-ui 1.4.16 → 2.0.0-dev.0

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.
Files changed (438) hide show
  1. package/README.md +70 -53
  2. package/dist/components/Checkbox.d.ts +9 -0
  3. package/dist/components/Chip.d.ts +15 -0
  4. package/dist/components/EmptyState.d.ts +10 -0
  5. package/dist/components/Entry.d.ts +13 -0
  6. package/dist/components/Header.d.ts +9 -0
  7. package/dist/components/Input.d.ts +11 -0
  8. package/dist/components/InputType.d.ts +10 -0
  9. package/dist/components/ModalPanel.d.ts +7 -7
  10. package/dist/components/PdfViewer/ImageViewer.d.ts +2 -2
  11. package/dist/components/PdfViewer/PdfViewer.d.ts +2 -2
  12. package/dist/components/ReportInput.d.ts +10 -0
  13. package/dist/components/Tab.d.ts +7 -0
  14. package/dist/components/Tabs.d.ts +11 -12
  15. package/dist/components/index.d.ts +11 -4
  16. package/dist/domain/Filters/FilterPill.d.ts +6 -0
  17. package/dist/domain/Filters/FilteredPill.d.ts +8 -0
  18. package/dist/domain/Filters/FiltersBar.d.ts +12 -0
  19. package/dist/domain/Filters/index.d.ts +3 -0
  20. package/dist/domain/Forms/FormCard.d.ts +12 -0
  21. package/dist/domain/Forms/FormHeader.d.ts +8 -0
  22. package/dist/domain/Forms/ListRow.d.ts +8 -0
  23. package/dist/domain/Forms/RiskMeter.d.ts +8 -0
  24. package/dist/domain/Forms/index.d.ts +4 -0
  25. package/dist/domain/Library/File.d.ts +8 -0
  26. package/dist/domain/Library/Folder.d.ts +8 -0
  27. package/dist/domain/Library/Folders.d.ts +11 -0
  28. package/dist/domain/Library/ListRow.d.ts +8 -0
  29. package/dist/domain/Library/Navigation.d.ts +7 -0
  30. package/dist/domain/Library/index.d.ts +5 -0
  31. package/dist/domain/Report/InfoHeading.d.ts +7 -0
  32. package/dist/domain/Report/InfoRow.d.ts +8 -0
  33. package/dist/domain/Report/Report.d.ts +7 -0
  34. package/dist/domain/Report/SectionHeader.d.ts +10 -0
  35. package/dist/domain/Report/TaskRow.d.ts +11 -0
  36. package/dist/domain/Report/index.d.ts +5 -0
  37. package/dist/domain/Settings/EquipmentRow.d.ts +8 -0
  38. package/dist/domain/Settings/MemberRow.d.ts +11 -0
  39. package/dist/domain/Settings/SettingRow.d.ts +10 -0
  40. package/dist/domain/Settings/index.d.ts +3 -0
  41. package/dist/domain/Ships/ShipRow.d.ts +10 -0
  42. package/dist/domain/Ships/index.d.ts +1 -0
  43. package/dist/domain/Workflows/GroupHeader.d.ts +8 -0
  44. package/dist/domain/Workflows/Importance.d.ts +8 -0
  45. package/dist/domain/Workflows/Progress.d.ts +7 -0
  46. package/dist/domain/Workflows/Question.d.ts +9 -0
  47. package/dist/domain/Workflows/StatusPopover.d.ts +7 -0
  48. package/dist/domain/Workflows/Task.d.ts +9 -0
  49. package/dist/domain/Workflows/TaskHeader.d.ts +9 -0
  50. package/dist/domain/Workflows/WorkflowFilters.d.ts +6 -0
  51. package/dist/domain/Workflows/WorkflowForm.d.ts +8 -0
  52. package/dist/domain/Workflows/WorkflowHeader.d.ts +11 -0
  53. package/dist/domain/Workflows/WorkflowListItem.d.ts +11 -0
  54. package/dist/domain/Workflows/WorkflowProgress.d.ts +6 -0
  55. package/dist/domain/Workflows/WorkflowRow.d.ts +10 -0
  56. package/dist/domain/Workflows/index.d.ts +13 -0
  57. package/dist/domain/index.d.ts +7 -0
  58. package/dist/icons/ArrowIcon.d.ts +8 -0
  59. package/dist/icons/ChevronIcon.d.ts +8 -0
  60. package/dist/icons/Icon.d.ts +96 -0
  61. package/dist/icons/arrow-paths.d.ts +12 -0
  62. package/dist/icons/chevron-paths.d.ts +27 -0
  63. package/dist/icons/createIcon.d.ts +34 -0
  64. package/dist/icons/generated.d.ts +68 -0
  65. package/dist/icons/icon-sizes.d.ts +5 -0
  66. package/dist/icons/icons-data.d.ts +1023 -0
  67. package/dist/icons/index.d.ts +13 -0
  68. package/dist/icons/types.d.ts +10 -0
  69. package/dist/illustrations/AuditPreparation.d.ts +4 -0
  70. package/dist/illustrations/CompletedTasks.d.ts +4 -0
  71. package/dist/illustrations/Creation.d.ts +4 -0
  72. package/dist/illustrations/InternalAudit.d.ts +4 -0
  73. package/dist/illustrations/Invite.d.ts +4 -0
  74. package/dist/illustrations/PortStateControl.d.ts +4 -0
  75. package/dist/illustrations/Processing.d.ts +4 -0
  76. package/dist/illustrations/QuestionsDone.d.ts +4 -0
  77. package/dist/illustrations/RightShipInspection.d.ts +4 -0
  78. package/dist/illustrations/Upload.d.ts +4 -0
  79. package/dist/illustrations/WorkflowCreated.d.ts +4 -0
  80. package/dist/illustrations/Workflows.d.ts +4 -0
  81. package/dist/illustrations/createIllustration.d.ts +11 -0
  82. package/dist/illustrations/index.d.ts +13 -0
  83. package/dist/index.cjs +64 -80
  84. package/dist/index.d.ts +9 -3
  85. package/dist/index.esm.js +10964 -36537
  86. package/dist/patterns/Chat/Attachment.d.ts +6 -0
  87. package/dist/patterns/Chat/ChatEntry.d.ts +10 -0
  88. package/dist/patterns/Chat/ChatHeader.d.ts +7 -0
  89. package/dist/patterns/Chat/ChatInput.d.ts +5 -0
  90. package/dist/patterns/Chat/ChatStatus.d.ts +6 -0
  91. package/dist/patterns/Chat/ChatTile.d.ts +9 -0
  92. package/dist/patterns/Chat/Copilot.d.ts +8 -0
  93. package/dist/patterns/Chat/Draft.d.ts +5 -0
  94. package/dist/patterns/Chat/Greeting.d.ts +7 -0
  95. package/dist/patterns/Chat/Reference.d.ts +6 -0
  96. package/dist/patterns/Chat/Source.d.ts +6 -0
  97. package/dist/patterns/Chat/Sources.d.ts +5 -0
  98. package/dist/patterns/Chat/Suggestion.d.ts +5 -0
  99. package/dist/patterns/Chat/Suggestions.d.ts +4 -0
  100. package/dist/patterns/Chat/index.d.ts +14 -0
  101. package/dist/patterns/Modal/Invitee.d.ts +8 -0
  102. package/dist/patterns/Modal/ModalFooter.d.ts +6 -0
  103. package/dist/patterns/Modal/ModalHeader.d.ts +10 -0
  104. package/dist/patterns/Modal/index.d.ts +3 -0
  105. package/dist/patterns/Search/Pill.d.ts +10 -0
  106. package/dist/patterns/Search/PillInfo.d.ts +8 -0
  107. package/dist/patterns/Search/ResultRow.d.ts +10 -0
  108. package/dist/patterns/Search/SearchModal.d.ts +6 -0
  109. package/dist/patterns/Search/SectionHeader.d.ts +5 -0
  110. package/dist/patterns/Search/index.d.ts +5 -0
  111. package/dist/patterns/Sidebar/Account.d.ts +22 -0
  112. package/dist/patterns/Sidebar/ActivityNavGroup.d.ts +17 -0
  113. package/dist/patterns/Sidebar/CollapsibleNavGroup.d.ts +24 -0
  114. package/dist/patterns/Sidebar/Indicator.d.ts +6 -0
  115. package/dist/patterns/Sidebar/NewChat.d.ts +10 -0
  116. package/dist/patterns/Sidebar/Sidebar.d.ts +13 -0
  117. package/dist/patterns/Sidebar/SidebarAction.d.ts +11 -0
  118. package/dist/patterns/Sidebar/SidebarEntry.d.ts +25 -0
  119. package/dist/patterns/Sidebar/SidebarHeading.d.ts +11 -0
  120. package/dist/patterns/Sidebar/SidebarLink.d.ts +22 -0
  121. package/dist/patterns/Sidebar/SidebarShell.d.ts +11 -0
  122. package/dist/patterns/Sidebar/Switcher.d.ts +8 -0
  123. package/dist/patterns/Sidebar/constants.d.ts +2 -0
  124. package/dist/patterns/Sidebar/figma-assets.d.ts +3 -0
  125. package/dist/patterns/Sidebar/figma-demo-content.d.ts +75 -0
  126. package/dist/patterns/Sidebar/figma-sidebar-nav.d.ts +12 -0
  127. package/dist/patterns/Sidebar/index.d.ts +13 -0
  128. package/dist/patterns/Sidebar/sidebar-styles.d.ts +45 -0
  129. package/dist/patterns/Skeleton/Skeleton.d.ts +6 -0
  130. package/dist/patterns/Skeleton/index.d.ts +1 -0
  131. package/dist/patterns/index.d.ts +5 -0
  132. package/dist/primitives/Avatar.d.ts +10 -0
  133. package/dist/primitives/Badge.d.ts +11 -0
  134. package/dist/primitives/Button.d.ts +13 -0
  135. package/dist/primitives/Callout.d.ts +7 -0
  136. package/dist/primitives/Count.d.ts +5 -0
  137. package/dist/primitives/DropdownMenu.d.ts +15 -0
  138. package/dist/primitives/GroupedAvatars.d.ts +7 -0
  139. package/dist/primitives/IconButton.d.ts +16 -0
  140. package/dist/primitives/Logo.d.ts +8 -0
  141. package/dist/primitives/MenuItem.d.ts +7 -0
  142. package/dist/primitives/Switch.d.ts +7 -0
  143. package/dist/primitives/ThinkingDot.d.ts +4 -0
  144. package/dist/primitives/Tooltip.d.ts +12 -0
  145. package/dist/primitives/index.d.ts +13 -0
  146. package/dist/style.css +1 -1
  147. package/dist/tailwind-theme.d.ts +234 -198
  148. package/dist/tokens/colors.d.ts +148 -0
  149. package/dist/tokens/elevation.d.ts +11 -0
  150. package/dist/tokens/index.d.ts +4 -0
  151. package/dist/tokens/semantic.d.ts +89 -0
  152. package/dist/tokens/typography.d.ts +85 -0
  153. package/package.json +27 -5
  154. package/src/components/Checkbox.tsx +77 -0
  155. package/src/components/Chip.tsx +69 -0
  156. package/src/components/EmptyState.tsx +44 -0
  157. package/src/components/Entry.tsx +64 -0
  158. package/src/components/Header.tsx +39 -0
  159. package/src/components/Input.tsx +69 -0
  160. package/src/components/InputType.tsx +76 -0
  161. package/src/components/ModalPanel.tsx +22 -37
  162. package/src/components/PdfViewer/ImageViewer.tsx +121 -182
  163. package/src/components/PdfViewer/PdfViewer.tsx +103 -155
  164. package/src/components/ReportInput.tsx +65 -0
  165. package/src/components/Tab.tsx +33 -0
  166. package/src/components/Tabs.tsx +43 -38
  167. package/src/components/index.ts +11 -4
  168. package/src/domain/Filters/FilterPill.tsx +25 -0
  169. package/src/domain/Filters/FilteredPill.tsx +39 -0
  170. package/src/domain/Filters/FiltersBar.tsx +76 -0
  171. package/src/domain/Filters/index.ts +3 -0
  172. package/src/domain/Forms/FormCard.tsx +61 -0
  173. package/src/domain/Forms/FormHeader.tsx +34 -0
  174. package/src/domain/Forms/ListRow.tsx +40 -0
  175. package/src/domain/Forms/RiskMeter.tsx +50 -0
  176. package/src/domain/Forms/index.ts +4 -0
  177. package/src/domain/Library/File.tsx +59 -0
  178. package/src/domain/Library/Folder.tsx +55 -0
  179. package/src/domain/Library/Folders.tsx +43 -0
  180. package/src/domain/Library/ListRow.tsx +40 -0
  181. package/src/domain/Library/Navigation.tsx +31 -0
  182. package/src/domain/Library/index.ts +5 -0
  183. package/src/domain/Report/InfoHeading.tsx +25 -0
  184. package/src/domain/Report/InfoRow.tsx +35 -0
  185. package/src/domain/Report/Report.tsx +53 -0
  186. package/src/domain/Report/SectionHeader.tsx +43 -0
  187. package/src/domain/Report/TaskRow.tsx +57 -0
  188. package/src/domain/Report/index.ts +5 -0
  189. package/src/domain/Settings/EquipmentRow.tsx +39 -0
  190. package/src/domain/Settings/MemberRow.tsx +53 -0
  191. package/src/domain/Settings/SettingRow.tsx +66 -0
  192. package/src/domain/Settings/index.ts +3 -0
  193. package/src/domain/Ships/ShipRow.tsx +49 -0
  194. package/src/domain/Ships/index.ts +1 -0
  195. package/src/domain/Workflows/GroupHeader.tsx +48 -0
  196. package/src/domain/Workflows/Importance.tsx +48 -0
  197. package/src/domain/Workflows/Progress.tsx +55 -0
  198. package/src/domain/Workflows/Question.tsx +42 -0
  199. package/src/domain/Workflows/StatusPopover.tsx +53 -0
  200. package/src/domain/Workflows/Task.tsx +46 -0
  201. package/src/domain/Workflows/TaskHeader.tsx +51 -0
  202. package/src/domain/Workflows/WorkflowFilters.tsx +40 -0
  203. package/src/domain/Workflows/WorkflowForm.tsx +40 -0
  204. package/src/domain/Workflows/WorkflowHeader.tsx +62 -0
  205. package/src/domain/Workflows/WorkflowListItem.tsx +45 -0
  206. package/src/domain/Workflows/WorkflowProgress.tsx +36 -0
  207. package/src/domain/Workflows/WorkflowRow.tsx +43 -0
  208. package/src/domain/Workflows/index.ts +13 -0
  209. package/src/domain/index.ts +37 -0
  210. package/src/icons/ArrowIcon.tsx +42 -0
  211. package/src/icons/ChevronIcon.tsx +42 -0
  212. package/src/icons/Icon.tsx +184 -0
  213. package/src/icons/arrow-paths.ts +8 -0
  214. package/src/icons/chevron-paths.ts +17 -0
  215. package/src/icons/createIcon.tsx +128 -0
  216. package/src/icons/generated.tsx +71 -0
  217. package/src/icons/icon-sizes.ts +20 -0
  218. package/src/icons/icons-data.ts +656 -0
  219. package/src/icons/index.ts +25 -0
  220. package/src/icons/types.ts +18 -0
  221. package/src/illustrations/AuditPreparation.tsx +15 -0
  222. package/src/illustrations/CompletedTasks.tsx +16 -0
  223. package/src/illustrations/Creation.tsx +13 -0
  224. package/src/illustrations/InternalAudit.tsx +13 -0
  225. package/src/illustrations/Invite.tsx +13 -0
  226. package/src/illustrations/PortStateControl.tsx +13 -0
  227. package/src/illustrations/Processing.tsx +17 -0
  228. package/src/illustrations/QuestionsDone.tsx +16 -0
  229. package/src/illustrations/RightShipInspection.tsx +18 -0
  230. package/src/illustrations/Upload.tsx +12 -0
  231. package/src/illustrations/WorkflowCreated.tsx +13 -0
  232. package/src/illustrations/Workflows.tsx +13 -0
  233. package/src/illustrations/createIllustration.tsx +30 -0
  234. package/src/illustrations/index.ts +14 -0
  235. package/src/index.ts +49 -3
  236. package/src/patterns/Chat/Attachment.tsx +27 -0
  237. package/src/patterns/Chat/ChatEntry.tsx +41 -0
  238. package/src/patterns/Chat/ChatHeader.tsx +39 -0
  239. package/src/patterns/Chat/ChatInput.tsx +35 -0
  240. package/src/patterns/Chat/ChatStatus.tsx +26 -0
  241. package/src/patterns/Chat/ChatTile.tsx +40 -0
  242. package/src/patterns/Chat/Copilot.tsx +50 -0
  243. package/src/patterns/Chat/Draft.tsx +23 -0
  244. package/src/patterns/Chat/Greeting.tsx +32 -0
  245. package/src/patterns/Chat/Reference.tsx +26 -0
  246. package/src/patterns/Chat/Source.tsx +27 -0
  247. package/src/patterns/Chat/Sources.tsx +23 -0
  248. package/src/patterns/Chat/Suggestion.tsx +23 -0
  249. package/src/patterns/Chat/Suggestions.tsx +21 -0
  250. package/src/patterns/Chat/index.ts +14 -0
  251. package/src/patterns/Modal/Invitee.tsx +44 -0
  252. package/src/patterns/Modal/ModalFooter.tsx +39 -0
  253. package/src/patterns/Modal/ModalHeader.tsx +77 -0
  254. package/src/patterns/Modal/index.ts +3 -0
  255. package/src/patterns/Search/Pill.tsx +44 -0
  256. package/src/patterns/Search/PillInfo.tsx +41 -0
  257. package/src/patterns/Search/ResultRow.tsx +52 -0
  258. package/src/patterns/Search/SearchModal.tsx +88 -0
  259. package/src/patterns/Search/SectionHeader.tsx +20 -0
  260. package/src/patterns/Search/index.ts +5 -0
  261. package/src/patterns/Sidebar/Account.tsx +193 -0
  262. package/src/patterns/Sidebar/ActivityNavGroup.tsx +71 -0
  263. package/src/patterns/Sidebar/CollapsibleNavGroup.tsx +106 -0
  264. package/src/patterns/Sidebar/Indicator.tsx +14 -0
  265. package/src/patterns/Sidebar/NewChat.tsx +71 -0
  266. package/src/patterns/Sidebar/Sidebar.tsx +363 -0
  267. package/src/patterns/Sidebar/SidebarAction.tsx +55 -0
  268. package/src/patterns/Sidebar/SidebarEntry.tsx +129 -0
  269. package/src/patterns/Sidebar/SidebarHeading.tsx +38 -0
  270. package/src/patterns/Sidebar/SidebarLink.tsx +125 -0
  271. package/src/patterns/Sidebar/SidebarShell.tsx +32 -0
  272. package/src/patterns/Sidebar/Switcher.tsx +116 -0
  273. package/src/patterns/Sidebar/assets/account-avatar-24.jpg +0 -0
  274. package/src/patterns/Sidebar/assets/account-avatar.jpg +0 -0
  275. package/src/patterns/Sidebar/assets/indicator-compliance.png +0 -0
  276. package/src/patterns/Sidebar/assets/indicator-technical.png +0 -0
  277. package/src/patterns/Sidebar/assets/logo-compliance-mark.png +5 -0
  278. package/src/patterns/Sidebar/assets/logo-compliance-mask.png +13 -0
  279. package/src/patterns/Sidebar/assets/logo-compliance.svg +17 -0
  280. package/src/patterns/Sidebar/assets/logo-technical-avatar.svg +17 -0
  281. package/src/patterns/Sidebar/assets/logo-technical-mark.png +5 -0
  282. package/src/patterns/Sidebar/assets/logo-technical.svg +16 -0
  283. package/src/patterns/Sidebar/constants.ts +2 -0
  284. package/src/patterns/Sidebar/figma-assets.ts +4 -0
  285. package/src/patterns/Sidebar/figma-demo-content.ts +30 -0
  286. package/src/patterns/Sidebar/figma-sidebar-nav.ts +79 -0
  287. package/src/patterns/Sidebar/index.ts +13 -0
  288. package/src/patterns/Sidebar/sidebar-styles.ts +101 -0
  289. package/src/patterns/Skeleton/Skeleton.tsx +57 -0
  290. package/src/patterns/Skeleton/index.ts +1 -0
  291. package/src/patterns/index.ts +5 -0
  292. package/src/primitives/Avatar.tsx +71 -0
  293. package/src/primitives/Badge.tsx +34 -0
  294. package/src/primitives/Button.tsx +67 -0
  295. package/src/primitives/Callout.tsx +21 -0
  296. package/src/primitives/Count.tsx +18 -0
  297. package/src/primitives/DropdownMenu.tsx +60 -0
  298. package/src/primitives/GroupedAvatars.tsx +36 -0
  299. package/src/primitives/IconButton.tsx +56 -0
  300. package/src/primitives/Logo.tsx +43 -0
  301. package/src/primitives/MenuItem.tsx +35 -0
  302. package/src/primitives/Switch.tsx +38 -0
  303. package/src/primitives/ThinkingDot.tsx +34 -0
  304. package/src/primitives/Tooltip.tsx +42 -0
  305. package/src/primitives/index.ts +13 -0
  306. package/src/stories/_layout/FigmaPage.tsx +94 -0
  307. package/src/stories/_layout/index.ts +8 -0
  308. package/src/stories/canvases/ButtonsCanvas.tsx +57 -0
  309. package/src/stories/canvases/ButtonsMatrixCanvas.tsx +64 -0
  310. package/src/stories/canvases/ChatCanvas.tsx +130 -0
  311. package/src/stories/canvases/ColorTokensCanvas.tsx +16 -0
  312. package/src/stories/canvases/ColorsCanvas.tsx +101 -0
  313. package/src/stories/canvases/ContentCanvas.tsx +88 -0
  314. package/src/stories/canvases/CoreCanvas.tsx +125 -0
  315. package/src/stories/canvases/DomainFormsCanvas.tsx +67 -0
  316. package/src/stories/canvases/FiltersCanvas.tsx +41 -0
  317. package/src/stories/canvases/FormsCanvas.tsx +71 -0
  318. package/src/stories/canvases/IconsCanvas.tsx +99 -0
  319. package/src/stories/canvases/IllustrationsCanvas.tsx +50 -0
  320. package/src/stories/canvases/LibraryCanvas.tsx +67 -0
  321. package/src/stories/canvases/ModalsCanvas.tsx +54 -0
  322. package/src/stories/canvases/RaiseLevelsCanvas.tsx +27 -0
  323. package/src/stories/canvases/ReportCanvas.tsx +33 -0
  324. package/src/stories/canvases/ReportLayoutCanvas.tsx +19 -0
  325. package/src/stories/canvases/SearchCanvas.tsx +65 -0
  326. package/src/stories/canvases/SettingsCanvas.tsx +41 -0
  327. package/src/stories/canvases/ShipsCanvas.tsx +38 -0
  328. package/src/stories/canvases/SidebarCanvas.tsx +147 -0
  329. package/src/stories/canvases/SidebarLayoutsCanvas.tsx +71 -0
  330. package/src/stories/canvases/SidebarPlayground.tsx +35 -0
  331. package/src/stories/canvases/SkeletonsCanvas.tsx +30 -0
  332. package/src/stories/canvases/TypographyCanvas.tsx +53 -0
  333. package/src/stories/canvases/WorkflowsCanvas.tsx +129 -0
  334. package/src/stories/canvases/figma-icons-layout.ts +318 -0
  335. package/src/stories/canvases/figma-sidebar-layout.ts +212 -0
  336. package/src/stories/canvases/figma-sidebar-layouts-layout.ts +84 -0
  337. package/src/stories/canvases/figma-widths.ts +28 -0
  338. package/src/stories/canvases/helpers.tsx +163 -0
  339. package/src/stories/components/Buttons.stories.tsx +12 -0
  340. package/src/stories/components/Chat.stories.tsx +12 -0
  341. package/src/stories/components/Content.stories.tsx +12 -0
  342. package/src/stories/components/Core.stories.tsx +12 -0
  343. package/src/stories/components/DomainForms.stories.tsx +12 -0
  344. package/src/stories/components/Filters.stories.tsx +12 -0
  345. package/src/stories/components/Forms.stories.tsx +12 -0
  346. package/src/stories/components/Icons.stories.tsx +12 -0
  347. package/src/stories/components/Illustrations.stories.tsx +12 -0
  348. package/src/stories/components/Library.stories.tsx +12 -0
  349. package/src/stories/components/Modals.stories.tsx +12 -0
  350. package/src/stories/components/Report.stories.tsx +12 -0
  351. package/src/stories/components/ReportLayout.stories.tsx +12 -0
  352. package/src/stories/components/Search.stories.tsx +12 -0
  353. package/src/stories/components/Settings.stories.tsx +12 -0
  354. package/src/stories/components/Ships.stories.tsx +12 -0
  355. package/src/stories/components/Sidebar.stories.tsx +37 -0
  356. package/src/stories/components/SidebarLayouts.stories.tsx +12 -0
  357. package/src/stories/components/Skeletons.stories.tsx +12 -0
  358. package/src/stories/components/Workflows.stories.tsx +12 -0
  359. package/src/stories/style-guide/Buttons.stories.tsx +12 -0
  360. package/src/stories/style-guide/ColorTokens.stories.tsx +12 -0
  361. package/src/stories/style-guide/Colors.stories.tsx +12 -0
  362. package/src/stories/style-guide/RaiseLevels.stories.tsx +12 -0
  363. package/src/stories/style-guide/Typography.stories.tsx +12 -0
  364. package/src/style.css +169 -2
  365. package/src/tailwind-theme.ts +164 -240
  366. package/src/tokens/colors.ts +82 -0
  367. package/src/tokens/elevation.ts +12 -0
  368. package/src/tokens/index.ts +4 -0
  369. package/src/tokens/semantic.ts +89 -0
  370. package/src/tokens/typography.ts +21 -0
  371. package/dist/components/HelloWorld.d.ts +0 -1
  372. package/dist/components/InputPrompt.d.ts +0 -20
  373. package/dist/components/SearchModal.d.ts +0 -24
  374. package/dist/components/Sidebar/Button.d.ts +0 -7
  375. package/dist/components/Sidebar/Container.d.ts +0 -5
  376. package/dist/components/Sidebar/Item.d.ts +0 -9
  377. package/dist/components/Sidebar/Layout.d.ts +0 -10
  378. package/dist/components/Sidebar/Provider.d.ts +0 -14
  379. package/dist/components/Sidebar/SecondaryItem.d.ts +0 -9
  380. package/dist/components/Sidebar/SideContainer.d.ts +0 -5
  381. package/dist/components/Sidebar/ToggleCollapseButton.d.ts +0 -1
  382. package/dist/components/Sidebar/index.d.ts +0 -8
  383. package/dist/components/icons/CloseSidebarIcon.d.ts +0 -2
  384. package/dist/components/icons/CloseSidebarMidIcon.d.ts +0 -1
  385. package/dist/components/icons/ExpandIcon.d.ts +0 -3
  386. package/dist/components/icons/SendArrowIcon.d.ts +0 -4
  387. package/dist/components/icons/SendArrowIconGreen.d.ts +0 -4
  388. package/dist/components/icons/SettingsIcon.d.ts +0 -3
  389. package/dist/components/icons/XIcon.d.ts +0 -3
  390. package/dist/material-theme.d.ts +0 -442
  391. package/dist/stories/Buttons.d.ts +0 -1
  392. package/dist/stories/Checkbox.d.ts +0 -1
  393. package/dist/stories/ColorPalette.d.ts +0 -1
  394. package/dist/stories/Dropdowns.d.ts +0 -1
  395. package/dist/stories/InputPrompt.d.ts +0 -1
  396. package/dist/stories/SearchModal.d.ts +0 -1
  397. package/dist/stories/Sidebar.d.ts +0 -1
  398. package/dist/stories/Typography.d.ts +0 -1
  399. package/src/components/HelloWorld.tsx +0 -3
  400. package/src/components/InputPrompt.tsx +0 -96
  401. package/src/components/SearchModal.tsx +0 -320
  402. package/src/components/Sidebar/Button.tsx +0 -20
  403. package/src/components/Sidebar/Container.tsx +0 -31
  404. package/src/components/Sidebar/Item.tsx +0 -39
  405. package/src/components/Sidebar/Layout.tsx +0 -32
  406. package/src/components/Sidebar/Provider.tsx +0 -47
  407. package/src/components/Sidebar/SecondaryItem.tsx +0 -39
  408. package/src/components/Sidebar/SideContainer.tsx +0 -31
  409. package/src/components/Sidebar/ToggleCollapseButton.tsx +0 -24
  410. package/src/components/Sidebar/index.ts +0 -8
  411. package/src/components/icons/CloseSidebarIcon.tsx +0 -19
  412. package/src/components/icons/CloseSidebarMidIcon.tsx +0 -19
  413. package/src/components/icons/ExpandIcon.tsx +0 -21
  414. package/src/components/icons/SendArrowIcon.tsx +0 -23
  415. package/src/components/icons/SendArrowIconGreen.tsx +0 -17
  416. package/src/components/icons/SettingsIcon.tsx +0 -33
  417. package/src/components/icons/XIcon.tsx +0 -21
  418. package/src/material-theme.ts +0 -477
  419. package/src/stories/Buttons.stories.tsx +0 -15
  420. package/src/stories/Buttons.tsx +0 -52
  421. package/src/stories/Checkbox.stories.tsx +0 -15
  422. package/src/stories/Checkbox.tsx +0 -56
  423. package/src/stories/ColorPalette.stories.tsx +0 -15
  424. package/src/stories/ColorPalette.tsx +0 -85
  425. package/src/stories/DocumentEditor.stories.tsx +0 -287
  426. package/src/stories/Dropdowns.stories.tsx +0 -15
  427. package/src/stories/Dropdowns.tsx +0 -52
  428. package/src/stories/InputPrompt.stories.tsx +0 -15
  429. package/src/stories/InputPrompt.tsx +0 -63
  430. package/src/stories/ModalHeader.stories.tsx +0 -36
  431. package/src/stories/PDFViewer.stories.tsx +0 -39
  432. package/src/stories/SearchModal.stories.tsx +0 -132
  433. package/src/stories/SearchModal.tsx +0 -82
  434. package/src/stories/Sidebar.stories.tsx +0 -15
  435. package/src/stories/Sidebar.tsx +0 -108
  436. package/src/stories/Tabs.stories.tsx +0 -51
  437. package/src/stories/Typography.stories.tsx +0 -15
  438. package/src/stories/Typography.tsx +0 -110
@@ -0,0 +1,26 @@
1
+ import { BookIcon } from "../../icons";
2
+ import { cn } from "../../utils/cn";
3
+
4
+ export type ReferenceProps = {
5
+ title?: string;
6
+ page?: string;
7
+ className?: string;
8
+ };
9
+
10
+ export const Reference = ({
11
+ title = "SOLAS Chapter II-1",
12
+ page = "p. 42",
13
+ className,
14
+ }: ReferenceProps) => (
15
+ <button
16
+ type="button"
17
+ className={cn(
18
+ "inline-flex items-center gap-1.5 rounded-control bg-accent-bg-lighter px-2 py-1 text-footnote text-accent-on-light transition-colors hover:bg-accent-bg-light",
19
+ className,
20
+ )}
21
+ >
22
+ <BookIcon className="size-3.5 shrink-0" />
23
+ <span className="truncate">{title}</span>
24
+ {page && <span className="text-display-on-light-quaternary">{page}</span>}
25
+ </button>
26
+ );
@@ -0,0 +1,27 @@
1
+ import { DocumentIcon } from "../../icons";
2
+ import { cn } from "../../utils/cn";
3
+
4
+ export type SourceProps = {
5
+ title?: string;
6
+ excerpt?: string;
7
+ className?: string;
8
+ };
9
+
10
+ export const Source = ({
11
+ title = "ISM Code Section 10",
12
+ excerpt = "The company should establish procedures to ensure that the ship is maintained in conformity with the provisions of the relevant rules and regulations...",
13
+ className,
14
+ }: SourceProps) => (
15
+ <div
16
+ className={cn(
17
+ "rounded-control border border-divider-primary bg-background-primary p-3",
18
+ className,
19
+ )}
20
+ >
21
+ <div className="mb-1 flex items-center gap-2">
22
+ <DocumentIcon className="size-4 shrink-0 text-display-on-light-tertiary" />
23
+ <span className="text-caption-2-em text-display-on-light-primary">{title}</span>
24
+ </div>
25
+ <p className="line-clamp-2 text-caption-2 text-display-on-light-secondary">{excerpt}</p>
26
+ </div>
27
+ );
@@ -0,0 +1,23 @@
1
+ import { cn } from "../../utils/cn";
2
+ import { Source } from "./Source";
3
+
4
+ export type SourcesProps = {
5
+ count?: number;
6
+ className?: string;
7
+ };
8
+
9
+ const placeholderSources = [
10
+ { title: "ISM Code Section 10", excerpt: "The company should establish procedures to ensure that the ship is maintained..." },
11
+ { title: "Port State Control MOU", excerpt: "Inspections are carried out to verify compliance with international conventions..." },
12
+ ];
13
+
14
+ export const Sources = ({ count = 2, className }: SourcesProps) => (
15
+ <div className={cn("flex flex-col gap-2", className)} role="region" aria-label="Sources">
16
+ <p className="text-footnote-em text-display-on-light-tertiary">
17
+ {count} source{count !== 1 ? "s" : ""}
18
+ </p>
19
+ {placeholderSources.slice(0, count).map((source) => (
20
+ <Source key={source.title} title={source.title} excerpt={source.excerpt} />
21
+ ))}
22
+ </div>
23
+ );
@@ -0,0 +1,23 @@
1
+ import { BulbIcon } from "../../icons";
2
+ import { cn } from "../../utils/cn";
3
+
4
+ export type SuggestionProps = {
5
+ label?: string;
6
+ className?: string;
7
+ };
8
+
9
+ export const Suggestion = ({
10
+ label = "Summarize the latest inspection findings",
11
+ className,
12
+ }: SuggestionProps) => (
13
+ <button
14
+ type="button"
15
+ className={cn(
16
+ "flex items-center gap-2 rounded-control border border-divider-primary bg-background-primary px-3 py-2 text-left text-caption-2 text-display-on-light-secondary transition-colors hover:border-divider-secondary hover:bg-background-hover hover:text-display-on-light-primary",
17
+ className,
18
+ )}
19
+ >
20
+ <BulbIcon className="size-4 shrink-0 text-display-on-light-tertiary" />
21
+ <span>{label}</span>
22
+ </button>
23
+ );
@@ -0,0 +1,21 @@
1
+ import { cn } from "../../utils/cn";
2
+ import { Suggestion } from "./Suggestion";
3
+
4
+ export type SuggestionsProps = {
5
+ className?: string;
6
+ };
7
+
8
+ const placeholderSuggestions = [
9
+ "Summarize the latest inspection findings",
10
+ "What actions are required before next port call?",
11
+ "Compare with previous survey results",
12
+ ];
13
+
14
+ export const Suggestions = ({ className }: SuggestionsProps) => (
15
+ <div className={cn("flex flex-col gap-2", className)} role="group" aria-label="Suggestions">
16
+ <p className="text-footnote-em text-display-on-light-tertiary">Suggested prompts</p>
17
+ {placeholderSuggestions.map((label) => (
18
+ <Suggestion key={label} label={label} />
19
+ ))}
20
+ </div>
21
+ );
@@ -0,0 +1,14 @@
1
+ export { Attachment, type AttachmentProps } from "./Attachment";
2
+ export { ChatEntry, type ChatEntryProps, type ChatEntryRole } from "./ChatEntry";
3
+ export { ChatHeader, type ChatHeaderProps } from "./ChatHeader";
4
+ export { ChatInput, type ChatInputProps } from "./ChatInput";
5
+ export { ChatStatus, type ChatStatusProps } from "./ChatStatus";
6
+ export { ChatTile, type ChatTileProps } from "./ChatTile";
7
+ export { Copilot, type CopilotProps } from "./Copilot";
8
+ export { Draft, type DraftProps } from "./Draft";
9
+ export { Greeting, type GreetingProps } from "./Greeting";
10
+ export { Reference, type ReferenceProps } from "./Reference";
11
+ export { Source, type SourceProps } from "./Source";
12
+ export { Sources, type SourcesProps } from "./Sources";
13
+ export { Suggestion, type SuggestionProps } from "./Suggestion";
14
+ export { Suggestions, type SuggestionsProps } from "./Suggestions";
@@ -0,0 +1,44 @@
1
+ import { Avatar, GroupedAvatars } from "../../primitives";
2
+ import { InviteIcon } from "../../icons";
3
+ import { cn } from "../../utils/cn";
4
+
5
+ export type InviteeVariant = "single" | "multiple";
6
+
7
+ export type InviteeProps = {
8
+ variant?: InviteeVariant;
9
+ name?: string;
10
+ names?: string[];
11
+ className?: string;
12
+ };
13
+
14
+ export const Invitee = ({
15
+ variant = "single",
16
+ name = "Jordan Lee",
17
+ names = ["Jordan Lee", "Sam Patel", "Riley Chen"],
18
+ className,
19
+ }: InviteeProps) => (
20
+ <div
21
+ className={cn(
22
+ "flex items-center gap-3 rounded-control border border-divider-primary bg-background-primary px-3 py-2",
23
+ className,
24
+ )}
25
+ data-variant={variant}
26
+ >
27
+ {variant === "single" ? (
28
+ <Avatar chief="initials" size={32} initials={name} />
29
+ ) : (
30
+ <GroupedAvatars count={3} />
31
+ )}
32
+
33
+ <div className="min-w-0 flex-1">
34
+ <p className="truncate text-caption-1-em text-display-on-light-primary">
35
+ {variant === "single" ? name : `${names.length} invitees`}
36
+ </p>
37
+ <p className="text-footnote text-display-on-light-tertiary">
38
+ {variant === "single" ? "Pending invitation" : names.join(", ")}
39
+ </p>
40
+ </div>
41
+
42
+ <InviteIcon className="size-4 shrink-0 text-display-on-light-quaternary" />
43
+ </div>
44
+ );
@@ -0,0 +1,39 @@
1
+ import { Button } from "../../primitives";
2
+ import { Avatar } from "../../primitives";
3
+ import { cn } from "../../utils/cn";
4
+ import type { Chief } from "../Sidebar/Switcher";
5
+
6
+ export type ModalFooterProps = {
7
+ chief?: Chief;
8
+ className?: string;
9
+ };
10
+
11
+ const chiefLabels: Record<Chief, string> = {
12
+ technical: "Technical Chief",
13
+ compliance: "Compliance Chief",
14
+ };
15
+
16
+ export const ModalFooter = ({
17
+ chief = "technical",
18
+ className,
19
+ }: ModalFooterProps) => (
20
+ <footer
21
+ className={cn(
22
+ "flex items-center justify-between gap-3 border-t border-divider-primary bg-background-secondary px-4 py-3",
23
+ className,
24
+ )}
25
+ data-chief={chief}
26
+ >
27
+ <div className="flex items-center gap-2">
28
+ <Avatar chief={chief} size={24} />
29
+ <span className="text-caption-2 text-display-on-light-secondary">
30
+ {chiefLabels[chief]}
31
+ </span>
32
+ </div>
33
+
34
+ <div className="flex items-center gap-2">
35
+ <Button hierarchy="secondary">Cancel</Button>
36
+ <Button hierarchy="primary">Confirm</Button>
37
+ </div>
38
+ </footer>
39
+ );
@@ -0,0 +1,77 @@
1
+ import { type ReactNode } from "react";
2
+ import { Avatar, IconButton, ThinkingDot } from "../../primitives";
3
+ import {
4
+ CriticalIcon,
5
+ FormsIcon,
6
+ InformationIcon,
7
+ IssuesIcon,
8
+ ReportIcon,
9
+ SettingsIcon,
10
+ } from "../../icons";
11
+ import { cn } from "../../utils/cn";
12
+ import type { Chief } from "../Sidebar/Switcher";
13
+
14
+ export type ModalHeaderVariant =
15
+ | "issue"
16
+ | "thinking"
17
+ | "generic"
18
+ | "settings"
19
+ | "audit"
20
+ | "forms";
21
+
22
+ export type ModalHeaderProps = {
23
+ variant?: ModalHeaderVariant;
24
+ title?: string;
25
+ chief?: Chief;
26
+ onClose?: () => void;
27
+ className?: string;
28
+ };
29
+
30
+ const variantConfig: Record<
31
+ ModalHeaderVariant,
32
+ { icon: ReactNode; defaultTitle: string }
33
+ > = {
34
+ issue: { icon: <IssuesIcon className="size-5" />, defaultTitle: "Issue details" },
35
+ thinking: { icon: <ThinkingDot />, defaultTitle: "Chief is thinking" },
36
+ generic: { icon: <InformationIcon className="size-5" />, defaultTitle: "Information" },
37
+ settings: { icon: <SettingsIcon className="size-5" />, defaultTitle: "Settings" },
38
+ audit: { icon: <ReportIcon className="size-5" />, defaultTitle: "Audit trail" },
39
+ forms: { icon: <FormsIcon className="size-5" />, defaultTitle: "Forms" },
40
+ };
41
+
42
+ export const ModalHeader = ({
43
+ variant = "generic",
44
+ title,
45
+ chief,
46
+ onClose,
47
+ className,
48
+ }: ModalHeaderProps) => {
49
+ const config = variantConfig[variant];
50
+ const displayTitle = title ?? config.defaultTitle;
51
+
52
+ return (
53
+ <header
54
+ className={cn(
55
+ "flex items-center gap-3 border-b border-divider-primary bg-background-secondary px-4 py-3",
56
+ className,
57
+ )}
58
+ data-variant={variant}
59
+ >
60
+ <span className="shrink-0 text-display-on-light-tertiary">
61
+ {variant === "issue" ? <CriticalIcon className="size-5 text-meta-red" /> : config.icon}
62
+ </span>
63
+
64
+ {chief && <Avatar chief={chief} size={24} />}
65
+
66
+ <h2 className="min-w-0 flex-1 truncate text-subheader-em text-display-on-light-primary">
67
+ {displayTitle}
68
+ </h2>
69
+
70
+ {onClose && (
71
+ <IconButton hierarchy="quaternary" size="small" aria-label="Close" onClick={onClose}>
72
+ <span className="text-caption-1">✕</span>
73
+ </IconButton>
74
+ )}
75
+ </header>
76
+ );
77
+ };
@@ -0,0 +1,3 @@
1
+ export { Invitee, type InviteeProps, type InviteeVariant } from "./Invitee";
2
+ export { ModalFooter, type ModalFooterProps } from "./ModalFooter";
3
+ export { ModalHeader, type ModalHeaderProps, type ModalHeaderVariant } from "./ModalHeader";
@@ -0,0 +1,44 @@
1
+ import { type ReactNode } from "react";
2
+ import { cn } from "../../utils/cn";
3
+
4
+ export type PillState = "idle" | "active";
5
+ export type PillSize = "large" | "small";
6
+
7
+ export type PillProps = {
8
+ state?: PillState;
9
+ size?: PillSize;
10
+ children: ReactNode;
11
+ className?: string;
12
+ };
13
+
14
+ const stateStyles: Record<PillState, string> = {
15
+ idle: "border-divider-primary bg-background-primary text-display-on-light-secondary hover:bg-background-hover",
16
+ active: "border-blue-300 bg-blue-50 text-blue-700",
17
+ };
18
+
19
+ const sizeStyles: Record<PillSize, string> = {
20
+ large: "px-4 py-2 text-caption-1",
21
+ small: "px-3 py-1 text-caption-2",
22
+ };
23
+
24
+ export const Pill = ({
25
+ state = "idle",
26
+ size = "large",
27
+ children,
28
+ className,
29
+ }: PillProps) => (
30
+ <button
31
+ type="button"
32
+ className={cn(
33
+ "inline-flex items-center rounded-full border transition-colors",
34
+ stateStyles[state],
35
+ sizeStyles[size],
36
+ className,
37
+ )}
38
+ data-state={state}
39
+ data-size={size}
40
+ aria-pressed={state === "active"}
41
+ >
42
+ {children}
43
+ </button>
44
+ );
@@ -0,0 +1,41 @@
1
+ import { Count } from "../../primitives";
2
+ import { ChevronIcon, TickIcon } from "../../icons";
3
+ import { cn } from "../../utils/cn";
4
+
5
+ export type PillInfoType = "count" | "completed" | "dropdown";
6
+
7
+ export type PillInfoProps = {
8
+ type?: PillInfoType;
9
+ value?: number;
10
+ label?: string;
11
+ className?: string;
12
+ };
13
+
14
+ export const PillInfo = ({
15
+ type = "count",
16
+ value = 5,
17
+ label = "Filters",
18
+ className,
19
+ }: PillInfoProps) => (
20
+ <span
21
+ className={cn(
22
+ "inline-flex items-center gap-1.5 text-footnote text-display-on-light-tertiary",
23
+ className,
24
+ )}
25
+ data-type={type}
26
+ >
27
+ {type === "count" && <Count value={value} />}
28
+ {type === "completed" && (
29
+ <>
30
+ <TickIcon className="size-3.5 text-meta-green" />
31
+ <span>Completed</span>
32
+ </>
33
+ )}
34
+ {type === "dropdown" && (
35
+ <>
36
+ <span>{label}</span>
37
+ <ChevronIcon direction="down" className="size-3.5" />
38
+ </>
39
+ )}
40
+ </span>
41
+ );
@@ -0,0 +1,52 @@
1
+ import { type ReactNode } from "react";
2
+ import { ChatIcon, IssuesIcon, ReportIcon } from "../../icons";
3
+ import { cn } from "../../utils/cn";
4
+
5
+ export type ResultRowVariant = "report" | "chat" | "issue";
6
+ export type ResultRowState = "idle";
7
+
8
+ export type ResultRowProps = {
9
+ variant?: ResultRowVariant;
10
+ state?: ResultRowState;
11
+ title?: string;
12
+ subtitle?: string;
13
+ className?: string;
14
+ };
15
+
16
+ const variantIcons: Record<ResultRowVariant, ReactNode> = {
17
+ report: <ReportIcon className="size-5" />,
18
+ chat: <ChatIcon className="size-5" />,
19
+ issue: <IssuesIcon className="size-5" />,
20
+ };
21
+
22
+ const variantColors: Record<ResultRowVariant, string> = {
23
+ report: "text-meta-blue",
24
+ chat: "text-meta-purple",
25
+ issue: "text-meta-red",
26
+ };
27
+
28
+ export const ResultRow = ({
29
+ variant = "report",
30
+ state = "idle",
31
+ title = "Search result",
32
+ subtitle,
33
+ className,
34
+ }: ResultRowProps) => (
35
+ <button
36
+ type="button"
37
+ className={cn(
38
+ "flex w-full items-center gap-3 rounded-control px-3 py-2 text-left transition-colors hover:bg-background-hover",
39
+ className,
40
+ )}
41
+ data-variant={variant}
42
+ data-state={state}
43
+ >
44
+ <span className={cn("shrink-0", variantColors[variant])}>{variantIcons[variant]}</span>
45
+ <div className="min-w-0 flex-1">
46
+ <p className="truncate text-caption-1-em text-display-on-light-primary">{title}</p>
47
+ {subtitle && (
48
+ <p className="truncate text-caption-2 text-display-on-light-tertiary">{subtitle}</p>
49
+ )}
50
+ </div>
51
+ </button>
52
+ );
@@ -0,0 +1,88 @@
1
+ import { SearchIcon } from "../../icons";
2
+ import { cn } from "../../utils/cn";
3
+ import { Pill } from "./Pill";
4
+ import { ResultRow } from "./ResultRow";
5
+ import { SectionHeader } from "./SectionHeader";
6
+
7
+ export type SearchModalState = "idle" | "loading" | "results";
8
+
9
+ export type SearchModalProps = {
10
+ state?: SearchModalState;
11
+ className?: string;
12
+ };
13
+
14
+ const placeholderResults = [
15
+ { variant: "report" as const, title: "Hull inspection report Q3", subtitle: "MV Atlantic Star" },
16
+ { variant: "chat" as const, title: "Port state control discussion", subtitle: "2 days ago" },
17
+ { variant: "issue" as const, title: "Critical valve malfunction", subtitle: "Open · High priority" },
18
+ ];
19
+
20
+ export const SearchModal = ({ state = "idle", className }: SearchModalProps) => (
21
+ <div
22
+ className={cn(
23
+ "w-full max-w-xl overflow-hidden rounded-lg border border-divider-primary bg-background-primary shadow-raise2",
24
+ className,
25
+ )}
26
+ role="dialog"
27
+ aria-label="Search"
28
+ data-state={state}
29
+ >
30
+ <div className="flex items-center gap-2 border-b border-divider-primary px-4 py-3">
31
+ <SearchIcon className="size-5 shrink-0 text-display-on-light-quaternary" />
32
+ <input
33
+ type="search"
34
+ placeholder="Search reports, chats, and issues..."
35
+ className="flex-1 bg-transparent text-body text-display-on-light-primary placeholder:text-display-on-light-quaternary focus:outline-none"
36
+ aria-label="Search query"
37
+ readOnly
38
+ defaultValue={state === "results" ? "inspection" : ""}
39
+ />
40
+ {state === "loading" && (
41
+ <span className="size-4 animate-spin rounded-full border-2 border-divider-primary border-t-blue-600" />
42
+ )}
43
+ </div>
44
+
45
+ <div className="flex gap-2 px-4 py-2">
46
+ <Pill state={state === "results" ? "active" : "idle"} size="small">
47
+ All
48
+ </Pill>
49
+ <Pill state="idle" size="small">
50
+ Reports
51
+ </Pill>
52
+ <Pill state="idle" size="small">
53
+ Chats
54
+ </Pill>
55
+ <Pill state="idle" size="small">
56
+ Issues
57
+ </Pill>
58
+ </div>
59
+
60
+ <div className="max-h-80 overflow-y-auto px-2 pb-2">
61
+ {state === "idle" && (
62
+ <p className="px-2 py-8 text-center text-caption-2 text-display-on-light-tertiary">
63
+ Start typing to search across your workspace
64
+ </p>
65
+ )}
66
+
67
+ {state === "loading" && (
68
+ <p className="px-2 py-8 text-center text-caption-2 text-display-on-light-tertiary">
69
+ Searching...
70
+ </p>
71
+ )}
72
+
73
+ {state === "results" && (
74
+ <>
75
+ <SectionHeader label="Results" />
76
+ {placeholderResults.map((result) => (
77
+ <ResultRow
78
+ key={result.title}
79
+ variant={result.variant}
80
+ title={result.title}
81
+ subtitle={result.subtitle}
82
+ />
83
+ ))}
84
+ </>
85
+ )}
86
+ </div>
87
+ </div>
88
+ );
@@ -0,0 +1,20 @@
1
+ import { cn } from "../../utils/cn";
2
+
3
+ export type SectionHeaderProps = {
4
+ label?: string;
5
+ className?: string;
6
+ };
7
+
8
+ export const SectionHeader = ({
9
+ label = "Recently viewed",
10
+ className,
11
+ }: SectionHeaderProps) => (
12
+ <p
13
+ className={cn(
14
+ "px-2 py-1.5 text-footnote-em text-display-on-light-tertiary uppercase tracking-wide",
15
+ className,
16
+ )}
17
+ >
18
+ {label}
19
+ </p>
20
+ );
@@ -0,0 +1,5 @@
1
+ export { Pill, type PillProps, type PillSize, type PillState } from "./Pill";
2
+ export { PillInfo, type PillInfoProps, type PillInfoType } from "./PillInfo";
3
+ export { ResultRow, type ResultRowProps, type ResultRowState, type ResultRowVariant } from "./ResultRow";
4
+ export { SearchModal, type SearchModalProps, type SearchModalState } from "./SearchModal";
5
+ export { SectionHeader, type SectionHeaderProps } from "./SectionHeader";