@qoretechnologies/reqore 0.67.6 → 0.68.1
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/DatePicker/index.d.ts +13 -1
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/DatePicker/index.js +79 -39
- package/dist/components/DatePicker/index.js.map +1 -1
- package/dist/components/DescriptionList/index.d.ts +119 -0
- package/dist/components/DescriptionList/index.d.ts.map +1 -0
- package/dist/components/DescriptionList/index.js +161 -0
- package/dist/components/DescriptionList/index.js.map +1 -0
- package/dist/components/Panel/index.d.ts.map +1 -1
- package/dist/components/Panel/index.js +1 -1
- package/dist/components/Panel/index.js.map +1 -1
- package/dist/constants/sizes.d.ts +9 -0
- package/dist/constants/sizes.d.ts.map +1 -1
- package/dist/constants/sizes.js +10 -1
- package/dist/constants/sizes.js.map +1 -1
- package/dist/esm/components/Accordion/index.js +142 -0
- package/dist/esm/components/Accordion/index.js.map +1 -0
- package/dist/esm/components/Breadcrumbs/index.js +122 -0
- package/dist/esm/components/Breadcrumbs/index.js.map +1 -0
- package/dist/esm/components/Breadcrumbs/item.js +14 -0
- package/dist/esm/components/Breadcrumbs/item.js.map +1 -0
- package/dist/esm/components/Button/index.js +315 -0
- package/dist/esm/components/Button/index.js.map +1 -0
- package/dist/esm/components/Callout/index.js +142 -0
- package/dist/esm/components/Callout/index.js.map +1 -0
- package/dist/esm/components/Checkbox/index.js +217 -0
- package/dist/esm/components/Checkbox/index.js.map +1 -0
- package/dist/esm/components/Collection/index.js +298 -0
- package/dist/esm/components/Collection/index.js.map +1 -0
- package/dist/esm/components/Collection/item.js +157 -0
- package/dist/esm/components/Collection/item.js.map +1 -0
- package/dist/esm/components/Columns/column.js +14 -0
- package/dist/esm/components/Columns/column.js.map +1 -0
- package/dist/esm/components/Columns/index.js +17 -0
- package/dist/esm/components/Columns/index.js.map +1 -0
- package/dist/esm/components/Comment/index.js +63 -0
- package/dist/esm/components/Comment/index.js.map +1 -0
- package/dist/esm/components/CommentFeed/index.js +17 -0
- package/dist/esm/components/CommentFeed/index.js.map +1 -0
- package/dist/esm/components/Content/index.js +16 -0
- package/dist/esm/components/Content/index.js.map +1 -0
- package/dist/esm/components/Content/wrapper.js +14 -0
- package/dist/esm/components/Content/wrapper.js.map +1 -0
- package/dist/esm/components/ControlGroup/index.js +351 -0
- package/dist/esm/components/ControlGroup/index.js.map +1 -0
- package/dist/esm/components/DatePicker/MonthYearDropdowns.js +30 -0
- package/dist/esm/components/DatePicker/MonthYearDropdowns.js.map +1 -0
- package/dist/esm/components/DatePicker/index.js +244 -0
- package/dist/esm/components/DatePicker/index.js.map +1 -0
- package/dist/esm/components/DescriptionList/index.js +132 -0
- package/dist/esm/components/DescriptionList/index.js.map +1 -0
- package/dist/esm/components/Drawer/backdrop.js +34 -0
- package/dist/esm/components/Drawer/backdrop.js.map +1 -0
- package/dist/esm/components/Drawer/index.js +286 -0
- package/dist/esm/components/Drawer/index.js.map +1 -0
- package/dist/esm/components/Dropdown/index.js +49 -0
- package/dist/esm/components/Dropdown/index.js.map +1 -0
- package/dist/esm/components/Dropdown/item.js +12 -0
- package/dist/esm/components/Dropdown/item.js.map +1 -0
- package/dist/esm/components/Dropdown/list.js +320 -0
- package/dist/esm/components/Dropdown/list.js.map +1 -0
- package/dist/esm/components/Effect/index.js +349 -0
- package/dist/esm/components/Effect/index.js.map +1 -0
- package/dist/esm/components/EmptyState/index.js +31 -0
- package/dist/esm/components/EmptyState/index.js.map +1 -0
- package/dist/esm/components/EntityRow/index.js +134 -0
- package/dist/esm/components/EntityRow/index.js.map +1 -0
- package/dist/esm/components/ErrorBoundary/index.js +57 -0
- package/dist/esm/components/ErrorBoundary/index.js.map +1 -0
- package/dist/esm/components/ExportModal/index.js +60 -0
- package/dist/esm/components/ExportModal/index.js.map +1 -0
- package/dist/esm/components/FeatureCard/index.js +139 -0
- package/dist/esm/components/FeatureCard/index.js.map +1 -0
- package/dist/esm/components/GlobalModalsWrapper/index.js +27 -0
- package/dist/esm/components/GlobalModalsWrapper/index.js.map +1 -0
- package/dist/esm/components/Header/index.js +55 -0
- package/dist/esm/components/Header/index.js.map +1 -0
- package/dist/esm/components/Icon/index.js +130 -0
- package/dist/esm/components/Icon/index.js.map +1 -0
- package/dist/esm/components/Input/index.js +136 -0
- package/dist/esm/components/Input/index.js.map +1 -0
- package/dist/esm/components/InputClearButton/index.js +32 -0
- package/dist/esm/components/InputClearButton/index.js.map +1 -0
- package/dist/esm/components/InternalPopover/index.js +244 -0
- package/dist/esm/components/InternalPopover/index.js.map +1 -0
- package/dist/esm/components/KeyValueTable/index.js +81 -0
- package/dist/esm/components/KeyValueTable/index.js.map +1 -0
- package/dist/esm/components/Label/index.js +7 -0
- package/dist/esm/components/Label/index.js.map +1 -0
- package/dist/esm/components/Layout/content.js +12 -0
- package/dist/esm/components/Layout/content.js.map +1 -0
- package/dist/esm/components/Layout/index.js +28 -0
- package/dist/esm/components/Layout/index.js.map +1 -0
- package/dist/esm/components/Menu/divider.js +41 -0
- package/dist/esm/components/Menu/divider.js.map +1 -0
- package/dist/esm/components/Menu/index.js +67 -0
- package/dist/esm/components/Menu/index.js.map +1 -0
- package/dist/esm/components/Menu/item.js +33 -0
- package/dist/esm/components/Menu/item.js.map +1 -0
- package/dist/esm/components/Menu/section.js +28 -0
- package/dist/esm/components/Menu/section.js.map +1 -0
- package/dist/esm/components/Message/index.js +52 -0
- package/dist/esm/components/Message/index.js.map +1 -0
- package/dist/esm/components/Modal/index.js +40 -0
- package/dist/esm/components/Modal/index.js.map +1 -0
- package/dist/esm/components/MultiSelect/index.js +146 -0
- package/dist/esm/components/MultiSelect/index.js.map +1 -0
- package/dist/esm/components/Navbar/divider.js +24 -0
- package/dist/esm/components/Navbar/divider.js.map +1 -0
- package/dist/esm/components/Navbar/group.js +27 -0
- package/dist/esm/components/Navbar/group.js.map +1 -0
- package/dist/esm/components/Navbar/index.js +39 -0
- package/dist/esm/components/Navbar/index.js.map +1 -0
- package/dist/esm/components/Navbar/item.js +51 -0
- package/dist/esm/components/Navbar/item.js.map +1 -0
- package/dist/esm/components/Notifications/index.js +28 -0
- package/dist/esm/components/Notifications/index.js.map +1 -0
- package/dist/esm/components/Notifications/notification.js +225 -0
- package/dist/esm/components/Notifications/notification.js.map +1 -0
- package/dist/esm/components/Paging/index.js +116 -0
- package/dist/esm/components/Paging/index.js.map +1 -0
- package/dist/esm/components/Panel/LabelEditor.js +33 -0
- package/dist/esm/components/Panel/LabelEditor.js.map +1 -0
- package/dist/esm/components/Panel/NonResponsiveActions.js +18 -0
- package/dist/esm/components/Panel/NonResponsiveActions.js.map +1 -0
- package/dist/esm/components/Panel/index.js +564 -0
- package/dist/esm/components/Panel/index.js.map +1 -0
- package/dist/esm/components/Panel/panel.screenshot.js +15 -0
- package/dist/esm/components/Panel/panel.screenshot.js.map +1 -0
- package/dist/esm/components/Paragraph/index.js +19 -0
- package/dist/esm/components/Paragraph/index.js.map +1 -0
- package/dist/esm/components/Popover/index.js +267 -0
- package/dist/esm/components/Popover/index.js.map +1 -0
- package/dist/esm/components/Progress/index.js +188 -0
- package/dist/esm/components/Progress/index.js.map +1 -0
- package/dist/esm/components/RadioGroup/index.js +9 -0
- package/dist/esm/components/RadioGroup/index.js.map +1 -0
- package/dist/esm/components/Rating/index.js +165 -0
- package/dist/esm/components/Rating/index.js.map +1 -0
- package/dist/esm/components/RichTextEditor/index.js +299 -0
- package/dist/esm/components/RichTextEditor/index.js.map +1 -0
- package/dist/esm/components/SegmentedControl/index.js +291 -0
- package/dist/esm/components/SegmentedControl/index.js.map +1 -0
- package/dist/esm/components/SeverityRow/index.js +106 -0
- package/dist/esm/components/SeverityRow/index.js.map +1 -0
- package/dist/esm/components/Skeleton/index.js +28 -0
- package/dist/esm/components/Skeleton/index.js.map +1 -0
- package/dist/esm/components/Slider/index.js +176 -0
- package/dist/esm/components/Slider/index.js.map +1 -0
- package/dist/esm/components/Spacer/index.js +96 -0
- package/dist/esm/components/Spacer/index.js.map +1 -0
- package/dist/esm/components/Span/index.js +18 -0
- package/dist/esm/components/Span/index.js.map +1 -0
- package/dist/esm/components/Spinner/index.js +14 -0
- package/dist/esm/components/Spinner/index.js.map +1 -0
- package/dist/esm/components/Statistic/index.js +166 -0
- package/dist/esm/components/Statistic/index.js.map +1 -0
- package/dist/esm/components/Table/body.js +72 -0
- package/dist/esm/components/Table/body.js.map +1 -0
- package/dist/esm/components/Table/cell.js +214 -0
- package/dist/esm/components/Table/cell.js.map +1 -0
- package/dist/esm/components/Table/header.js +158 -0
- package/dist/esm/components/Table/header.js.map +1 -0
- package/dist/esm/components/Table/headerCell.js +233 -0
- package/dist/esm/components/Table/headerCell.js.map +1 -0
- package/dist/esm/components/Table/helpers.js +285 -0
- package/dist/esm/components/Table/helpers.js.map +1 -0
- package/dist/esm/components/Table/index.js +472 -0
- package/dist/esm/components/Table/index.js.map +1 -0
- package/dist/esm/components/Table/row.js +176 -0
- package/dist/esm/components/Table/row.js.map +1 -0
- package/dist/esm/components/Table/value.js +19 -0
- package/dist/esm/components/Table/value.js.map +1 -0
- package/dist/esm/components/Tabs/content.js +23 -0
- package/dist/esm/components/Tabs/content.js.map +1 -0
- package/dist/esm/components/Tabs/index.js +44 -0
- package/dist/esm/components/Tabs/index.js.map +1 -0
- package/dist/esm/components/Tabs/item.js +122 -0
- package/dist/esm/components/Tabs/item.js.map +1 -0
- package/dist/esm/components/Tabs/list.js +208 -0
- package/dist/esm/components/Tabs/list.js.map +1 -0
- package/dist/esm/components/Tag/group.js +38 -0
- package/dist/esm/components/Tag/group.js.map +1 -0
- package/dist/esm/components/Tag/index.js +267 -0
- package/dist/esm/components/Tag/index.js.map +1 -0
- package/dist/esm/components/Testimonial/index.js +108 -0
- package/dist/esm/components/Testimonial/index.js.map +1 -0
- package/dist/esm/components/Textarea/index.js +135 -0
- package/dist/esm/components/Textarea/index.js.map +1 -0
- package/dist/esm/components/Tier/index.js +48 -0
- package/dist/esm/components/Tier/index.js.map +1 -0
- package/dist/esm/components/TimeAgo/index.js +19 -0
- package/dist/esm/components/TimeAgo/index.js.map +1 -0
- package/dist/esm/components/Timeline/index.js +271 -0
- package/dist/esm/components/Timeline/index.js.map +1 -0
- package/dist/esm/components/TooltipComponent/index.js +11 -0
- package/dist/esm/components/TooltipComponent/index.js.map +1 -0
- package/dist/esm/components/Tree/index.js +266 -0
- package/dist/esm/components/Tree/index.js.map +1 -0
- package/dist/esm/components/Tree/modal.js +30 -0
- package/dist/esm/components/Tree/modal.js.map +1 -0
- package/dist/esm/constants/animations.js +9 -0
- package/dist/esm/constants/animations.js.map +1 -0
- package/dist/esm/constants/colors.js +13 -0
- package/dist/esm/constants/colors.js.map +1 -0
- package/dist/esm/constants/paging.js +48 -0
- package/dist/esm/constants/paging.js.map +1 -0
- package/dist/esm/constants/sizes.js +363 -0
- package/dist/esm/constants/sizes.js.map +1 -0
- package/dist/esm/constants/theme.js +40 -0
- package/dist/esm/constants/theme.js.map +1 -0
- package/dist/esm/containers/Paging.js +29 -0
- package/dist/esm/containers/Paging.js.map +1 -0
- package/dist/esm/containers/ReqoreProvider.js +239 -0
- package/dist/esm/containers/ReqoreProvider.js.map +1 -0
- package/dist/esm/containers/ThemeProvider.js +11 -0
- package/dist/esm/containers/ThemeProvider.js.map +1 -0
- package/dist/esm/containers/UIProvider.js +53 -0
- package/dist/esm/containers/UIProvider.js.map +1 -0
- package/dist/esm/context/CustomThemeContext.js +4 -0
- package/dist/esm/context/CustomThemeContext.js.map +1 -0
- package/dist/esm/context/ReqoreContext.js +22 -0
- package/dist/esm/context/ReqoreContext.js.map +1 -0
- package/dist/esm/context/ThemeContext.js +4 -0
- package/dist/esm/context/ThemeContext.js.map +1 -0
- package/dist/esm/helpers/animations.js +13 -0
- package/dist/esm/helpers/animations.js.map +1 -0
- package/dist/esm/helpers/colors.js +240 -0
- package/dist/esm/helpers/colors.js.map +1 -0
- package/dist/esm/helpers/dates.js +52 -0
- package/dist/esm/helpers/dates.js.map +1 -0
- package/dist/esm/helpers/time.js +21 -0
- package/dist/esm/helpers/time.js.map +1 -0
- package/dist/esm/helpers/utils.js +174 -0
- package/dist/esm/helpers/utils.js.map +1 -0
- package/dist/esm/hooks/useAutoFocus.js +76 -0
- package/dist/esm/hooks/useAutoFocus.js.map +1 -0
- package/dist/esm/hooks/useCloneThroughFragments.js +26 -0
- package/dist/esm/hooks/useCloneThroughFragments.js.map +1 -0
- package/dist/esm/hooks/useCombinedRefs.js +25 -0
- package/dist/esm/hooks/useCombinedRefs.js.map +1 -0
- package/dist/esm/hooks/useComponentTooltip.js +28 -0
- package/dist/esm/hooks/useComponentTooltip.js.map +1 -0
- package/dist/esm/hooks/useFocusTrap.js +115 -0
- package/dist/esm/hooks/useFocusTrap.js.map +1 -0
- package/dist/esm/hooks/useLatestZIndex.js +10 -0
- package/dist/esm/hooks/useLatestZIndex.js.map +1 -0
- package/dist/esm/hooks/useOutsideClick.js +17 -0
- package/dist/esm/hooks/useOutsideClick.js.map +1 -0
- package/dist/esm/hooks/usePaging.js +92 -0
- package/dist/esm/hooks/usePaging.js.map +1 -0
- package/dist/esm/hooks/useQueryWithDelay.js +19 -0
- package/dist/esm/hooks/useQueryWithDelay.js.map +1 -0
- package/dist/esm/hooks/useReqore.js +10 -0
- package/dist/esm/hooks/useReqore.js.map +1 -0
- package/dist/esm/hooks/useReqoreContext.js +12 -0
- package/dist/esm/hooks/useReqoreContext.js.map +1 -0
- package/dist/esm/hooks/useReqoreEffect.js +21 -0
- package/dist/esm/hooks/useReqoreEffect.js.map +1 -0
- package/dist/esm/hooks/useTextareaAutoSize.js +16 -0
- package/dist/esm/hooks/useTextareaAutoSize.js.map +1 -0
- package/dist/esm/hooks/useTheme.js +39 -0
- package/dist/esm/hooks/useTheme.js.map +1 -0
- package/dist/esm/hooks/useWhyDidYouUpdate.js +32 -0
- package/dist/esm/hooks/useWhyDidYouUpdate.js.map +1 -0
- package/dist/esm/index.js +92 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/styles.js +122 -0
- package/dist/esm/styles.js.map +1 -0
- package/dist/esm/types/global.js +2 -0
- package/dist/esm/types/global.js.map +1 -0
- package/dist/esm/types/icons.js +2 -0
- package/dist/esm/types/icons.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
- package/tests.json +1 -1
- package/tsconfig.esm.json +11 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { debounce } from 'lodash';
|
|
3
|
+
import React, { forwardRef, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { useMount, useUnmount } from 'react-use';
|
|
5
|
+
import styled, { css } from 'styled-components';
|
|
6
|
+
import { ReqoreButton, ReqoreDrawer } from '../..';
|
|
7
|
+
import { GAP_FROM_SIZE, RADIUS_FROM_SIZE } from '../../constants/sizes';
|
|
8
|
+
import { useCloneThroughFragments } from '../../hooks/useCloneThroughFragments';
|
|
9
|
+
import { StyledEffect } from '../Effect';
|
|
10
|
+
import { StyledHeader } from '../Header';
|
|
11
|
+
import { StyledParagraph } from '../Paragraph';
|
|
12
|
+
export const StyledReqoreControlGroup = styled(StyledEffect) `
|
|
13
|
+
display: flex;
|
|
14
|
+
flex: ${({ fluid, fixed }) => (fixed ? '0 0 auto' : fluid ? undefined : '0 0 auto')};
|
|
15
|
+
width: ${({ fluid, fixed }) => (fluid && !fixed ? '100%' : undefined)};
|
|
16
|
+
justify-content: ${({ fluid, vertical, spaceBetween }) => vertical && fluid
|
|
17
|
+
? spaceBetween
|
|
18
|
+
? 'space-between'
|
|
19
|
+
: 'stretch'
|
|
20
|
+
: !vertical && spaceBetween
|
|
21
|
+
? 'space-between'
|
|
22
|
+
: undefined};
|
|
23
|
+
align-items: ${({ vertical, fluid, horizontalAlign, spaceBetween }) => vertical
|
|
24
|
+
? fluid
|
|
25
|
+
? spaceBetween
|
|
26
|
+
? 'space-between'
|
|
27
|
+
: 'stretch'
|
|
28
|
+
: horizontalAlign
|
|
29
|
+
: vertical && spaceBetween
|
|
30
|
+
? 'space-between'
|
|
31
|
+
: undefined};
|
|
32
|
+
flex-flow: ${({ vertical }) => (vertical ? 'column' : 'row')};
|
|
33
|
+
gap: ${({ gapSize, stack }) => (!stack ? `${GAP_FROM_SIZE[gapSize]}px` : undefined)};
|
|
34
|
+
flex-wrap: ${({ wrap }) => (wrap ? 'wrap' : 'nowrap')};
|
|
35
|
+
|
|
36
|
+
// If the group has the fill prop,
|
|
37
|
+
// we need to make sure that the children are vertically stretched
|
|
38
|
+
// kind of like 'fluid' but vertically
|
|
39
|
+
// ! Only works when the group is horizontal & wrap is false
|
|
40
|
+
${({ fill, vertical }) => {
|
|
41
|
+
if (fill && !vertical) {
|
|
42
|
+
return css `
|
|
43
|
+
> * {
|
|
44
|
+
max-height: 100% !important;
|
|
45
|
+
height: unset !important;
|
|
46
|
+
align-self: stretch !important;
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}}
|
|
52
|
+
|
|
53
|
+
> *, > ${StyledParagraph}, > ${StyledHeader} {
|
|
54
|
+
margin-top: ${({ fill, verticalAlign }) => !fill && (verticalAlign === 'flex-end' || verticalAlign === 'center') ? 'auto' : undefined};
|
|
55
|
+
margin-bottom: ${({ fill, verticalAlign }) => !fill && (verticalAlign === 'flex-start' || verticalAlign === 'center') ? 'auto' : undefined};
|
|
56
|
+
margin-right: ${({ horizontalAlign }) => (horizontalAlign === 'center' ? 'auto' : undefined)};
|
|
57
|
+
|
|
58
|
+
${({ vertical }) => vertical &&
|
|
59
|
+
css `
|
|
60
|
+
margin-left: ${({ horizontalAlign }) => horizontalAlign === 'flex-end' || horizontalAlign === 'center' ? 'auto' : undefined};
|
|
61
|
+
`}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
${({ vertical }) => !vertical &&
|
|
65
|
+
css `
|
|
66
|
+
> *:first-child {
|
|
67
|
+
margin-left: ${({ horizontalAlign }) => horizontalAlign === 'flex-end' || horizontalAlign === 'center' ? 'auto' : undefined};
|
|
68
|
+
}
|
|
69
|
+
`}
|
|
70
|
+
|
|
71
|
+
${({ stack, wrap }) => {
|
|
72
|
+
if (!stack)
|
|
73
|
+
return undefined;
|
|
74
|
+
return css `
|
|
75
|
+
${wrap ? 'padding: 1px 0 0 1px;' : ''}
|
|
76
|
+
|
|
77
|
+
> * {
|
|
78
|
+
border-radius: 0;
|
|
79
|
+
position: relative;
|
|
80
|
+
|
|
81
|
+
&:hover,
|
|
82
|
+
&:focus-within {
|
|
83
|
+
z-index: 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
`;
|
|
87
|
+
}}
|
|
88
|
+
`;
|
|
89
|
+
const ReqoreControlGroup = memo(forwardRef(({ children, className, minimal, size = 'normal', gapSize = 'normal', fluid, flat, fixed, fill, rounded = true, wrap, stack, isInsideStackGroup, isInsideVerticalGroup, isMasterGroupRounded, intent, customTheme, isFirst, isLast, vertical, childrenCount, childId, isChild, isFirstGroup, isLastGroup, verticalAlign, horizontalAlign = 'flex-start', responsive, overflowButtonProps, ...rest }, externalRef) => {
|
|
90
|
+
const isStack = stack || isInsideStackGroup;
|
|
91
|
+
const isVertical = vertical || isInsideVerticalGroup;
|
|
92
|
+
const [overflowingChildren, setOverflowingChildren] = useState(0);
|
|
93
|
+
const [lastReSize, setLastReSize] = useState(0);
|
|
94
|
+
const [isOverflownDialogOpen, setIsOverflownDialogOpen] = useState(false);
|
|
95
|
+
const observer = useRef(null);
|
|
96
|
+
const ref = useRef(null);
|
|
97
|
+
const setRefs = useCallback((node) => {
|
|
98
|
+
ref.current = node;
|
|
99
|
+
if (typeof externalRef === 'function') {
|
|
100
|
+
externalRef(node);
|
|
101
|
+
}
|
|
102
|
+
else if (externalRef) {
|
|
103
|
+
externalRef.current = node;
|
|
104
|
+
}
|
|
105
|
+
}, [externalRef]);
|
|
106
|
+
const realChildCount = useMemo(() => {
|
|
107
|
+
let count = 0;
|
|
108
|
+
const countChildren = (children) => React.Children.forEach(children, (child) => {
|
|
109
|
+
if (child && React.isValidElement(child)) {
|
|
110
|
+
if (child.type === React.Fragment) {
|
|
111
|
+
// just compare to `React.Fragment`
|
|
112
|
+
countChildren(child.props.children);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
count++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
countChildren(children);
|
|
120
|
+
return count < 0 ? 0 : count;
|
|
121
|
+
}, [children]);
|
|
122
|
+
const checkIfOverflowing = useCallback(() => {
|
|
123
|
+
return (ref.current &&
|
|
124
|
+
ref.current.clientWidth > 40 &&
|
|
125
|
+
!vertical &&
|
|
126
|
+
responsive &&
|
|
127
|
+
ref.current.scrollWidth > ref.current.clientWidth);
|
|
128
|
+
}, [vertical, responsive, children]);
|
|
129
|
+
useMount(() => {
|
|
130
|
+
if (!vertical && responsive) {
|
|
131
|
+
if ('ResizeObserver' in window) {
|
|
132
|
+
observer.current = new ResizeObserver(debounce(() => {
|
|
133
|
+
if (ref && ref.current) {
|
|
134
|
+
setOverflowingChildren(0);
|
|
135
|
+
setLastReSize(ref.current.clientWidth);
|
|
136
|
+
}
|
|
137
|
+
}, 200));
|
|
138
|
+
observer.current.observe(ref.current);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
useUnmount(() => {
|
|
143
|
+
if (observer.current) {
|
|
144
|
+
observer.current.disconnect();
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
// Is the control group still overflowing?
|
|
149
|
+
if ((overflowingChildren || overflowingChildren === 0) && checkIfOverflowing()) {
|
|
150
|
+
setOverflowingChildren(overflowingChildren + 1);
|
|
151
|
+
}
|
|
152
|
+
// Hide the dialog if the group was resized and the dialog was open
|
|
153
|
+
if (overflowingChildren === 0) {
|
|
154
|
+
setIsOverflownDialogOpen(false);
|
|
155
|
+
}
|
|
156
|
+
}, [overflowingChildren, lastReSize, checkIfOverflowing]);
|
|
157
|
+
const getIsFirst = (index) => {
|
|
158
|
+
return !isInsideStackGroup || childrenCount === 1
|
|
159
|
+
? index === 0
|
|
160
|
+
: (isFirst || isFirst !== false) && index === 0;
|
|
161
|
+
};
|
|
162
|
+
const getIsLast = (index) => {
|
|
163
|
+
return !isInsideStackGroup
|
|
164
|
+
? index === realChildCount - 1
|
|
165
|
+
: (isLast || isLast !== false) && index === realChildCount - 1;
|
|
166
|
+
};
|
|
167
|
+
const getIsLastInFirstGroup = (index) => {
|
|
168
|
+
return !isInsideStackGroup
|
|
169
|
+
? index === 0
|
|
170
|
+
: isFirstGroup && (isLast || isLast !== false) && index === realChildCount - 1;
|
|
171
|
+
};
|
|
172
|
+
const getIsFirstInLastGroup = (index) => {
|
|
173
|
+
return !isInsideStackGroup
|
|
174
|
+
? index === realChildCount - 1
|
|
175
|
+
: isLastGroup && (isFirst || isFirst !== false) && childId === 1 && index === 0;
|
|
176
|
+
};
|
|
177
|
+
const getIsLastInLastGroup = (index) => {
|
|
178
|
+
return !isInsideStackGroup
|
|
179
|
+
? index === realChildCount - 1
|
|
180
|
+
: isLastGroup && (isLast || isLast !== false) && index === realChildCount - 1;
|
|
181
|
+
};
|
|
182
|
+
const getBorderTopLeftRadius = (index, isChildRounded) => {
|
|
183
|
+
if (isMasterGroupRounded === false || isChildRounded === false) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
const _isFirstGroup = !isInsideStackGroup || childrenCount === 1 ? true : isChild ? isFirstGroup : index === 0;
|
|
187
|
+
// If this is the first item
|
|
188
|
+
if (_isFirstGroup && getIsFirst(index)) {
|
|
189
|
+
return RADIUS_FROM_SIZE[size];
|
|
190
|
+
}
|
|
191
|
+
return undefined;
|
|
192
|
+
};
|
|
193
|
+
const getBorderTopRightRadius = (index, isChildRounded) => {
|
|
194
|
+
if (isMasterGroupRounded === false || isChildRounded === false) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
// If this group is not vertical we need to style the very last item
|
|
198
|
+
if (!isVertical || !isStack) {
|
|
199
|
+
const _isLastGroup = !isInsideStackGroup || childrenCount === 1
|
|
200
|
+
? true
|
|
201
|
+
: isChild
|
|
202
|
+
? isLastGroup
|
|
203
|
+
: index === realChildCount - 1;
|
|
204
|
+
if (_isLastGroup && getIsLast(index)) {
|
|
205
|
+
return RADIUS_FROM_SIZE[size];
|
|
206
|
+
}
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
// This border only needs to apply when this group is vertical
|
|
210
|
+
// AND this item is the last item of the first group
|
|
211
|
+
if (getIsLastInFirstGroup(index)) {
|
|
212
|
+
return RADIUS_FROM_SIZE[size];
|
|
213
|
+
}
|
|
214
|
+
return undefined;
|
|
215
|
+
};
|
|
216
|
+
const getBorderBottomLeftRadius = (index, isChildRounded) => {
|
|
217
|
+
if (isMasterGroupRounded === false || isChildRounded === false) {
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
// If this group is not vertical we need to style the very first item
|
|
221
|
+
if (!isVertical || !isStack) {
|
|
222
|
+
const _isFirstGroup = !isInsideStackGroup || childrenCount === 1 ? true : isChild ? isFirstGroup : index === 0;
|
|
223
|
+
if (_isFirstGroup && getIsFirst(index)) {
|
|
224
|
+
return RADIUS_FROM_SIZE[size];
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
// This border only needs to apply when this group is vertical
|
|
229
|
+
// AND this item is the first item of the last group
|
|
230
|
+
if (getIsFirstInLastGroup(index)) {
|
|
231
|
+
return RADIUS_FROM_SIZE[size];
|
|
232
|
+
}
|
|
233
|
+
return undefined;
|
|
234
|
+
};
|
|
235
|
+
const getBorderBottomRightRadius = (index, isChildRounded) => {
|
|
236
|
+
if (isMasterGroupRounded === false || isChildRounded === false) {
|
|
237
|
+
return undefined;
|
|
238
|
+
}
|
|
239
|
+
const _isLastGroup = !isInsideStackGroup || childrenCount === 1
|
|
240
|
+
? true
|
|
241
|
+
: isChild
|
|
242
|
+
? isLastGroup
|
|
243
|
+
: index === realChildCount - 1;
|
|
244
|
+
// If this is the last item
|
|
245
|
+
if (_isLastGroup && getIsLast(index)) {
|
|
246
|
+
return RADIUS_FROM_SIZE[size];
|
|
247
|
+
}
|
|
248
|
+
return undefined;
|
|
249
|
+
};
|
|
250
|
+
const { clone } = useCloneThroughFragments((props, _index, index) => {
|
|
251
|
+
let newProps = {
|
|
252
|
+
...props,
|
|
253
|
+
key: props.reactKey || _index,
|
|
254
|
+
minimal: props?.minimal || props?.minimal === false ? props.minimal : minimal,
|
|
255
|
+
size: props?.size || size,
|
|
256
|
+
flat: props?.flat || props?.flat === false ? props.flat : flat,
|
|
257
|
+
fluid: props?.fluid || props?.fluid === false ? props.fluid : fluid,
|
|
258
|
+
fixed: props?.fixed || props?.fixed === false ? props.fixed : fixed,
|
|
259
|
+
fill: props?.fill || props?.fill === false ? props.fill : fill,
|
|
260
|
+
spaceBetween: props?.spaceBetween || props?.spaceBetween === false ? props.spaceBetween : false,
|
|
261
|
+
stack: props?.stack || props?.stack === false ? props.stack : isStack,
|
|
262
|
+
intent: props?.intent || intent,
|
|
263
|
+
customTheme: props?.customTheme || customTheme,
|
|
264
|
+
};
|
|
265
|
+
if (isStack) {
|
|
266
|
+
const childIsFlat = props?.flat || props?.flat === false ? props.flat : flat;
|
|
267
|
+
const needsCollapse = !childIsFlat;
|
|
268
|
+
const isFirstChild = index === 0;
|
|
269
|
+
const collapseMargin = needsCollapse
|
|
270
|
+
? wrap
|
|
271
|
+
? { marginTop: -1, marginLeft: -1 }
|
|
272
|
+
: !isFirstChild
|
|
273
|
+
? isVertical
|
|
274
|
+
? { marginTop: -1 }
|
|
275
|
+
: { marginLeft: -1 }
|
|
276
|
+
: {}
|
|
277
|
+
: {};
|
|
278
|
+
newProps = {
|
|
279
|
+
...newProps,
|
|
280
|
+
style: {
|
|
281
|
+
...collapseMargin,
|
|
282
|
+
borderTopLeftRadius: getBorderTopLeftRadius(index, props?.rounded),
|
|
283
|
+
borderBottomLeftRadius: getBorderBottomLeftRadius(index, props?.rounded),
|
|
284
|
+
borderTopRightRadius: getBorderTopRightRadius(index, props?.rounded),
|
|
285
|
+
borderBottomRightRadius: getBorderBottomRightRadius(index, props?.rounded),
|
|
286
|
+
...(props?.style || {}),
|
|
287
|
+
},
|
|
288
|
+
isChild: true,
|
|
289
|
+
rounded: isMasterGroupRounded === false ? false : !isStack,
|
|
290
|
+
isMasterGroupRounded: isChild ? isMasterGroupRounded : rounded,
|
|
291
|
+
isInsideStackGroup: isStack,
|
|
292
|
+
isInsideVerticalGroup: isVertical,
|
|
293
|
+
isFirst: isChild ? getIsFirst(index) : undefined,
|
|
294
|
+
isLast: isChild ? getIsLast(index) : undefined,
|
|
295
|
+
isLastInFirstGroup: getIsLastInFirstGroup(index),
|
|
296
|
+
isLastInLastGroup: getIsLastInLastGroup(index),
|
|
297
|
+
isFirstInLastGroup: getIsFirstInLastGroup(index),
|
|
298
|
+
childrenCount: realChildCount,
|
|
299
|
+
childId: index + 1,
|
|
300
|
+
isFirstGroup: isChild ? isFirstGroup : index === 0,
|
|
301
|
+
isLastGroup: isChild ? isLastGroup : index === realChildCount - 1,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
return newProps;
|
|
305
|
+
}, [
|
|
306
|
+
children,
|
|
307
|
+
isStack,
|
|
308
|
+
isVertical,
|
|
309
|
+
isChild,
|
|
310
|
+
isLastGroup,
|
|
311
|
+
isFirstGroup,
|
|
312
|
+
realChildCount,
|
|
313
|
+
fluid,
|
|
314
|
+
flat,
|
|
315
|
+
minimal,
|
|
316
|
+
size,
|
|
317
|
+
intent,
|
|
318
|
+
rounded,
|
|
319
|
+
fixed,
|
|
320
|
+
fill,
|
|
321
|
+
customTheme,
|
|
322
|
+
isMasterGroupRounded,
|
|
323
|
+
wrap,
|
|
324
|
+
]);
|
|
325
|
+
// Get the overflown children
|
|
326
|
+
const overflownChildren = useMemo(() => overflowingChildren ? React.Children.toArray(children).slice(0, overflowingChildren) : [], [children, overflowingChildren]);
|
|
327
|
+
// Remove the overflowing children count from the start of the children array
|
|
328
|
+
const _children = useMemo(() => overflowingChildren && responsive
|
|
329
|
+
? [
|
|
330
|
+
children.slice(overflowingChildren),
|
|
331
|
+
_jsx(ReqoreButton, { icon: 'MenuLine', customTheme: customTheme, tooltip: {
|
|
332
|
+
handler: 'click',
|
|
333
|
+
content: (_jsx(ReqoreControlGroup, { fluid: true, wrap: true, children: overflownChildren })),
|
|
334
|
+
}, active: isOverflownDialogOpen, fixed: true, onClick: (e) => e.stopPropagation(), ...overflowButtonProps }, 'control-group-menu'),
|
|
335
|
+
]
|
|
336
|
+
: children, [
|
|
337
|
+
children,
|
|
338
|
+
overflowingChildren,
|
|
339
|
+
responsive,
|
|
340
|
+
overflownChildren,
|
|
341
|
+
customTheme,
|
|
342
|
+
overflowButtonProps,
|
|
343
|
+
isOverflownDialogOpen,
|
|
344
|
+
]);
|
|
345
|
+
return (_jsxs(_Fragment, { children: [isOverflownDialogOpen ? (_jsx(ReqoreDrawer, { isOpen: true, onClose: () => setIsOverflownDialogOpen(false), flat: true, floating: true, minimal: true, position: 'bottom', hasBackdrop: false, label: 'Hidden items', minSize: '100px', size: 'auto' })) : null, _jsx(StyledReqoreControlGroup, { as: 'div', ...rest, vertical: vertical, style: {
|
|
346
|
+
overflowX: responsive ? 'auto' : undefined,
|
|
347
|
+
...rest.style,
|
|
348
|
+
}, size: size, gapSize: gapSize, ref: setRefs, rounded: rounded, fluid: fluid, fixed: fixed, fill: fill, wrap: wrap, stack: isStack, verticalAlign: verticalAlign, horizontalAlign: horizontalAlign, className: `${className || ''} reqore-control-group`, children: clone(_children) })] }));
|
|
349
|
+
}));
|
|
350
|
+
export default ReqoreControlGroup;
|
|
351
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ControlGroup/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getPreviousYears, months, toDate } from '../../helpers/dates';
|
|
3
|
+
import ReqoreControlGroup from '../ControlGroup';
|
|
4
|
+
import ReqoreDropdown from '../Dropdown';
|
|
5
|
+
export const YearMonthDropdowns = ({ value: _value, onValueChange, setIsYearDropdownOpen, setIsMonthDropdownOpen, minValue: _minValue = new Date(1970, 0, 1), maxValue: _maxValue = new Date(new Date().getFullYear() + 5, 11, 31), ...rest }) => {
|
|
6
|
+
const value = _value ?? toDate(new Date());
|
|
7
|
+
const minValue = toDate(_minValue);
|
|
8
|
+
const maxValue = toDate(_maxValue);
|
|
9
|
+
const currentYear = new Date().getFullYear();
|
|
10
|
+
const years = getPreviousYears(minValue.year, maxValue.year);
|
|
11
|
+
return (_jsxs(ReqoreControlGroup, { gapSize: 'small', children: [_jsx(ReqoreDropdown, { delay: 0, compact: true, filterable: true, caretPosition: 'right', label: months[value?.month - 1] ?? 'Month', inputProps: {
|
|
12
|
+
focusRules: {
|
|
13
|
+
type: 'auto',
|
|
14
|
+
},
|
|
15
|
+
}, ...rest, scrollToSelected: true, items: months.map((month, index) => ({
|
|
16
|
+
value: month,
|
|
17
|
+
selected: index === value?.month - 1,
|
|
18
|
+
disabled: value.set({ month: index + 1 }).compare(minValue) < 1 ||
|
|
19
|
+
value.set({ month: index + 1 }).compare(maxValue) > 1,
|
|
20
|
+
})), onItemSelect: (item) => onValueChange(value.set({ month: months.findIndex((m) => m === item.value) + 1 }), false), onToggleChange: setIsMonthDropdownOpen }), _jsx(ReqoreDropdown, { delay: 0, compact: true, filterable: true, caretPosition: 'right', label: value?.year ?? currentYear, inputProps: {
|
|
21
|
+
focusRules: {
|
|
22
|
+
type: 'auto',
|
|
23
|
+
},
|
|
24
|
+
}, ...rest, scrollToSelected: true, items: years.map((year) => ({
|
|
25
|
+
value: year,
|
|
26
|
+
selected: year === value?.year,
|
|
27
|
+
disabled: value.set({ year }).compare(minValue) < 1 || value.set({ year }).compare(maxValue) > 1,
|
|
28
|
+
})), onItemSelect: (item) => onValueChange(value.set({ year: item.value }), false), onToggleChange: setIsYearDropdownOpen })] }));
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=MonthYearDropdowns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonthYearDropdowns.js","sourceRoot":"","sources":["../../../../src/components/DatePicker/MonthYearDropdowns.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getLocalTimeZone, isSameDay, Time, toCalendarDateTime, toZoned, } from '@internationalized/date';
|
|
3
|
+
import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { Button, Calendar, CalendarCell, CalendarGrid, DateInput, DateSegment, I18nProvider, DatePicker as RADatePicker, TimeField, } from 'react-aria-components';
|
|
5
|
+
import styled from 'styled-components';
|
|
6
|
+
import { ReqoreErrorBoundary, ReqorePanel, ReqorePopover } from '../..';
|
|
7
|
+
import { changeLightness } from '../../helpers/colors';
|
|
8
|
+
import { formatDateToType, toDate } from '../../helpers/dates';
|
|
9
|
+
import { useComponentTooltip } from '../../hooks/useComponentTooltip';
|
|
10
|
+
import { useReqoreTheme } from '../../hooks/useTheme';
|
|
11
|
+
import { DisabledElement } from '../../styles';
|
|
12
|
+
import ReqoreButton from '../Button';
|
|
13
|
+
import ReqoreControlGroup from '../ControlGroup';
|
|
14
|
+
import ReqoreInput from '../Input';
|
|
15
|
+
import { YearMonthDropdowns } from './MonthYearDropdowns';
|
|
16
|
+
const StyledRADatePicker = styled(RADatePicker) `
|
|
17
|
+
&[data-fluid='false'] {
|
|
18
|
+
min-width: 220px;
|
|
19
|
+
width: fit-content;
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
const StyledDateSegment = styled(DateSegment) `
|
|
23
|
+
padding: 2px;
|
|
24
|
+
|
|
25
|
+
&:focus {
|
|
26
|
+
background-color: ${(props) => changeLightness(props.theme.main, 0.1)};
|
|
27
|
+
outline: none;
|
|
28
|
+
border-radius: 4px;
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
const StyledDateInput = styled(DateInput) `
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
`;
|
|
35
|
+
const StyledCalendarGrid = styled(CalendarGrid) `
|
|
36
|
+
width: 100%;
|
|
37
|
+
`;
|
|
38
|
+
const StyledTimeField = styled(TimeField) `
|
|
39
|
+
display: flex;
|
|
40
|
+
flex: 1 auto;
|
|
41
|
+
`;
|
|
42
|
+
const StyledCalendarCell = styled(CalendarCell) `
|
|
43
|
+
&[data-disabled='true']:not([data-selected='true']) {
|
|
44
|
+
${DisabledElement}
|
|
45
|
+
}
|
|
46
|
+
&:focus {
|
|
47
|
+
outline: none;
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
const TriggerPopover = ({ buttonProps, label, closeOnOutsideClick, passPopoverData, onToggleChange, popoverProps, calendarContent,
|
|
51
|
+
// The rest are injected by ReqoreControlGroup (style, rounded, size, etc.)
|
|
52
|
+
// and forwarded into componentProps so they reach the inner ReqoreButton.
|
|
53
|
+
...controlGroupProps }) => (_jsx(ReqorePopover, { component: ReqoreButton, componentProps: {
|
|
54
|
+
icon: 'CalendarLine',
|
|
55
|
+
...buttonProps,
|
|
56
|
+
...controlGroupProps,
|
|
57
|
+
label,
|
|
58
|
+
}, closeOnOutsideClick: closeOnOutsideClick, closeOnAnyClick: false, closeOnInsideClick: false, passPopoverData: passPopoverData, noWrapper: true, handler: 'click', placement: 'auto-start', noArrow: true, onToggleChange: onToggleChange, ...popoverProps, content: calendarContent }));
|
|
59
|
+
export const DatePicker = ({ value: _value, onChange, fluid = true, flat, rounded, minimal, size = 'normal', pill, intent, customTheme, inheritCustomTheme, granularity = 'minute', hourCycle = 24, hideTimeZone = true, shouldForceLeadingZeros = true, onClearClick, closeOnSelect = true, isClearable, tooltip, popoverProps, inputProps, pickerProps, timeInputProps, timeFieldProps, pickerActiveDayProps, pickerDayProps, yearMonthPickerProps, minValue, maxValue, readOnlyInputOnTouch = true, dateType = 'iso', errorBoundaryOptions, locale, selectOnly, placeholder, buttonProps, ...props }) => {
|
|
60
|
+
const value = useMemo(() => (_value ? toDate(_value) : null), [_value]);
|
|
61
|
+
// save time in separate state because date can be cleared and equals to null
|
|
62
|
+
const [time, setTime] = useState(() => {
|
|
63
|
+
if (!value)
|
|
64
|
+
return undefined;
|
|
65
|
+
return new Time(value?.hour ?? 0, value?.minute ?? 0, value?.second ?? 0, value?.millisecond ?? 0);
|
|
66
|
+
});
|
|
67
|
+
const [focusedValue, setFocusedValue] = useState(value);
|
|
68
|
+
const [isMonthDropdownOpen, setIsMonthDropdownOpen] = useState(false);
|
|
69
|
+
const [isYearDropdownOpen, setIsYearDropdownOpen] = useState(false);
|
|
70
|
+
const [hasTouchPrimaryInput, setHasTouchPrimaryInput] = useState(false);
|
|
71
|
+
const ref = useRef(null);
|
|
72
|
+
const theme = useReqoreTheme('main', customTheme, intent, undefined, inheritCustomTheme);
|
|
73
|
+
const popoverData = useRef({});
|
|
74
|
+
// use ref to save value type since datepicker can have null values
|
|
75
|
+
const isStringRef = useRef(typeof _value === 'string');
|
|
76
|
+
useLayoutEffect(() => {
|
|
77
|
+
if (value) {
|
|
78
|
+
isStringRef.current = typeof _value === 'string';
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (typeof window === 'undefined') {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
const updateTouchPrimaryInput = () => {
|
|
86
|
+
const hasCoarsePointer = window.matchMedia?.('(pointer: coarse)').matches;
|
|
87
|
+
const hasNoHover = window.matchMedia?.('(hover: none)').matches;
|
|
88
|
+
const hasTouchPoints = typeof navigator !== 'undefined' && typeof navigator.maxTouchPoints === 'number'
|
|
89
|
+
? navigator.maxTouchPoints > 0
|
|
90
|
+
: false;
|
|
91
|
+
setHasTouchPrimaryInput(Boolean(hasCoarsePointer || (hasNoHover && hasTouchPoints)));
|
|
92
|
+
};
|
|
93
|
+
updateTouchPrimaryInput();
|
|
94
|
+
const coarsePointerQuery = window.matchMedia?.('(pointer: coarse)');
|
|
95
|
+
const noHoverQuery = window.matchMedia?.('(hover: none)');
|
|
96
|
+
coarsePointerQuery?.addEventListener?.('change', updateTouchPrimaryInput);
|
|
97
|
+
noHoverQuery?.addEventListener?.('change', updateTouchPrimaryInput);
|
|
98
|
+
return () => {
|
|
99
|
+
coarsePointerQuery?.removeEventListener?.('change', updateTouchPrimaryInput);
|
|
100
|
+
noHoverQuery?.removeEventListener?.('change', updateTouchPrimaryInput);
|
|
101
|
+
};
|
|
102
|
+
}, []);
|
|
103
|
+
const showTime = granularity === 'minute' || granularity === 'second' || granularity === 'hour';
|
|
104
|
+
const handleDateChange = (value, close = true) => {
|
|
105
|
+
let date;
|
|
106
|
+
// if previous value is null apply saved time state
|
|
107
|
+
if (!_value && time) {
|
|
108
|
+
date = toZoned(toCalendarDateTime(value, time), getLocalTimeZone()).toDate();
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// set date and time from changed value
|
|
112
|
+
date = value ? value.toDate() : null;
|
|
113
|
+
if (date)
|
|
114
|
+
setTime(new Time(value?.hour, value?.minute, value?.second, value?.millisecond));
|
|
115
|
+
}
|
|
116
|
+
onChange?.((isStringRef.current ? date?.toISOString() : formatDateToType(date, dateType)));
|
|
117
|
+
setFocusedValue(value);
|
|
118
|
+
if (closeOnSelect && !showTime && close) {
|
|
119
|
+
popoverData.current?.close();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const onTimeChange = (time) => {
|
|
123
|
+
if (!time)
|
|
124
|
+
return;
|
|
125
|
+
setTime(time);
|
|
126
|
+
if (value) {
|
|
127
|
+
const date = toZoned(toCalendarDateTime(value, time), getLocalTimeZone());
|
|
128
|
+
handleDateChange?.(date);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const handleClearClick = () => {
|
|
132
|
+
if (value)
|
|
133
|
+
onChange(null);
|
|
134
|
+
if (time)
|
|
135
|
+
setTime(new Time(0, 0, 0, 0));
|
|
136
|
+
onClearClick?.();
|
|
137
|
+
};
|
|
138
|
+
const onMonthYearChange = (date) => {
|
|
139
|
+
handleDateChange(date, false);
|
|
140
|
+
};
|
|
141
|
+
const onToggleChange = (open) => {
|
|
142
|
+
// reset focused value state on popover close
|
|
143
|
+
if (!open) {
|
|
144
|
+
setFocusedValue(null);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const handleCalendarDateChange = (date) => {
|
|
148
|
+
handleDateChange(value ? toZoned(toCalendarDateTime(date, time), getLocalTimeZone()) : date);
|
|
149
|
+
};
|
|
150
|
+
const { Component, props: finalProps } = useComponentTooltip({
|
|
151
|
+
value,
|
|
152
|
+
onChange: handleDateChange,
|
|
153
|
+
granularity,
|
|
154
|
+
tooltip,
|
|
155
|
+
hideTimeZone,
|
|
156
|
+
shouldForceLeadingZeros,
|
|
157
|
+
hourCycle,
|
|
158
|
+
'data-fluid': fluid,
|
|
159
|
+
'aria-label': 'Date',
|
|
160
|
+
minValue: toDate(minValue),
|
|
161
|
+
maxValue: toDate(maxValue),
|
|
162
|
+
...props,
|
|
163
|
+
}, StyledRADatePicker, ref);
|
|
164
|
+
const resolvedLocale = locale ??
|
|
165
|
+
(typeof navigator !== 'undefined'
|
|
166
|
+
? navigator.languages?.find((l) => !l.startsWith('en')) ?? navigator.language
|
|
167
|
+
: undefined);
|
|
168
|
+
const formattedDate = useMemo(() => {
|
|
169
|
+
if (!value)
|
|
170
|
+
return undefined;
|
|
171
|
+
const dateObj = value.toDate();
|
|
172
|
+
const options = granularity === 'day'
|
|
173
|
+
? { year: 'numeric', month: 'short', day: 'numeric' }
|
|
174
|
+
: { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' };
|
|
175
|
+
return new Intl.DateTimeFormat(resolvedLocale, options).format(dateObj);
|
|
176
|
+
}, [value, granularity, resolvedLocale]);
|
|
177
|
+
const calendarContent = useMemo(() => (_jsx(Calendar, { defaultFocusedValue: value, onChange: handleCalendarDateChange, focusedValue: focusedValue, onFocusChange: (date) => setFocusedValue(toZoned(date, getLocalTimeZone())), minValue: toDate(minValue), maxValue: toDate(maxValue), children: _jsxs(ReqorePanel, { responsiveActionsWrapperProps: { fluid: false }, minimal: true, size: 'small', responsiveTitle: false, intent: intent, label: _jsx(YearMonthDropdowns, { value: focusedValue, onValueChange: onMonthYearChange, setIsMonthDropdownOpen: setIsMonthDropdownOpen, setIsYearDropdownOpen: setIsYearDropdownOpen, minValue: minValue, maxValue: maxValue, intent: intent, customTheme: theme, ...yearMonthPickerProps }), ...pickerProps, actions: [
|
|
178
|
+
{
|
|
179
|
+
group: [
|
|
180
|
+
{
|
|
181
|
+
as: ReqoreButton,
|
|
182
|
+
props: {
|
|
183
|
+
as: Button,
|
|
184
|
+
customTheme: theme,
|
|
185
|
+
slot: 'previous',
|
|
186
|
+
icon: 'ArrowLeftFill',
|
|
187
|
+
size: 'normal',
|
|
188
|
+
compact: true,
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
as: ReqoreButton,
|
|
193
|
+
props: {
|
|
194
|
+
as: Button,
|
|
195
|
+
customTheme: theme,
|
|
196
|
+
slot: 'next',
|
|
197
|
+
icon: 'ArrowRightFill',
|
|
198
|
+
size: 'normal',
|
|
199
|
+
compact: true,
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
], children: [_jsx(StyledCalendarGrid, { children: (date) => {
|
|
205
|
+
const isSelected = value && isSameDay(date, value);
|
|
206
|
+
return (_jsx(StyledCalendarCell, { "data-selected": isSelected, date: date, children: _jsx(ReqoreButton, { customTheme: isSelected ? theme : { main: 'transparent' }, label: date.day, active: isSelected, textAlign: 'center', circle: true, minimal: true, flat: true, compact: true, ...(isSelected ? pickerActiveDayProps : pickerDayProps) }, date.toString()) }));
|
|
207
|
+
} }), showTime && (_jsx(ReqoreControlGroup, { fluid: true, children: _jsx(StyledTimeField, { value: time, onChange: onTimeChange, granularity: granularity, hideTimeZone: hideTimeZone, shouldForceLeadingZeros: shouldForceLeadingZeros, hourCycle: hourCycle, "aria-label": 'Time', ...timeFieldProps, children: _jsx(ReqoreInput, { icon: 'TimeLine', fluid: true, as: StyledDateInput, flat: flat, rounded: rounded, minimal: minimal, size: size, pill: pill, intent: intent, theme: theme, ...timeInputProps, children: (segment) => _jsx(StyledDateSegment, { segment: segment }) }) }) }))] }) })), [value, !isMonthDropdownOpen && !isYearDropdownOpen, focusedValue, time]);
|
|
208
|
+
if (selectOnly) {
|
|
209
|
+
const triggerProps = {
|
|
210
|
+
buttonProps,
|
|
211
|
+
fluid,
|
|
212
|
+
size,
|
|
213
|
+
intent,
|
|
214
|
+
flat,
|
|
215
|
+
minimal,
|
|
216
|
+
pill,
|
|
217
|
+
rounded,
|
|
218
|
+
label: formattedDate ?? placeholder ?? buttonProps?.label,
|
|
219
|
+
closeOnOutsideClick: !isMonthDropdownOpen && !isYearDropdownOpen,
|
|
220
|
+
passPopoverData: (data) => (popoverData.current = data),
|
|
221
|
+
onToggleChange,
|
|
222
|
+
popoverProps,
|
|
223
|
+
calendarContent,
|
|
224
|
+
};
|
|
225
|
+
return (_jsx(ReqoreErrorBoundary, { ...errorBoundaryOptions, children: _jsx(I18nProvider, { locale: resolvedLocale, children: isClearable && value ? (_jsxs(ReqoreControlGroup, { fluid: fluid, size: size, stack: true, children: [_jsx(TriggerPopover, { ...triggerProps }), _jsx(ReqoreButton, { fixed: true, icon: 'CloseLine', size: size, intent: intent, flat: flat, minimal: minimal, rounded: rounded, onClick: handleClearClick })] })) : (_jsx(TriggerPopover, { ...triggerProps })) }) }));
|
|
226
|
+
}
|
|
227
|
+
return (_jsx(ReqoreErrorBoundary, { ...errorBoundaryOptions, children: _jsx(I18nProvider, { locale: resolvedLocale, children: _jsx(Component, { ...finalProps, children: _jsx(ReqorePopover, { component: ReqoreInput, componentProps: {
|
|
228
|
+
as: StyledDateInput,
|
|
229
|
+
onClearClick: handleClearClick,
|
|
230
|
+
fluid,
|
|
231
|
+
value,
|
|
232
|
+
readOnly: readOnlyInputOnTouch && hasTouchPrimaryInput,
|
|
233
|
+
inputMode: readOnlyInputOnTouch && hasTouchPrimaryInput ? 'none' : undefined,
|
|
234
|
+
rounded,
|
|
235
|
+
size,
|
|
236
|
+
pill,
|
|
237
|
+
minimal,
|
|
238
|
+
intent,
|
|
239
|
+
flat,
|
|
240
|
+
icon: 'CalendarLine',
|
|
241
|
+
...inputProps,
|
|
242
|
+
}, closeOnOutsideClick: !isMonthDropdownOpen && !isYearDropdownOpen, closeOnAnyClick: false, closeOnInsideClick: false, passPopoverData: (data) => (popoverData.current = data), isReqoreComponent: true, noWrapper: true, handler: 'click', placement: 'auto-start', noArrow: true, onToggleChange: onToggleChange, ...popoverProps, content: calendarContent, children: (segment) => _jsx(StyledDateSegment, { segment: segment }) }) }) }) }));
|
|
243
|
+
};
|
|
244
|
+
//# sourceMappingURL=index.js.map
|