@crewlethq/ui 0.81.2 → 0.83.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.
- package/README.md +89 -4
- package/dist/Accordion/index.js +3 -3
- package/dist/ActionCard/ActionCard.d.ts +49 -0
- package/dist/ActionCard/index.d.ts +4 -0
- package/dist/ActionCard/index.js +2 -0
- package/dist/ActionCard-47WSZ2O5.css +110 -0
- package/dist/ActivityLine/ActivityLine.d.ts +27 -0
- package/dist/ActivityLine/index.d.ts +4 -0
- package/dist/ActivityLine/index.js +4 -0
- package/dist/ActivityLine-AMSERTOB.css +74 -0
- package/dist/AgentHandoffPanel/index.js +15 -15
- package/dist/AppShell/AccountRow.d.ts +19 -1
- package/dist/AppShell/AppShell.d.ts +62 -4
- package/dist/AppShell/index.d.ts +1 -1
- package/dist/AppShell/index.js +12 -6
- package/dist/AppShell/railMotion.d.ts +60 -0
- package/dist/AppShell/railShape.d.ts +22 -0
- package/dist/{AppShell-2IBUS4TH.css → AppShell-U7D2MUUF.css} +291 -20
- package/dist/ArrangeFrame/index.js +2 -2
- package/dist/ArrangeGroup/index.js +2 -2
- package/dist/ArrangeList/index.js +8 -7
- package/dist/ArtifactBar/index.js +13 -11
- package/dist/ArtifactCard/index.js +13 -13
- package/dist/ArtifactCover/index.js +3 -3
- package/dist/ArtifactKindIllustration/index.js +1 -1
- package/dist/ArtifactKinds-3EH4KR3F.css +18 -0
- package/dist/ArtifactMakeRow/index.js +1 -1
- package/dist/ArtifactNameCell/index.js +1 -1
- package/dist/ArtifactPanel/index.js +5 -5
- package/dist/AttachmentChip/index.js +2 -2
- package/dist/AuthLayout/index.js +5 -4
- package/dist/Avatar/Avatar.d.ts +30 -28
- package/dist/Avatar/AvatarStack.d.ts +2 -2
- package/dist/Avatar/index.d.ts +1 -1
- package/dist/Avatar/index.js +2 -2
- package/dist/{Avatar-VJSJGFRG.css → Avatar-MNE3WBZO.css} +56 -54
- package/dist/AvatarPicker/index.js +13 -12
- package/dist/{AvatarStack-7I3P7LCK.css → AvatarStack-KEHD3GWY.css} +16 -4
- package/dist/BrandLockup/BrandLockup.d.ts +6 -0
- package/dist/BrandLockup/index.js +2 -1
- package/dist/BriefCard/BriefCard.d.ts +23 -1
- package/dist/BriefCard/index.d.ts +2 -2
- package/dist/BriefCard/index.js +7 -7
- package/dist/{BriefCard-VKTH3BSW.css → BriefCard-QCL7MVUV.css} +26 -0
- package/dist/Canvas/index.js +8 -6
- package/dist/CanvasBoard/index.js +11 -9
- package/dist/CanvasToolbar/index.js +10 -8
- package/dist/Card/index.js +2 -2
- package/dist/ChangeList/index.js +5 -5
- package/dist/ChangeMark/index.js +6 -4
- package/dist/CharacterPicker/index.js +2 -2
- package/dist/ChatDay/ChatDay.d.ts +53 -0
- package/dist/ChatDay/index.d.ts +5 -0
- package/dist/ChatDay/index.js +3 -0
- package/dist/ChatDay-E3FF5HWF.css +116 -0
- package/dist/ChatDivider/ChatDivider.d.ts +31 -0
- package/dist/ChatDivider/index.d.ts +4 -0
- package/dist/ChatDivider/index.js +2 -0
- package/dist/ChatDivider-7ZNDL2PZ.css +76 -0
- package/dist/ChatMessage/ChatMessage.d.ts +111 -0
- package/dist/ChatMessage/index.d.ts +4 -0
- package/dist/ChatMessage/index.js +5 -0
- package/dist/ChatMessage-FH7VRVCH.css +304 -0
- package/dist/ChatScale-L4SIHSKL.css +42 -0
- package/dist/ChatThread/ChatThread.d.ts +33 -4
- package/dist/ChatThread/index.d.ts +1 -1
- package/dist/ChatThread/index.js +2 -2
- package/dist/{ChatThread-2KO3FZKQ.css → ChatThread-HAECJMP6.css} +17 -0
- package/dist/CheckGrid/index.js +6 -6
- package/dist/Checkbox/index.js +5 -5
- package/dist/ChipField/ChipField.d.ts +82 -0
- package/dist/ChipField/index.d.ts +4 -0
- package/dist/ChipField/index.js +9 -0
- package/dist/ChipField-D4CW6XFA.css +108 -0
- package/dist/ColorField/index.js +5 -5
- package/dist/Combobox/index.js +7 -7
- package/dist/CommandPalette/index.js +12 -11
- package/dist/CommentThread/index.js +14 -14
- package/dist/CompactNav/CompactNav.d.ts +175 -0
- package/dist/CompactNav/index.d.ts +4 -0
- package/dist/CompactNav/index.js +9 -0
- package/dist/CompactNav-CU2AQXBC.css +322 -0
- package/dist/Composer/Composer.d.ts +26 -2
- package/dist/Composer/index.d.ts +2 -1
- package/dist/Composer/index.js +7 -7
- package/dist/{Composer-HQIMTMRC.css → Composer-ZEGHEAFE.css} +71 -0
- package/dist/ConfirmField/index.js +5 -5
- package/dist/ContrastBadge/index.js +2 -2
- package/dist/ContrastHelp/index.js +7 -6
- package/dist/Count/Count.d.ts +24 -6
- package/dist/Count/index.d.ts +1 -1
- package/dist/Count/index.js +1 -1
- package/dist/{Count-ZJ6ID4ZU.css → Count-2HXBBYPO.css} +19 -0
- package/dist/DataGrid/index.js +8 -8
- package/dist/DataTable/index.js +11 -10
- package/dist/DataView/index.js +18 -17
- package/dist/DatasetSource/index.js +3 -3
- package/dist/DateTimePicker/index.js +6 -5
- package/dist/DeepWorkCard/index.js +9 -9
- package/dist/Disclosure/index.js +3 -3
- package/dist/DocTabsEditor/index.js +11 -9
- package/dist/DockColumn/DockColumn.d.ts +68 -0
- package/dist/DockColumn/index.d.ts +3 -0
- package/dist/DockColumn/index.js +6 -0
- package/dist/DockColumn-SMJCXHS4.css +61 -0
- package/dist/Document/index.js +2 -2
- package/dist/EditingStatus/index.js +2 -2
- package/dist/{Editor-IMYESOW7.js → Editor-5D5Z3LBQ.js} +9 -8
- package/dist/EmojiPicker/EmojiPicker.d.ts +51 -0
- package/dist/EmojiPicker/emoji.d.ts +24 -0
- package/dist/EmojiPicker/index.d.ts +5 -0
- package/dist/EmojiPicker/index.js +15 -0
- package/dist/EmojiPicker-FMWYN2WX.css +63 -0
- package/dist/EntityChip/index.js +3 -3
- package/dist/EntityList/index.js +6 -6
- package/dist/FactList/index.js +6 -4
- package/dist/FolderTile/index.js +3 -3
- package/dist/FollowBanner/index.js +4 -4
- package/dist/HuePicker/index.js +9 -8
- package/dist/ImageUpload/ImageUpload.d.ts +6 -7
- package/dist/ImageUpload/index.js +3 -3
- package/dist/{ImageUpload-OWI7CCG7.css → ImageUpload-IFXZROFZ.css} +6 -37
- package/dist/InlineEditor/index.js +7 -7
- package/dist/Input/index.js +4 -4
- package/dist/Kbd/Kbd.d.ts +9 -0
- package/dist/Kbd/index.d.ts +1 -1
- package/dist/Kbd/index.js +1 -1
- package/dist/Layer/index.js +2 -2
- package/dist/LinkCard/LinkCard.d.ts +64 -0
- package/dist/LinkCard/index.d.ts +5 -0
- package/dist/LinkCard/index.js +5 -0
- package/dist/LinkCard-5I4MYU6I.css +155 -0
- package/dist/LinkInterstitial/index.js +7 -6
- package/dist/ListInput/index.js +10 -9
- package/dist/Listbox/index.js +3 -3
- package/dist/LogoSlot/index.js +3 -3
- package/dist/MarkdownEditor/format.d.ts +9 -1
- package/dist/MarkdownEditor/index.d.ts +2 -2
- package/dist/MarkdownEditor/index.js +10 -9
- package/dist/MediaMatch/index.d.ts +1 -1
- package/dist/MediaMatch/index.js +1 -1
- package/dist/MediaMatch/useMediaMatch.d.ts +14 -0
- package/dist/MentionChip/MentionChip.d.ts +25 -0
- package/dist/MentionChip/index.d.ts +3 -0
- package/dist/MentionChip/index.js +2 -0
- package/dist/MentionChip-W7MZZVRZ.css +42 -0
- package/dist/MentionMenu/MentionMenu.d.ts +82 -0
- package/dist/MentionMenu/index.d.ts +4 -0
- package/dist/MentionMenu/index.js +3 -0
- package/dist/MentionMenu-4NAQ45S4.css +65 -0
- package/dist/Menu/index.js +5 -4
- package/dist/MergeConflicts/index.js +9 -8
- package/dist/MessageActions/MessageActions.d.ts +58 -0
- package/dist/MessageActions/index.d.ts +4 -0
- package/dist/MessageActions/index.js +18 -0
- package/dist/MessageActions-Q4F5UH3S.css +73 -0
- package/dist/Modal/Modal.d.ts +12 -0
- package/dist/Modal/index.js +6 -5
- package/dist/{Modal-FYQYEI3N.css → Modal-GKUOO7PZ.css} +26 -1
- package/dist/OpenInAppCard/index.js +8 -8
- package/dist/OrgLabel/index.js +3 -3
- package/dist/OrgNode/index.js +4 -4
- package/dist/OrgTable/index.js +7 -7
- package/dist/Outline/index.js +2 -1
- package/dist/PeekRail/index.js +1 -1
- package/dist/PeopleRail/index.js +4 -4
- package/dist/PersonRow/PersonRow.d.ts +70 -0
- package/dist/PersonRow/index.d.ts +3 -0
- package/dist/PersonRow/index.js +2 -0
- package/dist/PersonRow-V5GTPNVP.css +161 -0
- package/dist/Popover/index.js +4 -3
- package/dist/Presence/index.d.ts +2 -0
- package/dist/Presence/index.js +4 -0
- package/dist/Presence/usePresence.d.ts +109 -0
- package/dist/PresenceStack/index.js +3 -3
- package/dist/{PresenceStack-ZV67BH4V.css → PresenceStack-2DTYRADY.css} +4 -6
- package/dist/PresenterView/index.js +5 -5
- package/dist/PricingCard/index.js +2 -2
- package/dist/Principal/index.js +3 -3
- package/dist/PrincipalPicker/index.js +11 -11
- package/dist/ProposalCard/index.js +15 -15
- package/dist/ReactionBar/ReactionBar.d.ts +84 -0
- package/dist/ReactionBar/index.d.ts +4 -0
- package/dist/ReactionBar/index.js +17 -0
- package/dist/ReactionBar-XXI4V7XG.css +93 -0
- package/dist/RecordChip/index.js +5 -4
- package/dist/RefusalCard/index.js +6 -6
- package/dist/RelatedRow/index.js +3 -3
- package/dist/Reorder/index.js +2 -1
- package/dist/ResultTableCard/index.js +7 -7
- package/dist/ReviewList/index.js +2 -2
- package/dist/RichEditor/index.js +2 -2
- package/dist/RunChip/index.js +5 -5
- package/dist/SandboxedFrame/index.js +2 -2
- package/dist/SectionFrame/index.js +2 -2
- package/dist/SegmentedControl/index.js +8 -7
- package/dist/Select/index.js +4 -4
- package/dist/SelectionBar/index.js +6 -6
- package/dist/SetupWizard/index.js +6 -6
- package/dist/ShareDialog/index.js +13 -12
- package/dist/SheetColumnEditor/index.js +17 -16
- package/dist/SheetGrid/index.js +14 -12
- package/dist/Shortcut/index.js +3 -3
- package/dist/SidePanel/SidePanel.d.ts +8 -1
- package/dist/SidePanel/SidePanelBase.d.ts +3 -1
- package/dist/SidePanel/index.js +5 -5
- package/dist/{SidePanel-VXKUKLOJ.css → SidePanel-BKWT6Q6Z.css} +36 -0
- package/dist/SidebarNav/SidebarNav.d.ts +52 -3
- package/dist/SidebarNav/index.js +1 -1
- package/dist/{SidebarNav-VTQ3G4AE.css → SidebarNav-E7PZGGA6.css} +132 -7
- package/dist/Skeleton/index.js +1 -1
- package/dist/{Skeleton-7ZA5ETJM.css → Skeleton-GIXV3KK5.css} +3 -1
- package/dist/SlideCompare/index.js +5 -5
- package/dist/SlideFilmstrip/index.js +11 -9
- package/dist/SlideGrid/index.js +4 -4
- package/dist/SlideStage/index.js +3 -3
- package/dist/SourceEditor/index.js +2 -2
- package/dist/StatusCard/index.js +5 -5
- package/dist/Switcher/index.js +13 -12
- package/dist/TableCells/index.js +5 -5
- package/dist/Tabs/index.js +7 -6
- package/dist/Tag/Tag.d.ts +9 -2
- package/dist/Tag/index.js +1 -1
- package/dist/{Tag-JTJVZM2D.css → Tag-WLDOROB5.css} +24 -0
- package/dist/TagsInput/index.js +6 -6
- package/dist/ThemeGallery/index.js +5 -5
- package/dist/ThemeSwitcher/index.js +9 -8
- package/dist/ThinkingIndicator/index.js +1 -1
- package/dist/{ThinkingIndicator-JMK2TNMZ.css → ThinkingIndicator-S7ZL2C77.css} +8 -0
- package/dist/ThreadSummary/ThreadSummary.d.ts +43 -0
- package/dist/ThreadSummary/index.d.ts +4 -0
- package/dist/ThreadSummary/index.js +6 -0
- package/dist/ThreadSummary-AGR4NDMD.css +90 -0
- package/dist/TimeRangePicker/index.js +13 -12
- package/dist/TimeWindowPicker/index.js +11 -10
- package/dist/Toaster/index.js +2 -2
- package/dist/Toolbar/index.js +3 -3
- package/dist/Tooltip/Tooltip.d.ts +30 -3
- package/dist/Tooltip/index.js +5 -3
- package/dist/TreeCanvas/index.js +10 -7
- package/dist/TreeGrid/index.js +3 -3
- package/dist/ValueField/index.js +9 -9
- package/dist/VersionCompare/index.js +10 -9
- package/dist/VersionTimeline/index.js +4 -4
- package/dist/WidgetFrame/index.js +2 -2
- package/dist/{chunk-LOWQK2PB.js → chunk-22CU7V4J.js} +4 -4
- package/dist/{chunk-WCDPFTJZ.js → chunk-25JQNHTC.js} +92 -28
- package/dist/{chunk-6LXS3X7A.js → chunk-2L4WHYMT.js} +1 -1
- package/dist/{chunk-6G6WHTC7.js → chunk-2O5CMV76.js} +1 -1
- package/dist/{chunk-FQI62PIZ.js → chunk-2SVQBQAD.js} +2 -2
- package/dist/{chunk-7PJFUQMY.js → chunk-2ZSCHQOA.js} +1 -1
- package/dist/chunk-3BRXEMYT.js +46 -0
- package/dist/{chunk-H22SR76M.js → chunk-3H6OZUZ3.js} +1 -1
- package/dist/{chunk-VK45YJLH.js → chunk-3IWZVEXA.js} +2 -2
- package/dist/{chunk-2STOSJT3.js → chunk-46FIBJCV.js} +7 -7
- package/dist/chunk-4DEKONVJ.js +87 -0
- package/dist/{chunk-NUZHC6MM.js → chunk-4ITETIGZ.js} +12 -1
- package/dist/{chunk-73GUXYYE.js → chunk-5AHNW5CP.js} +1 -1
- package/dist/{chunk-FFGEJUAP.js → chunk-5ILRWUE7.js} +2 -2
- package/dist/chunk-5JPOFAVN.js +58 -0
- package/dist/{chunk-S5QJZOPL.js → chunk-5K5SZGBI.js} +1 -1
- package/dist/{chunk-YB64PWIN.js → chunk-5V6GW6HK.js} +1 -1
- package/dist/{chunk-LM6VYJTV.js → chunk-5YXMKZUA.js} +1 -1
- package/dist/{chunk-5XBNJNSO.js → chunk-65RFU7LF.js} +1 -1
- package/dist/{chunk-7MGXHCVK.js → chunk-6M2N6ETA.js} +1 -1
- package/dist/{chunk-OWHETZIU.js → chunk-6SFDL4QH.js} +1 -1
- package/dist/{chunk-WK4FQPYW.js → chunk-77VOASOY.js} +5 -5
- package/dist/{chunk-UYF2B2TH.js → chunk-7ELFH3RJ.js} +1 -1
- package/dist/{chunk-HPI5J6AR.js → chunk-7K6LVM5I.js} +2 -2
- package/dist/{chunk-YQDRJZ5J.js → chunk-7M7WKYOV.js} +8 -8
- package/dist/{chunk-A5YKNRG6.js → chunk-7QCSISHM.js} +2 -1
- package/dist/{chunk-CYYBE2MM.js → chunk-7U6PK242.js} +1 -1
- package/dist/{chunk-I33UIUZD.js → chunk-7ZSEUO5Q.js} +51 -40
- package/dist/{chunk-LCZULGMB.js → chunk-ABRWL5FJ.js} +2 -2
- package/dist/{chunk-VG3SIJ3M.js → chunk-AFLS26AC.js} +2 -2
- package/dist/{chunk-4XF7ENQA.js → chunk-AOJ6ZA77.js} +2 -2
- package/dist/{chunk-Q2T4L6ML.js → chunk-AQNP3KQU.js} +5 -5
- package/dist/{chunk-6X5PGHEX.js → chunk-AUSFKGKL.js} +2 -2
- package/dist/{chunk-6R334YT3.js → chunk-AZYE7NR4.js} +2 -2
- package/dist/{chunk-WKKWF277.js → chunk-BN5FEJL5.js} +2 -2
- package/dist/{chunk-MPVMB2DV.js → chunk-BVML4UVB.js} +3 -2
- package/dist/{chunk-EAIOXW2W.js → chunk-BXGBGYKH.js} +8 -14
- package/dist/chunk-C4256UXE.js +21 -0
- package/dist/{chunk-2FMBZCFR.js → chunk-C42XW5YP.js} +1 -1
- package/dist/{chunk-4MRFLHJC.js → chunk-C46DDVTK.js} +1 -1
- package/dist/{chunk-5BOFC5OP.js → chunk-CF4M6N6A.js} +20 -4
- package/dist/{chunk-ANTAQAR4.js → chunk-CMAZZY2I.js} +7 -1
- package/dist/{chunk-3JXX5S3Z.js → chunk-CV2LU2T2.js} +2 -2
- package/dist/{chunk-MLDTLZAO.js → chunk-D2GT3CR4.js} +3 -3
- package/dist/{chunk-57AKYFML.js → chunk-DD7RBNT4.js} +3 -3
- package/dist/{chunk-KL6A7JGH.js → chunk-DRFOTWJE.js} +2 -2
- package/dist/{chunk-MUFBHVCT.js → chunk-DWQYV5AV.js} +2 -2
- package/dist/{chunk-CNEHFH2A.js → chunk-EAHEJNVJ.js} +1 -1
- package/dist/chunk-EALRMP7N.js +69 -0
- package/dist/{chunk-E35HYQMK.js → chunk-EBVZHVPD.js} +12 -5
- package/dist/{chunk-KHJIEPZV.js → chunk-EC6EUIAD.js} +9 -6
- package/dist/{chunk-XNNY27SC.js → chunk-ED4A6Q24.js} +1 -1
- package/dist/{chunk-6LN64KGG.js → chunk-F7HZYTZT.js} +6 -3
- package/dist/{chunk-RTMNULTL.js → chunk-FLW5U7YS.js} +2 -2
- package/dist/{chunk-JQEXAH7G.js → chunk-FPU7AA3X.js} +5 -16
- package/dist/{chunk-GHQG4VZA.js → chunk-G3CACE5L.js} +3 -3
- package/dist/{chunk-JMTBK55P.js → chunk-G4EHZHKM.js} +2 -2
- package/dist/{chunk-45M73G5A.js → chunk-GLKQHN7G.js} +5 -5
- package/dist/{chunk-N2BF272H.js → chunk-HF5L56YQ.js} +1 -1
- package/dist/chunk-HTBTAIH6.js +37 -0
- package/dist/chunk-HTS5RJ7S.js +6 -0
- package/dist/{chunk-BRLZXYPA.js → chunk-I4IUX3JF.js} +1 -1
- package/dist/{chunk-BXCL6P5Z.js → chunk-I4PBFJGX.js} +1 -1
- package/dist/{chunk-ADGNISEI.js → chunk-IAP7APOX.js} +5 -5
- package/dist/chunk-ICE3D63E.js +384 -0
- package/dist/{chunk-BT3GB7HC.js → chunk-IRONPJB4.js} +3 -3
- package/dist/chunk-IUBOLGHG.js +140 -0
- package/dist/chunk-JLOESTT2.js +10 -0
- package/dist/{chunk-5EFLA6BW.js → chunk-K6RWEQ6P.js} +2 -2
- package/dist/{chunk-ZQEJSEPS.js → chunk-K6Y6CDEZ.js} +2 -2
- package/dist/chunk-K774LUN3.js +20 -0
- package/dist/{chunk-7KBNFFM3.js → chunk-KXWJJWBD.js} +6 -3
- package/dist/{chunk-53J2YNQA.js → chunk-L5VU3LZT.js} +1 -1
- package/dist/chunk-L72URIHR.js +36 -0
- package/dist/{chunk-VERJCAJ4.js → chunk-LBGKLYBY.js} +1 -1
- package/dist/{chunk-PRN5IP2R.js → chunk-LMEMH6DO.js} +1 -1
- package/dist/{chunk-I22MUEG7.js → chunk-LNQSNXGJ.js} +1 -1
- package/dist/chunk-LT44RL62.js +50 -0
- package/dist/{chunk-222VILSP.js → chunk-LVJGN5II.js} +1 -1
- package/dist/{chunk-AYHIF6DH.js → chunk-LZNPL266.js} +1 -1
- package/dist/{chunk-R45VM5EX.js → chunk-MMV7NEAC.js} +1 -1
- package/dist/{chunk-2IIHMJMZ.js → chunk-MVKUE4FI.js} +2 -2
- package/dist/{chunk-37U3Z65B.js → chunk-MVMVMHYI.js} +1 -1
- package/dist/{chunk-JD7P2GJP.js → chunk-MYAARF4Z.js} +1 -1
- package/dist/{chunk-OBPINJNO.js → chunk-NCUSI4ZU.js} +3 -3
- package/dist/{chunk-NKBKQEKS.js → chunk-NFXCJGHG.js} +1 -1
- package/dist/{chunk-OZAZHM55.js → chunk-NKBKHOMU.js} +1 -1
- package/dist/{chunk-MGQKF7GK.js → chunk-NN475NAP.js} +1 -1
- package/dist/{chunk-6EWNMSS4.js → chunk-NNZRTR5M.js} +2 -2
- package/dist/{chunk-JT7WRPZ6.js → chunk-NTRKC2JV.js} +1 -1
- package/dist/{chunk-63GBSOLU.js → chunk-NXBCAXP5.js} +2 -2
- package/dist/{chunk-NR4CPM4T.js → chunk-NXFTCPF6.js} +1 -1
- package/dist/chunk-O3MYBNRO.js +80 -0
- package/dist/{chunk-RMEBFYL7.js → chunk-O6EV6GKI.js} +1 -1
- package/dist/{chunk-YL7AR6PR.js → chunk-O7KG4CXB.js} +3 -3
- package/dist/{chunk-FB3TCNQP.js → chunk-O7N6W52M.js} +3 -3
- package/dist/chunk-ONHYFU7D.js +25 -0
- package/dist/{chunk-T24HBEU6.js → chunk-OOOVL77Y.js} +1 -1
- package/dist/{chunk-BLGBD2D2.js → chunk-P7HMY3BQ.js} +4 -4
- package/dist/chunk-PCAT2EFB.js +104 -0
- package/dist/{chunk-TPIMOGOZ.js → chunk-PEBQMX5X.js} +1 -1
- package/dist/{chunk-UY3FWQWG.js → chunk-PGBKZSSQ.js} +201 -22
- package/dist/{chunk-4TMBAOXK.js → chunk-PW57R4BN.js} +1 -1
- package/dist/chunk-PX5BOALQ.js +13 -0
- package/dist/{chunk-CFTBESST.js → chunk-Q6TCUSQA.js} +2 -2
- package/dist/{chunk-ZWXHTXZO.js → chunk-QGEDXYLB.js} +2 -2
- package/dist/{chunk-ZKLEAK7M.js → chunk-QM3432PH.js} +7 -7
- package/dist/{chunk-WTXCK46H.js → chunk-R2QBQ6NO.js} +1 -1
- package/dist/{chunk-Z6JKZI4E.js → chunk-RBQRTGXX.js} +1 -1
- package/dist/{chunk-TJIBTHWJ.js → chunk-RDIQB5ZE.js} +3 -3
- package/dist/{chunk-TPCBPGSB.js → chunk-RO5JU6SN.js} +4 -4
- package/dist/{chunk-O222F2IX.js → chunk-SGMWLUYQ.js} +6 -6
- package/dist/{chunk-HEA6TERQ.js → chunk-SHH7UD5U.js} +1 -1
- package/dist/{chunk-CLJGFOTV.js → chunk-SKGOKLJD.js} +31 -18
- package/dist/{chunk-CSXJIIO4.js → chunk-SNQ7PH3D.js} +1 -1
- package/dist/chunk-SPNTUQBV.js +244 -0
- package/dist/{chunk-RIAPCEB5.js → chunk-T3S3D4FC.js} +5 -5
- package/dist/chunk-TDFLCUBE.js +6 -0
- package/dist/{chunk-OQG4P5KU.js → chunk-TGGYSQRD.js} +5 -6
- package/dist/{chunk-7FF6CZW5.js → chunk-TQKQRS2J.js} +36 -8
- package/dist/chunk-TRXTO3WC.js +114 -0
- package/dist/{chunk-H5XTJ7GJ.js → chunk-TUEM2XIW.js} +1 -1
- package/dist/{chunk-4AUTALJA.js → chunk-U2IQNDDR.js} +1 -1
- package/dist/{chunk-IVTQWOXV.js → chunk-ULYHDP7U.js} +1 -1
- package/dist/{chunk-DGSK4LLS.js → chunk-V6WDJUYK.js} +1 -1
- package/dist/{chunk-Z2MZTI3H.js → chunk-VB3FVKNI.js} +1 -1
- package/dist/{chunk-R5OATXWU.js → chunk-VONEKR3J.js} +38 -15
- package/dist/{chunk-CZQ7UITX.js → chunk-WANKINXG.js} +3 -3
- package/dist/{chunk-HQOEAUDJ.js → chunk-WMO722J2.js} +2 -2
- package/dist/{chunk-D7G2QGET.js → chunk-X3US25XJ.js} +1 -1
- package/dist/{chunk-GPFYITOF.js → chunk-X7VZQKIW.js} +1 -1
- package/dist/{chunk-L4HHWG4V.js → chunk-XA2QKGBJ.js} +3 -3
- package/dist/{chunk-DV5L2GRY.js → chunk-XJMES7AE.js} +1 -1
- package/dist/{chunk-5NJMSYDZ.js → chunk-XNC3M4IN.js} +1 -1
- package/dist/{chunk-B2YSFWUG.js → chunk-XRWHDW6F.js} +9 -9
- package/dist/{chunk-TKUAGWNR.js → chunk-XTJHMP3W.js} +2 -2
- package/dist/{chunk-KTIQSSME.js → chunk-XZY6S3UC.js} +6 -3
- package/dist/{chunk-7KHM2FZH.js → chunk-YGRTX67J.js} +1 -1
- package/dist/{chunk-RTPQDNW3.js → chunk-YJQXESOJ.js} +5 -1
- package/dist/chunk-YP2FS6SH.js +54 -0
- package/dist/{chunk-LMQG3VPG.js → chunk-YQ7Q52XU.js} +1 -1
- package/dist/{chunk-G4CGDUCP.js → chunk-YRNNUCQP.js} +1 -1
- package/dist/{chunk-5CEQ3HLH.js → chunk-YXKSUILG.js} +6 -6
- package/dist/{chunk-NHLNHH4J.js → chunk-ZB3E2Z4Y.js} +1 -1
- package/dist/{chunk-IL3XLDW7.js → chunk-ZDWAIVWL.js} +1 -1
- package/dist/{chunk-SNIPM6K7.js → chunk-ZJVLGYE3.js} +3 -3
- package/dist/{chunk-BFM5G2Z6.js → chunk-ZPTKAYJK.js} +1 -1
- package/dist/{chunk-2PIH6JHJ.js → chunk-ZXTDWTXS.js} +1 -1
- package/dist/{chunk-C667GCU7.js → chunk-ZXXZESCD.js} +9 -7
- package/dist/generated/index.d.ts +17 -0
- package/dist/generated/index.js +184 -163
- package/dist/index.js +184 -163
- package/dist/styles.css +2769 -156
- package/dist/utils/composedRef.d.ts +39 -0
- package/dist/utils/focusModality.d.ts +14 -0
- package/dist/utils/heldHint.d.ts +6 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.js +4 -2
- package/dist/utils/tokenMs.d.ts +6 -0
- package/package.json +5 -5
- package/dist/ArtifactKinds-O3CALPVX.css +0 -16
- package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
- package/dist/{chunk-FEJANUZK.js → chunk-KBSD476L.js} +0 -0
- package/dist/{chunk-624X3RVA.js → chunk-O55JQ7BE.js} +1 -1
- /package/dist/{chunk-CDFQ7MQK.js → chunk-REEZQCML.js} +0 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { Popover } from './chunk-EC6EUIAD.js';
|
|
2
|
+
import { Tooltip } from './chunk-7ZSEUO5Q.js';
|
|
3
|
+
import { Input } from './chunk-O7N6W52M.js';
|
|
4
|
+
import { isComposing } from './chunk-TUEM2XIW.js';
|
|
5
|
+
import './EmojiPicker-FMWYN2WX.css';
|
|
6
|
+
import { useId, useState, useRef, useMemo } from 'react';
|
|
7
|
+
import { SearchGlyph } from '@crewlethq/icons/glyphs';
|
|
8
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
// src/EmojiPicker/emoji.ts
|
|
11
|
+
var entries = (pairs) => pairs.map(([emoji, name]) => ({ emoji, name }));
|
|
12
|
+
var EMOJI_GROUPS = [
|
|
13
|
+
{
|
|
14
|
+
label: "Frequently used",
|
|
15
|
+
items: entries([
|
|
16
|
+
["\u{1F44D}", "thumbs up"],
|
|
17
|
+
["\u2705", "check"],
|
|
18
|
+
["\u{1F440}", "eyes"],
|
|
19
|
+
["\u{1F64C}", "raised hands"],
|
|
20
|
+
["\u{1F680}", "rocket"],
|
|
21
|
+
["\u{1F389}", "party"],
|
|
22
|
+
["\u{1F64F}", "thanks"],
|
|
23
|
+
["\u2764\uFE0F", "heart"]
|
|
24
|
+
])
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
label: "Smileys",
|
|
28
|
+
items: entries([
|
|
29
|
+
["\u{1F600}", "grin"],
|
|
30
|
+
["\u{1F604}", "smile"],
|
|
31
|
+
["\u{1F602}", "joy"],
|
|
32
|
+
["\u{1F642}", "slight smile"],
|
|
33
|
+
["\u{1F60D}", "heart eyes"],
|
|
34
|
+
["\u{1F914}", "thinking"],
|
|
35
|
+
["\u{1F605}", "sweat smile"],
|
|
36
|
+
["\u{1F62E}", "open mouth"],
|
|
37
|
+
["\u{1F62C}", "grimace"],
|
|
38
|
+
["\u{1F634}", "sleeping"],
|
|
39
|
+
["\u{1F92F}", "mind blown"],
|
|
40
|
+
["\u{1F973}", "partying"],
|
|
41
|
+
["\u{1F60E}", "cool"],
|
|
42
|
+
["\u{1FAE1}", "salute"],
|
|
43
|
+
["\u{1F91D}", "handshake"],
|
|
44
|
+
["\u{1F44F}", "clap"]
|
|
45
|
+
])
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: "Work",
|
|
49
|
+
items: entries([
|
|
50
|
+
["\u{1F525}", "fire"],
|
|
51
|
+
["\u{1F4AF}", "hundred"],
|
|
52
|
+
["\u26A0\uFE0F", "warning"],
|
|
53
|
+
["\u274C", "cross"],
|
|
54
|
+
["\u23F3", "hourglass"],
|
|
55
|
+
["\u{1F4CC}", "pin"],
|
|
56
|
+
["\u{1F4CE}", "paperclip"],
|
|
57
|
+
["\u{1F9EA}", "test tube"],
|
|
58
|
+
["\u{1F41B}", "bug"],
|
|
59
|
+
["\u{1F6E0}\uFE0F", "tools"],
|
|
60
|
+
["\u{1F4C8}", "chart up"],
|
|
61
|
+
["\u{1F4C9}", "chart down"],
|
|
62
|
+
["\u{1F512}", "lock"],
|
|
63
|
+
["\u{1F511}", "key"],
|
|
64
|
+
["\u{1F4A1}", "idea"],
|
|
65
|
+
["\u{1F4DD}", "memo"]
|
|
66
|
+
])
|
|
67
|
+
}
|
|
68
|
+
];
|
|
69
|
+
function emojiName(emoji, groups = EMOJI_GROUPS) {
|
|
70
|
+
for (const group of groups) {
|
|
71
|
+
const found = group.items.find((item) => item.emoji === emoji);
|
|
72
|
+
if (found) return found.name;
|
|
73
|
+
}
|
|
74
|
+
return emoji;
|
|
75
|
+
}
|
|
76
|
+
function searchEmoji(query, groups = EMOJI_GROUPS) {
|
|
77
|
+
const words = query.trim().toLowerCase();
|
|
78
|
+
if (!words) return null;
|
|
79
|
+
const seen = /* @__PURE__ */ new Set();
|
|
80
|
+
const found = [];
|
|
81
|
+
for (const group of groups) {
|
|
82
|
+
for (const item of group.items) {
|
|
83
|
+
if (seen.has(item.emoji) || !item.name.toLowerCase().includes(words)) continue;
|
|
84
|
+
seen.add(item.emoji);
|
|
85
|
+
found.push(item);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return found;
|
|
89
|
+
}
|
|
90
|
+
var EMOJI_PICKER_COLUMNS = 8;
|
|
91
|
+
var EMOJI_PICKER_LABELS = {
|
|
92
|
+
search: "Search emoji",
|
|
93
|
+
results: "Results",
|
|
94
|
+
none: (query) => `No emoji match \u201C${query}\u201D.`
|
|
95
|
+
};
|
|
96
|
+
function layout(groups) {
|
|
97
|
+
let index = 0;
|
|
98
|
+
let row = 0;
|
|
99
|
+
const drawn = groups.map((group) => {
|
|
100
|
+
const cells = group.items.map((entry, at) => ({
|
|
101
|
+
entry,
|
|
102
|
+
index: index + at,
|
|
103
|
+
row: row + Math.floor(at / EMOJI_PICKER_COLUMNS),
|
|
104
|
+
column: at % EMOJI_PICKER_COLUMNS
|
|
105
|
+
}));
|
|
106
|
+
index += group.items.length;
|
|
107
|
+
row += Math.ceil(group.items.length / EMOJI_PICKER_COLUMNS);
|
|
108
|
+
return { label: group.label, cells };
|
|
109
|
+
});
|
|
110
|
+
return { drawn, cells: drawn.flatMap((group) => group.cells) };
|
|
111
|
+
}
|
|
112
|
+
function EmojiPicker({
|
|
113
|
+
label,
|
|
114
|
+
tooltip,
|
|
115
|
+
onPick,
|
|
116
|
+
trigger,
|
|
117
|
+
onOpenChange,
|
|
118
|
+
align = "end",
|
|
119
|
+
side = "bottom",
|
|
120
|
+
groups = EMOJI_GROUPS,
|
|
121
|
+
labels: overrides
|
|
122
|
+
}) {
|
|
123
|
+
const labels = overrides ? { ...EMOJI_PICKER_LABELS, ...overrides } : EMOJI_PICKER_LABELS;
|
|
124
|
+
const id = useId();
|
|
125
|
+
const [query, setQuery] = useState("");
|
|
126
|
+
const [at, setAt] = useState(0);
|
|
127
|
+
const field = useRef(null);
|
|
128
|
+
const grid = useRef(null);
|
|
129
|
+
const found = useMemo(() => searchEmoji(query, groups), [query, groups]);
|
|
130
|
+
const { drawn, cells } = useMemo(
|
|
131
|
+
() => layout(found ? [{ label: labels.results, items: found }] : groups),
|
|
132
|
+
[found, groups, labels.results]
|
|
133
|
+
);
|
|
134
|
+
const stop = Math.min(at, Math.max(0, cells.length - 1));
|
|
135
|
+
const focusCell = (index) => {
|
|
136
|
+
setAt(index);
|
|
137
|
+
grid.current?.querySelector(`[data-emoji-index="${index}"]`)?.focus();
|
|
138
|
+
};
|
|
139
|
+
function onFieldKeys(event, close) {
|
|
140
|
+
if (isComposing(event)) return;
|
|
141
|
+
if (event.key === "ArrowDown" && cells.length > 0) {
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
focusCell(0);
|
|
144
|
+
} else if (event.key === "Enter" && found && found[0]) {
|
|
145
|
+
event.preventDefault();
|
|
146
|
+
onPick(found[0].emoji);
|
|
147
|
+
close();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function onCellKeys(event, cell) {
|
|
151
|
+
let next;
|
|
152
|
+
if (event.key === "ArrowRight") next = cells[cell.index + 1];
|
|
153
|
+
else if (event.key === "ArrowLeft") next = cells[cell.index - 1];
|
|
154
|
+
else if (event.key === "Home") next = cells[0];
|
|
155
|
+
else if (event.key === "End") next = cells[cells.length - 1];
|
|
156
|
+
else if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
157
|
+
const row = cell.row + (event.key === "ArrowDown" ? 1 : -1);
|
|
158
|
+
const inRow = cells.filter((candidate) => candidate.row === row);
|
|
159
|
+
if (inRow.length === 0) {
|
|
160
|
+
if (event.key === "ArrowUp") {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
field.current?.focus();
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
next = inRow.find((candidate) => candidate.column === cell.column) ?? inRow[inRow.length - 1];
|
|
167
|
+
} else return;
|
|
168
|
+
event.preventDefault();
|
|
169
|
+
if (next) focusCell(next.index);
|
|
170
|
+
}
|
|
171
|
+
return /* @__PURE__ */ jsx(
|
|
172
|
+
Popover,
|
|
173
|
+
{
|
|
174
|
+
label,
|
|
175
|
+
align,
|
|
176
|
+
side,
|
|
177
|
+
className: "crewlet-emoji-picker",
|
|
178
|
+
initialFocus: () => field.current,
|
|
179
|
+
trigger: (open, toggle) => tooltip ? /* @__PURE__ */ jsx(Tooltip, { content: tooltip, disabled: open, children: trigger(open, toggle) }) : trigger(open, toggle),
|
|
180
|
+
onOpenChange: (open) => {
|
|
181
|
+
if (!open) {
|
|
182
|
+
setQuery("");
|
|
183
|
+
setAt(0);
|
|
184
|
+
}
|
|
185
|
+
onOpenChange?.(open);
|
|
186
|
+
},
|
|
187
|
+
children: (close) => /* @__PURE__ */ jsxs("div", { className: "crewlet-emoji-picker__body", children: [
|
|
188
|
+
/* @__PURE__ */ jsx(
|
|
189
|
+
Input,
|
|
190
|
+
{
|
|
191
|
+
ref: field,
|
|
192
|
+
inputSize: "sm",
|
|
193
|
+
placeholder: labels.search,
|
|
194
|
+
"aria-label": labels.search,
|
|
195
|
+
leading: /* @__PURE__ */ jsx(SearchGlyph, { size: "sm" }),
|
|
196
|
+
value: query,
|
|
197
|
+
onChange: (event) => {
|
|
198
|
+
setQuery(event.target.value);
|
|
199
|
+
setAt(0);
|
|
200
|
+
},
|
|
201
|
+
onKeyDown: (event) => onFieldKeys(event, close)
|
|
202
|
+
}
|
|
203
|
+
),
|
|
204
|
+
/* @__PURE__ */ jsxs(
|
|
205
|
+
"div",
|
|
206
|
+
{
|
|
207
|
+
ref: grid,
|
|
208
|
+
className: "crewlet-emoji-picker__scroll",
|
|
209
|
+
style: { "--crewlet-emoji-picker-columns": EMOJI_PICKER_COLUMNS },
|
|
210
|
+
children: [
|
|
211
|
+
drawn.map(
|
|
212
|
+
(group, number) => group.cells.length === 0 ? null : /* @__PURE__ */ jsxs("div", { role: "group", "aria-labelledby": `${id}-group-${number}`, children: [
|
|
213
|
+
/* @__PURE__ */ jsx("div", { id: `${id}-group-${number}`, className: "crewlet-emoji-picker__group", children: group.label }),
|
|
214
|
+
/* @__PURE__ */ jsx("div", { className: "crewlet-emoji-picker__grid", children: group.cells.map((cell) => /* @__PURE__ */ jsx(
|
|
215
|
+
"button",
|
|
216
|
+
{
|
|
217
|
+
type: "button",
|
|
218
|
+
className: "crewlet-emoji-picker__cell",
|
|
219
|
+
"aria-label": cell.entry.name,
|
|
220
|
+
title: cell.entry.name,
|
|
221
|
+
"data-emoji-index": cell.index,
|
|
222
|
+
tabIndex: cell.index === stop ? 0 : -1,
|
|
223
|
+
onFocus: () => setAt(cell.index),
|
|
224
|
+
onKeyDown: (event) => onCellKeys(event, cell),
|
|
225
|
+
onClick: () => {
|
|
226
|
+
onPick(cell.entry.emoji);
|
|
227
|
+
close();
|
|
228
|
+
},
|
|
229
|
+
children: cell.entry.emoji
|
|
230
|
+
},
|
|
231
|
+
cell.entry.emoji
|
|
232
|
+
)) })
|
|
233
|
+
] }, group.label)
|
|
234
|
+
),
|
|
235
|
+
found && found.length === 0 ? /* @__PURE__ */ jsx("p", { className: "crewlet-emoji-picker__none", role: "status", children: labels.none(query.trim()) }) : null
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
)
|
|
239
|
+
] })
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Select } from './chunk-
|
|
1
|
+
import { Select } from './chunk-3IWZVEXA.js';
|
|
2
2
|
import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-EE3DJMSQ.js';
|
|
3
|
-
import { Popover } from './chunk-
|
|
4
|
-
import { Input } from './chunk-
|
|
3
|
+
import { Popover } from './chunk-EC6EUIAD.js';
|
|
4
|
+
import { Input } from './chunk-O7N6W52M.js';
|
|
5
5
|
import { Button } from './chunk-DGXZ635L.js';
|
|
6
|
-
import { isComposing } from './chunk-
|
|
6
|
+
import { isComposing } from './chunk-TUEM2XIW.js';
|
|
7
|
+
import { useFocusModality } from './chunk-4ITETIGZ.js';
|
|
7
8
|
import { IconButton } from './chunk-UAUP6XGK.js';
|
|
8
|
-
import { useFocusModality } from './chunk-NUZHC6MM.js';
|
|
9
9
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
10
10
|
import './TimeWindowPicker-YZPKNZZI.css';
|
|
11
11
|
import { useMemo, useState, useRef, useId, useEffect } from 'react';
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { useComposedRef } from './chunk-L72URIHR.js';
|
|
1
2
|
import { Button } from './chunk-DGXZ635L.js';
|
|
2
3
|
import { useLayerContainer, viewportBounds, LAYER_GAP, anchorGone, placePopup, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
|
|
3
|
-
import { usePopupLayer } from './chunk-
|
|
4
|
+
import { usePopupLayer } from './chunk-TUEM2XIW.js';
|
|
5
|
+
import { returnFocus } from './chunk-4ITETIGZ.js';
|
|
4
6
|
import { IconButton } from './chunk-UAUP6XGK.js';
|
|
5
|
-
import { returnFocus } from './chunk-NUZHC6MM.js';
|
|
6
7
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
8
|
import './Menu-I4SNXHOT.css';
|
|
8
9
|
import { useId, useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
|
|
@@ -77,6 +78,7 @@ function Menu({
|
|
|
77
78
|
open,
|
|
78
79
|
onDismiss: (reason) => close(reason !== "outside")
|
|
79
80
|
});
|
|
81
|
+
const sharedRef = useComposedRef(triggerRef, popup.insideRef);
|
|
80
82
|
const entries = () => menu.current ? [...menu.current.querySelectorAll(ITEM_SELECTOR)] : [];
|
|
81
83
|
useLayoutEffect(() => {
|
|
82
84
|
if (!open) return;
|
|
@@ -262,10 +264,7 @@ function Menu({
|
|
|
262
264
|
}
|
|
263
265
|
) : null;
|
|
264
266
|
const shared = {
|
|
265
|
-
ref:
|
|
266
|
-
triggerRef.current = el;
|
|
267
|
-
popup.insideRef(el);
|
|
268
|
-
},
|
|
267
|
+
ref: sharedRef,
|
|
269
268
|
"aria-haspopup": "menu",
|
|
270
269
|
"aria-expanded": open,
|
|
271
270
|
"aria-controls": open ? menuId : void 0,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Toolbar } from './chunk-
|
|
2
|
-
import { SegmentedControl } from './chunk-
|
|
3
|
-
import { tabId } from './chunk-
|
|
1
|
+
import { Toolbar } from './chunk-NXFTCPF6.js';
|
|
2
|
+
import { SegmentedControl } from './chunk-AZYE7NR4.js';
|
|
3
|
+
import { tabId } from './chunk-MVKUE4FI.js';
|
|
4
4
|
import { IconButton } from './chunk-UAUP6XGK.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
6
|
import './MarkdownEditor-BLCJRGDC.css';
|
|
@@ -20,19 +20,26 @@ var MARKDOWN_FORMATS = [
|
|
|
20
20
|
"checklist",
|
|
21
21
|
"table"
|
|
22
22
|
];
|
|
23
|
-
var
|
|
23
|
+
var MARKDOWN_TEXT_FORMATS = ["strikethrough", "quote", "link"];
|
|
24
|
+
var WRAP = { bold: "**", italic: "_", code: "`", strikethrough: "~~" };
|
|
24
25
|
var LINE_MARKER = /^(#{1,6} |- \[[ xX]\] |[-*+] |\d+[.)] )/;
|
|
25
26
|
function insertMarkdown(value, { start, end }, text) {
|
|
26
27
|
const next = value.slice(0, start) + text + value.slice(end);
|
|
27
28
|
const caret = start + text.length;
|
|
28
29
|
return { value: next, selection: { start: caret, end: caret } };
|
|
29
30
|
}
|
|
31
|
+
var QUOTE_MARKER = /^> ?/;
|
|
30
32
|
function formatMarkdown(value, selection, format) {
|
|
31
33
|
switch (format) {
|
|
32
34
|
case "bold":
|
|
33
35
|
case "italic":
|
|
34
36
|
case "code":
|
|
37
|
+
case "strikethrough":
|
|
35
38
|
return wrap(value, selection, WRAP[format]);
|
|
39
|
+
case "quote":
|
|
40
|
+
return prefixLines(value, selection, () => "> ", () => true, QUOTE_MARKER);
|
|
41
|
+
case "link":
|
|
42
|
+
return link(value, selection);
|
|
36
43
|
case "heading2":
|
|
37
44
|
return prefixLines(value, selection, () => "## ", (marker) => marker === "## ");
|
|
38
45
|
case "heading3":
|
|
@@ -74,18 +81,21 @@ function lineSpan(value, { start, end }) {
|
|
|
74
81
|
const newline = value.indexOf("\n", last);
|
|
75
82
|
return [from, newline === -1 ? value.length : newline];
|
|
76
83
|
}
|
|
77
|
-
function prefixLines(value, selection, marker, has) {
|
|
84
|
+
function prefixLines(value, selection, marker, has, pattern = LINE_MARKER) {
|
|
78
85
|
const [from, to] = lineSpan(value, selection);
|
|
79
86
|
const lines = value.slice(from, to).split("\n");
|
|
80
87
|
const single = lines.length === 1;
|
|
81
88
|
const written = lines.filter((line) => single || line.trim() !== "");
|
|
82
|
-
const off = written.length > 0 && written.every((line) =>
|
|
89
|
+
const off = written.length > 0 && written.every((line) => {
|
|
90
|
+
const existing = pattern.exec(line)?.[0];
|
|
91
|
+
return existing !== void 0 && has(existing);
|
|
92
|
+
});
|
|
83
93
|
let index = 0;
|
|
84
94
|
let caretShift = 0;
|
|
85
95
|
const caretLine = value.slice(from, selection.start).split("\n").length - 1;
|
|
86
96
|
const next = lines.map((line, at) => {
|
|
87
97
|
if (!single && line.trim() === "") return line;
|
|
88
|
-
const old =
|
|
98
|
+
const old = pattern.exec(line)?.[0] ?? "";
|
|
89
99
|
const body = line.slice(old.length);
|
|
90
100
|
const added = off ? "" : marker(index);
|
|
91
101
|
index += 1;
|
|
@@ -100,6 +110,24 @@ function prefixLines(value, selection, marker, has) {
|
|
|
100
110
|
}
|
|
101
111
|
return { value: result, selection: { start: from, end: from + block.length } };
|
|
102
112
|
}
|
|
113
|
+
var LINK = /^\[([^\]\n]*)\]\(([^)\s]*)\)$/;
|
|
114
|
+
var LINK_ADDRESS = "https://";
|
|
115
|
+
function link(value, selection) {
|
|
116
|
+
let { start, end } = selection;
|
|
117
|
+
while (start < end && /\s/.test(value[start] ?? "")) start += 1;
|
|
118
|
+
while (end > start && /\s/.test(value[end - 1] ?? "")) end -= 1;
|
|
119
|
+
const selected = value.slice(start, end);
|
|
120
|
+
const existing = LINK.exec(selected);
|
|
121
|
+
if (existing) {
|
|
122
|
+
const label = existing[1] ?? "";
|
|
123
|
+
return { value: value.slice(0, start) + label + value.slice(end), selection: { start, end: start + label.length } };
|
|
124
|
+
}
|
|
125
|
+
const written = `[${selected}](${LINK_ADDRESS})`;
|
|
126
|
+
const result = value.slice(0, start) + written + value.slice(end);
|
|
127
|
+
if (selected === "") return { value: result, selection: { start: start + 1, end: start + 1 } };
|
|
128
|
+
const address = start + selected.length + 3;
|
|
129
|
+
return { value: result, selection: { start: address, end: address + LINK_ADDRESS.length } };
|
|
130
|
+
}
|
|
103
131
|
var TABLE = "| Column | Column |\n| --- | --- |\n| | |";
|
|
104
132
|
function table(value, { start, end }) {
|
|
105
133
|
const before = value.slice(0, start);
|
|
@@ -333,4 +361,4 @@ function MarkdownEditor({
|
|
|
333
361
|
);
|
|
334
362
|
}
|
|
335
363
|
|
|
336
|
-
export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords };
|
|
364
|
+
export { MARKDOWN_FORMATS, MARKDOWN_TEXT_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords };
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Tag } from './chunk-LBGKLYBY.js';
|
|
2
|
+
import { isComposing } from './chunk-TUEM2XIW.js';
|
|
3
|
+
import { useFocusModality } from './chunk-4ITETIGZ.js';
|
|
4
|
+
import { announce } from './chunk-2G355KDJ.js';
|
|
5
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
|
+
import './Tag-WLDOROB5.css';
|
|
7
|
+
import './ChipField-D4CW6XFA.css';
|
|
8
|
+
import { useRef } from 'react';
|
|
9
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
var CHIP_FIELD_LABELS = {
|
|
12
|
+
remove: (label) => `Remove ${label}`,
|
|
13
|
+
removed: (label) => `Removed ${label}`,
|
|
14
|
+
chosen: "Chosen"
|
|
15
|
+
};
|
|
16
|
+
function ChipField({
|
|
17
|
+
items,
|
|
18
|
+
onRemove,
|
|
19
|
+
query,
|
|
20
|
+
onQueryChange,
|
|
21
|
+
onCommit,
|
|
22
|
+
label,
|
|
23
|
+
prefix,
|
|
24
|
+
variant = "boxed",
|
|
25
|
+
inputRef,
|
|
26
|
+
labels: overrides,
|
|
27
|
+
className,
|
|
28
|
+
disabled = false,
|
|
29
|
+
onKeyDown,
|
|
30
|
+
...input
|
|
31
|
+
}) {
|
|
32
|
+
useFocusModality();
|
|
33
|
+
const labels = overrides ? { ...CHIP_FIELD_LABELS, ...overrides } : CHIP_FIELD_LABELS;
|
|
34
|
+
const box = useRef(null);
|
|
35
|
+
const setBox = (el) => {
|
|
36
|
+
box.current = el;
|
|
37
|
+
if (typeof inputRef === "function") inputRef(el);
|
|
38
|
+
else if (inputRef) inputRef.current = el;
|
|
39
|
+
};
|
|
40
|
+
const remove = (item) => {
|
|
41
|
+
onRemove(item.id);
|
|
42
|
+
announce(labels.removed(item.label));
|
|
43
|
+
box.current?.focus();
|
|
44
|
+
};
|
|
45
|
+
const keys = (event) => {
|
|
46
|
+
onKeyDown?.(event);
|
|
47
|
+
if (event.defaultPrevented || isComposing(event)) return;
|
|
48
|
+
if (event.key === "Backspace" && query === "") {
|
|
49
|
+
const last = items.at(-1);
|
|
50
|
+
if (!last) return;
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
remove(last);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (event.key === "Enter" && onCommit && query.trim() !== "" && !event.metaKey && !event.ctrlKey && !event.altKey) {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
onCommit();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const pressRow = (event) => {
|
|
61
|
+
if (disabled || event.target !== event.currentTarget) return;
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
box.current?.focus();
|
|
64
|
+
};
|
|
65
|
+
return (
|
|
66
|
+
// The row is not a control: its press only forwards the caret to the
|
|
67
|
+
// box, which is the field's one keyboard stop besides the chips' Remove.
|
|
68
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
69
|
+
/* @__PURE__ */ jsxs(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
className: cx("crewlet-chip-field", `crewlet-chip-field--${variant}`, disabled && "is-disabled", className),
|
|
73
|
+
onMouseDown: pressRow,
|
|
74
|
+
children: [
|
|
75
|
+
prefix ? /* @__PURE__ */ jsx("span", { className: "crewlet-chip-field__prefix", children: prefix }) : null,
|
|
76
|
+
items.length > 0 ? (
|
|
77
|
+
// THE ROLE IS SPELLED OUT. The list is `display: contents`, so its
|
|
78
|
+
// chips wrap in one line with the box, and a browser that drops a
|
|
79
|
+
// contents box from the accessibility tree drops its list role too.
|
|
80
|
+
// eslint-disable-next-line jsx-a11y/no-redundant-roles
|
|
81
|
+
/* @__PURE__ */ jsx("ul", { role: "list", className: "crewlet-chip-field__chips", "aria-label": labels.chosen, children: items.map((item) => /* @__PURE__ */ jsx("li", { className: "crewlet-chip-field__chip", children: /* @__PURE__ */ jsx(
|
|
82
|
+
Tag,
|
|
83
|
+
{
|
|
84
|
+
size: "sm",
|
|
85
|
+
leadingIcon: item.leading,
|
|
86
|
+
onRemove: disabled ? void 0 : () => remove(item),
|
|
87
|
+
removeAriaLabel: labels.remove(item.label),
|
|
88
|
+
children: item.label
|
|
89
|
+
}
|
|
90
|
+
) }, item.id)) })
|
|
91
|
+
) : null,
|
|
92
|
+
/* @__PURE__ */ jsx(
|
|
93
|
+
"input",
|
|
94
|
+
{
|
|
95
|
+
autoComplete: "off",
|
|
96
|
+
spellCheck: false,
|
|
97
|
+
...input,
|
|
98
|
+
ref: setBox,
|
|
99
|
+
type: "text",
|
|
100
|
+
"aria-label": label,
|
|
101
|
+
className: "crewlet-chip-field__input",
|
|
102
|
+
value: query,
|
|
103
|
+
disabled,
|
|
104
|
+
onChange: (event) => onQueryChange(event.target.value),
|
|
105
|
+
onKeyDown: keys
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export { CHIP_FIELD_LABELS, ChipField };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CardHeaderSlotContext } from './chunk-AV2DXAEL.js';
|
|
2
|
-
import { Count } from './chunk-
|
|
2
|
+
import { Count } from './chunk-D2GT3CR4.js';
|
|
3
3
|
import { useHeadingLevel, HeadingLevelProvider, nextHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
5
|
import './Card-O35OMBQ5.css';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { frameThemeMessage, readFrameHello, frameOriginMatches, negotiateBridge, FRAME_MESSAGE, portTargetOrigin, checkFrameSandbox, httpOrigin, isFrameNonce, frameFragment, readOpenLink, externalUrl, isFocusExit } from './chunk-F6V2PTN6.js';
|
|
2
2
|
import { Callout } from './chunk-BPCY7ZID.js';
|
|
3
|
-
import { Skeleton } from './chunk-
|
|
3
|
+
import { Skeleton } from './chunk-I4IUX3JF.js';
|
|
4
4
|
import { Button } from './chunk-DGXZ635L.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
6
|
import './SandboxedFrame-P5NASXB7.css';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { changeText, sheetLabels } from './chunk-LFSIKGRQ.js';
|
|
2
|
-
import { Tooltip } from './chunk-
|
|
2
|
+
import { Tooltip } from './chunk-7ZSEUO5Q.js';
|
|
3
3
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
4
4
|
import './ChangeMark-KFDGBF6G.css';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { useMediaMatch } from './chunk-
|
|
1
|
+
import { useMediaMatch, REDUCED_MOTION_QUERY } from './chunk-YJQXESOJ.js';
|
|
2
2
|
import { Button } from './chunk-DGXZ635L.js';
|
|
3
3
|
import { VisuallyHidden } from './chunk-UT6CW3C7.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
|
-
import './ChatThread-
|
|
5
|
+
import './ChatThread-HAECJMP6.css';
|
|
6
6
|
import { forwardRef, useRef, Children, useState, useCallback, useEffect, useLayoutEffect, useImperativeHandle } from 'react';
|
|
7
7
|
import { ArrowDownGlyph } from '@crewlethq/icons/glyphs';
|
|
8
8
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
@@ -12,17 +12,20 @@ var CHAT_THREAD_LABELS = {
|
|
|
12
12
|
jumpToLatest: "Jump to latest",
|
|
13
13
|
newItems: (count) => count === 1 ? "1 new item" : `${count.toLocaleString()} new items`
|
|
14
14
|
};
|
|
15
|
-
var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow = true, children, labels: overrides, className, ...rest }, ref) {
|
|
15
|
+
var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow = true, jump = true, rest: restAt = "start", children, labels: overrides, className, ...rest }, ref) {
|
|
16
16
|
const labels = overrides ? { ...CHAT_THREAD_LABELS, ...overrides } : CHAT_THREAD_LABELS;
|
|
17
17
|
const scroller = useRef(null);
|
|
18
18
|
const items = useRef(null);
|
|
19
|
-
const reduced = useMediaMatch(
|
|
19
|
+
const reduced = useMediaMatch(REDUCED_MOTION_QUERY);
|
|
20
20
|
const count = Children.toArray(children).length;
|
|
21
21
|
const atEnd = useRef(true);
|
|
22
22
|
const jumping = useRef(false);
|
|
23
23
|
const [detachedAt, setDetachedAt] = useState(null);
|
|
24
24
|
const countRef = useRef(count);
|
|
25
25
|
countRef.current = count;
|
|
26
|
+
const rowShown = useRef(false);
|
|
27
|
+
rowShown.current = jump && detachedAt !== null;
|
|
28
|
+
const revealing = useRef(null);
|
|
26
29
|
const toEnd = useCallback(
|
|
27
30
|
(smooth) => {
|
|
28
31
|
const el = scroller.current;
|
|
@@ -80,24 +83,44 @@ var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow =
|
|
|
80
83
|
observer.observe(el);
|
|
81
84
|
return () => observer.disconnect();
|
|
82
85
|
}, [follow, toEnd]);
|
|
86
|
+
const place = useCallback(
|
|
87
|
+
(element) => {
|
|
88
|
+
const el = scroller.current;
|
|
89
|
+
if (!el) return;
|
|
90
|
+
jumping.current = false;
|
|
91
|
+
const box = element.getBoundingClientRect();
|
|
92
|
+
const top = box.top - el.getBoundingClientRect().top + el.scrollTop;
|
|
93
|
+
const margins = getComputedStyle(element);
|
|
94
|
+
const above = Number.parseFloat(margins.scrollMarginTop) || 0;
|
|
95
|
+
const below = Number.parseFloat(margins.scrollMarginBottom) || 0;
|
|
96
|
+
const room = el.clientHeight - above - below;
|
|
97
|
+
const target = box.height <= room ? top - above - (room - box.height) / 2 : top - above;
|
|
98
|
+
el.scrollTop = Math.max(0, Math.min(target, el.scrollHeight - el.clientHeight));
|
|
99
|
+
onScroll();
|
|
100
|
+
},
|
|
101
|
+
[onScroll]
|
|
102
|
+
);
|
|
103
|
+
const detached = detachedAt !== null;
|
|
104
|
+
useLayoutEffect(() => {
|
|
105
|
+
const element = revealing.current;
|
|
106
|
+
revealing.current = null;
|
|
107
|
+
if (element && detached) place(element);
|
|
108
|
+
}, [detached, place]);
|
|
83
109
|
useImperativeHandle(
|
|
84
110
|
ref,
|
|
85
111
|
() => ({
|
|
86
112
|
scrollToLatest: () => toEnd(true),
|
|
87
113
|
reveal: (element) => {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
el.scrollTop = Math.max(0, Math.min(target, top));
|
|
94
|
-
onScroll();
|
|
95
|
-
}
|
|
114
|
+
const shown = rowShown.current;
|
|
115
|
+
place(element);
|
|
116
|
+
revealing.current = jump && !shown && !atEnd.current ? element : null;
|
|
117
|
+
},
|
|
118
|
+
scroller: () => scroller.current
|
|
96
119
|
}),
|
|
97
|
-
[
|
|
120
|
+
[jump, place, toEnd]
|
|
98
121
|
);
|
|
99
122
|
const fresh = detachedAt === null ? 0 : Math.max(0, count - detachedAt);
|
|
100
|
-
return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-chat-thread", className), children: [
|
|
123
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-chat-thread", restAt === "end" && "crewlet-chat-thread--rest-end", className), children: [
|
|
101
124
|
/* @__PURE__ */ jsx(
|
|
102
125
|
"div",
|
|
103
126
|
{
|
|
@@ -112,7 +135,7 @@ var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow =
|
|
|
112
135
|
children: /* @__PURE__ */ jsx("div", { ref: items, className: "crewlet-chat-thread__items", children })
|
|
113
136
|
}
|
|
114
137
|
),
|
|
115
|
-
detachedAt === null ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-chat-thread__jump", children: /* @__PURE__ */ jsxs(Button, { variant: "secondary", size: "small", shape: "pill", leadingIcon: /* @__PURE__ */ jsx(ArrowDownGlyph, {}), onClick: () => toEnd(true), children: [
|
|
138
|
+
!jump || detachedAt === null ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-chat-thread__jump", children: /* @__PURE__ */ jsxs(Button, { variant: "secondary", size: "small", shape: "pill", leadingIcon: /* @__PURE__ */ jsx(ArrowDownGlyph, {}), onClick: () => toEnd(true), children: [
|
|
116
139
|
labels.jumpToLatest,
|
|
117
140
|
fresh > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
118
141
|
/* @__PURE__ */ jsx("span", { className: "crewlet-chat-thread__fresh", "aria-hidden": "true", children: fresh.toLocaleString() }),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Modal } from './chunk-
|
|
1
|
+
import { Modal } from './chunk-ZXXZESCD.js';
|
|
2
2
|
import { useClipboard } from './chunk-STJ7QBC3.js';
|
|
3
3
|
import { EmptyValue } from './chunk-RE3FBGQQ.js';
|
|
4
4
|
import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
|
|
5
|
-
import { Checkbox } from './chunk-
|
|
6
|
-
import { Menu } from './chunk-
|
|
5
|
+
import { Checkbox } from './chunk-YQ7Q52XU.js';
|
|
6
|
+
import { Menu } from './chunk-TGGYSQRD.js';
|
|
7
7
|
import { Button } from './chunk-DGXZ635L.js';
|
|
8
8
|
import { IconButton } from './chunk-UAUP6XGK.js';
|
|
9
9
|
import { VisuallyHidden } from './chunk-UT6CW3C7.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ContrastLevelTag } from './chunk-
|
|
2
|
-
import { Popover } from './chunk-
|
|
1
|
+
import { ContrastLevelTag } from './chunk-2ZSCHQOA.js';
|
|
2
|
+
import { Popover } from './chunk-EC6EUIAD.js';
|
|
3
3
|
import { IconButton } from './chunk-UAUP6XGK.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
5
|
import './ContrastHelp-MZCAW5WQ.css';
|