flikkui 0.2.0-beta.2 → 0.2.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ai/PromptInput/PromptInput.js +23 -15
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.d.ts +27 -0
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.js +62 -0
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.d.ts +10 -0
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +12 -0
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.types.d.ts +53 -0
- package/dist/components/ai/PromptSuggestions/index.d.ts +4 -2
- package/dist/components/ai/index.d.ts +2 -12
- package/dist/components/charts/ActivityRings/ActivityRings.js +70 -58
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +0 -1
- package/dist/components/charts/ActivityRings/ActivityRings.types.d.ts +17 -0
- package/dist/components/charts/BarChart/BarChart.js +8 -4
- package/dist/components/charts/BarChart/BarChart.types.d.ts +14 -0
- package/dist/components/charts/DonutChart/DonutChart.js +11 -8
- package/dist/components/charts/DonutChart/DonutChart.theme.d.ts +3 -0
- package/dist/components/charts/DonutChart/DonutChart.theme.js +5 -4
- package/dist/components/charts/DonutChart/donut-utils.d.ts +5 -0
- package/dist/components/charts/DonutChart/donut-utils.js +26 -1
- package/dist/components/charts/Heatmap/Heatmap.theme.js +2 -2
- package/dist/components/charts/shared/ChartAxis/XAxis.d.ts +2 -2
- package/dist/components/charts/shared/ChartAxis/XAxis.js +4 -4
- package/dist/components/charts/shared/ChartAxis/YAxis.d.ts +2 -2
- package/dist/components/charts/shared/ChartAxis/YAxis.js +8 -7
- package/dist/components/charts/shared/ChartGrid/HorizontalGrid.d.ts +1 -1
- package/dist/components/charts/shared/ChartGrid/HorizontalGrid.js +2 -2
- package/dist/components/charts/theme/chart.theme.d.ts +1 -1
- package/dist/components/charts/theme/chart.theme.js +39 -39
- package/dist/components/core/Accordion/Accordion.d.ts +1 -1
- package/dist/components/core/Accordion/Accordion.js +2 -2
- package/dist/components/core/Accordion/Accordion.types.d.ts +8 -0
- package/dist/components/core/Badge/Badge.js +11 -15
- package/dist/components/core/Badge/Badge.theme.js +7 -21
- package/dist/components/core/Badge/Badge.types.d.ts +9 -1
- package/dist/components/core/Button/Button.js +2 -2
- package/dist/components/core/Button/Button.theme.js +1 -1
- package/dist/components/core/Button/Button.types.d.ts +8 -0
- package/dist/components/core/Card/Card.js +8 -2
- package/dist/components/core/Card/Card.theme.js +1 -1
- package/dist/components/core/Card/Card.types.d.ts +24 -1
- package/dist/components/core/Drawer/Drawer.d.ts +1 -1
- package/dist/components/core/Drawer/Drawer.js +10 -40
- package/dist/components/core/Drawer/Drawer.theme.js +2 -1
- package/dist/components/core/Drawer/Drawer.types.d.ts +8 -0
- package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
- package/dist/components/core/Dropdown/Dropdown.js +2 -2
- package/dist/components/core/Dropdown/Dropdown.types.d.ts +8 -0
- package/dist/components/core/Metric/Metric.d.ts +1 -1
- package/dist/components/core/Metric/Metric.js +9 -5
- package/dist/components/core/Metric/Metric.theme.d.ts +1 -1
- package/dist/components/core/Metric/Metric.theme.js +38 -28
- package/dist/components/core/Metric/Metric.types.d.ts +27 -8
- package/dist/components/core/Modal/Modal.d.ts +1 -1
- package/dist/components/core/Modal/Modal.js +17 -40
- package/dist/components/core/Modal/Modal.theme.js +8 -3
- package/dist/components/core/Modal/Modal.types.d.ts +18 -0
- package/dist/components/core/Modal/index.d.ts +1 -1
- package/dist/components/core/Notification/Notification.js +2 -0
- package/dist/components/core/Pill/Pill.d.ts +6 -11
- package/dist/components/core/Pill/Pill.theme.d.ts +2 -2
- package/dist/components/core/Pill/Pill.types.d.ts +9 -22
- package/dist/components/core/Pill/index.d.ts +1 -1
- package/dist/components/core/Popover/Popover.d.ts +1 -1
- package/dist/components/core/Popover/Popover.js +2 -2
- package/dist/components/core/Popover/Popover.types.d.ts +8 -0
- package/dist/components/core/Progress/Progress.d.ts +28 -0
- package/dist/components/core/Progress/Progress.js +114 -0
- package/dist/components/core/Progress/Progress.theme.d.ts +5 -0
- package/dist/components/core/Progress/Progress.theme.js +33 -0
- package/dist/components/core/Progress/Progress.types.d.ts +92 -0
- package/dist/components/core/Progress/index.d.ts +2 -0
- package/dist/components/core/Tabs/Tabs.js +2 -2
- package/dist/components/core/Tabs/Tabs.types.d.ts +8 -0
- package/dist/components/core/Tag/Tag.animations.d.ts +3 -0
- package/dist/components/core/Tag/Tag.animations.js +31 -0
- package/dist/components/core/Tag/Tag.d.ts +14 -0
- package/dist/components/core/Tag/Tag.js +45 -0
- package/dist/components/core/Tag/Tag.theme.d.ts +2 -0
- package/dist/components/core/Tag/Tag.theme.js +21 -0
- package/dist/components/core/Tag/Tag.types.d.ts +40 -0
- package/dist/components/core/Tag/index.d.ts +3 -0
- package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +3 -3
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/Tooltip/Tooltip.types.d.ts +17 -0
- package/dist/components/core/index.d.ts +2 -1
- package/dist/components/core/index.js +3 -2
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +0 -13
- package/dist/components/effects/CustomCursor/CustomCursor.js +26 -2
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +12 -1
- package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +14 -1
- package/dist/components/forms/Combobox/Combobox.d.ts +25 -0
- package/dist/components/forms/Combobox/Combobox.js +412 -0
- package/dist/components/forms/Combobox/Combobox.theme.d.ts +6 -0
- package/dist/components/forms/Combobox/Combobox.theme.js +60 -0
- package/dist/components/forms/Combobox/Combobox.types.d.ts +111 -0
- package/dist/components/forms/Combobox/index.d.ts +3 -0
- package/dist/components/forms/FileUpload/FileUpload.js +2 -0
- package/dist/components/forms/Input/Input.js +25 -28
- package/dist/components/forms/Input/inputMasks.d.ts +15 -0
- package/dist/components/forms/Input/inputMasks.js +72 -1
- package/dist/components/forms/InputTag/InputTag.d.ts +40 -0
- package/dist/components/forms/InputTag/InputTag.js +491 -0
- package/dist/components/forms/InputTag/InputTag.theme.d.ts +2 -0
- package/dist/components/forms/InputTag/InputTag.theme.js +16 -0
- package/dist/components/forms/InputTag/InputTag.types.d.ts +107 -0
- package/dist/components/forms/InputTag/index.d.ts +3 -0
- package/dist/components/forms/Select/Select.d.ts +101 -2
- package/dist/components/forms/Select/Select.js +128 -132
- package/dist/components/forms/Select/Select.theme.js +10 -14
- package/dist/components/forms/Select/Select.types.d.ts +6 -2
- package/dist/components/forms/Select/index.d.ts +7 -4
- package/dist/components/forms/Select/useSelectState.d.ts +66 -0
- package/dist/components/forms/Select/useSelectState.js +134 -0
- package/dist/components/forms/SelectExpand/SelectExpand.animations.d.ts +20 -0
- package/dist/components/forms/SelectExpand/SelectExpand.animations.js +74 -0
- package/dist/components/forms/SelectExpand/SelectExpand.d.ts +9 -0
- package/dist/components/forms/SelectExpand/SelectExpand.js +223 -0
- package/dist/components/forms/SelectExpand/SelectExpand.theme.d.ts +5 -0
- package/dist/components/forms/SelectExpand/SelectExpand.theme.js +74 -0
- package/dist/components/forms/SelectExpand/SelectExpand.types.d.ts +126 -0
- package/dist/components/forms/SelectExpand/index.d.ts +4 -0
- package/dist/components/forms/Switch/Switch.js +3 -3
- package/dist/components/forms/Switch/Switch.theme.d.ts +1 -1
- package/dist/components/forms/Switch/Switch.theme.js +2 -2
- package/dist/components/forms/TimePicker/TimePicker.animations.d.ts +0 -46
- package/dist/components/forms/TimePicker/TimePicker.d.ts +15 -6
- package/dist/components/forms/TimePicker/TimePicker.js +285 -124
- package/dist/components/forms/TimePicker/TimePicker.theme.d.ts +1 -1
- package/dist/components/forms/TimePicker/TimePicker.theme.js +39 -22
- package/dist/components/forms/TimePicker/TimePicker.types.d.ts +88 -34
- package/dist/components/forms/TimePicker/TimePickerContent.d.ts +7 -10
- package/dist/components/forms/TimePicker/TimePickerContent.js +149 -16
- package/dist/components/forms/TimePicker/TimePickerTrigger.d.ts +3 -3
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +22 -19
- package/dist/components/forms/TimePicker/WheelColumn.d.ts +14 -0
- package/dist/components/forms/TimePicker/WheelColumn.js +90 -0
- package/dist/components/forms/TimePicker/index.d.ts +4 -1
- package/dist/components/forms/TimePicker/useWheelPicker.d.ts +37 -0
- package/dist/components/forms/TimePicker/useWheelPicker.js +138 -0
- package/dist/components/forms/forms.theme.d.ts +14 -0
- package/dist/components/forms/forms.theme.js +31 -0
- package/dist/components/forms/index.d.ts +9 -3
- package/dist/components/forms/index.js +73 -2
- package/dist/hooks/index.d.ts +0 -4
- package/dist/icons/Icon.d.ts +7 -0
- package/dist/icons/Icon.js +6 -2
- package/dist/index.js +12 -16
- package/dist/styles.css +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/optimisticErrors.js +1 -70
- package/package.json +1 -1
- package/dist/components/ai/EditingIndicator/EditingIndicator.animations.d.ts +0 -31
- package/dist/components/ai/EditingIndicator/EditingIndicator.animations.js +0 -115
- package/dist/components/ai/EditingIndicator/EditingIndicator.d.ts +0 -35
- package/dist/components/ai/EditingIndicator/EditingIndicator.js +0 -94
- package/dist/components/ai/EditingIndicator/EditingIndicator.theme.d.ts +0 -2
- package/dist/components/ai/EditingIndicator/EditingIndicator.theme.js +0 -13
- package/dist/components/ai/EditingIndicator/EditingIndicator.types.d.ts +0 -54
- package/dist/components/ai/EditingIndicator/index.d.ts +0 -9
- package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.d.ts +0 -3
- package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.js +0 -126
- package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.theme.d.ts +0 -2
- package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.theme.js +0 -8
- package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.types.d.ts +0 -45
- package/dist/components/ai/GenerativeRenderer/index.d.ts +0 -3
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.animations.d.ts +0 -17
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.animations.js +0 -56
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.d.ts +0 -38
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.js +0 -110
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.theme.d.ts +0 -2
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.theme.js +0 -13
- package/dist/components/ai/PresenceIndicator/PresenceIndicator.types.d.ts +0 -53
- package/dist/components/ai/PresenceIndicator/index.d.ts +0 -8
- package/dist/components/ai/PresenceProvider/PresenceContext.d.ts +0 -24
- package/dist/components/ai/PresenceProvider/PresenceContext.js +0 -34
- package/dist/components/ai/PresenceProvider/PresenceProvider.d.ts +0 -32
- package/dist/components/ai/PresenceProvider/PresenceProvider.js +0 -321
- package/dist/components/ai/PresenceProvider/PresenceProvider.types.d.ts +0 -140
- package/dist/components/ai/PresenceProvider/adapters/MockAdapter.d.ts +0 -102
- package/dist/components/ai/PresenceProvider/adapters/MockAdapter.js +0 -331
- package/dist/components/ai/PresenceProvider/adapters/PresenceAdapter.d.ts +0 -93
- package/dist/components/ai/PresenceProvider/adapters/SupabaseAdapter.d.ts +0 -134
- package/dist/components/ai/PresenceProvider/adapters/WebSocketAdapter.d.ts +0 -149
- package/dist/components/ai/PresenceProvider/adapters/index.d.ts +0 -11
- package/dist/components/ai/PresenceProvider/index.d.ts +0 -10
- package/dist/components/ai/PromptSuggestions/PromptSuggestions.d.ts +0 -27
- package/dist/components/ai/PromptSuggestions/PromptSuggestions.js +0 -61
- package/dist/components/ai/PromptSuggestions/PromptSuggestions.types.d.ts +0 -65
- package/dist/components/ai/VersionSlider/VersionSlider.d.ts +0 -3
- package/dist/components/ai/VersionSlider/VersionSlider.js +0 -97
- package/dist/components/ai/VersionSlider/VersionSlider.theme.d.ts +0 -2
- package/dist/components/ai/VersionSlider/VersionSlider.theme.js +0 -18
- package/dist/components/ai/VersionSlider/VersionSlider.types.d.ts +0 -77
- package/dist/components/ai/VersionSlider/index.d.ts +0 -3
- package/dist/components/core/Pill/Pill.animations.js +0 -25
- package/dist/components/core/Pill/Pill.js +0 -145
- package/dist/components/core/Pill/Pill.theme.js +0 -65
- package/dist/components/core/RetryBoundary/RetryBoundary.d.ts +0 -35
- package/dist/components/core/RetryBoundary/RetryBoundary.js +0 -154
- package/dist/components/core/RetryBoundary/RetryBoundary.theme.d.ts +0 -2
- package/dist/components/core/RetryBoundary/RetryBoundary.theme.js +0 -7
- package/dist/components/core/RetryBoundary/RetryBoundary.types.d.ts +0 -51
- package/dist/components/core/RetryBoundary/index.d.ts +0 -3
- package/dist/components/forms/OptimisticForm/OptimisticForm.d.ts +0 -33
- package/dist/components/forms/OptimisticForm/OptimisticForm.js +0 -87
- package/dist/components/forms/OptimisticForm/OptimisticForm.theme.d.ts +0 -2
- package/dist/components/forms/OptimisticForm/OptimisticForm.theme.js +0 -8
- package/dist/components/forms/OptimisticForm/OptimisticForm.types.d.ts +0 -74
- package/dist/components/forms/OptimisticForm/index.d.ts +0 -3
- package/dist/hooks/useOptimisticMutation.d.ts +0 -109
- package/dist/hooks/useOptimisticMutation.js +0 -171
- package/dist/hooks/usePresence.d.ts +0 -88
- package/dist/utils/presenceUtils.d.ts +0 -66
- package/dist/utils/presenceUtils.js +0 -107
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PresenceIndicator Animations
|
|
3
|
-
*
|
|
4
|
-
* Framer Motion animation variants for the presence indicator.
|
|
5
|
-
* Import from 'motion/react'.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Container animation
|
|
9
|
-
* Scales in the entire group and staggers children
|
|
10
|
-
*/
|
|
11
|
-
const containerVariants = {
|
|
12
|
-
hidden: {
|
|
13
|
-
opacity: 0,
|
|
14
|
-
scale: 0.95,
|
|
15
|
-
},
|
|
16
|
-
visible: {
|
|
17
|
-
opacity: 1,
|
|
18
|
-
scale: 1,
|
|
19
|
-
transition: {
|
|
20
|
-
duration: 0.3,
|
|
21
|
-
ease: "backOut",
|
|
22
|
-
staggerChildren: 0.05,
|
|
23
|
-
delayChildren: 0.05,
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
exit: {
|
|
27
|
-
opacity: 0,
|
|
28
|
-
scale: 0.95,
|
|
29
|
-
transition: {
|
|
30
|
-
duration: 0.2,
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Item animation (for custom avatars)
|
|
36
|
-
* Pops in individual avatars
|
|
37
|
-
*/
|
|
38
|
-
const itemVariants = {
|
|
39
|
-
hidden: {
|
|
40
|
-
opacity: 0,
|
|
41
|
-
scale: 0,
|
|
42
|
-
x: -5,
|
|
43
|
-
},
|
|
44
|
-
visible: {
|
|
45
|
-
opacity: 1,
|
|
46
|
-
scale: 1,
|
|
47
|
-
x: 0,
|
|
48
|
-
transition: {
|
|
49
|
-
type: "spring",
|
|
50
|
-
stiffness: 400,
|
|
51
|
-
damping: 25,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export { containerVariants, itemVariants };
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PresenceIndicator Component
|
|
3
|
-
*
|
|
4
|
-
* Displays active user avatars with overflow handling.
|
|
5
|
-
* Reuses existing AvatarGroup component for consistency.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```tsx
|
|
9
|
-
* <PresenceProvider channel="chat" currentUser={user} adapter={adapter}>
|
|
10
|
-
* <PresenceIndicator max={5} showCount />
|
|
11
|
-
* </PresenceProvider>
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
import React from "react";
|
|
15
|
-
import { PresenceIndicatorProps } from "./PresenceIndicator.types";
|
|
16
|
-
/**
|
|
17
|
-
* PresenceIndicator - Show active users with avatars
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* // Basic usage
|
|
22
|
-
* <PresenceIndicator max={5} showCount />
|
|
23
|
-
*
|
|
24
|
-
* // With custom filtering
|
|
25
|
-
* <PresenceIndicator
|
|
26
|
-
* filter={(user) => user.status === 'online'}
|
|
27
|
-
* sortBy="name"
|
|
28
|
-
* />
|
|
29
|
-
*
|
|
30
|
-
* // Custom styling
|
|
31
|
-
* <PresenceIndicator
|
|
32
|
-
* size="sm"
|
|
33
|
-
* spacing="tight"
|
|
34
|
-
* className="bg-gray-100 p-2 rounded"
|
|
35
|
-
* />
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export declare const PresenceIndicator: React.ForwardRefExoticComponent<PresenceIndicatorProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import React__default, { useMemo } from 'react';
|
|
2
|
-
import { AnimatePresence, motion, useReducedMotion } from 'motion/react';
|
|
3
|
-
import { AvatarGroup } from '../../core/AvatarGroup/AvatarGroup.js';
|
|
4
|
-
import { usePresenceContext } from '../PresenceProvider/PresenceContext.js';
|
|
5
|
-
import { presenceIndicatorTheme } from './PresenceIndicator.theme.js';
|
|
6
|
-
import { cn } from '../../../utils/cn.js';
|
|
7
|
-
import { sortUsers, formatPresenceCount } from '../../../utils/presenceUtils.js';
|
|
8
|
-
import { containerVariants, itemVariants } from './PresenceIndicator.animations.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* PresenceIndicator Component
|
|
12
|
-
*
|
|
13
|
-
* Displays active user avatars with overflow handling.
|
|
14
|
-
* Reuses existing AvatarGroup component for consistency.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```tsx
|
|
18
|
-
* <PresenceProvider channel="chat" currentUser={user} adapter={adapter}>
|
|
19
|
-
* <PresenceIndicator max={5} showCount />
|
|
20
|
-
* </PresenceProvider>
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
/**
|
|
24
|
-
* PresenceIndicator - Show active users with avatars
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```tsx
|
|
28
|
-
* // Basic usage
|
|
29
|
-
* <PresenceIndicator max={5} showCount />
|
|
30
|
-
*
|
|
31
|
-
* // With custom filtering
|
|
32
|
-
* <PresenceIndicator
|
|
33
|
-
* filter={(user) => user.status === 'online'}
|
|
34
|
-
* sortBy="name"
|
|
35
|
-
* />
|
|
36
|
-
*
|
|
37
|
-
* // Custom styling
|
|
38
|
-
* <PresenceIndicator
|
|
39
|
-
* size="sm"
|
|
40
|
-
* spacing="tight"
|
|
41
|
-
* className="bg-gray-100 p-2 rounded"
|
|
42
|
-
* />
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
const PresenceIndicator = React__default.forwardRef(({ max = 5, size = "md", spacing = "normal", showCount = false, countFormat, filter, sortBy = "joinedAt", renderAvatar, shouldAnimate = true, overflowIndicator, ariaLabel, theme = presenceIndicatorTheme, className, ...props }, ref) => {
|
|
46
|
-
var _a;
|
|
47
|
-
// Get presence state from context
|
|
48
|
-
const { users } = usePresenceContext();
|
|
49
|
-
// Process users: filter and sort
|
|
50
|
-
const processedUsers = useMemo(() => {
|
|
51
|
-
let result = users;
|
|
52
|
-
// Apply filter
|
|
53
|
-
if (filter) {
|
|
54
|
-
result = result.filter(filter);
|
|
55
|
-
}
|
|
56
|
-
// Apply sort
|
|
57
|
-
if (sortBy) {
|
|
58
|
-
result = sortUsers(result, sortBy);
|
|
59
|
-
}
|
|
60
|
-
return result;
|
|
61
|
-
}, [users, filter, sortBy]);
|
|
62
|
-
// Convert PresenceUser[] to AvatarProps[]
|
|
63
|
-
const avatarProps = useMemo(() => {
|
|
64
|
-
return processedUsers.map((user) => ({
|
|
65
|
-
src: user.avatar,
|
|
66
|
-
alt: user.name,
|
|
67
|
-
status: user.status,
|
|
68
|
-
}));
|
|
69
|
-
}, [processedUsers]);
|
|
70
|
-
// Format count text
|
|
71
|
-
const countText = useMemo(() => {
|
|
72
|
-
if (!showCount)
|
|
73
|
-
return null;
|
|
74
|
-
return countFormat
|
|
75
|
-
? countFormat(processedUsers.length)
|
|
76
|
-
: formatPresenceCount(processedUsers.length);
|
|
77
|
-
}, [showCount, processedUsers.length, countFormat]);
|
|
78
|
-
// Merge theme
|
|
79
|
-
const mergedTheme = {
|
|
80
|
-
...presenceIndicatorTheme,
|
|
81
|
-
...theme,
|
|
82
|
-
};
|
|
83
|
-
// Build className
|
|
84
|
-
const containerClassName = cn(mergedTheme.baseStyle, (_a = mergedTheme.sizes) === null || _a === void 0 ? void 0 : _a[size], className // User overrides take precedence
|
|
85
|
-
);
|
|
86
|
-
// Don't render anything if no users
|
|
87
|
-
if (processedUsers.length === 0) {
|
|
88
|
-
return (React__default.createElement(AnimatePresence, null,
|
|
89
|
-
React__default.createElement(motion.div, { ref: ref, className: containerClassName, role: "group", "aria-label": "No users online", "data-user-count": 0, initial: "hidden", animate: "visible", exit: "exit", variants: shouldAnimate && !useReducedMotion()
|
|
90
|
-
? containerVariants
|
|
91
|
-
: undefined, ...props }, showCount && (React__default.createElement("span", { className: mergedTheme.countStyle }, countFormat ? countFormat(0) : "No users online")))));
|
|
92
|
-
}
|
|
93
|
-
const disableAnimations = useReducedMotion() || !shouldAnimate;
|
|
94
|
-
return (React__default.createElement(AnimatePresence, { mode: "popLayout" },
|
|
95
|
-
React__default.createElement(motion.div, { ref: ref, className: containerClassName, role: "group", "aria-label": ariaLabel || `${processedUsers.length} active users`, "data-user-count": processedUsers.length, initial: "hidden", animate: "visible", exit: "exit", variants: !disableAnimations ? containerVariants : undefined, ...props },
|
|
96
|
-
renderAvatar ? (
|
|
97
|
-
// Custom avatar rendering with stagger
|
|
98
|
-
React__default.createElement("div", { className: "inline-flex" },
|
|
99
|
-
processedUsers.slice(0, max).map((user) => (React__default.createElement(motion.div, { key: user.id, variants: itemVariants }, renderAvatar(user)))),
|
|
100
|
-
processedUsers.length > max && (React__default.createElement(motion.span, { variants: itemVariants, className: "text-sm text-[var(--color-text-secondary)]" },
|
|
101
|
-
"+",
|
|
102
|
-
processedUsers.length - max)))) : (
|
|
103
|
-
// Default AvatarGroup rendering
|
|
104
|
-
React__default.createElement(AvatarGroup, { avatars: avatarProps, max: max, size: size, spacing: spacing, shouldAnimate: shouldAnimate, overflowIndicator: overflowIndicator, ariaLabel: ariaLabel })),
|
|
105
|
-
showCount && countText && (React__default.createElement(motion.span, { variants: itemVariants, className: mergedTheme.countStyle, "aria-live": "polite" }, countText)))));
|
|
106
|
-
});
|
|
107
|
-
// Display name for dev tools
|
|
108
|
-
PresenceIndicator.displayName = "PresenceIndicator";
|
|
109
|
-
|
|
110
|
-
export { PresenceIndicator };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const presenceIndicatorTheme = {
|
|
2
|
-
baseStyle: "inline-flex items-center gap-2",
|
|
3
|
-
countStyle: "text-[var(--color-text-secondary)]/80 text-xs tracking-tight whitespace-nowrap",
|
|
4
|
-
sizes: {
|
|
5
|
-
xs: "gap-1",
|
|
6
|
-
sm: "gap-1.5",
|
|
7
|
-
md: "gap-2",
|
|
8
|
-
lg: "gap-2.5",
|
|
9
|
-
xl: "gap-3",
|
|
10
|
-
},
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export { presenceIndicatorTheme };
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PresenceIndicator Type Definitions
|
|
3
|
-
*
|
|
4
|
-
* Defines props and interfaces for the PresenceIndicator component.
|
|
5
|
-
*/
|
|
6
|
-
import React from 'react';
|
|
7
|
-
import { PresenceUser } from '../PresenceProvider/PresenceProvider.types';
|
|
8
|
-
import { AvatarSize } from '../../core/Avatar/Avatar.types';
|
|
9
|
-
import { AvatarGroupSpacing } from '../../core/AvatarGroup/AvatarGroup.types';
|
|
10
|
-
/**
|
|
11
|
-
* Sort criteria for presence users
|
|
12
|
-
*/
|
|
13
|
-
export type PresenceSort = 'joinedAt' | 'name' | 'status' | ((a: PresenceUser, b: PresenceUser) => number);
|
|
14
|
-
/**
|
|
15
|
-
* PresenceIndicator component props
|
|
16
|
-
*/
|
|
17
|
-
export interface PresenceIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
18
|
-
/** Maximum users to display before showing overflow (default: 5) */
|
|
19
|
-
max?: number;
|
|
20
|
-
/** Avatar size (default: 'md') */
|
|
21
|
-
size?: AvatarSize;
|
|
22
|
-
/** Spacing between avatars (default: 'normal') */
|
|
23
|
-
spacing?: AvatarGroupSpacing;
|
|
24
|
-
/** Show user count label (default: false) */
|
|
25
|
-
showCount?: boolean;
|
|
26
|
-
/** Custom count format function */
|
|
27
|
-
countFormat?: (count: number) => string;
|
|
28
|
-
/** Filter which users to show */
|
|
29
|
-
filter?: (user: PresenceUser) => boolean;
|
|
30
|
-
/** Sort users by criteria (default: 'joinedAt') */
|
|
31
|
-
sortBy?: PresenceSort;
|
|
32
|
-
/** Custom avatar renderer */
|
|
33
|
-
renderAvatar?: (user: PresenceUser) => React.ReactNode;
|
|
34
|
-
/** Enable animations (default: true) */
|
|
35
|
-
shouldAnimate?: boolean;
|
|
36
|
-
/** Custom overflow indicator */
|
|
37
|
-
overflowIndicator?: (overflowCount: number) => React.ReactNode;
|
|
38
|
-
/** ARIA label for the group */
|
|
39
|
-
ariaLabel?: string;
|
|
40
|
-
/** Theme overrides */
|
|
41
|
-
theme?: PresenceIndicatorTheme;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Theme configuration for PresenceIndicator
|
|
45
|
-
*/
|
|
46
|
-
export interface PresenceIndicatorTheme {
|
|
47
|
-
/** Base container style */
|
|
48
|
-
baseStyle?: string;
|
|
49
|
-
/** Count label style */
|
|
50
|
-
countStyle?: string;
|
|
51
|
-
/** Size-specific gaps */
|
|
52
|
-
sizes?: Partial<Record<AvatarSize, string>>;
|
|
53
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PresenceIndicator - Visual display of active users
|
|
3
|
-
*
|
|
4
|
-
* @module collaboration/PresenceIndicator
|
|
5
|
-
*/
|
|
6
|
-
export { PresenceIndicator } from './PresenceIndicator';
|
|
7
|
-
export { presenceIndicatorTheme } from './PresenceIndicator.theme';
|
|
8
|
-
export type { PresenceIndicatorProps, PresenceIndicatorTheme, PresenceSort, } from './PresenceIndicator.types';
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Presence Context
|
|
3
|
-
*
|
|
4
|
-
* Provides presence state to child components via React Context.
|
|
5
|
-
* Follow the same pattern as Tabs and other compound components.
|
|
6
|
-
*/
|
|
7
|
-
import { PresenceContextValue } from './PresenceProvider.types';
|
|
8
|
-
/**
|
|
9
|
-
* Context for sharing presence state between provider and child components
|
|
10
|
-
*/
|
|
11
|
-
export declare const PresenceContext: import("react").Context<PresenceContextValue | null>;
|
|
12
|
-
/**
|
|
13
|
-
* Hook to consume PresenceContext
|
|
14
|
-
*
|
|
15
|
-
* @throws Error if used outside PresenceProvider
|
|
16
|
-
* @returns Presence context value
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* function MyComponent() {
|
|
20
|
-
* const { users, typingUsers, isConnected } = usePresenceContext();
|
|
21
|
-
* return <div>{users.length} users online</div>;
|
|
22
|
-
* }
|
|
23
|
-
*/
|
|
24
|
-
export declare const usePresenceContext: () => PresenceContextValue;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Presence Context
|
|
5
|
-
*
|
|
6
|
-
* Provides presence state to child components via React Context.
|
|
7
|
-
* Follow the same pattern as Tabs and other compound components.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Context for sharing presence state between provider and child components
|
|
11
|
-
*/
|
|
12
|
-
const PresenceContext = createContext(null);
|
|
13
|
-
/**
|
|
14
|
-
* Hook to consume PresenceContext
|
|
15
|
-
*
|
|
16
|
-
* @throws Error if used outside PresenceProvider
|
|
17
|
-
* @returns Presence context value
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* function MyComponent() {
|
|
21
|
-
* const { users, typingUsers, isConnected } = usePresenceContext();
|
|
22
|
-
* return <div>{users.length} users online</div>;
|
|
23
|
-
* }
|
|
24
|
-
*/
|
|
25
|
-
const usePresenceContext = () => {
|
|
26
|
-
const context = useContext(PresenceContext);
|
|
27
|
-
if (!context) {
|
|
28
|
-
throw new Error('Presence components must be used within a PresenceProvider. ' +
|
|
29
|
-
'Wrap your component tree with <PresenceProvider>.');
|
|
30
|
-
}
|
|
31
|
-
return context;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export { PresenceContext, usePresenceContext };
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Presence Provider Component
|
|
3
|
-
*
|
|
4
|
-
* Root provider that manages real-time presence state via adapter pattern.
|
|
5
|
-
* Provides presence context to child components.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - Backend-agnostic adapter pattern
|
|
9
|
-
* - Network-aware reconnection
|
|
10
|
-
* - Typing state management with debouncing
|
|
11
|
-
* - Auto-cleanup on unmount
|
|
12
|
-
*/
|
|
13
|
-
import React from 'react';
|
|
14
|
-
import { PresenceProviderProps } from './PresenceProvider.types';
|
|
15
|
-
/**
|
|
16
|
-
* PresenceProvider - Real-time collaboration provider
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```tsx
|
|
20
|
-
* const adapter = new MockPresenceAdapter();
|
|
21
|
-
* const currentUser = { id: '1', name: 'John Doe', status: 'online' };
|
|
22
|
-
*
|
|
23
|
-
* <PresenceProvider channel="chat-room-123" currentUser={currentUser} adapter={adapter}>
|
|
24
|
-
* <PresenceIndicator />
|
|
25
|
-
* <ChatInterface>
|
|
26
|
-
* <MessageHistory />
|
|
27
|
-
* <EditingIndicator />
|
|
28
|
-
* </ChatInterface>
|
|
29
|
-
* </PresenceProvider>
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export declare const PresenceProvider: React.ForwardRefExoticComponent<PresenceProviderProps & React.RefAttributes<HTMLDivElement>>;
|