@serhii.olishevskyi/docs 1.2.16 → 1.2.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +21 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.js +115 -17
- package/dist/index.mjs +112 -14
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -171,6 +171,21 @@ interface CopyClipboardButtonComponentProps extends Omit<IconButtonProps, 'onCli
|
|
|
171
171
|
onCopySuccess?: (text: string) => void;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
interface RefreshButtonComponentProps {
|
|
175
|
+
overrideNamespace?: string;
|
|
176
|
+
size?: 'small' | 'medium' | 'large';
|
|
177
|
+
color?: "success" | "error" | "info" | "warning";
|
|
178
|
+
onClick?: (event: React__default.MouseEvent<HTMLButtonElement>) => void | Promise<void>;
|
|
179
|
+
disabled?: boolean;
|
|
180
|
+
fullWidth?: boolean;
|
|
181
|
+
loading?: boolean;
|
|
182
|
+
tooltip?: ReactNode;
|
|
183
|
+
mobileViewOnly?: boolean;
|
|
184
|
+
disableMobileView?: boolean;
|
|
185
|
+
hideTooltipOnMobile?: boolean;
|
|
186
|
+
hideTooltipOnDesktop?: boolean;
|
|
187
|
+
}
|
|
188
|
+
|
|
174
189
|
interface TranslatableTooltipComponentProps extends Omit<TooltipProps, 'children'> {
|
|
175
190
|
overrideNamespace?: string;
|
|
176
191
|
disableSpan?: boolean;
|
|
@@ -397,6 +412,7 @@ declare const UI: {
|
|
|
397
412
|
};
|
|
398
413
|
Buttons: {
|
|
399
414
|
CopyClipboardButton: React$1.FC<CopyClipboardButtonComponentProps>;
|
|
415
|
+
RefreshButton: React$1.FC<RefreshButtonComponentProps>;
|
|
400
416
|
};
|
|
401
417
|
DataDisplay: {
|
|
402
418
|
TranslatableTooltip: React$1.FC<TranslatableTooltipComponentProps>;
|
|
@@ -763,6 +779,10 @@ declare const Hooks: {
|
|
|
763
779
|
|
|
764
780
|
declare const Utils: {
|
|
765
781
|
readonly getDeviceId: () => string;
|
|
782
|
+
readonly Sessions: {
|
|
783
|
+
readonly notifySessionChange: () => void;
|
|
784
|
+
readonly subscribeToSessionChanges: (callback: () => void) => () => void;
|
|
785
|
+
};
|
|
766
786
|
};
|
|
767
787
|
|
|
768
|
-
export { type AIConfig, type AIGenerateOptions, AIProvider, type AIProviderProps, type AIProviderType, AppSettingsProvider, AuthProvider, BreadcrumbProvider, type CheckboxComponentProps, type CollapsedWidgetContainerProps, type CompanyMember, type ConfirmOptions, type ConfirmResult, ConfirmationProvider, type ConfirmationProviderProps, type CopyClipboardButtonComponentProps, type DialogSeverity, type DisplayState, type EmailInputComponentProps, type ExpandableNoteComponentProps, type FullCompanyMemberItem, Hooks, type Language, LocalizationProvider, type Membership, type MembershipRole, type MyAvatarComponentProps, type NumberInputComponentProps, type PageLink, type PageLinkWidgetProps, Providers, type SaveCompanyUserPayload, type SearchComponentProps, type SelectComponentProps, type SelectOption, Services, type SupabaseConfig, SupabaseProvider, type SupabaseProviderProps, type SwitchComponentProps, type TextFieldComponentProps, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, ToastProvider, type ToastType, type TranslatableTooltipComponentProps, TranslateProvider, TranslateText, TranslationEditProvider, type TypographyConfig, UI, type UrlComponentProps as UrlProps, type UserAvatarComponentProps, type UserGroupedSessions, type UserPopoverComponentProps, type UserProfile, type UserRoleChipComponentProps, type UserSessionItem, type UserSettings, UserSettingsProvider, type UserStatusChipComponentProps, type UserStatusType, Utils, defaultUserSettings, initI18n, useAI, useAppSettings, useAppTheme, useAuth, useBreadcrumb, useConfirmation, useLocalization, useSupabase, useToast, useTranslationEdit, useTranslationNamespace, useUserSettings };
|
|
788
|
+
export { type AIConfig, type AIGenerateOptions, AIProvider, type AIProviderProps, type AIProviderType, AppSettingsProvider, AuthProvider, BreadcrumbProvider, type CheckboxComponentProps, type CollapsedWidgetContainerProps, type CompanyMember, type ConfirmOptions, type ConfirmResult, ConfirmationProvider, type ConfirmationProviderProps, type CopyClipboardButtonComponentProps, type DialogSeverity, type DisplayState, type EmailInputComponentProps, type ExpandableNoteComponentProps, type FullCompanyMemberItem, Hooks, type Language, LocalizationProvider, type Membership, type MembershipRole, type MyAvatarComponentProps, type NumberInputComponentProps, type PageLink, type PageLinkWidgetProps, Providers, type RefreshButtonComponentProps, type SaveCompanyUserPayload, type SearchComponentProps, type SelectComponentProps, type SelectOption, Services, type SupabaseConfig, SupabaseProvider, type SupabaseProviderProps, type SwitchComponentProps, type TextFieldComponentProps, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, ToastProvider, type ToastType, type TranslatableTooltipComponentProps, TranslateProvider, TranslateText, TranslationEditProvider, type TypographyConfig, UI, type UrlComponentProps as UrlProps, type UserAvatarComponentProps, type UserGroupedSessions, type UserPopoverComponentProps, type UserProfile, type UserRoleChipComponentProps, type UserSessionItem, type UserSettings, UserSettingsProvider, type UserStatusChipComponentProps, type UserStatusType, Utils, defaultUserSettings, initI18n, useAI, useAppSettings, useAppTheme, useAuth, useBreadcrumb, useConfirmation, useLocalization, useSupabase, useToast, useTranslationEdit, useTranslationNamespace, useUserSettings };
|
package/dist/index.d.ts
CHANGED
|
@@ -171,6 +171,21 @@ interface CopyClipboardButtonComponentProps extends Omit<IconButtonProps, 'onCli
|
|
|
171
171
|
onCopySuccess?: (text: string) => void;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
interface RefreshButtonComponentProps {
|
|
175
|
+
overrideNamespace?: string;
|
|
176
|
+
size?: 'small' | 'medium' | 'large';
|
|
177
|
+
color?: "success" | "error" | "info" | "warning";
|
|
178
|
+
onClick?: (event: React__default.MouseEvent<HTMLButtonElement>) => void | Promise<void>;
|
|
179
|
+
disabled?: boolean;
|
|
180
|
+
fullWidth?: boolean;
|
|
181
|
+
loading?: boolean;
|
|
182
|
+
tooltip?: ReactNode;
|
|
183
|
+
mobileViewOnly?: boolean;
|
|
184
|
+
disableMobileView?: boolean;
|
|
185
|
+
hideTooltipOnMobile?: boolean;
|
|
186
|
+
hideTooltipOnDesktop?: boolean;
|
|
187
|
+
}
|
|
188
|
+
|
|
174
189
|
interface TranslatableTooltipComponentProps extends Omit<TooltipProps, 'children'> {
|
|
175
190
|
overrideNamespace?: string;
|
|
176
191
|
disableSpan?: boolean;
|
|
@@ -397,6 +412,7 @@ declare const UI: {
|
|
|
397
412
|
};
|
|
398
413
|
Buttons: {
|
|
399
414
|
CopyClipboardButton: React$1.FC<CopyClipboardButtonComponentProps>;
|
|
415
|
+
RefreshButton: React$1.FC<RefreshButtonComponentProps>;
|
|
400
416
|
};
|
|
401
417
|
DataDisplay: {
|
|
402
418
|
TranslatableTooltip: React$1.FC<TranslatableTooltipComponentProps>;
|
|
@@ -763,6 +779,10 @@ declare const Hooks: {
|
|
|
763
779
|
|
|
764
780
|
declare const Utils: {
|
|
765
781
|
readonly getDeviceId: () => string;
|
|
782
|
+
readonly Sessions: {
|
|
783
|
+
readonly notifySessionChange: () => void;
|
|
784
|
+
readonly subscribeToSessionChanges: (callback: () => void) => () => void;
|
|
785
|
+
};
|
|
766
786
|
};
|
|
767
787
|
|
|
768
|
-
export { type AIConfig, type AIGenerateOptions, AIProvider, type AIProviderProps, type AIProviderType, AppSettingsProvider, AuthProvider, BreadcrumbProvider, type CheckboxComponentProps, type CollapsedWidgetContainerProps, type CompanyMember, type ConfirmOptions, type ConfirmResult, ConfirmationProvider, type ConfirmationProviderProps, type CopyClipboardButtonComponentProps, type DialogSeverity, type DisplayState, type EmailInputComponentProps, type ExpandableNoteComponentProps, type FullCompanyMemberItem, Hooks, type Language, LocalizationProvider, type Membership, type MembershipRole, type MyAvatarComponentProps, type NumberInputComponentProps, type PageLink, type PageLinkWidgetProps, Providers, type SaveCompanyUserPayload, type SearchComponentProps, type SelectComponentProps, type SelectOption, Services, type SupabaseConfig, SupabaseProvider, type SupabaseProviderProps, type SwitchComponentProps, type TextFieldComponentProps, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, ToastProvider, type ToastType, type TranslatableTooltipComponentProps, TranslateProvider, TranslateText, TranslationEditProvider, type TypographyConfig, UI, type UrlComponentProps as UrlProps, type UserAvatarComponentProps, type UserGroupedSessions, type UserPopoverComponentProps, type UserProfile, type UserRoleChipComponentProps, type UserSessionItem, type UserSettings, UserSettingsProvider, type UserStatusChipComponentProps, type UserStatusType, Utils, defaultUserSettings, initI18n, useAI, useAppSettings, useAppTheme, useAuth, useBreadcrumb, useConfirmation, useLocalization, useSupabase, useToast, useTranslationEdit, useTranslationNamespace, useUserSettings };
|
|
788
|
+
export { type AIConfig, type AIGenerateOptions, AIProvider, type AIProviderProps, type AIProviderType, AppSettingsProvider, AuthProvider, BreadcrumbProvider, type CheckboxComponentProps, type CollapsedWidgetContainerProps, type CompanyMember, type ConfirmOptions, type ConfirmResult, ConfirmationProvider, type ConfirmationProviderProps, type CopyClipboardButtonComponentProps, type DialogSeverity, type DisplayState, type EmailInputComponentProps, type ExpandableNoteComponentProps, type FullCompanyMemberItem, Hooks, type Language, LocalizationProvider, type Membership, type MembershipRole, type MyAvatarComponentProps, type NumberInputComponentProps, type PageLink, type PageLinkWidgetProps, Providers, type RefreshButtonComponentProps, type SaveCompanyUserPayload, type SearchComponentProps, type SelectComponentProps, type SelectOption, Services, type SupabaseConfig, SupabaseProvider, type SupabaseProviderProps, type SwitchComponentProps, type TextFieldComponentProps, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, ToastProvider, type ToastType, type TranslatableTooltipComponentProps, TranslateProvider, TranslateText, TranslationEditProvider, type TypographyConfig, UI, type UrlComponentProps as UrlProps, type UserAvatarComponentProps, type UserGroupedSessions, type UserPopoverComponentProps, type UserProfile, type UserRoleChipComponentProps, type UserSessionItem, type UserSettings, UserSettingsProvider, type UserStatusChipComponentProps, type UserStatusType, Utils, defaultUserSettings, initI18n, useAI, useAppSettings, useAppTheme, useAuth, useBreadcrumb, useConfirmation, useLocalization, useSupabase, useToast, useTranslationEdit, useTranslationNamespace, useUserSettings };
|
package/dist/index.js
CHANGED
|
@@ -2619,7 +2619,7 @@ var init_UserPopoverComponent = __esm({
|
|
|
2619
2619
|
}
|
|
2620
2620
|
};
|
|
2621
2621
|
loadStatus();
|
|
2622
|
-
const
|
|
2622
|
+
const channel2 = supabase.channel(`user_status_popover_${userId}`).on(
|
|
2623
2623
|
"postgres_changes",
|
|
2624
2624
|
{
|
|
2625
2625
|
event: "*",
|
|
@@ -2633,7 +2633,7 @@ var init_UserPopoverComponent = __esm({
|
|
|
2633
2633
|
).subscribe();
|
|
2634
2634
|
return () => {
|
|
2635
2635
|
isMounted = false;
|
|
2636
|
-
supabase.removeChannel(
|
|
2636
|
+
supabase.removeChannel(channel2);
|
|
2637
2637
|
};
|
|
2638
2638
|
}, [userId, open]);
|
|
2639
2639
|
const isOnline = Boolean(
|
|
@@ -3096,7 +3096,7 @@ var TextFieldComponent = ({
|
|
|
3096
3096
|
...slotProps?.input || {},
|
|
3097
3097
|
readOnly: isReadOnly,
|
|
3098
3098
|
endAdornment: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_material4.InputAdornment, { position: "end", sx: { gap: 0.5 }, children: [
|
|
3099
|
-
hasValue && !isLocked && !disableClearButton && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslatableTooltipComponent, { title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslateText, { overrideNamespace, children: clearTooltip }), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3099
|
+
hasValue && !isLocked && !disableClearButton && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslatableTooltipComponent, { title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: clearTooltip }), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3100
3100
|
import_material4.IconButton,
|
|
3101
3101
|
{
|
|
3102
3102
|
size: "small",
|
|
@@ -3106,7 +3106,7 @@ var TextFieldComponent = ({
|
|
|
3106
3106
|
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_Clear.default, { fontSize: "small" })
|
|
3107
3107
|
}
|
|
3108
3108
|
) }),
|
|
3109
|
-
hasValue && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslatableTooltipComponent, { title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslateText, { overrideNamespace, children: copied ? copiedTooltip : copyTooltip }), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3109
|
+
hasValue && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslatableTooltipComponent, { title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: copied ? copiedTooltip : copyTooltip }), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3110
3110
|
import_material4.IconButton,
|
|
3111
3111
|
{
|
|
3112
3112
|
size: "small",
|
|
@@ -3156,7 +3156,7 @@ var TextFieldComponent = ({
|
|
|
3156
3156
|
)
|
|
3157
3157
|
}
|
|
3158
3158
|
) }),
|
|
3159
|
-
isLocked && showLock && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslatableTooltipComponent, { title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslateText, { overrideNamespace, children: lockTooltip }), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3159
|
+
isLocked && showLock && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslatableTooltipComponent, { title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: lockTooltip }), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3160
3160
|
import_material4.IconButton,
|
|
3161
3161
|
{
|
|
3162
3162
|
size: "small",
|
|
@@ -4834,7 +4834,7 @@ var CollapsedWidgetContainer = (props) => {
|
|
|
4834
4834
|
{
|
|
4835
4835
|
sx: { flexGrow: 1 },
|
|
4836
4836
|
avatar: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_material24.Avatar, { sx: { bgcolor: "primary.main" }, children: props.icon }),
|
|
4837
|
-
label: typeof props.title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
4837
|
+
label: typeof props.title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.title }) : props.title,
|
|
4838
4838
|
subheader: typeof props.subtitle === "string" ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.subtitle }) : props.subtitle
|
|
4839
4839
|
}
|
|
4840
4840
|
),
|
|
@@ -4856,6 +4856,80 @@ var CollapsedWidgetContainer = (props) => {
|
|
|
4856
4856
|
] });
|
|
4857
4857
|
};
|
|
4858
4858
|
|
|
4859
|
+
// src/UI/components/buttons/RefreshButtonComponent.tsx
|
|
4860
|
+
var import_react30 = require("react");
|
|
4861
|
+
var import_material25 = require("@mui/material");
|
|
4862
|
+
var import_Refresh = __toESM(require("@mui/icons-material/Refresh"));
|
|
4863
|
+
init_context();
|
|
4864
|
+
init_TranslatableTooltipComponent();
|
|
4865
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
4866
|
+
var AnimatedRefreshIcon = (0, import_material25.styled)(import_Refresh.default, {
|
|
4867
|
+
shouldForwardProp: (prop) => prop !== "isSpinning"
|
|
4868
|
+
})(({ isSpinning }) => ({
|
|
4869
|
+
animation: isSpinning ? "spin 1s linear infinite" : "none",
|
|
4870
|
+
"@keyframes spin": {
|
|
4871
|
+
"0%": {
|
|
4872
|
+
transform: "rotate(0deg)"
|
|
4873
|
+
},
|
|
4874
|
+
"100%": {
|
|
4875
|
+
transform: "rotate(360deg)"
|
|
4876
|
+
}
|
|
4877
|
+
}
|
|
4878
|
+
}));
|
|
4879
|
+
var RefreshButtonComponent = ({
|
|
4880
|
+
overrideNamespace,
|
|
4881
|
+
size = "small",
|
|
4882
|
+
onClick,
|
|
4883
|
+
disabled = false,
|
|
4884
|
+
fullWidth = false,
|
|
4885
|
+
loading: externalLoading,
|
|
4886
|
+
tooltip,
|
|
4887
|
+
mobileViewOnly,
|
|
4888
|
+
disableMobileView,
|
|
4889
|
+
hideTooltipOnMobile,
|
|
4890
|
+
hideTooltipOnDesktop
|
|
4891
|
+
}) => {
|
|
4892
|
+
const { displayState } = useAppTheme();
|
|
4893
|
+
const [internalLoading, setInternalLoading] = (0, import_react30.useState)(false);
|
|
4894
|
+
const isLoading = externalLoading !== void 0 ? externalLoading : internalLoading;
|
|
4895
|
+
const handleClick = async (event) => {
|
|
4896
|
+
if (!onClick || isLoading || disabled) return;
|
|
4897
|
+
try {
|
|
4898
|
+
setInternalLoading(true);
|
|
4899
|
+
await onClick(event);
|
|
4900
|
+
} finally {
|
|
4901
|
+
setInternalLoading(false);
|
|
4902
|
+
}
|
|
4903
|
+
};
|
|
4904
|
+
const renderIcon = () => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(AnimatedRefreshIcon, { fontSize: size, isSpinning: isLoading });
|
|
4905
|
+
if (displayState.isMobile && !disableMobileView || mobileViewOnly) {
|
|
4906
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TranslatableTooltipComponent, { title: hideTooltipOnMobile ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_jsx_runtime35.Fragment, {}) : tooltip || /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
4907
|
+
import_material25.Fab,
|
|
4908
|
+
{
|
|
4909
|
+
size,
|
|
4910
|
+
color: "inherit",
|
|
4911
|
+
onClick: handleClick,
|
|
4912
|
+
disabled: disabled || isLoading,
|
|
4913
|
+
"aria-label": "refresh",
|
|
4914
|
+
children: renderIcon()
|
|
4915
|
+
}
|
|
4916
|
+
) }) });
|
|
4917
|
+
}
|
|
4918
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TranslatableTooltipComponent, { title: hideTooltipOnDesktop ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_jsx_runtime35.Fragment, {}) : tooltip || /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
4919
|
+
import_material25.Button,
|
|
4920
|
+
{
|
|
4921
|
+
variant: "contained",
|
|
4922
|
+
color: "inherit",
|
|
4923
|
+
size,
|
|
4924
|
+
onClick: handleClick,
|
|
4925
|
+
disabled: disabled || isLoading,
|
|
4926
|
+
fullWidth,
|
|
4927
|
+
startIcon: renderIcon(),
|
|
4928
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" })
|
|
4929
|
+
}
|
|
4930
|
+
) });
|
|
4931
|
+
};
|
|
4932
|
+
|
|
4859
4933
|
// src/UI/index.ts
|
|
4860
4934
|
var UI = {
|
|
4861
4935
|
Inputs: {
|
|
@@ -4869,7 +4943,8 @@ var UI = {
|
|
|
4869
4943
|
Url: UrlComponent
|
|
4870
4944
|
},
|
|
4871
4945
|
Buttons: {
|
|
4872
|
-
CopyClipboardButton: CopyClipboardButtonComponent
|
|
4946
|
+
CopyClipboardButton: CopyClipboardButtonComponent,
|
|
4947
|
+
RefreshButton: RefreshButtonComponent
|
|
4873
4948
|
},
|
|
4874
4949
|
DataDisplay: {
|
|
4875
4950
|
TranslatableTooltip: TranslatableTooltipComponent,
|
|
@@ -4918,16 +4993,16 @@ var Services = {
|
|
|
4918
4993
|
};
|
|
4919
4994
|
|
|
4920
4995
|
// src/hooks/useUserStatus.ts
|
|
4921
|
-
var
|
|
4996
|
+
var import_react31 = require("react");
|
|
4922
4997
|
init_deviceId();
|
|
4923
4998
|
init_context();
|
|
4924
4999
|
var ONLINE_THRESHOLD_MINUTES = 2;
|
|
4925
5000
|
var AWAY_THRESHOLD_MINUTES = 15;
|
|
4926
5001
|
var useUserStatus2 = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
4927
5002
|
const supabase = useSupabase();
|
|
4928
|
-
const [status, setStatus] = (0,
|
|
4929
|
-
const [lastSeen, setLastSeen] = (0,
|
|
4930
|
-
const lastSeenRef = (0,
|
|
5003
|
+
const [status, setStatus] = (0, import_react31.useState)("offline");
|
|
5004
|
+
const [lastSeen, setLastSeen] = (0, import_react31.useState)(initialLastSeenAt ?? null);
|
|
5005
|
+
const lastSeenRef = (0, import_react31.useRef)(initialLastSeenAt ?? null);
|
|
4931
5006
|
lastSeenRef.current = lastSeen;
|
|
4932
5007
|
const calculateStatus = (isOnline, lastSeenIso) => {
|
|
4933
5008
|
if (isOnline) return "online";
|
|
@@ -4943,7 +5018,7 @@ var useUserStatus2 = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
|
4943
5018
|
}
|
|
4944
5019
|
return "offline";
|
|
4945
5020
|
};
|
|
4946
|
-
(0,
|
|
5021
|
+
(0, import_react31.useEffect)(() => {
|
|
4947
5022
|
if (!userId) return;
|
|
4948
5023
|
let isMounted = true;
|
|
4949
5024
|
const isSelf = currentAuthUserId && userId === currentAuthUserId;
|
|
@@ -4966,9 +5041,9 @@ var useUserStatus2 = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
|
4966
5041
|
}
|
|
4967
5042
|
};
|
|
4968
5043
|
fetchLastSeen();
|
|
4969
|
-
const
|
|
4970
|
-
|
|
4971
|
-
const state =
|
|
5044
|
+
const channel2 = supabase.channel(`presence_user_${userId}`);
|
|
5045
|
+
channel2.on("presence", { event: "sync" }, () => {
|
|
5046
|
+
const state = channel2.presenceState();
|
|
4972
5047
|
const isOnline = Object.keys(state).length > 0;
|
|
4973
5048
|
if (isMounted) {
|
|
4974
5049
|
setStatus(isOnline ? "online" : calculateStatus(false, lastSeenRef.current));
|
|
@@ -4998,7 +5073,7 @@ var useUserStatus2 = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
|
4998
5073
|
).subscribe();
|
|
4999
5074
|
return () => {
|
|
5000
5075
|
isMounted = false;
|
|
5001
|
-
supabase.removeChannel(
|
|
5076
|
+
supabase.removeChannel(channel2);
|
|
5002
5077
|
};
|
|
5003
5078
|
}, [userId, initialLastSeenAt, currentAuthUserId]);
|
|
5004
5079
|
return {
|
|
@@ -5016,8 +5091,31 @@ var Hooks = {
|
|
|
5016
5091
|
|
|
5017
5092
|
// src/utils/index.ts
|
|
5018
5093
|
init_deviceId();
|
|
5094
|
+
|
|
5095
|
+
// src/utils/session.events.ts
|
|
5096
|
+
var channel = typeof window !== "undefined" ? new BroadcastChannel("session_activity") : null;
|
|
5097
|
+
var notifySessionChange = () => {
|
|
5098
|
+
channel?.postMessage("SESSION_UPDATED");
|
|
5099
|
+
};
|
|
5100
|
+
var subscribeToSessionChanges = (callback) => {
|
|
5101
|
+
if (!channel) return () => {
|
|
5102
|
+
};
|
|
5103
|
+
const handleMessage = (event) => {
|
|
5104
|
+
if (event.data === "SESSION_UPDATED") {
|
|
5105
|
+
callback();
|
|
5106
|
+
}
|
|
5107
|
+
};
|
|
5108
|
+
channel.addEventListener("message", handleMessage);
|
|
5109
|
+
return () => channel.removeEventListener("message", handleMessage);
|
|
5110
|
+
};
|
|
5111
|
+
|
|
5112
|
+
// src/utils/index.ts
|
|
5019
5113
|
var Utils = {
|
|
5020
|
-
getDeviceId
|
|
5114
|
+
getDeviceId,
|
|
5115
|
+
Sessions: {
|
|
5116
|
+
notifySessionChange,
|
|
5117
|
+
subscribeToSessionChanges
|
|
5118
|
+
}
|
|
5021
5119
|
};
|
|
5022
5120
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5023
5121
|
0 && (module.exports = {
|
package/dist/index.mjs
CHANGED
|
@@ -156,7 +156,7 @@ var TextFieldComponent = ({
|
|
|
156
156
|
...slotProps?.input || {},
|
|
157
157
|
readOnly: isReadOnly,
|
|
158
158
|
endAdornment: /* @__PURE__ */ jsxs(InputAdornment, { position: "end", sx: { gap: 0.5 }, children: [
|
|
159
|
-
hasValue && !isLocked && !disableClearButton && /* @__PURE__ */ jsx(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx(TranslateText, { overrideNamespace, children: clearTooltip }), children: /* @__PURE__ */ jsx(
|
|
159
|
+
hasValue && !isLocked && !disableClearButton && /* @__PURE__ */ jsx(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: clearTooltip }), children: /* @__PURE__ */ jsx(
|
|
160
160
|
IconButton,
|
|
161
161
|
{
|
|
162
162
|
size: "small",
|
|
@@ -166,7 +166,7 @@ var TextFieldComponent = ({
|
|
|
166
166
|
children: /* @__PURE__ */ jsx(ClearIcon, { fontSize: "small" })
|
|
167
167
|
}
|
|
168
168
|
) }),
|
|
169
|
-
hasValue && /* @__PURE__ */ jsx(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx(TranslateText, { overrideNamespace, children: copied ? copiedTooltip : copyTooltip }), children: /* @__PURE__ */ jsx(
|
|
169
|
+
hasValue && /* @__PURE__ */ jsx(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: copied ? copiedTooltip : copyTooltip }), children: /* @__PURE__ */ jsx(
|
|
170
170
|
IconButton,
|
|
171
171
|
{
|
|
172
172
|
size: "small",
|
|
@@ -216,7 +216,7 @@ var TextFieldComponent = ({
|
|
|
216
216
|
)
|
|
217
217
|
}
|
|
218
218
|
) }),
|
|
219
|
-
isLocked && showLock && /* @__PURE__ */ jsx(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx(TranslateText, { overrideNamespace, children: lockTooltip }), children: /* @__PURE__ */ jsx(
|
|
219
|
+
isLocked && showLock && /* @__PURE__ */ jsx(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: lockTooltip }), children: /* @__PURE__ */ jsx(
|
|
220
220
|
IconButton,
|
|
221
221
|
{
|
|
222
222
|
size: "small",
|
|
@@ -1875,7 +1875,7 @@ var CheckboxComponent = ({
|
|
|
1875
1875
|
|
|
1876
1876
|
// src/UI/widgets/page/CollapsedWidgetContainer.tsx
|
|
1877
1877
|
import { ExpandMore as ExpandMoreIcon } from "@mui/icons-material";
|
|
1878
|
-
import { Avatar as Avatar3, Box as Box8, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, Collapse, Divider as Divider2, IconButton as IconButton7, styled, Tooltip as Tooltip7
|
|
1878
|
+
import { Avatar as Avatar3, Box as Box8, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, Collapse, Divider as Divider2, IconButton as IconButton7, styled, Tooltip as Tooltip7 } from "@mui/material";
|
|
1879
1879
|
import { useState as useState11 } from "react";
|
|
1880
1880
|
import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1881
1881
|
var ExpandMore = styled((props) => {
|
|
@@ -1918,7 +1918,7 @@ var CollapsedWidgetContainer = (props) => {
|
|
|
1918
1918
|
{
|
|
1919
1919
|
sx: { flexGrow: 1 },
|
|
1920
1920
|
avatar: /* @__PURE__ */ jsx14(Avatar3, { sx: { bgcolor: "primary.main" }, children: props.icon }),
|
|
1921
|
-
label: typeof props.title === "string" ? /* @__PURE__ */ jsx14(
|
|
1921
|
+
label: typeof props.title === "string" ? /* @__PURE__ */ jsx14(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.title }) : props.title,
|
|
1922
1922
|
subheader: typeof props.subtitle === "string" ? /* @__PURE__ */ jsx14(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.subtitle }) : props.subtitle
|
|
1923
1923
|
}
|
|
1924
1924
|
),
|
|
@@ -1940,6 +1940,82 @@ var CollapsedWidgetContainer = (props) => {
|
|
|
1940
1940
|
] });
|
|
1941
1941
|
};
|
|
1942
1942
|
|
|
1943
|
+
// src/UI/components/buttons/RefreshButtonComponent.tsx
|
|
1944
|
+
import { useState as useState12 } from "react";
|
|
1945
|
+
import {
|
|
1946
|
+
Button as Button3,
|
|
1947
|
+
Fab,
|
|
1948
|
+
styled as styled2
|
|
1949
|
+
} from "@mui/material";
|
|
1950
|
+
import RefreshIconMui from "@mui/icons-material/Refresh";
|
|
1951
|
+
import { Fragment as Fragment9, jsx as jsx15 } from "react/jsx-runtime";
|
|
1952
|
+
var AnimatedRefreshIcon = styled2(RefreshIconMui, {
|
|
1953
|
+
shouldForwardProp: (prop) => prop !== "isSpinning"
|
|
1954
|
+
})(({ isSpinning }) => ({
|
|
1955
|
+
animation: isSpinning ? "spin 1s linear infinite" : "none",
|
|
1956
|
+
"@keyframes spin": {
|
|
1957
|
+
"0%": {
|
|
1958
|
+
transform: "rotate(0deg)"
|
|
1959
|
+
},
|
|
1960
|
+
"100%": {
|
|
1961
|
+
transform: "rotate(360deg)"
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
}));
|
|
1965
|
+
var RefreshButtonComponent = ({
|
|
1966
|
+
overrideNamespace,
|
|
1967
|
+
size = "small",
|
|
1968
|
+
onClick,
|
|
1969
|
+
disabled = false,
|
|
1970
|
+
fullWidth = false,
|
|
1971
|
+
loading: externalLoading,
|
|
1972
|
+
tooltip,
|
|
1973
|
+
mobileViewOnly,
|
|
1974
|
+
disableMobileView,
|
|
1975
|
+
hideTooltipOnMobile,
|
|
1976
|
+
hideTooltipOnDesktop
|
|
1977
|
+
}) => {
|
|
1978
|
+
const { displayState } = useAppTheme();
|
|
1979
|
+
const [internalLoading, setInternalLoading] = useState12(false);
|
|
1980
|
+
const isLoading = externalLoading !== void 0 ? externalLoading : internalLoading;
|
|
1981
|
+
const handleClick = async (event) => {
|
|
1982
|
+
if (!onClick || isLoading || disabled) return;
|
|
1983
|
+
try {
|
|
1984
|
+
setInternalLoading(true);
|
|
1985
|
+
await onClick(event);
|
|
1986
|
+
} finally {
|
|
1987
|
+
setInternalLoading(false);
|
|
1988
|
+
}
|
|
1989
|
+
};
|
|
1990
|
+
const renderIcon = () => /* @__PURE__ */ jsx15(AnimatedRefreshIcon, { fontSize: size, isSpinning: isLoading });
|
|
1991
|
+
if (displayState.isMobile && !disableMobileView || mobileViewOnly) {
|
|
1992
|
+
return /* @__PURE__ */ jsx15(TranslatableTooltipComponent, { title: hideTooltipOnMobile ? /* @__PURE__ */ jsx15(Fragment9, {}) : tooltip || /* @__PURE__ */ jsx15(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx15("span", { children: /* @__PURE__ */ jsx15(
|
|
1993
|
+
Fab,
|
|
1994
|
+
{
|
|
1995
|
+
size,
|
|
1996
|
+
color: "inherit",
|
|
1997
|
+
onClick: handleClick,
|
|
1998
|
+
disabled: disabled || isLoading,
|
|
1999
|
+
"aria-label": "refresh",
|
|
2000
|
+
children: renderIcon()
|
|
2001
|
+
}
|
|
2002
|
+
) }) });
|
|
2003
|
+
}
|
|
2004
|
+
return /* @__PURE__ */ jsx15(TranslatableTooltipComponent, { title: hideTooltipOnDesktop ? /* @__PURE__ */ jsx15(Fragment9, {}) : tooltip || /* @__PURE__ */ jsx15(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx15(
|
|
2005
|
+
Button3,
|
|
2006
|
+
{
|
|
2007
|
+
variant: "contained",
|
|
2008
|
+
color: "inherit",
|
|
2009
|
+
size,
|
|
2010
|
+
onClick: handleClick,
|
|
2011
|
+
disabled: disabled || isLoading,
|
|
2012
|
+
fullWidth,
|
|
2013
|
+
startIcon: renderIcon(),
|
|
2014
|
+
children: /* @__PURE__ */ jsx15(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" })
|
|
2015
|
+
}
|
|
2016
|
+
) });
|
|
2017
|
+
};
|
|
2018
|
+
|
|
1943
2019
|
// src/UI/index.ts
|
|
1944
2020
|
var UI = {
|
|
1945
2021
|
Inputs: {
|
|
@@ -1953,7 +2029,8 @@ var UI = {
|
|
|
1953
2029
|
Url: UrlComponent
|
|
1954
2030
|
},
|
|
1955
2031
|
Buttons: {
|
|
1956
|
-
CopyClipboardButton: CopyClipboardButtonComponent
|
|
2032
|
+
CopyClipboardButton: CopyClipboardButtonComponent,
|
|
2033
|
+
RefreshButton: RefreshButtonComponent
|
|
1957
2034
|
},
|
|
1958
2035
|
DataDisplay: {
|
|
1959
2036
|
TranslatableTooltip: TranslatableTooltipComponent,
|
|
@@ -1994,13 +2071,13 @@ var Services = {
|
|
|
1994
2071
|
};
|
|
1995
2072
|
|
|
1996
2073
|
// src/hooks/useUserStatus.ts
|
|
1997
|
-
import { useEffect as useEffect6, useRef, useState as
|
|
2074
|
+
import { useEffect as useEffect6, useRef, useState as useState13 } from "react";
|
|
1998
2075
|
var ONLINE_THRESHOLD_MINUTES = 2;
|
|
1999
2076
|
var AWAY_THRESHOLD_MINUTES = 15;
|
|
2000
2077
|
var useUserStatus = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
2001
2078
|
const supabase = useSupabase();
|
|
2002
|
-
const [status, setStatus] =
|
|
2003
|
-
const [lastSeen, setLastSeen] =
|
|
2079
|
+
const [status, setStatus] = useState13("offline");
|
|
2080
|
+
const [lastSeen, setLastSeen] = useState13(initialLastSeenAt ?? null);
|
|
2004
2081
|
const lastSeenRef = useRef(initialLastSeenAt ?? null);
|
|
2005
2082
|
lastSeenRef.current = lastSeen;
|
|
2006
2083
|
const calculateStatus = (isOnline, lastSeenIso) => {
|
|
@@ -2040,9 +2117,9 @@ var useUserStatus = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
|
2040
2117
|
}
|
|
2041
2118
|
};
|
|
2042
2119
|
fetchLastSeen();
|
|
2043
|
-
const
|
|
2044
|
-
|
|
2045
|
-
const state =
|
|
2120
|
+
const channel2 = supabase.channel(`presence_user_${userId}`);
|
|
2121
|
+
channel2.on("presence", { event: "sync" }, () => {
|
|
2122
|
+
const state = channel2.presenceState();
|
|
2046
2123
|
const isOnline = Object.keys(state).length > 0;
|
|
2047
2124
|
if (isMounted) {
|
|
2048
2125
|
setStatus(isOnline ? "online" : calculateStatus(false, lastSeenRef.current));
|
|
@@ -2072,7 +2149,7 @@ var useUserStatus = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
|
2072
2149
|
).subscribe();
|
|
2073
2150
|
return () => {
|
|
2074
2151
|
isMounted = false;
|
|
2075
|
-
supabase.removeChannel(
|
|
2152
|
+
supabase.removeChannel(channel2);
|
|
2076
2153
|
};
|
|
2077
2154
|
}, [userId, initialLastSeenAt, currentAuthUserId]);
|
|
2078
2155
|
return {
|
|
@@ -2088,9 +2165,30 @@ var Hooks = {
|
|
|
2088
2165
|
useUserStatus
|
|
2089
2166
|
};
|
|
2090
2167
|
|
|
2168
|
+
// src/utils/session.events.ts
|
|
2169
|
+
var channel = typeof window !== "undefined" ? new BroadcastChannel("session_activity") : null;
|
|
2170
|
+
var notifySessionChange = () => {
|
|
2171
|
+
channel?.postMessage("SESSION_UPDATED");
|
|
2172
|
+
};
|
|
2173
|
+
var subscribeToSessionChanges = (callback) => {
|
|
2174
|
+
if (!channel) return () => {
|
|
2175
|
+
};
|
|
2176
|
+
const handleMessage = (event) => {
|
|
2177
|
+
if (event.data === "SESSION_UPDATED") {
|
|
2178
|
+
callback();
|
|
2179
|
+
}
|
|
2180
|
+
};
|
|
2181
|
+
channel.addEventListener("message", handleMessage);
|
|
2182
|
+
return () => channel.removeEventListener("message", handleMessage);
|
|
2183
|
+
};
|
|
2184
|
+
|
|
2091
2185
|
// src/utils/index.ts
|
|
2092
2186
|
var Utils = {
|
|
2093
|
-
getDeviceId
|
|
2187
|
+
getDeviceId,
|
|
2188
|
+
Sessions: {
|
|
2189
|
+
notifySessionChange,
|
|
2190
|
+
subscribeToSessionChanges
|
|
2191
|
+
}
|
|
2094
2192
|
};
|
|
2095
2193
|
export {
|
|
2096
2194
|
AIProvider,
|