@crewlethq/ui 0.9.0 → 0.11.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 +32 -1
- package/dist/Accordion/index.js +3 -3
- package/dist/AppShell/index.js +2 -2
- package/dist/Avatar/Avatar.d.ts +45 -14
- package/dist/Avatar/AvatarStack.d.ts +1 -3
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.js +2 -2
- package/dist/{Avatar-JAU77SHZ.css → Avatar-QHYOFID3.css} +83 -25
- package/dist/AvatarPicker/AvatarPicker.d.ts +32 -0
- package/dist/AvatarPicker/index.d.ts +3 -0
- package/dist/AvatarPicker/index.js +14 -0
- package/dist/AvatarPicker-PREY36MG.css +54 -0
- package/dist/Canvas/index.js +3 -3
- package/dist/Card/index.js +2 -2
- package/dist/CharacterPicker/index.js +3 -2
- package/dist/CodeBlock/index.js +3 -3
- package/dist/Combobox/index.js +3 -3
- package/dist/CommandPalette/index.js +6 -6
- package/dist/Copyable/index.js +2 -2
- package/dist/DataTable/index.js +6 -6
- package/dist/DataView/index.js +11 -11
- package/dist/DateTimePicker/index.js +4 -4
- package/dist/Disclosure/index.js +3 -3
- package/dist/EntityChip/index.js +3 -3
- package/dist/FactList/FactList.d.ts +33 -0
- package/dist/FactList/index.d.ts +3 -0
- package/dist/FactList/index.js +6 -0
- package/dist/FactList-G2H73NFR.css +57 -0
- package/dist/HuePicker/index.js +4 -3
- package/dist/ImageUpload/index.js +3 -3
- package/dist/Input/FormField.d.ts +8 -1
- package/dist/Input/index.js +1 -1
- package/dist/{Input-DRFNI26F.css → Input-RAKNQJCV.css} +7 -0
- package/dist/ListInput/ListInput.d.ts +3 -1
- package/dist/ListInput/index.js +3 -3
- package/dist/Menu/index.js +3 -3
- package/dist/Modal/index.js +3 -3
- package/dist/OrgLabel/index.js +3 -3
- package/dist/OrgNode/index.js +4 -4
- package/dist/OrgTable/index.js +6 -6
- package/dist/SegmentedControl/index.js +3 -3
- package/dist/Tabs/Tabs.d.ts +18 -0
- package/dist/Tabs/index.d.ts +1 -1
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-BWFQSWY3.css → Tabs-5I5Q5KKM.css} +33 -0
- package/dist/TagsInput/index.js +2 -2
- package/dist/ThemeSwitcher/index.js +4 -4
- package/dist/TimeWindowPicker/index.js +5 -5
- package/dist/TreeCanvas/index.js +4 -4
- package/dist/TreeGrid/index.js +2 -2
- package/dist/chunk-3L5NHASN.js +1 -0
- package/dist/{chunk-OAH4IEQJ.js → chunk-3UK4VFSK.js} +2 -3
- package/dist/{chunk-L7THQMFB.js → chunk-5WEVLIB6.js} +1 -1
- package/dist/{chunk-J3IS2TOA.js → chunk-6OF2DBKY.js} +1 -1
- package/dist/{chunk-IGWPZZIB.js → chunk-6SDGRKQ7.js} +2 -2
- package/dist/{chunk-EUT7VBQG.js → chunk-CIOKUMVC.js} +6 -6
- package/dist/{chunk-Y2V3TSQC.js → chunk-DDTDN5L2.js} +1 -1
- package/dist/{chunk-LPHHDCN3.js → chunk-EBBAAQDY.js} +1 -1
- package/dist/{chunk-UYK72NOS.js → chunk-ELZKOVEC.js} +1 -1
- package/dist/chunk-EXHQ2QVW.js +1 -0
- package/dist/{chunk-ZGX2DP7F.js → chunk-FTEJPHBI.js} +8 -2
- package/dist/{chunk-RIAZM6L3.js → chunk-G2AVKPSL.js} +1 -1
- package/dist/chunk-HI6Q2UXQ.js +169 -0
- package/dist/{chunk-IZHN5I3H.js → chunk-HLBRPES3.js} +4 -4
- package/dist/chunk-HV6IZFBK.js +64 -0
- package/dist/{chunk-K7OS4O2U.js → chunk-IHGKPEEV.js} +1 -1
- package/dist/{chunk-HEOVQZL7.js → chunk-JHQUT4WJ.js} +6 -2
- package/dist/{chunk-26TXVHN2.js → chunk-K5Q2DK3P.js} +1 -2
- package/dist/{chunk-MORLKUGM.js → chunk-KGTQ5CVD.js} +1 -1
- package/dist/{chunk-E3HDS4F7.js → chunk-LAQK4V3Z.js} +1 -1
- package/dist/{chunk-6HXH57BL.js → chunk-LZP7FGT7.js} +4 -2
- package/dist/{chunk-CVB7O3SZ.js → chunk-R4ZJB5YX.js} +4 -4
- package/dist/{chunk-MICH6QSJ.js → chunk-S4RCG44T.js} +1 -1
- package/dist/{chunk-UI6HWAWE.js → chunk-UAQIUSSK.js} +1 -1
- package/dist/chunk-URYDN2KA.js +25 -0
- package/dist/{chunk-X6K6OZ47.js → chunk-WEIINZPA.js} +1 -1
- package/dist/{chunk-IKH3Y4MP.js → chunk-YXMCUKFI.js} +1 -2
- package/dist/{chunk-JB6AN4ZC.js → chunk-ZMJHK7DR.js} +2 -2
- package/dist/generated/index.d.ts +2 -0
- package/dist/generated/index.js +58 -54
- package/dist/index.js +58 -54
- package/dist/styles.css +245 -30
- package/dist/utils/index.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-UDW3DAP5.js +0 -125
- package/dist/{chunk-VE6LD3KM.js → chunk-2PZBIHRV.js} +2 -2
- package/dist/{chunk-MPXI6FM6.js → chunk-7JGWSOLM.js} +1 -1
- package/dist/{chunk-OVLJEVQS.js → chunk-7LD6P32I.js} +1 -1
- package/dist/{chunk-CEOXFO3E.js → chunk-EG6NYWVK.js} +1 -1
- package/dist/{chunk-FZVJDJFN.js → chunk-ENJUPIND.js} +1 -1
- package/dist/{chunk-5I56UXBJ.js → chunk-JCNUQ3US.js} +2 -2
- package/dist/{chunk-SX2DFTQV.js → chunk-MCPKHYMC.js} +1 -1
- package/dist/{chunk-YPTC4TX5.js → chunk-PQLMLG5K.js} +0 -0
- package/dist/{chunk-BTHX2FS3.js → chunk-TEEJSTFG.js} +2 -2
- package/dist/{chunk-LSB3EHBW.js → chunk-TFH6SYWB.js} +2 -2
- package/dist/{chunk-26SCUACK.js → chunk-YACKC3K2.js} +1 -1
package/dist/index.js
CHANGED
|
@@ -1,101 +1,105 @@
|
|
|
1
|
-
import './chunk-
|
|
1
|
+
import './chunk-PQLMLG5K.js';
|
|
2
|
+
export { TreeCanvas } from './chunk-5WEVLIB6.js';
|
|
2
3
|
import './chunk-AER7UDD4.js';
|
|
4
|
+
export { ThemeToggle } from './chunk-ORNOOMVY.js';
|
|
5
|
+
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-HLBRPES3.js';
|
|
3
6
|
export { Timeline, TimelineItem } from './chunk-O67VF5MS.js';
|
|
4
7
|
export { ToastProvider, Toaster, useToast } from './chunk-UG5ZMAXW.js';
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
8
|
+
export { Switch } from './chunk-A722MUNR.js';
|
|
9
|
+
export { Table } from './chunk-V2N3BMOT.js';
|
|
7
10
|
export { TagGroup } from './chunk-E6UWRXNM.js';
|
|
8
|
-
export { TagsInput } from './chunk-
|
|
11
|
+
export { TagsInput } from './chunk-7JGWSOLM.js';
|
|
9
12
|
export { Text } from './chunk-23DHIMJA.js';
|
|
10
|
-
export { DensitySwitcher, ThemeSwitcher } from './chunk-
|
|
11
|
-
export { ThemeToggle } from './chunk-ORNOOMVY.js';
|
|
13
|
+
export { DensitySwitcher, ThemeSwitcher } from './chunk-WEIINZPA.js';
|
|
12
14
|
export { applyDensity, applyStoredPreferences, applyTheme, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-K3OWD7BJ.js';
|
|
13
|
-
export {
|
|
15
|
+
export { Select } from './chunk-SEFMO2EV.js';
|
|
16
|
+
export { matchesShortcut, useShortcut } from './chunk-2FPENTCF.js';
|
|
14
17
|
export { NavGroup, NavItem, SidebarNav } from './chunk-IVFJD7WY.js';
|
|
15
18
|
export { Skeleton } from './chunk-W5J7R5EB.js';
|
|
16
19
|
export { StatCard } from './chunk-IKB6HFGK.js';
|
|
17
20
|
export { StatGroup } from './chunk-QVAFL2LE.js';
|
|
18
21
|
export { Stepper } from './chunk-5QWIJSQM.js';
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
22
|
+
export { PricingCard } from './chunk-UCYIRDND.js';
|
|
23
|
+
export { Tag } from './chunk-LOECRMHA.js';
|
|
24
|
+
export { StatusDot } from './chunk-WIATRXEJ.js';
|
|
21
25
|
export { Prose } from './chunk-JCSA3XVH.js';
|
|
22
26
|
export { SearchTrigger } from './chunk-6DRDCT22.js';
|
|
23
27
|
export { Section } from './chunk-A2UXBCLO.js';
|
|
24
|
-
import './chunk-
|
|
28
|
+
import './chunk-UAQIUSSK.js';
|
|
25
29
|
export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
|
|
26
|
-
export {
|
|
27
|
-
export { matchesShortcut, useShortcut } from './chunk-2FPENTCF.js';
|
|
30
|
+
export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-4PZ6FJKW.js';
|
|
28
31
|
export { NewItemsNotice } from './chunk-PXU6HOZB.js';
|
|
29
|
-
export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from './chunk-
|
|
30
|
-
export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from './chunk-
|
|
31
|
-
export { TreeGrid } from './chunk-
|
|
32
|
+
export { OrgNodeDisclosure, OrgNodeLabel, OrgNodeLead } from './chunk-IHGKPEEV.js';
|
|
33
|
+
export { OrgTable, OrgTableActions, OrgTableAdd, OrgTableName } from './chunk-ZMJHK7DR.js';
|
|
34
|
+
export { TreeGrid } from './chunk-MCPKHYMC.js';
|
|
32
35
|
export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, placeGroups, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from './chunk-S3BCVWTU.js';
|
|
33
|
-
export { OrgLabel } from './chunk-
|
|
34
|
-
export { PricingCard } from './chunk-UCYIRDND.js';
|
|
35
|
-
export { Tag } from './chunk-LOECRMHA.js';
|
|
36
|
-
export { StatusDot } from './chunk-WIATRXEJ.js';
|
|
36
|
+
export { OrgLabel } from './chunk-6OF2DBKY.js';
|
|
37
37
|
export { AutoGrid, Inline, Spacer, Stack } from './chunk-W4ENKCXJ.js';
|
|
38
38
|
export { Link } from './chunk-ZPSOF6VL.js';
|
|
39
39
|
export { List, ListItem } from './chunk-DS2C73RJ.js';
|
|
40
|
-
export { ListInput } from './chunk-
|
|
41
|
-
export {
|
|
40
|
+
export { ListInput } from './chunk-LZP7FGT7.js';
|
|
41
|
+
export { Eyebrow } from './chunk-RK4XPHVG.js';
|
|
42
|
+
export { FactList } from './chunk-URYDN2KA.js';
|
|
43
|
+
export { Tooltip } from './chunk-CQY5NTRS.js';
|
|
42
44
|
export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './chunk-5YLON2PW.js';
|
|
43
45
|
export { useFullscreen } from './chunk-XDTYBF2F.js';
|
|
44
|
-
|
|
45
|
-
export {
|
|
46
|
-
export { SegmentedControl } from './chunk-LPHHDCN3.js';
|
|
47
|
-
export { TabPanel, Tabs, tabId } from './chunk-HEOVQZL7.js';
|
|
46
|
+
import './chunk-EXHQ2QVW.js';
|
|
47
|
+
export { ImageUpload } from './chunk-LAQK4V3Z.js';
|
|
48
48
|
export { InlineCode } from './chunk-NN62JQLR.js';
|
|
49
|
-
export { ImageUpload } from './chunk-E3HDS4F7.js';
|
|
50
49
|
export { DescriptionList, DescriptionListItem } from './chunk-XN4JBAN3.js';
|
|
51
50
|
export { DIFF_LIST_LABELS, DiffList } from './chunk-LFHCXZO5.js';
|
|
52
|
-
export { Disclosure } from './chunk-
|
|
51
|
+
export { Disclosure } from './chunk-S4RCG44T.js';
|
|
53
52
|
export { EmptyState } from './chunk-RA2ULG6H.js';
|
|
54
|
-
export { EntityChip } from './chunk-
|
|
53
|
+
export { EntityChip } from './chunk-DDTDN5L2.js';
|
|
55
54
|
export { ErrorBoundary } from './chunk-XX2VQE55.js';
|
|
56
|
-
export {
|
|
57
|
-
export { Combobox } from './chunk-
|
|
58
|
-
export { CommandPalette } from './chunk-
|
|
55
|
+
export { CodeBlock } from './chunk-KGTQ5CVD.js';
|
|
56
|
+
export { Combobox } from './chunk-ELZKOVEC.js';
|
|
57
|
+
export { CommandPalette } from './chunk-6SDGRKQ7.js';
|
|
59
58
|
export { Container } from './chunk-QVE4GJAT.js';
|
|
60
|
-
export {
|
|
59
|
+
export { CopyButton, Copyable } from './chunk-YACKC3K2.js';
|
|
60
|
+
export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-CIOKUMVC.js';
|
|
61
61
|
export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-PGRPNDWM.js';
|
|
62
62
|
export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from './chunk-3CZ7XAVY.js';
|
|
63
63
|
export { PageHeader } from './chunk-HOXGBLEY.js';
|
|
64
|
+
export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-JCNUQ3US.js';
|
|
64
65
|
export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
|
|
66
|
+
export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from './chunk-FTEJPHBI.js';
|
|
65
67
|
export { TYPE_AHEAD_WINDOW, useListbox, useOptionKeys } from './chunk-6MU7HNB4.js';
|
|
66
|
-
export {
|
|
67
|
-
export {
|
|
68
|
-
export { Menu } from './chunk-LSB3EHBW.js';
|
|
68
|
+
export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-R4ZJB5YX.js';
|
|
69
|
+
export { Menu } from './chunk-TFH6SYWB.js';
|
|
69
70
|
export { EMPTY_VALUE, EmptyValue } from './chunk-EUCC37WY.js';
|
|
70
|
-
export { ConfirmModal, Modal } from './chunk-
|
|
71
|
-
export {
|
|
72
|
-
export { Popover } from './chunk-PDUZO35I.js';
|
|
71
|
+
export { ConfirmModal, Modal } from './chunk-TEEJSTFG.js';
|
|
72
|
+
export { useClipboard, writeClipboard } from './chunk-5VNUYO76.js';
|
|
73
73
|
export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-GXQ3B46I.js';
|
|
74
74
|
export { Callout } from './chunk-R6FBDTP3.js';
|
|
75
|
-
export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-
|
|
75
|
+
export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-2PZBIHRV.js';
|
|
76
76
|
import './chunk-53DVJCVW.js';
|
|
77
|
-
export {
|
|
77
|
+
export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
|
|
78
|
+
export { Card } from './chunk-EG6NYWVK.js';
|
|
78
79
|
export { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
|
|
79
|
-
|
|
80
|
-
import './chunk-CBOICT64.js';
|
|
80
|
+
import './chunk-3L5NHASN.js';
|
|
81
81
|
export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from './chunk-4WNNEDKO.js';
|
|
82
82
|
export { Checkbox } from './chunk-YCTMKKRA.js';
|
|
83
|
-
export {
|
|
84
|
-
export {
|
|
85
|
-
export { useClipboard, writeClipboard } from './chunk-5VNUYO76.js';
|
|
86
|
-
export { Accordion, AccordionItem } from './chunk-RIAZM6L3.js';
|
|
87
|
-
export { DisclosureAnatomy } from './chunk-FZVJDJFN.js';
|
|
88
|
-
export { Count } from './chunk-BHHIIK3M.js';
|
|
83
|
+
export { Accordion, AccordionItem } from './chunk-G2AVKPSL.js';
|
|
84
|
+
export { DisclosureAnatomy } from './chunk-ENJUPIND.js';
|
|
89
85
|
export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from './chunk-PQADV6P6.js';
|
|
90
86
|
export { ADD_PILL_MS, AddPill } from './chunk-74WGARJE.js';
|
|
87
|
+
export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell } from './chunk-7LD6P32I.js';
|
|
88
|
+
export { IconButton } from './chunk-4FQT6ZAY.js';
|
|
91
89
|
export { Announcer, announce, useAnnouncer } from './chunk-RSAQOKH3.js';
|
|
92
|
-
export {
|
|
90
|
+
export { AvatarStack, avatarStackLabel } from './chunk-3UK4VFSK.js';
|
|
91
|
+
export { AvatarPicker } from './chunk-HV6IZFBK.js';
|
|
92
|
+
export { HuePicker } from './chunk-K5Q2DK3P.js';
|
|
93
|
+
export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from './chunk-AYKXMIOR.js';
|
|
94
|
+
export { SegmentedControl } from './chunk-EBBAAQDY.js';
|
|
95
|
+
export { TabPanel, Tabs, tabId } from './chunk-JHQUT4WJ.js';
|
|
96
|
+
export { Popover } from './chunk-PDUZO35I.js';
|
|
97
|
+
export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from './chunk-YXMCUKFI.js';
|
|
98
|
+
import './chunk-CBOICT64.js';
|
|
99
|
+
export { Count } from './chunk-BHHIIK3M.js';
|
|
93
100
|
export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from './chunk-7RPGY3JE.js';
|
|
94
101
|
export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from './chunk-R25RGPUB.js';
|
|
95
|
-
export { IconButton } from './chunk-4FQT6ZAY.js';
|
|
96
|
-
export { AvatarStack, avatarStackLabel } from './chunk-OAH4IEQJ.js';
|
|
97
|
-
export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, Avatar, avatarCorner, avatarPixels, avatarTint, getInitials } from './chunk-UDW3DAP5.js';
|
|
98
|
-
export { BrandLockup } from './chunk-7KBNFFM3.js';
|
|
99
|
-
export { Button, ButtonLink } from './chunk-OG6CL3EB.js';
|
|
100
102
|
export { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
103
|
+
export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, AVATAR_STATUSES, AVATAR_STATUS_LABELS, Avatar, avatarCorner, avatarPixels, avatarTint, getInitials } from './chunk-HI6Q2UXQ.js';
|
|
104
|
+
export { BrandLockup } from './chunk-7KBNFFM3.js';
|
|
101
105
|
export { cx } from './chunk-ODEQTPFM.js';
|
package/dist/styles.css
CHANGED
|
@@ -1088,7 +1088,7 @@
|
|
|
1088
1088
|
}
|
|
1089
1089
|
|
|
1090
1090
|
|
|
1091
|
-
/* Avatar-
|
|
1091
|
+
/* Avatar-QHYOFID3.css */
|
|
1092
1092
|
/*
|
|
1093
1093
|
* The identity badge.
|
|
1094
1094
|
*
|
|
@@ -1101,8 +1101,10 @@
|
|
|
1101
1101
|
* OUTLINE (a squircle for an agent, a circle for a person), the monogram and
|
|
1102
1102
|
* the name, and for an agent an operator gave one, its character and its hue.
|
|
1103
1103
|
*
|
|
1104
|
-
*
|
|
1105
|
-
*
|
|
1104
|
+
* A STATE IS A CORNER BADGE, NEVER A LINE ROUND THE PLATE. A ring in a state's
|
|
1105
|
+
* hue round a plate in the agent's own hue put two colours on a 32px mark and
|
|
1106
|
+
* framed what the agent was doing louder than who it is. The one ring left is
|
|
1107
|
+
* SELECTED, in the accent.
|
|
1106
1108
|
*
|
|
1107
1109
|
* The seeded tints stay for the one case that earns them, a roster somebody
|
|
1108
1110
|
* scans, and their grounds are TOKENS: measured under white initials and held
|
|
@@ -1302,11 +1304,12 @@
|
|
|
1302
1304
|
color: var(--color-node-blue);
|
|
1303
1305
|
}
|
|
1304
1306
|
|
|
1305
|
-
/* ── the
|
|
1307
|
+
/* ── the selected ring ────────────────────────────────────────────────── */
|
|
1306
1308
|
|
|
1307
1309
|
/*
|
|
1308
1310
|
* A 1.5px LINE 2px OUTSIDE THE BADGE, which is the design's ring: it draws a
|
|
1309
1311
|
* 3.5px shadow over a 2px one in the card's colour, and 3.5 less 2 is 1.5.
|
|
1312
|
+
* Longhands, so nothing else that sets an outline resets the ring's geometry.
|
|
1310
1313
|
*
|
|
1311
1314
|
* AN OUTLINE RATHER THAN THAT SHADOW PAIR, for three reasons. The gap is
|
|
1312
1315
|
* TRANSPARENT, so the ring reads on whatever the badge stands on, where the
|
|
@@ -1314,44 +1317,156 @@
|
|
|
1314
1317
|
* other ground. An outline follows the corner, the squircle's included, in
|
|
1315
1318
|
* every engine this package supports. And forced-colors mode keeps an outline
|
|
1316
1319
|
* and drops every shadow, so the ring is still drawn for the readers who most
|
|
1317
|
-
* need a boundary
|
|
1318
|
-
*
|
|
1319
|
-
*
|
|
1320
|
-
*
|
|
1321
|
-
*
|
|
1322
|
-
|
|
1323
|
-
* boundary a reader has to see is held to.
|
|
1324
|
-
*/
|
|
1325
|
-
.crewlet-avatar--ring-info,
|
|
1326
|
-
.crewlet-avatar--ring-warning,
|
|
1327
|
-
.crewlet-avatar--ring-danger,
|
|
1328
|
-
.crewlet-avatar--ring-success,
|
|
1320
|
+
* need a boundary.
|
|
1321
|
+
*
|
|
1322
|
+
* SELECTED, in the accent, which is what the accent means: where the reader
|
|
1323
|
+
* is. It is the only place a badge spends the accent, and the accent is
|
|
1324
|
+
* measured at 3:1 as a mark on every opaque surface by @crewlethq/tokens.
|
|
1325
|
+
*/
|
|
1329
1326
|
.crewlet-avatar--ring-brand {
|
|
1330
1327
|
outline-style: solid;
|
|
1331
1328
|
outline-width: 1.5px;
|
|
1332
1329
|
outline-offset: 2px;
|
|
1330
|
+
outline-color: var(--color-brand-accent);
|
|
1333
1331
|
}
|
|
1334
1332
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1333
|
+
/* ── the status badge ─────────────────────────────────────────────────── */
|
|
1334
|
+
|
|
1335
|
+
/*
|
|
1336
|
+
* THE FRAME is the face's own box, so a badge with a status takes exactly the
|
|
1337
|
+
* room one without takes: the corner badge hangs past it rather than growing
|
|
1338
|
+
* it, and a row lays out the same either way. The badge is 0.42 of the box,
|
|
1339
|
+
* never under 10px, which is the size its glyph stays a shape at.
|
|
1340
|
+
*/
|
|
1341
|
+
.crewlet-avatar-frame {
|
|
1342
|
+
--crewlet-avatar-status-size: max(10px, calc(var(--crewlet-avatar-size) * 0.42));
|
|
1343
|
+
--crewlet-avatar-status-overhang: 2px;
|
|
1344
|
+
--crewlet-avatar-status-gap: 1.5px;
|
|
1345
|
+
position: relative;
|
|
1346
|
+
display: inline-flex;
|
|
1347
|
+
flex: none;
|
|
1348
|
+
width: var(--crewlet-avatar-size);
|
|
1349
|
+
height: var(--crewlet-avatar-size);
|
|
1350
|
+
vertical-align: middle;
|
|
1337
1351
|
}
|
|
1338
1352
|
|
|
1339
|
-
|
|
1340
|
-
|
|
1353
|
+
/*
|
|
1354
|
+
* THE NOTCH: the face is masked by a circle a gap wider than the badge, centred
|
|
1355
|
+
* where the badge sits, so the gap shows whatever the badge stands on. A ring
|
|
1356
|
+
* of the ground's colour would need to know that ground, and a badge on a card,
|
|
1357
|
+
* a hovered row and the page would each need a different one. A mask reads only
|
|
1358
|
+
* alpha, so its black is opacity rather than a colour.
|
|
1359
|
+
*/
|
|
1360
|
+
.crewlet-avatar--notched {
|
|
1361
|
+
--crewlet-avatar-status-centre: calc(
|
|
1362
|
+
100% + var(--crewlet-avatar-status-overhang) - var(--crewlet-avatar-status-size) / 2
|
|
1363
|
+
);
|
|
1364
|
+
--crewlet-avatar-status-cut: calc(var(--crewlet-avatar-status-size) / 2 + var(--crewlet-avatar-status-gap));
|
|
1365
|
+
-webkit-mask-image: radial-gradient(
|
|
1366
|
+
circle at var(--crewlet-avatar-status-centre) var(--crewlet-avatar-status-centre),
|
|
1367
|
+
transparent var(--crewlet-avatar-status-cut),
|
|
1368
|
+
#000 calc(var(--crewlet-avatar-status-cut) + 0.5px)
|
|
1369
|
+
);
|
|
1370
|
+
mask-image: radial-gradient(
|
|
1371
|
+
circle at var(--crewlet-avatar-status-centre) var(--crewlet-avatar-status-centre),
|
|
1372
|
+
transparent var(--crewlet-avatar-status-cut),
|
|
1373
|
+
#000 calc(var(--crewlet-avatar-status-cut) + 0.5px)
|
|
1374
|
+
);
|
|
1341
1375
|
}
|
|
1342
1376
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1377
|
+
/*
|
|
1378
|
+
* THE BADGE: a state's fill step carrying its glyph in the inverse ink, which
|
|
1379
|
+
* the tokens' palette suite holds at 3:1 on each fill (`MARK_ON_FILL`). The
|
|
1380
|
+
* transparent outline is drawn only in forced-colors mode, where the fill
|
|
1381
|
+
* becomes the page's own colour and the outline is what keeps a boundary.
|
|
1382
|
+
*/
|
|
1383
|
+
.crewlet-avatar__status {
|
|
1384
|
+
position: absolute;
|
|
1385
|
+
right: calc(var(--crewlet-avatar-status-overhang) * -1);
|
|
1386
|
+
bottom: calc(var(--crewlet-avatar-status-overhang) * -1);
|
|
1387
|
+
display: grid;
|
|
1388
|
+
place-items: center;
|
|
1389
|
+
width: var(--crewlet-avatar-status-size);
|
|
1390
|
+
height: var(--crewlet-avatar-status-size);
|
|
1391
|
+
border-radius: var(--radius-circle);
|
|
1392
|
+
outline: 1px solid transparent;
|
|
1393
|
+
color: var(--color-text-inverse);
|
|
1394
|
+
pointer-events: none;
|
|
1345
1395
|
}
|
|
1346
1396
|
|
|
1347
|
-
.crewlet-
|
|
1348
|
-
|
|
1397
|
+
.crewlet-avatar__status > svg {
|
|
1398
|
+
display: block;
|
|
1399
|
+
width: 100%;
|
|
1400
|
+
height: 100%;
|
|
1349
1401
|
}
|
|
1350
1402
|
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1403
|
+
.crewlet-avatar__status--working {
|
|
1404
|
+
background: var(--color-feedback-info);
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
.crewlet-avatar__status--needs {
|
|
1408
|
+
background: var(--color-feedback-warning);
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
.crewlet-avatar__status--stopped {
|
|
1412
|
+
background: var(--color-feedback-danger);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
|
|
1416
|
+
/* AvatarPicker-PREY36MG.css */
|
|
1417
|
+
/*
|
|
1418
|
+
* The badge as a button, with a pencil pip on its corner saying it changes
|
|
1419
|
+
* the badge. No chrome of its own beyond the focus ring: the badge is the
|
|
1420
|
+
* control's face.
|
|
1421
|
+
*/
|
|
1422
|
+
.crewlet-avatar-picker {
|
|
1423
|
+
position: relative;
|
|
1424
|
+
display: inline-flex;
|
|
1425
|
+
flex: none;
|
|
1426
|
+
padding: 0;
|
|
1427
|
+
border: 0;
|
|
1428
|
+
border-radius: var(--radius-lg);
|
|
1429
|
+
background: none;
|
|
1430
|
+
cursor: pointer;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
button.crewlet-avatar-picker:focus-visible {
|
|
1434
|
+
outline: 2px solid var(--color-focus);
|
|
1435
|
+
outline-offset: 2px;
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
.crewlet-avatar-picker__pip {
|
|
1439
|
+
position: absolute;
|
|
1440
|
+
right: calc(var(--spacing-1) * -1);
|
|
1441
|
+
bottom: calc(var(--spacing-1) * -1);
|
|
1442
|
+
display: grid;
|
|
1443
|
+
place-items: center;
|
|
1444
|
+
width: 16px;
|
|
1445
|
+
height: 16px;
|
|
1446
|
+
border: 1px solid var(--color-border-strong);
|
|
1447
|
+
border-radius: var(--radius-circle);
|
|
1448
|
+
background: var(--color-surface-elevated);
|
|
1449
|
+
color: var(--color-text-secondary);
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
1453
|
+
color: var(--color-text-primary);
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
.crewlet-avatar-picker__body {
|
|
1457
|
+
display: grid;
|
|
1458
|
+
gap: var(--spacing-2);
|
|
1459
|
+
width: max-content;
|
|
1460
|
+
max-width: 100%;
|
|
1461
|
+
padding: var(--spacing-3);
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
.crewlet-avatar-picker__label {
|
|
1465
|
+
font-size: var(--font-size-2xs);
|
|
1466
|
+
font-weight: var(--font-weight-medium);
|
|
1467
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
1468
|
+
text-transform: uppercase;
|
|
1469
|
+
color: var(--color-text-tertiary);
|
|
1355
1470
|
}
|
|
1356
1471
|
|
|
1357
1472
|
|
|
@@ -7974,6 +8089,66 @@ svg.crewlet-datetime__chevron {
|
|
|
7974
8089
|
}
|
|
7975
8090
|
|
|
7976
8091
|
|
|
8092
|
+
/* FactList-G2H73NFR.css */
|
|
8093
|
+
/*
|
|
8094
|
+
* Read-only facts in one bordered box, a 32px row each: label and lock on the
|
|
8095
|
+
* left, the value on the right. The rows share the box's hairline between
|
|
8096
|
+
* them, so a list of six reads as one object rather than six cards.
|
|
8097
|
+
*/
|
|
8098
|
+
.crewlet-fact-list {
|
|
8099
|
+
display: grid;
|
|
8100
|
+
margin: 0;
|
|
8101
|
+
border: 1px solid var(--color-border-default);
|
|
8102
|
+
border-radius: var(--radius-md);
|
|
8103
|
+
overflow: hidden;
|
|
8104
|
+
}
|
|
8105
|
+
|
|
8106
|
+
.crewlet-fact-list__row {
|
|
8107
|
+
display: flex;
|
|
8108
|
+
align-items: center;
|
|
8109
|
+
gap: var(--spacing-2);
|
|
8110
|
+
min-height: 32px;
|
|
8111
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
8112
|
+
font-size: var(--font-size-compact);
|
|
8113
|
+
}
|
|
8114
|
+
|
|
8115
|
+
.crewlet-fact-list__row + .crewlet-fact-list__row {
|
|
8116
|
+
border-top: 1px solid var(--color-border-default);
|
|
8117
|
+
}
|
|
8118
|
+
|
|
8119
|
+
.crewlet-fact-list__row.is-locked {
|
|
8120
|
+
cursor: help;
|
|
8121
|
+
}
|
|
8122
|
+
|
|
8123
|
+
.crewlet-fact-list__label {
|
|
8124
|
+
display: flex;
|
|
8125
|
+
flex: 1 1 auto;
|
|
8126
|
+
align-items: center;
|
|
8127
|
+
gap: var(--spacing-1);
|
|
8128
|
+
min-width: 0;
|
|
8129
|
+
margin: 0;
|
|
8130
|
+
color: var(--color-text-tertiary);
|
|
8131
|
+
}
|
|
8132
|
+
|
|
8133
|
+
.crewlet-fact-list__lock {
|
|
8134
|
+
flex: none;
|
|
8135
|
+
color: var(--color-text-tertiary);
|
|
8136
|
+
}
|
|
8137
|
+
|
|
8138
|
+
.crewlet-fact-list__value {
|
|
8139
|
+
display: flex;
|
|
8140
|
+
flex: 0 1 auto;
|
|
8141
|
+
align-items: center;
|
|
8142
|
+
justify-content: flex-end;
|
|
8143
|
+
gap: var(--spacing-2);
|
|
8144
|
+
min-width: 0;
|
|
8145
|
+
margin: 0;
|
|
8146
|
+
color: var(--color-text-secondary);
|
|
8147
|
+
text-align: right;
|
|
8148
|
+
overflow-wrap: anywhere;
|
|
8149
|
+
}
|
|
8150
|
+
|
|
8151
|
+
|
|
7977
8152
|
/* FilterChip-EZ4QMW4E.css */
|
|
7978
8153
|
/*
|
|
7979
8154
|
* The filter chip: neutral until it is on, and then the accent.
|
|
@@ -8566,7 +8741,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8566
8741
|
}
|
|
8567
8742
|
|
|
8568
8743
|
|
|
8569
|
-
/* Input-
|
|
8744
|
+
/* Input-RAKNQJCV.css */
|
|
8570
8745
|
/*
|
|
8571
8746
|
* The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
|
|
8572
8747
|
* ReadOnlyField.
|
|
@@ -9071,6 +9246,13 @@ svg.crewlet-datetime__chevron {
|
|
|
9071
9246
|
color: var(--color-text-tertiary);
|
|
9072
9247
|
}
|
|
9073
9248
|
|
|
9249
|
+
/* SHOWN ONLY WHILE THE FIELD HAS FOCUS (`helperOnFocus`): a dense form reads as
|
|
9250
|
+
labels and values at rest, and the sentence appears under the field the
|
|
9251
|
+
reader is in. Still described, so a screen reader hears it on entry. */
|
|
9252
|
+
.crewlet-form-field--helper-on-focus:not(:focus-within) .crewlet-form-field__helper {
|
|
9253
|
+
display: none;
|
|
9254
|
+
}
|
|
9255
|
+
|
|
9074
9256
|
/*
|
|
9075
9257
|
* The error line, on the danger INK. It stays BESIDE the help rather than
|
|
9076
9258
|
* replacing it: a reader told they are wrong needs the line that says what
|
|
@@ -15434,7 +15616,7 @@ svg.crewlet-select__chevron {
|
|
|
15434
15616
|
}
|
|
15435
15617
|
|
|
15436
15618
|
|
|
15437
|
-
/* Tabs-
|
|
15619
|
+
/* Tabs-5I5Q5KKM.css */
|
|
15438
15620
|
/*
|
|
15439
15621
|
* The pill register: Tabs and SegmentedControl.
|
|
15440
15622
|
*
|
|
@@ -15775,6 +15957,39 @@ svg.crewlet-select__chevron {
|
|
|
15775
15957
|
}
|
|
15776
15958
|
}
|
|
15777
15959
|
|
|
15960
|
+
/* ── markers ──────────────────────────────────────────────────────────────
|
|
15961
|
+
What needs the reader behind a tab: a danger count for problems, a 6px
|
|
15962
|
+
dot for a warning or an unsaved change. One per tab, the most urgent. */
|
|
15963
|
+
.crewlet-tabs__marker {
|
|
15964
|
+
display: inline-flex;
|
|
15965
|
+
align-items: center;
|
|
15966
|
+
justify-content: center;
|
|
15967
|
+
flex: none;
|
|
15968
|
+
}
|
|
15969
|
+
.crewlet-tabs__marker--danger {
|
|
15970
|
+
min-width: 16px;
|
|
15971
|
+
height: 16px;
|
|
15972
|
+
padding: 0 var(--spacing-1);
|
|
15973
|
+
border-radius: var(--radius-circle);
|
|
15974
|
+
background: var(--color-feedback-danger-soft);
|
|
15975
|
+
color: var(--color-feedback-danger-ink);
|
|
15976
|
+
font-family: var(--font-family-mono);
|
|
15977
|
+
font-size: var(--font-size-2xs);
|
|
15978
|
+
line-height: 1;
|
|
15979
|
+
}
|
|
15980
|
+
.crewlet-tabs__marker--warning,
|
|
15981
|
+
.crewlet-tabs__marker--changed {
|
|
15982
|
+
width: 6px;
|
|
15983
|
+
height: 6px;
|
|
15984
|
+
border-radius: var(--radius-circle);
|
|
15985
|
+
}
|
|
15986
|
+
.crewlet-tabs__marker--warning {
|
|
15987
|
+
background: var(--color-feedback-warning);
|
|
15988
|
+
}
|
|
15989
|
+
.crewlet-tabs__marker--changed {
|
|
15990
|
+
background: var(--color-brand-accent);
|
|
15991
|
+
}
|
|
15992
|
+
|
|
15778
15993
|
|
|
15779
15994
|
/* Tag-4BRQS6GN.css */
|
|
15780
15995
|
/*
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../chunk-AER7UDD4.js';
|
|
2
|
-
export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
|
|
3
2
|
export { useClipboard, writeClipboard } from '../chunk-5VNUYO76.js';
|
|
4
3
|
export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
|
|
4
|
+
export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
|
|
5
5
|
export { cx } from '../chunk-ODEQTPFM.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crewlethq/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"clean": "rm -rf dist src/generated"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@crewlethq/icons": "0.
|
|
46
|
-
"@crewlethq/tokens": "0.
|
|
45
|
+
"@crewlethq/icons": "0.11.0",
|
|
46
|
+
"@crewlethq/tokens": "0.11.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"react": ">=18",
|
package/dist/chunk-UDW3DAP5.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { cx } from './chunk-ODEQTPFM.js';
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
3
|
-
import { CrewletCharacter } from '@crewlethq/icons/characters';
|
|
4
|
-
import { jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
var AVATAR_SIZES = { xs: 20, sm: 26, md: 32, lg: 40 };
|
|
7
|
-
var AVATAR_CORNER_RATIO = 0.29;
|
|
8
|
-
var AVATAR_CHARACTER_FULL_DETAIL = 56;
|
|
9
|
-
var getInitials = (name) => {
|
|
10
|
-
if (!name) return "?";
|
|
11
|
-
const words = name.trim().split(/[\s\-_.]+/).filter(Boolean);
|
|
12
|
-
if (words.length === 0) return "?";
|
|
13
|
-
const first = (word2) => (Array.from(word2)[0] ?? "").toUpperCase();
|
|
14
|
-
if (words.length >= 2) return words.slice(0, 2).map(first).join("") || "?";
|
|
15
|
-
const word = words[0];
|
|
16
|
-
const humps = word.split(/(?<=\p{Ll})(?=\p{Lu})/u);
|
|
17
|
-
if (humps.length >= 2) return humps.slice(0, 2).map(first).join("");
|
|
18
|
-
return Array.from(word).slice(0, 2).map((character) => character.toUpperCase()).join("") || "?";
|
|
19
|
-
};
|
|
20
|
-
var TINT_COUNT = 10;
|
|
21
|
-
var avatarTint = (seed) => {
|
|
22
|
-
let hash = 0;
|
|
23
|
-
for (let i = 0; i < seed.length; i += 1) {
|
|
24
|
-
hash = hash * 31 + seed.charCodeAt(i) >>> 0;
|
|
25
|
-
}
|
|
26
|
-
return hash % TINT_COUNT;
|
|
27
|
-
};
|
|
28
|
-
function avatarPixels(size) {
|
|
29
|
-
return typeof size === "number" ? size : AVATAR_SIZES[size];
|
|
30
|
-
}
|
|
31
|
-
function avatarCorner(pixels) {
|
|
32
|
-
return pixels * AVATAR_CORNER_RATIO;
|
|
33
|
-
}
|
|
34
|
-
var Avatar = ({
|
|
35
|
-
src,
|
|
36
|
-
name,
|
|
37
|
-
size = "md",
|
|
38
|
-
kind = "agent",
|
|
39
|
-
tone = "neutral",
|
|
40
|
-
ring,
|
|
41
|
-
decorative = false,
|
|
42
|
-
colorSeed,
|
|
43
|
-
character,
|
|
44
|
-
hue,
|
|
45
|
-
className,
|
|
46
|
-
style,
|
|
47
|
-
...rest
|
|
48
|
-
}) => {
|
|
49
|
-
const [imageFailed, setImageFailed] = useState(false);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
setImageFailed(false);
|
|
52
|
-
}, [src]);
|
|
53
|
-
const step = typeof size === "number" ? null : size;
|
|
54
|
-
const pixels = avatarPixels(size);
|
|
55
|
-
const measured = step === null ? {
|
|
56
|
-
"--crewlet-avatar-size": `${pixels}px`,
|
|
57
|
-
fontSize: Math.max(9, Math.round(pixels * 0.36))
|
|
58
|
-
} : {};
|
|
59
|
-
const seeded = tone === "seeded" ? avatarTint(colorSeed ?? name ?? "") : null;
|
|
60
|
-
const classes = cx(
|
|
61
|
-
"crewlet-avatar",
|
|
62
|
-
`crewlet-avatar--${kind}`,
|
|
63
|
-
step === null ? null : `crewlet-avatar--${step}`,
|
|
64
|
-
ring === void 0 ? null : `crewlet-avatar--ring-${ring}`,
|
|
65
|
-
className
|
|
66
|
-
);
|
|
67
|
-
if (character !== void 0 && kind === "agent") {
|
|
68
|
-
return /* @__PURE__ */ jsx(
|
|
69
|
-
"span",
|
|
70
|
-
{
|
|
71
|
-
...rest,
|
|
72
|
-
className: cx(
|
|
73
|
-
classes,
|
|
74
|
-
"crewlet-avatar--character",
|
|
75
|
-
hue === void 0 ? "crewlet-avatar--neutral" : `crewlet-avatar--hue-${hue}`
|
|
76
|
-
),
|
|
77
|
-
style: { ...measured, ...style },
|
|
78
|
-
role: decorative ? void 0 : "img",
|
|
79
|
-
"aria-hidden": decorative ? true : void 0,
|
|
80
|
-
"aria-label": decorative ? void 0 : name ? `${name} avatar` : "Avatar",
|
|
81
|
-
children: /* @__PURE__ */ jsx(
|
|
82
|
-
CrewletCharacter,
|
|
83
|
-
{
|
|
84
|
-
className: "crewlet-avatar__character",
|
|
85
|
-
character,
|
|
86
|
-
detail: pixels >= AVATAR_CHARACTER_FULL_DETAIL ? "full" : "compact"
|
|
87
|
-
}
|
|
88
|
-
)
|
|
89
|
-
}
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
if (src && !imageFailed) {
|
|
93
|
-
return /* @__PURE__ */ jsx(
|
|
94
|
-
"img",
|
|
95
|
-
{
|
|
96
|
-
...rest,
|
|
97
|
-
className: cx(classes, "crewlet-avatar--image"),
|
|
98
|
-
style: { ...measured, ...style },
|
|
99
|
-
src,
|
|
100
|
-
alt: decorative ? "" : name ?? "",
|
|
101
|
-
"aria-hidden": decorative ? true : void 0,
|
|
102
|
-
onError: () => setImageFailed(true)
|
|
103
|
-
}
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
return /* @__PURE__ */ jsx(
|
|
107
|
-
"span",
|
|
108
|
-
{
|
|
109
|
-
...rest,
|
|
110
|
-
className: cx(
|
|
111
|
-
classes,
|
|
112
|
-
"crewlet-avatar--fallback",
|
|
113
|
-
`crewlet-avatar--${tone}`,
|
|
114
|
-
seeded === null ? null : `crewlet-avatar--tint-${seeded}`
|
|
115
|
-
),
|
|
116
|
-
style: { ...measured, ...style },
|
|
117
|
-
role: decorative ? void 0 : "img",
|
|
118
|
-
"aria-hidden": decorative ? true : void 0,
|
|
119
|
-
"aria-label": decorative ? void 0 : name ? `${name} avatar` : "Avatar",
|
|
120
|
-
children: getInitials(name)
|
|
121
|
-
}
|
|
122
|
-
);
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, Avatar, avatarCorner, avatarPixels, avatarTint, getInitials };
|