@cloudscape-design/components 3.0.878 → 3.0.880
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/app-layout/visual-refresh-toolbar/compute-layout.d.ts +15 -0
- package/app-layout/visual-refresh-toolbar/compute-layout.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/compute-layout.js +13 -0
- package/app-layout/visual-refresh-toolbar/compute-layout.js.map +1 -1
- package/app-layout/visual-refresh-toolbar/index.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/index.js +11 -7
- package/app-layout/visual-refresh-toolbar/index.js.map +1 -1
- package/calendar/grid/use-calendar-grid-rows.d.ts +1 -1
- package/calendar/grid/use-calendar-grid-rows.d.ts.map +1 -1
- package/calendar/grid/use-calendar-grid-rows.js +11 -12
- package/calendar/grid/use-calendar-grid-rows.js.map +1 -1
- package/date-range-picker/calendar/grids/index.d.ts.map +1 -1
- package/date-range-picker/calendar/grids/index.js +2 -2
- package/date-range-picker/calendar/grids/index.js.map +1 -1
- package/date-range-picker/calendar/grids/monthly-grid.d.ts +2 -1
- package/date-range-picker/calendar/grids/monthly-grid.d.ts.map +1 -1
- package/date-range-picker/calendar/grids/monthly-grid.js +28 -34
- package/date-range-picker/calendar/grids/monthly-grid.js.map +1 -1
- package/date-range-picker/calendar/grids/styles.css.js +24 -28
- package/date-range-picker/calendar/grids/styles.scoped.css +42 -51
- package/date-range-picker/calendar/grids/styles.selectors.js +24 -28
- package/date-range-picker/test-classes/styles.css.js +7 -0
- package/date-range-picker/test-classes/styles.scoped.css +8 -0
- package/date-range-picker/test-classes/styles.selectors.js +8 -0
- package/internal/components/chart-legend/styles.css.js +6 -6
- package/internal/components/chart-legend/styles.scoped.css +15 -18
- package/internal/components/chart-legend/styles.selectors.js +6 -6
- package/internal/components/tooltip/index.d.ts.map +1 -1
- package/internal/components/tooltip/index.js +2 -3
- package/internal/components/tooltip/index.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/environment.json +1 -1
- package/internal/manifest.json +1 -1
- package/internal/utils/date-time/calendar.d.ts +34 -0
- package/internal/utils/date-time/calendar.d.ts.map +1 -0
- package/internal/utils/date-time/calendar.js +114 -0
- package/internal/utils/date-time/calendar.js.map +1 -0
- package/internal/utils/locale/index.d.ts +1 -1
- package/internal/utils/locale/index.d.ts.map +1 -1
- package/internal/utils/locale/index.js.map +1 -1
- package/internal/utils/locale/normalize-start-of-week.d.ts +1 -2
- package/internal/utils/locale/normalize-start-of-week.d.ts.map +1 -1
- package/internal/utils/locale/normalize-start-of-week.js.map +1 -1
- package/package.json +1 -1
- package/popover/container.d.ts +2 -1
- package/popover/container.d.ts.map +1 -1
- package/popover/container.js +2 -2
- package/popover/container.js.map +1 -1
- package/popover/styles.css.js +54 -54
- package/popover/styles.scoped.css +79 -79
- package/popover/styles.selectors.js +54 -54
- package/table/body-cell/index.js +1 -1
- package/table/body-cell/index.js.map +1 -1
- package/test-utils/dom/date-range-picker/index.js +2 -1
- package/test-utils/dom/date-range-picker/index.js.map +1 -1
- package/test-utils/selectors/date-range-picker/index.js +2 -1
- package/test-utils/selectors/date-range-picker/index.js.map +1 -1
- package/test-utils/tsconfig.tsbuildinfo +1 -1
|
@@ -150,21 +150,21 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
150
150
|
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
151
151
|
SPDX-License-Identifier: Apache-2.0
|
|
152
152
|
*/
|
|
153
|
-
.
|
|
153
|
+
.awsui_marker_1kjc7_zae79_153:not(#\9) {
|
|
154
154
|
transition: opacity var(--motion-duration-transition-quick-6npj01, 90ms) var(--motion-easing-transition-quick-l9jfsx, linear);
|
|
155
155
|
}
|
|
156
156
|
@media (prefers-reduced-motion: reduce) {
|
|
157
|
-
.
|
|
157
|
+
.awsui_marker_1kjc7_zae79_153:not(#\9) {
|
|
158
158
|
animation: none;
|
|
159
159
|
transition: none;
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
|
-
.awsui-motion-disabled .
|
|
162
|
+
.awsui-motion-disabled .awsui_marker_1kjc7_zae79_153:not(#\9), .awsui-mode-entering .awsui_marker_1kjc7_zae79_153:not(#\9) {
|
|
163
163
|
animation: none;
|
|
164
164
|
transition: none;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
.
|
|
167
|
+
.awsui_root_1kjc7_zae79_167:not(#\9) {
|
|
168
168
|
border-collapse: separate;
|
|
169
169
|
border-spacing: 0;
|
|
170
170
|
box-sizing: border-box;
|
|
@@ -196,15 +196,15 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
196
196
|
-webkit-font-smoothing: auto;
|
|
197
197
|
-moz-osx-font-smoothing: auto;
|
|
198
198
|
}
|
|
199
|
-
.
|
|
199
|
+
.awsui_root_1kjc7_zae79_167:not(#\9):focus {
|
|
200
200
|
outline: none;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
.
|
|
203
|
+
.awsui_title_1kjc7_zae79_202:not(#\9) {
|
|
204
204
|
/* used in test utils */
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
.
|
|
207
|
+
.awsui_list_1kjc7_zae79_206:not(#\9) {
|
|
208
208
|
display: flex;
|
|
209
209
|
flex-wrap: wrap;
|
|
210
210
|
list-style: none;
|
|
@@ -212,12 +212,12 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
212
212
|
margin-inline: 0;
|
|
213
213
|
padding-block: 0;
|
|
214
214
|
padding-inline: 0;
|
|
215
|
+
gap: var(--space-scaled-xxs-7597g1, 4px) var(--space-m-udix3p, 16px);
|
|
215
216
|
}
|
|
216
217
|
|
|
217
|
-
.
|
|
218
|
+
.awsui_marker_1kjc7_zae79_153:not(#\9) {
|
|
218
219
|
display: inline-flex;
|
|
219
220
|
align-items: flex-start;
|
|
220
|
-
margin-inline-end: var(--space-m-udix3p, 16px);
|
|
221
221
|
padding-block: 0;
|
|
222
222
|
padding-inline: 0;
|
|
223
223
|
border-block: 0;
|
|
@@ -226,17 +226,17 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
226
226
|
cursor: pointer;
|
|
227
227
|
opacity: 1;
|
|
228
228
|
}
|
|
229
|
-
.
|
|
229
|
+
.awsui_marker_1kjc7_zae79_153:not(#\9):focus {
|
|
230
230
|
outline: none;
|
|
231
231
|
}
|
|
232
|
-
body[data-awsui-focus-visible=true] .
|
|
232
|
+
body[data-awsui-focus-visible=true] .awsui_marker_1kjc7_zae79_153:not(#\9):focus {
|
|
233
233
|
position: relative;
|
|
234
234
|
}
|
|
235
|
-
body[data-awsui-focus-visible=true] .
|
|
235
|
+
body[data-awsui-focus-visible=true] .awsui_marker_1kjc7_zae79_153:not(#\9):focus {
|
|
236
236
|
outline: 2px dotted transparent;
|
|
237
237
|
outline-offset: calc(2px - 1px);
|
|
238
238
|
}
|
|
239
|
-
body[data-awsui-focus-visible=true] .
|
|
239
|
+
body[data-awsui-focus-visible=true] .awsui_marker_1kjc7_zae79_153:not(#\9):focus::before {
|
|
240
240
|
content: " ";
|
|
241
241
|
display: block;
|
|
242
242
|
position: absolute;
|
|
@@ -250,12 +250,9 @@ body[data-awsui-focus-visible=true] .awsui_marker_1kjc7_18438_153:not(#\9):focus
|
|
|
250
250
|
border-end-end-radius: var(--border-radius-control-default-focus-ring-u8zbsz, 4px);
|
|
251
251
|
box-shadow: 0 0 0 2px var(--color-border-item-focused-nv6mhz, #006ce0);
|
|
252
252
|
}
|
|
253
|
-
.
|
|
254
|
-
margin-inline-end: 0;
|
|
255
|
-
}
|
|
256
|
-
.awsui_marker_1kjc7_18438_153.awsui_marker--dimmed_1kjc7_18438_255:not(#\9) {
|
|
253
|
+
.awsui_marker_1kjc7_zae79_153.awsui_marker--dimmed_1kjc7_zae79_252:not(#\9) {
|
|
257
254
|
opacity: 0.35;
|
|
258
255
|
}
|
|
259
|
-
.
|
|
256
|
+
.awsui_marker_1kjc7_zae79_153.awsui_marker--highlighted_1kjc7_zae79_255:not(#\9) {
|
|
260
257
|
/* used in test utils */
|
|
261
258
|
}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
// es-module interop with Babel and Typescript
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
module.exports.default = {
|
|
5
|
-
"marker": "
|
|
6
|
-
"root": "
|
|
7
|
-
"title": "
|
|
8
|
-
"list": "
|
|
9
|
-
"marker--dimmed": "awsui_marker--
|
|
10
|
-
"marker--highlighted": "awsui_marker--
|
|
5
|
+
"marker": "awsui_marker_1kjc7_zae79_153",
|
|
6
|
+
"root": "awsui_root_1kjc7_zae79_167",
|
|
7
|
+
"title": "awsui_title_1kjc7_zae79_202",
|
|
8
|
+
"list": "awsui_list_1kjc7_zae79_206",
|
|
9
|
+
"marker--dimmed": "awsui_marker--dimmed_1kjc7_zae79_252",
|
|
10
|
+
"marker--highlighted": "awsui_marker--highlighted_1kjc7_zae79_255"
|
|
11
11
|
};
|
|
12
12
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/tooltip/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/tooltip/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAM3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,iBAAsB,EACtB,QAAgB,EAChB,IAAc,EACd,gBAAgB,GACjB,EAAE,YAAY,eA8Bd"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import clsx from 'clsx';
|
|
5
4
|
import PopoverArrow from '../../../popover/arrow';
|
|
6
5
|
import PopoverBody from '../../../popover/body';
|
|
7
6
|
import PopoverContainer from '../../../popover/container';
|
|
@@ -13,8 +12,8 @@ export default function Tooltip({ value, trackRef, trackKey, className, contentA
|
|
|
13
12
|
trackKey = value;
|
|
14
13
|
}
|
|
15
14
|
return (React.createElement(Portal, null,
|
|
16
|
-
React.createElement("div", Object.assign({ className:
|
|
17
|
-
React.createElement(Transition, { in: true }, () => (React.createElement(PopoverContainer, { trackRef: trackRef, trackKey: trackKey, size: size, fixedWidth: false, position: position, zIndex: 7000, arrow: position => React.createElement(PopoverArrow, { position: position }), hideOnOverscroll: hideOnOverscroll },
|
|
15
|
+
React.createElement("div", Object.assign({ className: styles.root }, contentAttributes, { "data-testid": trackKey }),
|
|
16
|
+
React.createElement(Transition, { in: true }, () => (React.createElement(PopoverContainer, { trackRef: trackRef, trackKey: trackKey, size: size, fixedWidth: false, position: position, zIndex: 7000, arrow: position => React.createElement(PopoverArrow, { position: position }), hideOnOverscroll: hideOnOverscroll, className: className },
|
|
18
17
|
React.createElement(PopoverBody, { dismissButton: false, dismissAriaLabel: undefined, onDismiss: undefined, header: undefined }, value)))))));
|
|
19
18
|
}
|
|
20
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/tooltip/index.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/tooltip/index.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,gBAAgB,MAAM,4BAA4B,CAAC;AAE1D,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAarC,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,iBAAiB,GAAG,EAAE,EACtB,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,OAAO,EACd,gBAAgB,GACH;IACb,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;QACzE,QAAQ,GAAG,KAAK,CAAC;KAClB;IAED,OAAO,CACL,oBAAC,MAAM;QACL,2CAAK,SAAS,EAAE,MAAM,CAAC,IAAI,IAAM,iBAAiB,mBAAe,QAAQ;YACvE,oBAAC,UAAU,IAAC,EAAE,EAAE,IAAI,IACjB,GAAG,EAAE,CAAC,CACL,oBAAC,gBAAgB,IACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,oBAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,GAAI,EACvD,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS;gBAEpB,oBAAC,WAAW,IAAC,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,IACpG,KAAK,CACM,CACG,CACpB,CACU,CACT,CACC,CACV,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport PopoverArrow from '../../../popover/arrow';\nimport PopoverBody from '../../../popover/body';\nimport PopoverContainer from '../../../popover/container';\nimport { PopoverProps } from '../../../popover/interfaces';\nimport Portal from '../portal';\nimport { Transition } from '../transition';\n\nimport styles from './styles.css.js';\n\nexport interface TooltipProps {\n value: React.ReactNode;\n trackRef: React.RefObject<HTMLElement | SVGElement>;\n trackKey?: string | number;\n position?: 'top' | 'right' | 'bottom' | 'left';\n className?: string;\n contentAttributes?: React.HTMLAttributes<HTMLDivElement>;\n size?: PopoverProps['size'];\n hideOnOverscroll?: boolean;\n}\n\nexport default function Tooltip({\n value,\n trackRef,\n trackKey,\n className,\n contentAttributes = {},\n position = 'top',\n size = 'small',\n hideOnOverscroll,\n}: TooltipProps) {\n if (!trackKey && (typeof value === 'string' || typeof value === 'number')) {\n trackKey = value;\n }\n\n return (\n <Portal>\n <div className={styles.root} {...contentAttributes} data-testid={trackKey}>\n <Transition in={true}>\n {() => (\n <PopoverContainer\n trackRef={trackRef}\n trackKey={trackKey}\n size={size}\n fixedWidth={false}\n position={position}\n zIndex={7000}\n arrow={position => <PopoverArrow position={position} />}\n hideOnOverscroll={hideOnOverscroll}\n className={className}\n >\n <PopoverBody dismissButton={false} dismissAriaLabel={undefined} onDismiss={undefined} header={undefined}>\n {value}\n </PopoverBody>\n </PopoverContainer>\n )}\n </Transition>\n </div>\n </Portal>\n );\n}\n"]}
|
package/internal/environment.js
CHANGED
package/internal/manifest.json
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DayIndex } from '../locale';
|
|
2
|
+
export declare function getCalendarYear(date: Date): Date[][];
|
|
3
|
+
interface CalendarWeek {
|
|
4
|
+
days: CalendarDate[];
|
|
5
|
+
testIndex?: number;
|
|
6
|
+
}
|
|
7
|
+
interface CalendarDate {
|
|
8
|
+
date: Date;
|
|
9
|
+
isVisible: boolean;
|
|
10
|
+
isSelected: boolean;
|
|
11
|
+
isInRange: boolean;
|
|
12
|
+
isSelectionTop: boolean;
|
|
13
|
+
isSelectionBottom: boolean;
|
|
14
|
+
isSelectionLeft: boolean;
|
|
15
|
+
isSelectionRight: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare class MonthCalendar {
|
|
18
|
+
padDates: 'before' | 'after';
|
|
19
|
+
weekdays: number[];
|
|
20
|
+
weeks: CalendarWeek[];
|
|
21
|
+
range: [Date, Date];
|
|
22
|
+
constructor({ padDates, baseDate, startOfWeek, selection, }: {
|
|
23
|
+
padDates: 'before' | 'after';
|
|
24
|
+
baseDate: Date;
|
|
25
|
+
startOfWeek: DayIndex;
|
|
26
|
+
selection: null | [Date, Date];
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export declare function getCalendarMonthWithSixRows(date: Date, { startOfWeek, padDates }: {
|
|
30
|
+
startOfWeek: DayIndex;
|
|
31
|
+
padDates: 'before' | 'after';
|
|
32
|
+
}): Date[][];
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/date-time/calendar.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,CAKpD;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,aAAa;IACxB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAER,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;QAC7B,QAAQ,EAAE,IAAI,CAAC;QACf,WAAW,EAAE,QAAQ,CAAC;QACtB,SAAS,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAChC;CAwEF;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,IAAI,EACV,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;IAAE,WAAW,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,YAQnF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import addMonths from 'date-fns/addMonths';
|
|
4
|
+
import isAfter from 'date-fns/isAfter';
|
|
5
|
+
import isBefore from 'date-fns/isBefore';
|
|
6
|
+
import isSameDay from 'date-fns/isSameDay';
|
|
7
|
+
import isSameMonth from 'date-fns/isSameMonth';
|
|
8
|
+
import subMonths from 'date-fns/subMonths';
|
|
9
|
+
import { getCalendarMonth } from 'mnth';
|
|
10
|
+
// Returns a 3-by-4 matrix with dates corresponding to the initial date-time of each month of the year for a given date.
|
|
11
|
+
export function getCalendarYear(date) {
|
|
12
|
+
const year = date.getFullYear();
|
|
13
|
+
return new Array(4)
|
|
14
|
+
.fill(0)
|
|
15
|
+
.map((_, i) => new Array(3).fill(0).map((_, j) => new Date(year, i * 3 + j)));
|
|
16
|
+
}
|
|
17
|
+
export class MonthCalendar {
|
|
18
|
+
constructor({ padDates, baseDate, startOfWeek, selection, }) {
|
|
19
|
+
this.padDates = padDates;
|
|
20
|
+
this.weeks = [];
|
|
21
|
+
this.range = [baseDate, baseDate];
|
|
22
|
+
const allCalendarDates = getCalendarMonthWithSixRows(baseDate, { startOfWeek, padDates });
|
|
23
|
+
this.weekdays = allCalendarDates[0].map(date => date.getDay());
|
|
24
|
+
const isDateVisible = (weekIndex, dayIndex) => {
|
|
25
|
+
const week = allCalendarDates[weekIndex];
|
|
26
|
+
const date = week === null || week === void 0 ? void 0 : week[dayIndex];
|
|
27
|
+
if (!date) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
switch (padDates) {
|
|
31
|
+
case 'before':
|
|
32
|
+
return isSameMonth(date, baseDate) || isBefore(date, baseDate);
|
|
33
|
+
case 'after':
|
|
34
|
+
return isSameMonth(date, baseDate) || isAfter(date, baseDate);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const isDateInRange = (weekIndex, dayIndex) => {
|
|
38
|
+
const week = allCalendarDates[weekIndex];
|
|
39
|
+
const date = week === null || week === void 0 ? void 0 : week[dayIndex];
|
|
40
|
+
return !!(date && selection && checkIsInRange(date, selection[0], selection[1]));
|
|
41
|
+
};
|
|
42
|
+
// The test index is only set for weeks that have at least one day that belongs to the current month.
|
|
43
|
+
// It starts from the first such week and counts from 1.
|
|
44
|
+
const getWeekTestIndex = (weekIndex) => {
|
|
45
|
+
var _a;
|
|
46
|
+
const week = allCalendarDates[weekIndex];
|
|
47
|
+
if (!week) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
if (!isSameMonth(week[0], baseDate) && !isSameMonth(week[week.length - 1], baseDate)) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return ((_a = getWeekTestIndex(weekIndex - 1)) !== null && _a !== void 0 ? _a : 0) + 1;
|
|
54
|
+
};
|
|
55
|
+
for (let weekIndex = 0; weekIndex < allCalendarDates.length; weekIndex++) {
|
|
56
|
+
const daysOfWeek = allCalendarDates[weekIndex];
|
|
57
|
+
const week = { days: [], testIndex: getWeekTestIndex(weekIndex) };
|
|
58
|
+
for (let dayIndex = 0; dayIndex < daysOfWeek.length; dayIndex++) {
|
|
59
|
+
const date = daysOfWeek[dayIndex];
|
|
60
|
+
const isVisible = isDateVisible(weekIndex, dayIndex);
|
|
61
|
+
const isSelected = !!(selection && (isSameDay(date, selection[0]) || isSameDay(date, selection[1])));
|
|
62
|
+
const isInRange = isDateInRange(weekIndex, dayIndex);
|
|
63
|
+
const isTop = isVisible && !isDateVisible(weekIndex - 1, dayIndex);
|
|
64
|
+
const isBottom = isVisible && !isDateVisible(weekIndex + 1, dayIndex);
|
|
65
|
+
const isLeft = isVisible && !isDateVisible(weekIndex, dayIndex - 1);
|
|
66
|
+
const isRight = isVisible && !isDateVisible(weekIndex, dayIndex + 1);
|
|
67
|
+
const isRangeTop = isInRange && !isDateInRange(weekIndex - 1, dayIndex);
|
|
68
|
+
const isRangeBottom = isInRange && !isDateInRange(weekIndex + 1, dayIndex);
|
|
69
|
+
const isRangeLeft = isInRange && !isDateInRange(weekIndex, dayIndex - 1);
|
|
70
|
+
const isRangeRight = isInRange && !isDateInRange(weekIndex, dayIndex + 1);
|
|
71
|
+
week.days.push({
|
|
72
|
+
date,
|
|
73
|
+
isVisible,
|
|
74
|
+
isSelected,
|
|
75
|
+
isInRange,
|
|
76
|
+
isSelectionTop: isTop || isRangeTop,
|
|
77
|
+
isSelectionBottom: isBottom || isRangeBottom,
|
|
78
|
+
isSelectionLeft: isLeft || isRangeLeft,
|
|
79
|
+
isSelectionRight: isRight || isRangeRight,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
this.weeks.push(week);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function getCalendarMonthWithSixRows(date, { startOfWeek, padDates }) {
|
|
87
|
+
switch (padDates) {
|
|
88
|
+
case 'before':
|
|
89
|
+
return [...getPrevMonthRows(date, startOfWeek), ...getCurrentMonthRows(date, startOfWeek)].slice(-6);
|
|
90
|
+
case 'after':
|
|
91
|
+
return [...getCurrentMonthRows(date, startOfWeek), ...getNextMonthRows(date, startOfWeek)].slice(0, 6);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function checkIsInRange(date, dateOne, dateTwo) {
|
|
95
|
+
if (!dateOne || !dateTwo || isSameDay(dateOne, dateTwo)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const inRange = (isAfter(date, dateOne) && isBefore(date, dateTwo)) || (isAfter(date, dateTwo) && isBefore(date, dateOne));
|
|
99
|
+
return inRange || isSameDay(date, dateOne) || isSameDay(date, dateTwo);
|
|
100
|
+
}
|
|
101
|
+
function getCurrentMonthRows(date, firstDayOfWeek) {
|
|
102
|
+
return getCalendarMonth(date, { firstDayOfWeek });
|
|
103
|
+
}
|
|
104
|
+
function getPrevMonthRows(date, firstDayOfWeek) {
|
|
105
|
+
const rows = getCalendarMonth(subMonths(date, 1), { firstDayOfWeek });
|
|
106
|
+
const lastDay = rows[rows.length - 1][rows[rows.length - 1].length - 1];
|
|
107
|
+
return !isSameMonth(date, lastDay) ? rows : rows.slice(0, -1);
|
|
108
|
+
}
|
|
109
|
+
function getNextMonthRows(date, firstDayOfWeek) {
|
|
110
|
+
const rows = getCalendarMonth(addMonths(date, 1), { firstDayOfWeek });
|
|
111
|
+
const firstDay = rows[0][0];
|
|
112
|
+
return !isSameMonth(date, firstDay) ? rows : rows.slice(1);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../../../src/internal/utils/date-time/calendar.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport addMonths from 'date-fns/addMonths';\nimport isAfter from 'date-fns/isAfter';\nimport isBefore from 'date-fns/isBefore';\nimport isSameDay from 'date-fns/isSameDay';\nimport isSameMonth from 'date-fns/isSameMonth';\nimport subMonths from 'date-fns/subMonths';\nimport { getCalendarMonth } from 'mnth';\n\nimport { DayIndex } from '../locale';\n\n// Returns a 3-by-4 matrix with dates corresponding to the initial date-time of each month of the year for a given date.\nexport function getCalendarYear(date: Date): Date[][] {\n const year = date.getFullYear();\n return new Array(4)\n .fill(0)\n .map((_, i: number) => new Array(3).fill(0).map((_, j: number) => new Date(year, i * 3 + j)));\n}\n\ninterface CalendarWeek {\n days: CalendarDate[];\n testIndex?: number;\n}\n\ninterface CalendarDate {\n date: Date;\n isVisible: boolean;\n isSelected: boolean;\n isInRange: boolean;\n isSelectionTop: boolean;\n isSelectionBottom: boolean;\n isSelectionLeft: boolean;\n isSelectionRight: boolean;\n}\n\nexport class MonthCalendar {\n padDates: 'before' | 'after';\n weekdays: number[];\n weeks: CalendarWeek[];\n range: [Date, Date];\n\n constructor({\n padDates,\n baseDate,\n startOfWeek,\n selection,\n }: {\n padDates: 'before' | 'after';\n baseDate: Date;\n startOfWeek: DayIndex;\n selection: null | [Date, Date];\n }) {\n this.padDates = padDates;\n this.weeks = [];\n this.range = [baseDate, baseDate];\n\n const allCalendarDates = getCalendarMonthWithSixRows(baseDate, { startOfWeek, padDates });\n this.weekdays = allCalendarDates[0].map(date => date.getDay());\n\n const isDateVisible = (weekIndex: number, dayIndex: number) => {\n const week = allCalendarDates[weekIndex];\n const date = week?.[dayIndex];\n if (!date) {\n return false;\n }\n switch (padDates) {\n case 'before':\n return isSameMonth(date, baseDate) || isBefore(date, baseDate);\n case 'after':\n return isSameMonth(date, baseDate) || isAfter(date, baseDate);\n }\n };\n\n const isDateInRange = (weekIndex: number, dayIndex: number) => {\n const week = allCalendarDates[weekIndex];\n const date = week?.[dayIndex];\n return !!(date && selection && checkIsInRange(date, selection[0], selection[1]));\n };\n\n // The test index is only set for weeks that have at least one day that belongs to the current month.\n // It starts from the first such week and counts from 1.\n const getWeekTestIndex = (weekIndex: number): undefined | number => {\n const week = allCalendarDates[weekIndex];\n if (!week) {\n return undefined;\n }\n if (!isSameMonth(week[0], baseDate) && !isSameMonth(week[week.length - 1], baseDate)) {\n return undefined;\n }\n return (getWeekTestIndex(weekIndex - 1) ?? 0) + 1;\n };\n\n for (let weekIndex = 0; weekIndex < allCalendarDates.length; weekIndex++) {\n const daysOfWeek = allCalendarDates[weekIndex];\n const week: CalendarWeek = { days: [], testIndex: getWeekTestIndex(weekIndex) };\n\n for (let dayIndex = 0; dayIndex < daysOfWeek.length; dayIndex++) {\n const date = daysOfWeek[dayIndex];\n const isVisible = isDateVisible(weekIndex, dayIndex);\n const isSelected = !!(selection && (isSameDay(date, selection[0]) || isSameDay(date, selection[1])));\n const isInRange = isDateInRange(weekIndex, dayIndex);\n const isTop = isVisible && !isDateVisible(weekIndex - 1, dayIndex);\n const isBottom = isVisible && !isDateVisible(weekIndex + 1, dayIndex);\n const isLeft = isVisible && !isDateVisible(weekIndex, dayIndex - 1);\n const isRight = isVisible && !isDateVisible(weekIndex, dayIndex + 1);\n const isRangeTop = isInRange && !isDateInRange(weekIndex - 1, dayIndex);\n const isRangeBottom = isInRange && !isDateInRange(weekIndex + 1, dayIndex);\n const isRangeLeft = isInRange && !isDateInRange(weekIndex, dayIndex - 1);\n const isRangeRight = isInRange && !isDateInRange(weekIndex, dayIndex + 1);\n week.days.push({\n date,\n isVisible,\n isSelected,\n isInRange,\n isSelectionTop: isTop || isRangeTop,\n isSelectionBottom: isBottom || isRangeBottom,\n isSelectionLeft: isLeft || isRangeLeft,\n isSelectionRight: isRight || isRangeRight,\n });\n }\n this.weeks.push(week);\n }\n }\n}\n\nexport function getCalendarMonthWithSixRows(\n date: Date,\n { startOfWeek, padDates }: { startOfWeek: DayIndex; padDates: 'before' | 'after' }\n) {\n switch (padDates) {\n case 'before':\n return [...getPrevMonthRows(date, startOfWeek), ...getCurrentMonthRows(date, startOfWeek)].slice(-6);\n case 'after':\n return [...getCurrentMonthRows(date, startOfWeek), ...getNextMonthRows(date, startOfWeek)].slice(0, 6);\n }\n}\n\nfunction checkIsInRange(date: Date, dateOne: Date | null, dateTwo: Date | null) {\n if (!dateOne || !dateTwo || isSameDay(dateOne, dateTwo)) {\n return false;\n }\n\n const inRange =\n (isAfter(date, dateOne) && isBefore(date, dateTwo)) || (isAfter(date, dateTwo) && isBefore(date, dateOne));\n\n return inRange || isSameDay(date, dateOne) || isSameDay(date, dateTwo);\n}\n\nfunction getCurrentMonthRows(date: Date, firstDayOfWeek: DayIndex) {\n return getCalendarMonth(date, { firstDayOfWeek });\n}\n\nfunction getPrevMonthRows(date: Date, firstDayOfWeek: DayIndex) {\n const rows = getCalendarMonth(subMonths(date, 1), { firstDayOfWeek });\n const lastDay = rows[rows.length - 1][rows[rows.length - 1].length - 1];\n return !isSameMonth(date, lastDay) ? rows : rows.slice(0, -1);\n}\n\nfunction getNextMonthRows(date: Date, firstDayOfWeek: DayIndex) {\n const rows = getCalendarMonth(addMonths(date, 1), { firstDayOfWeek });\n const firstDay = rows[0][0];\n return !isSameMonth(date, firstDay) ? rows : rows.slice(1);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { mergeLocales } from './merge-locales';
|
|
2
2
|
export { normalizeLocale } from './normalize-locale';
|
|
3
|
-
export { normalizeStartOfWeek } from './normalize-start-of-week';
|
|
3
|
+
export { normalizeStartOfWeek, DayIndex } from './normalize-start-of-week';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAY,MAAM,2BAA2B,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nexport { mergeLocales } from './merge-locales';\nexport { normalizeLocale } from './normalize-locale';\nexport { normalizeStartOfWeek, DayIndex } from './normalize-start-of-week';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-start-of-week.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/normalize-start-of-week.ts"],"names":[],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"normalize-start-of-week.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/normalize-start-of-week.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,YAEnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-start-of-week.js","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/normalize-start-of-week.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAIjD,MAAM,UAAU,oBAAoB,CAAC,WAA+B,EAAE,MAAc;IAClF,OAAO,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAa,CAAC;AACxG,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getWeekStartByLocale } from 'weekstart';\n\
|
|
1
|
+
{"version":3,"file":"normalize-start-of-week.js","sourceRoot":"","sources":["../../../../../src/internal/utils/locale/normalize-start-of-week.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAIjD,MAAM,UAAU,oBAAoB,CAAC,WAA+B,EAAE,MAAc;IAClF,OAAO,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAa,CAAC;AACxG,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getWeekStartByLocale } from 'weekstart';\n\nexport type DayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport function normalizeStartOfWeek(startOfWeek: number | undefined, locale: string) {\n return (typeof startOfWeek === 'number' ? startOfWeek % 7 : getWeekStartByLocale(locale)) as DayIndex;\n}\n"]}
|
package/package.json
CHANGED
package/popover/container.d.ts
CHANGED
|
@@ -25,7 +25,8 @@ interface PopoverContainerProps {
|
|
|
25
25
|
allowScrollToFit?: boolean;
|
|
26
26
|
allowVerticalOverflow?: boolean;
|
|
27
27
|
hideOnOverscroll?: boolean;
|
|
28
|
+
className?: string;
|
|
28
29
|
}
|
|
29
|
-
export default function PopoverContainer({ position, trackRef, trackKey, arrow, children, zIndex, renderWithPortal, size, fixedWidth, variant, keepPosition, allowScrollToFit, allowVerticalOverflow, hideOnOverscroll, }: PopoverContainerProps): JSX.Element | null;
|
|
30
|
+
export default function PopoverContainer({ position, trackRef, trackKey, arrow, children, zIndex, renderWithPortal, size, fixedWidth, variant, keepPosition, allowScrollToFit, allowVerticalOverflow, hideOnOverscroll, className, }: PopoverContainerProps): JSX.Element | null;
|
|
30
31
|
export {};
|
|
31
32
|
//# sourceMappingURL=container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/popover/container.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAOvD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK9D,UAAU,qBAAqB;IAC7B,kEAAkE;IAClE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IACpD;;;;;;;;MAQE;IACF,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC,IAAI,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,gBAAgB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/popover/container.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAOvD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK9D,UAAU,qBAAqB;IAC7B,kEAAkE;IAClE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IACpD;;;;;;;;MAQE;IACF,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC,IAAI,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,GACV,EAAE,qBAAqB,sBAiGvB"}
|
package/popover/container.js
CHANGED
|
@@ -7,7 +7,7 @@ import { useResizeObserver } from '@cloudscape-design/component-toolkit/internal
|
|
|
7
7
|
import { useVisualRefresh } from '../internal/hooks/use-visual-mode';
|
|
8
8
|
import usePopoverPosition from './use-popover-position.js';
|
|
9
9
|
import styles from './styles.css.js';
|
|
10
|
-
export default function PopoverContainer({ position, trackRef, trackKey, arrow, children, zIndex, renderWithPortal, size, fixedWidth, variant, keepPosition, allowScrollToFit, allowVerticalOverflow, hideOnOverscroll, }) {
|
|
10
|
+
export default function PopoverContainer({ position, trackRef, trackKey, arrow, children, zIndex, renderWithPortal, size, fixedWidth, variant, keepPosition, allowScrollToFit, allowVerticalOverflow, hideOnOverscroll, className, }) {
|
|
11
11
|
const bodyRef = useRef(null);
|
|
12
12
|
const contentRef = useRef(null);
|
|
13
13
|
const popoverRef = useRef(null);
|
|
@@ -66,7 +66,7 @@ export default function PopoverContainer({ position, trackRef, trackKey, arrow,
|
|
|
66
66
|
controller.abort();
|
|
67
67
|
};
|
|
68
68
|
}, [hideOnOverscroll, keepPosition, positionHandlerRef, trackRef, updatePositionHandler]);
|
|
69
|
-
return isOverscrolling ? null : (React.createElement("div", { ref: popoverRef, style: Object.assign(Object.assign({}, popoverStyle), { zIndex }), className: clsx(styles.container, isRefresh && styles.refresh) },
|
|
69
|
+
return isOverscrolling ? null : (React.createElement("div", { ref: popoverRef, style: Object.assign(Object.assign({}, popoverStyle), { zIndex }), className: clsx(styles.container, isRefresh && styles.refresh, className) },
|
|
70
70
|
React.createElement("div", { ref: arrowRef, className: clsx(styles[`container-arrow`], styles[`container-arrow-position-${internalPosition}`]), "aria-hidden": true }, arrow(internalPosition)),
|
|
71
71
|
React.createElement("div", { ref: bodyRef, className: clsx(styles['container-body'], styles[`container-body-size-${size}`], {
|
|
72
72
|
[styles['fixed-width']]: fixedWidth,
|
package/popover/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/popover/container.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAE3D,OAAO,MAAM,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/popover/container.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useLayoutEffect, useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { nodeContains } from '@cloudscape-design/component-toolkit/dom';\nimport { useResizeObserver } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport { InternalPosition, PopoverProps } from './interfaces';\nimport usePopoverPosition from './use-popover-position.js';\n\nimport styles from './styles.css.js';\n\ninterface PopoverContainerProps {\n /** References the element the container is positioned against. */\n trackRef: React.RefObject<HTMLElement | SVGElement>;\n /**\n Used to update the container position in case track or track position changes:\n \n const trackRef = useRef<Element>(null)\n return (<>\n <Track style={getPosition(selectedItemId)} ref={trackRef} />\n <PopoverContainer trackRef={trackRef} trackKey={selectedItemId} .../>\n </>)\n */\n trackKey?: string | number;\n position: PopoverProps.Position;\n zIndex?: React.CSSProperties['zIndex'];\n arrow: (position: InternalPosition | null) => React.ReactNode;\n children: React.ReactNode;\n renderWithPortal?: boolean;\n size: PopoverProps.Size | 'content';\n fixedWidth: boolean;\n variant?: 'annotation';\n // When keepPosition is true, the popover will not recalculate its position when it resizes nor when it receives clicks.\n keepPosition?: boolean;\n // When allowScrollToFit is true, we will scroll to the the popover if it overflows the viewport even when choosing the best possible position for it.\n // Do not use this if the popover is open on hover, in order to avoid unexpected movement.\n allowScrollToFit?: boolean;\n allowVerticalOverflow?: boolean;\n // Whether the popover should be hidden when the trigger is scrolled away.\n hideOnOverscroll?: boolean;\n className?: string;\n}\n\nexport default function PopoverContainer({\n position,\n trackRef,\n trackKey,\n arrow,\n children,\n zIndex,\n renderWithPortal,\n size,\n fixedWidth,\n variant,\n keepPosition,\n allowScrollToFit,\n allowVerticalOverflow,\n hideOnOverscroll,\n className,\n}: PopoverContainerProps) {\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const arrowRef = useRef<HTMLDivElement | null>(null);\n\n const isRefresh = useVisualRefresh();\n\n // Updates the position handler.\n const { updatePositionHandler, popoverStyle, internalPosition, positionHandlerRef, isOverscrolling } =\n usePopoverPosition({\n popoverRef,\n bodyRef,\n arrowRef,\n trackRef,\n contentRef,\n allowScrollToFit,\n allowVerticalOverflow,\n preferredPosition: position,\n renderWithPortal,\n keepPosition,\n hideOnOverscroll,\n });\n\n // Recalculate position when properties change.\n useLayoutEffect(() => {\n updatePositionHandler();\n }, [updatePositionHandler, trackKey]);\n\n // Recalculate position when content size changes.\n useResizeObserver(contentRef, () => {\n updatePositionHandler(true);\n });\n\n // Recalculate position on DOM events.\n useLayoutEffect(() => {\n /*\n This is a heuristic. Some layout changes are caused by user clicks (e.g. toggling the tools panel, submitting a form),\n and by tracking the click event we can adapt the popover's position to the new layout.\n\n TODO: extend this to Enter and Spacebar?\n */\n\n const onClick = (event: UIEvent | KeyboardEvent) => {\n if (\n // Do not update position if keepPosition is true.\n keepPosition ||\n // If the click was on the trigger, this will make the popover appear or disappear,\n // so no need to update its position either in this case.\n nodeContains(trackRef.current, event.target)\n ) {\n return;\n }\n\n requestAnimationFrame(() => {\n updatePositionHandler();\n });\n };\n\n const updatePositionOnResize = () => requestAnimationFrame(() => updatePositionHandler());\n const refreshPosition = () => requestAnimationFrame(() => positionHandlerRef.current());\n const controller = new AbortController();\n\n window.addEventListener('click', onClick, { signal: controller.signal });\n window.addEventListener('resize', updatePositionOnResize, { signal: controller.signal });\n window.addEventListener('scroll', refreshPosition, { capture: true, signal: controller.signal });\n\n return () => {\n controller.abort();\n };\n }, [hideOnOverscroll, keepPosition, positionHandlerRef, trackRef, updatePositionHandler]);\n\n return isOverscrolling ? null : (\n <div\n ref={popoverRef}\n style={{ ...popoverStyle, zIndex }}\n className={clsx(styles.container, isRefresh && styles.refresh, className)}\n >\n <div\n ref={arrowRef}\n className={clsx(styles[`container-arrow`], styles[`container-arrow-position-${internalPosition}`])}\n aria-hidden={true}\n >\n {arrow(internalPosition)}\n </div>\n\n <div\n ref={bodyRef}\n className={clsx(styles['container-body'], styles[`container-body-size-${size}`], {\n [styles['fixed-width']]: fixedWidth,\n [styles[`container-body-variant-${variant}`]]: variant,\n })}\n >\n <div ref={contentRef}>{children}</div>\n </div>\n </div>\n );\n}\n"]}
|