@charcoal-ui/react 4.0.0-beta.6 → 4.0.0-beta.7
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/_lib/createDivComponent.d.ts +4 -0
- package/dist/_lib/createDivComponent.d.ts.map +1 -0
- package/dist/components/Modal/ModalPlumbing.d.ts.map +1 -1
- package/dist/components/TextArea/index.d.ts +1 -0
- package/dist/components/TextArea/index.d.ts.map +1 -1
- package/dist/components/TextField/AssistiveText/index.d.ts +5 -0
- package/dist/components/TextField/AssistiveText/index.d.ts.map +1 -0
- package/dist/components/TextField/index.d.ts +1 -3
- package/dist/components/TextField/index.d.ts.map +1 -1
- package/dist/index.cjs.js +209 -239
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +156 -0
- package/dist/index.css.map +1 -1
- package/dist/index.esm.js +127 -157
- package/dist/index.esm.js.map +1 -1
- package/package.json +8 -8
- package/src/_lib/createDivComponent.tsx +11 -0
- package/src/components/DropdownSelector/__snapshots__/index.story.storyshot +8 -20
- package/src/components/DropdownSelector/index.tsx +2 -2
- package/src/components/Modal/ModalPlumbing.tsx +2 -11
- package/src/components/Modal/__snapshots__/index.story.storyshot +84 -276
- package/src/components/TextArea/__snapshots__/TextArea.story.storyshot +141 -813
- package/src/components/TextArea/index.css +78 -0
- package/src/components/TextArea/index.tsx +26 -96
- package/src/components/TextField/AssistiveText/index.css +10 -0
- package/src/components/TextField/AssistiveText/index.tsx +6 -0
- package/src/components/TextField/__snapshots__/TextField.story.storyshot +109 -1059
- package/src/components/TextField/index.css +87 -0
- package/src/components/TextField/index.tsx +24 -117
package/dist/index.cjs.js
CHANGED
|
@@ -327,9 +327,8 @@ var Switch_default = (0, import_react9.memo)(Switch);
|
|
|
327
327
|
|
|
328
328
|
// src/components/TextField/index.tsx
|
|
329
329
|
var import_visually_hidden = require("@react-aria/visually-hidden");
|
|
330
|
-
var
|
|
330
|
+
var import_react12 = require("react");
|
|
331
331
|
var React8 = __toESM(require("react"));
|
|
332
|
-
var import_styled_components2 = __toESM(require("styled-components"));
|
|
333
332
|
|
|
334
333
|
// src/components/FieldLabel/index.tsx
|
|
335
334
|
var React7 = __toESM(require("react"));
|
|
@@ -390,7 +389,25 @@ function useFocusWithClick(containerRef, inputRef) {
|
|
|
390
389
|
|
|
391
390
|
// src/components/TextField/index.tsx
|
|
392
391
|
var import_utils2 = require("@react-aria/utils");
|
|
392
|
+
|
|
393
|
+
// src/_lib/createDivComponent.tsx
|
|
394
|
+
var import_react11 = require("react");
|
|
393
395
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
396
|
+
function createDivComponent(mainClassName) {
|
|
397
|
+
return (0, import_react11.forwardRef)(function DivComponent({
|
|
398
|
+
className,
|
|
399
|
+
...props
|
|
400
|
+
}, ref) {
|
|
401
|
+
const classNames = useClassNames(mainClassName, className);
|
|
402
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: classNames, ref, ...props });
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// src/components/TextField/AssistiveText/index.tsx
|
|
407
|
+
var AssistiveText = createDivComponent("charcoal-text-field-assistive-text");
|
|
408
|
+
|
|
409
|
+
// src/components/TextField/index.tsx
|
|
410
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
394
411
|
var TextField = React8.forwardRef(function SingleLineTextFieldInner({
|
|
395
412
|
assistiveText,
|
|
396
413
|
className,
|
|
@@ -406,16 +423,17 @@ var TextField = React8.forwardRef(function SingleLineTextFieldInner({
|
|
|
406
423
|
subLabel,
|
|
407
424
|
suffix = null,
|
|
408
425
|
type = "text",
|
|
426
|
+
invalid,
|
|
409
427
|
value,
|
|
410
428
|
getCount = countCodePointsInString,
|
|
411
429
|
...props
|
|
412
430
|
}, forwardRef20) {
|
|
413
|
-
const inputRef = (0,
|
|
431
|
+
const inputRef = (0, import_react12.useRef)(null);
|
|
414
432
|
const {
|
|
415
433
|
visuallyHiddenProps
|
|
416
434
|
} = (0, import_visually_hidden.useVisuallyHidden)();
|
|
417
|
-
const [count, setCount] = (0,
|
|
418
|
-
const handleChange = (0,
|
|
435
|
+
const [count, setCount] = (0, import_react12.useState)(getCount(value ?? ""));
|
|
436
|
+
const handleChange = (0, import_react12.useCallback)((e) => {
|
|
419
437
|
const value2 = e.target.value;
|
|
420
438
|
const count2 = getCount(value2);
|
|
421
439
|
if (maxLength !== void 0 && count2 > maxLength) {
|
|
@@ -424,60 +442,37 @@ var TextField = React8.forwardRef(function SingleLineTextFieldInner({
|
|
|
424
442
|
setCount(count2);
|
|
425
443
|
onChange?.(value2);
|
|
426
444
|
}, [getCount, maxLength, onChange]);
|
|
427
|
-
(0,
|
|
445
|
+
(0, import_react12.useEffect)(() => {
|
|
428
446
|
setCount(getCount(value ?? ""));
|
|
429
447
|
}, [getCount, value]);
|
|
430
|
-
const containerRef = (0,
|
|
448
|
+
const containerRef = (0, import_react12.useRef)(null);
|
|
431
449
|
useFocusWithClick(containerRef, inputRef);
|
|
432
450
|
const inputId = (0, import_utils2.useId)(props.id);
|
|
433
451
|
const describedbyId = (0, import_utils2.useId)();
|
|
434
452
|
const labelledbyId = (0, import_utils2.useId)();
|
|
435
453
|
const showAssistiveText = assistiveText != null && assistiveText.length !== 0;
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
/* @__PURE__ */ (0,
|
|
439
|
-
|
|
440
|
-
/* @__PURE__ */ (0,
|
|
441
|
-
|
|
454
|
+
const classNames = useClassNames("charcoal-text-field-root");
|
|
455
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: classNames, "aria-disabled": disabled, children: [
|
|
456
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FieldLabel_default, { htmlFor: inputId, id: labelledbyId, label, required, requiredText, subLabel, ...!showLabel ? visuallyHiddenProps : {} }),
|
|
457
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "charcoal-text-field-container", "aria-disabled": disabled === true ? true : void 0, "data-invalid": invalid === true, ref: containerRef, children: [
|
|
458
|
+
prefix && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "charcoal-text-field-prefix", children: prefix }),
|
|
459
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", { className: "charcoal-text-field-input", "aria-describedby": showAssistiveText ? describedbyId : void 0, "aria-invalid": invalid, "aria-labelledby": labelledbyId, id: inputId, "data-invalid": invalid === true, maxLength, onChange: handleChange, disabled, ref: (0, import_utils2.mergeRefs)(forwardRef20, inputRef), type, value, ...props }),
|
|
460
|
+
(suffix || showCount) && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "charcoal-text-field-suffix", children: [
|
|
442
461
|
suffix,
|
|
443
|
-
showCount && /* @__PURE__ */ (0,
|
|
462
|
+
showCount && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "charcoal-text-field-line-counter", children: maxLength !== void 0 ? `${count}/${maxLength}` : count })
|
|
444
463
|
] })
|
|
445
464
|
] }),
|
|
446
|
-
showAssistiveText && /* @__PURE__ */ (0,
|
|
465
|
+
showAssistiveText && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(AssistiveText, { "data-invalid": invalid === true, id: describedbyId, children: assistiveText })
|
|
447
466
|
] });
|
|
448
467
|
});
|
|
449
468
|
var TextField_default = TextField;
|
|
450
|
-
var TextFieldRoot = import_styled_components2.default.div.withConfig({
|
|
451
|
-
componentId: "ccl__sc-3dd0tt-0"
|
|
452
|
-
})(["display:grid;grid-template-columns:1fr;grid-gap:4px;", ""], (p) => p.isDisabled && {
|
|
453
|
-
opacity: p.theme.elementEffect.disabled.opacity
|
|
454
|
-
});
|
|
455
|
-
var StyledInputContainer = import_styled_components2.default.div.withConfig({
|
|
456
|
-
componentId: "ccl__sc-3dd0tt-1"
|
|
457
|
-
})(["display:grid;grid-template-columns:", ";height:40px;transition:0.2s background-color,0.2s box-shadow;color:var(--charcoal-text2);background-color:var(--charcoal-surface3);border-radius:4px;gap:4px;padding:0 8px;line-height:22px;font-size:14px;:not(:disabled):not([aria-disabled]):hover,[aria-disabled='false']:hover{background-color:var(--charcoal-surface3-hover);}:focus-within{outline:none;box-shadow:0 0 0 4px ", ";}", ""], (p) => [p.hasPrefix && "auto", "1fr", p.hasSuffix && "auto"].filter(Boolean).join(" "), (p) => p.invalid ? `rgba(255,43,0,0.32)` : `rgba(0, 150, 250, 0.32);`, (p) => p.invalid && (0, import_styled_components2.css)(["box-shadow:0 0 0 4px rgba(255,43,0,0.32);"]));
|
|
458
|
-
var PrefixContainer = import_styled_components2.default.div.withConfig({
|
|
459
|
-
componentId: "ccl__sc-3dd0tt-2"
|
|
460
|
-
})(["display:flex;align-items:center;"]);
|
|
461
|
-
var SuffixContainer = import_styled_components2.default.span.withConfig({
|
|
462
|
-
componentId: "ccl__sc-3dd0tt-3"
|
|
463
|
-
})(["display:flex;align-items:center;gap:8px;"]);
|
|
464
|
-
var StyledInput = import_styled_components2.default.input.withConfig({
|
|
465
|
-
componentId: "ccl__sc-3dd0tt-4"
|
|
466
|
-
})(["border:none;box-sizing:border-box;outline:none;font-family:inherit;transform-origin:top left;transform:scale(0.875);width:calc(100% / 0.875);height:calc(100% / 0.875);font-size:calc(14px / 0.875);line-height:calc(22px / 0.875);padding-left:0;padding-right:0;border-radius:calc(4px / 0.875);appearance:none;background:transparent;color:var(--charcoal-text2);&::placeholder{color:var(--charcoal-text3);}"]);
|
|
467
|
-
var SingleLineCounter = import_styled_components2.default.span.withConfig({
|
|
468
|
-
componentId: "ccl__sc-3dd0tt-5"
|
|
469
|
-
})(["line-height:22px;font-size:14px;color:var(--charcoal-text3);"]);
|
|
470
|
-
var AssistiveText = import_styled_components2.default.p.withConfig({
|
|
471
|
-
componentId: "ccl__sc-3dd0tt-6"
|
|
472
|
-
})(["font-size:14px;line-height:22px;margin:0;color:", ";"], (p) => `var(--charcoal-${p.invalid ? `assertive` : `text2`})`);
|
|
473
469
|
|
|
474
470
|
// src/components/TextArea/index.tsx
|
|
475
471
|
var import_visually_hidden2 = require("@react-aria/visually-hidden");
|
|
476
|
-
var
|
|
477
|
-
var import_styled_components3 = __toESM(require("styled-components"));
|
|
472
|
+
var import_react13 = require("react");
|
|
478
473
|
var import_utils3 = require("@react-aria/utils");
|
|
479
|
-
var
|
|
480
|
-
var TextArea = (0,
|
|
474
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
475
|
+
var TextArea = (0, import_react13.forwardRef)(function TextAreaInner({
|
|
481
476
|
onChange,
|
|
482
477
|
className,
|
|
483
478
|
value,
|
|
@@ -492,23 +487,23 @@ var TextArea = (0, import_react12.forwardRef)(function TextAreaInner({
|
|
|
492
487
|
maxLength,
|
|
493
488
|
autoHeight = false,
|
|
494
489
|
rows: initialRows = 4,
|
|
490
|
+
invalid,
|
|
495
491
|
getCount = countCodePointsInString,
|
|
496
492
|
...props
|
|
497
493
|
}, forwardRef20) {
|
|
498
494
|
const {
|
|
499
495
|
visuallyHiddenProps
|
|
500
496
|
} = (0, import_visually_hidden2.useVisuallyHidden)();
|
|
501
|
-
const textareaRef = (0,
|
|
502
|
-
const
|
|
503
|
-
const [
|
|
504
|
-
const
|
|
505
|
-
const syncHeight = (0, import_react12.useCallback)((textarea) => {
|
|
497
|
+
const textareaRef = (0, import_react13.useRef)(null);
|
|
498
|
+
const [count, setCount] = (0, import_react13.useState)(getCount(value ?? ""));
|
|
499
|
+
const [rows, setRows] = (0, import_react13.useState)(initialRows);
|
|
500
|
+
const syncHeight = (0, import_react13.useCallback)((textarea) => {
|
|
506
501
|
const rows2 = (`${textarea.value}
|
|
507
502
|
`.match(/\n/gu)?.length ?? 0) || 1;
|
|
508
503
|
setRows(initialRows <= rows2 ? rows2 : initialRows);
|
|
509
504
|
}, [initialRows]);
|
|
510
505
|
const nonControlled = value === void 0;
|
|
511
|
-
const handleChange = (0,
|
|
506
|
+
const handleChange = (0, import_react13.useCallback)((e) => {
|
|
512
507
|
const value2 = e.target.value;
|
|
513
508
|
const count2 = getCount(value2);
|
|
514
509
|
if (maxLength !== void 0 && count2 > maxLength) {
|
|
@@ -522,54 +517,38 @@ var TextArea = (0, import_react12.forwardRef)(function TextAreaInner({
|
|
|
522
517
|
}
|
|
523
518
|
onChange?.(value2);
|
|
524
519
|
}, [autoHeight, getCount, maxLength, nonControlled, onChange, syncHeight]);
|
|
525
|
-
(0,
|
|
520
|
+
(0, import_react13.useEffect)(() => {
|
|
526
521
|
setCount(getCount(value ?? ""));
|
|
527
522
|
}, [getCount, value]);
|
|
528
|
-
(0,
|
|
523
|
+
(0, import_react13.useEffect)(() => {
|
|
529
524
|
if (autoHeight && textareaRef.current !== null) {
|
|
530
525
|
syncHeight(textareaRef.current);
|
|
531
526
|
}
|
|
532
527
|
}, [autoHeight, syncHeight]);
|
|
533
|
-
const containerRef = (0,
|
|
534
|
-
useFocusWithClick(containerRef,
|
|
528
|
+
const containerRef = (0, import_react13.useRef)(null);
|
|
529
|
+
useFocusWithClick(containerRef, textareaRef);
|
|
535
530
|
const textAreaId = (0, import_utils3.useId)(props.id);
|
|
536
531
|
const describedbyId = (0, import_utils3.useId)();
|
|
537
532
|
const labelledbyId = (0, import_utils3.useId)();
|
|
533
|
+
const classNames = useClassNames("charcoal-text-area-root", className);
|
|
538
534
|
const showAssistiveText = assistiveText != null && assistiveText.length !== 0;
|
|
539
|
-
return /* @__PURE__ */ (0,
|
|
540
|
-
/* @__PURE__ */ (0,
|
|
541
|
-
/* @__PURE__ */ (0,
|
|
542
|
-
|
|
543
|
-
|
|
535
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: classNames, "aria-disabled": disabled, children: [
|
|
536
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(FieldLabel_default, { htmlFor: textAreaId, id: labelledbyId, label, required, requiredText, subLabel, ...!showLabel ? visuallyHiddenProps : {} }),
|
|
537
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "charcoal-text-area-container", "aria-disabled": disabled === true ? "true" : void 0, "aria-invalid": invalid === true, ref: containerRef, style: {
|
|
538
|
+
"--charcoal-text-area-rows": `${showCount ? rows + 1 : rows}`
|
|
539
|
+
}, children: [
|
|
540
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("textarea", { className: "charcoal-text-area-textarea", "aria-describedby": showAssistiveText ? describedbyId : void 0, "aria-invalid": invalid, "aria-labelledby": labelledbyId, id: textAreaId, maxLength, "data-no-bottom-padding": showCount, onChange: handleChange, ref: mergeRefs(forwardRef20, textareaRef), rows, value, disabled, ...props }),
|
|
541
|
+
showCount && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "charcoal-text-area-counter", children: maxLength !== void 0 ? `${count}/${maxLength}` : count })
|
|
544
542
|
] }),
|
|
545
|
-
showAssistiveText && /* @__PURE__ */ (0,
|
|
543
|
+
showAssistiveText && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AssistiveText, { "data-invalid": invalid === true, id: describedbyId, children: assistiveText })
|
|
546
544
|
] });
|
|
547
545
|
});
|
|
548
546
|
var TextArea_default = TextArea;
|
|
549
|
-
var TextFieldRoot2 = import_styled_components3.default.div.withConfig({
|
|
550
|
-
componentId: "ccl__sc-58waht-0"
|
|
551
|
-
})(["display:grid;grid-template-columns:1fr;grid-gap:4px;", ""], (p) => p.isDisabled && {
|
|
552
|
-
opacity: p.theme.elementEffect.disabled.opacity
|
|
553
|
-
});
|
|
554
|
-
var StyledTextareaContainer = import_styled_components3.default.div.withConfig({
|
|
555
|
-
componentId: "ccl__sc-58waht-1"
|
|
556
|
-
})(["position:relative;overflow:hidden;color:var(--charcoal-text2);background-color:var(--charcoal-surface3);border-radius:4px;transition:0.2s background-color,0.2s box-shadow;", ";:not([aria-disabled]):hover,[aria-disabled='false']:hover{background-color:var(--charcoal-surface3-hover);}:focus-within{outline:none;box-shadow:0 0 0 4px ", ";}", ""], ({
|
|
557
|
-
rows
|
|
558
|
-
}) => (0, import_styled_components3.css)(["height:calc(22px * ", " + 18px);"], rows), (p) => p.invalid ? `rgba(255,43,0,0.32)` : `rgba(0, 150, 250, 0.32);`, (p) => p.invalid && (0, import_styled_components3.css)(["box-shadow:0 0 0 4px rgba(255,43,0,0.32);"]));
|
|
559
|
-
var StyledTextarea = import_styled_components3.default.textarea.withConfig({
|
|
560
|
-
componentId: "ccl__sc-58waht-2"
|
|
561
|
-
})(["border:none;outline:none;resize:none;font-family:inherit;color:inherit;box-sizing:border-box;transform-origin:top left;transform:scale(0.875);width:calc(100% / 0.875);font-size:calc(14px / 0.875);line-height:calc(22px / 0.875);padding:calc(9px / 0.875) calc(8px / 0.875) ", ";", ";appearance:none;background:none;&::placeholder{color:var(--charcoal-text3);}"], (p) => p.noBottomPadding ? 0 : "", ({
|
|
562
|
-
rows = 1,
|
|
563
|
-
noBottomPadding
|
|
564
|
-
}) => (0, import_styled_components3.css)(["height:calc(22px / 0.875 * ", " + ", "px);"], rows, noBottomPadding ? 9 : 20));
|
|
565
|
-
var MultiLineCounter = import_styled_components3.default.span.withConfig({
|
|
566
|
-
componentId: "ccl__sc-58waht-3"
|
|
567
|
-
})(["position:absolute;bottom:9px;right:8px;line-height:22px;font-size:14px;color:var(--charcoal-text3);"]);
|
|
568
547
|
|
|
569
548
|
// src/components/Icon/index.tsx
|
|
570
549
|
var React9 = __toESM(require("react"));
|
|
571
550
|
var import_icons = require("@charcoal-ui/icons");
|
|
572
|
-
var
|
|
551
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
573
552
|
var Icon = React9.forwardRef(function IconInner({
|
|
574
553
|
name,
|
|
575
554
|
scale,
|
|
@@ -577,22 +556,22 @@ var Icon = React9.forwardRef(function IconInner({
|
|
|
577
556
|
className,
|
|
578
557
|
...rest
|
|
579
558
|
}, ref) {
|
|
580
|
-
return /* @__PURE__ */ (0,
|
|
559
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("pixiv-icon", { ref, name, scale, "unsafe-non-guideline-scale": unsafeNonGuidelineScale, class: className, ...rest });
|
|
581
560
|
});
|
|
582
561
|
var Icon_default = Icon;
|
|
583
562
|
|
|
584
563
|
// src/components/Modal/index.tsx
|
|
585
|
-
var
|
|
564
|
+
var import_react16 = require("react");
|
|
586
565
|
var React13 = __toESM(require("react"));
|
|
587
566
|
var import_overlays3 = require("@react-aria/overlays");
|
|
588
|
-
var
|
|
567
|
+
var import_styled_components2 = require("styled-components");
|
|
589
568
|
var import_utils4 = require("@charcoal-ui/utils");
|
|
590
569
|
var import_styled2 = require("@charcoal-ui/styled");
|
|
591
570
|
var import_react_spring = require("react-spring");
|
|
592
571
|
var import_utils5 = require("@react-aria/utils");
|
|
593
572
|
|
|
594
573
|
// src/components/Modal/Dialog/index.tsx
|
|
595
|
-
var
|
|
574
|
+
var import_react14 = require("react");
|
|
596
575
|
var import_dialog = require("@react-aria/dialog");
|
|
597
576
|
|
|
598
577
|
// src/_lib/useForwardedRef.tsx
|
|
@@ -612,11 +591,11 @@ function useForwardedRef(ref) {
|
|
|
612
591
|
}
|
|
613
592
|
|
|
614
593
|
// src/components/Modal/Dialog/index.tsx
|
|
615
|
-
var
|
|
616
|
-
var Dialog = (0,
|
|
594
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
595
|
+
var Dialog = (0, import_react14.forwardRef)(function Dialog2({
|
|
617
596
|
size,
|
|
618
597
|
bottomSheet,
|
|
619
|
-
css:
|
|
598
|
+
css: css2,
|
|
620
599
|
className,
|
|
621
600
|
...props
|
|
622
601
|
}, forwardRef20) {
|
|
@@ -627,7 +606,7 @@ var Dialog = (0, import_react13.forwardRef)(function Dialog2({
|
|
|
627
606
|
role: "dialog"
|
|
628
607
|
}, ref);
|
|
629
608
|
const classNames = useClassNames("charcoal-modal-dialog", className);
|
|
630
|
-
return /* @__PURE__ */ (0,
|
|
609
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: classNames, role: dialogProps.role, "data-bottom-sheet": bottomSheet, tabIndex: dialogProps.tabIndex, "aria-labelledby": dialogProps["aria-labelledby"], onBlur: dialogProps.onBlur, ref, ...props });
|
|
631
610
|
});
|
|
632
611
|
|
|
633
612
|
// src/components/Modal/ModalBackgroundContext.tsx
|
|
@@ -639,9 +618,9 @@ var React12 = __toESM(require("react"));
|
|
|
639
618
|
var import_overlays2 = require("@react-aria/overlays");
|
|
640
619
|
|
|
641
620
|
// src/components/DropdownSelector/Popover/usePreventScroll.tsx
|
|
642
|
-
var
|
|
621
|
+
var import_react15 = require("react");
|
|
643
622
|
function usePreventScroll(element, isOpen) {
|
|
644
|
-
(0,
|
|
623
|
+
(0, import_react15.useEffect)(() => {
|
|
645
624
|
if (isOpen && element) {
|
|
646
625
|
const defaultPaddingRight = element.style.paddingRight;
|
|
647
626
|
const defaultOverflow = element.style.overflow;
|
|
@@ -680,9 +659,9 @@ function useCharcoalModalOverlay(props, state, ref) {
|
|
|
680
659
|
}
|
|
681
660
|
|
|
682
661
|
// src/components/Modal/index.tsx
|
|
683
|
-
var
|
|
662
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
684
663
|
var DEFAULT_Z_INDEX = 10;
|
|
685
|
-
var Modal = (0,
|
|
664
|
+
var Modal = (0, import_react16.forwardRef)(function ModalInner({
|
|
686
665
|
children,
|
|
687
666
|
zIndex = DEFAULT_Z_INDEX,
|
|
688
667
|
portalContainer,
|
|
@@ -709,7 +688,7 @@ var Modal = (0, import_react15.forwardRef)(function ModalInner({
|
|
|
709
688
|
onClose,
|
|
710
689
|
isOpen
|
|
711
690
|
}, ref);
|
|
712
|
-
const theme = (0,
|
|
691
|
+
const theme = (0, import_styled_components2.useTheme)();
|
|
713
692
|
const isMobile = (0, import_styled2.useMedia)((0, import_utils4.maxWidth)(theme.breakpoint.screen1)) ?? false;
|
|
714
693
|
const transitionEnabled = isMobile && bottomSheet !== false;
|
|
715
694
|
const showDismiss = !isMobile || bottomSheet !== true;
|
|
@@ -748,15 +727,15 @@ var Modal = (0, import_react15.forwardRef)(function ModalInner({
|
|
|
748
727
|
backgroundColor,
|
|
749
728
|
overflow,
|
|
750
729
|
transform
|
|
751
|
-
}, item) => item && /* @__PURE__ */ (0,
|
|
730
|
+
}, item) => item && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_overlays3.Overlay, { portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_spring.animated.div, { className: "charcoal-modal-background", ref: bgRef, ...underlayProps, style: transitionEnabled ? {
|
|
752
731
|
backgroundColor,
|
|
753
732
|
overflow,
|
|
754
733
|
zIndex
|
|
755
734
|
} : {
|
|
756
735
|
zIndex
|
|
757
|
-
}, "data-bottom-sheet": bottomSheet, onClick: handleClick, children: /* @__PURE__ */ (0,
|
|
736
|
+
}, "data-bottom-sheet": bottomSheet, onClick: handleClick, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ModalBackgroundContext.Provider, { value: bgRef.current, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(AnimatedDialog, { ref, ...modalProps, style: transitionEnabled ? {
|
|
758
737
|
transform
|
|
759
|
-
} : {}, size, bottomSheet, className, children: /* @__PURE__ */ (0,
|
|
738
|
+
} : {}, size, bottomSheet, className, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(ModalContext.Provider, { value: {
|
|
760
739
|
titleProps: {},
|
|
761
740
|
title,
|
|
762
741
|
close: onClose,
|
|
@@ -764,11 +743,11 @@ var Modal = (0, import_react15.forwardRef)(function ModalInner({
|
|
|
764
743
|
bottomSheet
|
|
765
744
|
}, children: [
|
|
766
745
|
children,
|
|
767
|
-
isDismissable === true && /* @__PURE__ */ (0,
|
|
746
|
+
isDismissable === true && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ModalCloseButton, { "aria-label": closeButtonAriaLabel, onClick: onClose })
|
|
768
747
|
] }) }) }) }) }));
|
|
769
748
|
});
|
|
770
749
|
var AnimatedDialog = (0, import_react_spring.animated)(Dialog);
|
|
771
|
-
var Modal_default = (0,
|
|
750
|
+
var Modal_default = (0, import_react16.memo)(Modal);
|
|
772
751
|
var ModalContext = React13.createContext({
|
|
773
752
|
titleProps: {},
|
|
774
753
|
title: "",
|
|
@@ -777,50 +756,41 @@ var ModalContext = React13.createContext({
|
|
|
777
756
|
bottomSheet: false
|
|
778
757
|
});
|
|
779
758
|
function ModalCloseButton(props) {
|
|
780
|
-
return /* @__PURE__ */ (0,
|
|
759
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(IconButton_default, { className: "charcoal-modal-close-button", size: "S", icon: "24/Close", type: "button", ...props });
|
|
781
760
|
}
|
|
782
761
|
|
|
783
762
|
// src/components/Modal/ModalPlumbing.tsx
|
|
784
|
-
var
|
|
785
|
-
var
|
|
763
|
+
var import_react17 = require("react");
|
|
764
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
786
765
|
function ModalHeader() {
|
|
787
|
-
const modalCtx = (0,
|
|
788
|
-
return /* @__PURE__ */ (0,
|
|
766
|
+
const modalCtx = (0, import_react17.useContext)(ModalContext);
|
|
767
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "charcoal-modal-header-root", "data-bottom-sheet": modalCtx.bottomSheet, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "charcoal-modal-header-title", children: modalCtx.title }) });
|
|
789
768
|
}
|
|
790
769
|
var ModalAlign = createDivComponent("charcoal-modal-align");
|
|
791
770
|
var ModalBody = createDivComponent("charcoal-modal-body");
|
|
792
771
|
var ModalButtons = createDivComponent("charcoal-modal-buttons");
|
|
793
|
-
function createDivComponent(mainClassName) {
|
|
794
|
-
return (0, import_react16.forwardRef)(function DivComponent({
|
|
795
|
-
className,
|
|
796
|
-
...props
|
|
797
|
-
}, ref) {
|
|
798
|
-
const classNames = useClassNames(mainClassName, className);
|
|
799
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: classNames, ref, ...props });
|
|
800
|
-
});
|
|
801
|
-
}
|
|
802
772
|
|
|
803
773
|
// src/components/LoadingSpinner/index.tsx
|
|
804
|
-
var
|
|
805
|
-
var
|
|
806
|
-
var LoadingSpinner = (0,
|
|
774
|
+
var import_react18 = require("react");
|
|
775
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
776
|
+
var LoadingSpinner = (0, import_react18.forwardRef)(function LoadingSpinnerInner({
|
|
807
777
|
size = 48,
|
|
808
778
|
padding = 16,
|
|
809
779
|
transparent = false,
|
|
810
780
|
...props
|
|
811
781
|
}, ref) {
|
|
812
782
|
const classNames = useClassNames("charcoal-loading-spinner", props.className);
|
|
813
|
-
return /* @__PURE__ */ (0,
|
|
783
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { role: "progressbar", style: {
|
|
814
784
|
"--charcoal-loading-spinner-size": `${size}px`,
|
|
815
785
|
"--charcoal-loading-spinner-padding": `${padding}px`
|
|
816
|
-
}, "data-transparent": transparent, className: classNames, ref, children: /* @__PURE__ */ (0,
|
|
786
|
+
}, "data-transparent": transparent, className: classNames, ref, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(LoadingSpinnerIcon, {}) });
|
|
817
787
|
});
|
|
818
|
-
var LoadingSpinner_default = (0,
|
|
819
|
-
var LoadingSpinnerIcon = (0,
|
|
788
|
+
var LoadingSpinner_default = (0, import_react18.memo)(LoadingSpinner);
|
|
789
|
+
var LoadingSpinnerIcon = (0, import_react18.forwardRef)(function LoadingSpinnerIcon2({
|
|
820
790
|
once = false
|
|
821
791
|
}, ref) {
|
|
822
|
-
const iconRef = (0,
|
|
823
|
-
(0,
|
|
792
|
+
const iconRef = (0, import_react18.useRef)(null);
|
|
793
|
+
(0, import_react18.useImperativeHandle)(ref, () => ({
|
|
824
794
|
restart: () => {
|
|
825
795
|
if (!iconRef.current) {
|
|
826
796
|
return;
|
|
@@ -830,25 +800,25 @@ var LoadingSpinnerIcon = (0, import_react17.forwardRef)(function LoadingSpinnerI
|
|
|
830
800
|
delete iconRef.current.dataset.resetAnimation;
|
|
831
801
|
}
|
|
832
802
|
}));
|
|
833
|
-
return /* @__PURE__ */ (0,
|
|
803
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { role: "presentation", ref: iconRef, "data-once": once, className: "charcoal-loading-spinner-icon" });
|
|
834
804
|
});
|
|
835
805
|
|
|
836
806
|
// src/components/DropdownSelector/index.tsx
|
|
837
|
-
var
|
|
838
|
-
var
|
|
807
|
+
var import_react23 = require("react");
|
|
808
|
+
var import_styled_components5 = __toESM(require("styled-components"));
|
|
839
809
|
var import_utils6 = require("@charcoal-ui/utils");
|
|
840
810
|
|
|
841
811
|
// src/components/DropdownSelector/DropdownPopover.tsx
|
|
842
|
-
var
|
|
812
|
+
var import_react20 = require("react");
|
|
843
813
|
|
|
844
814
|
// src/components/DropdownSelector/Popover/index.tsx
|
|
845
|
-
var
|
|
815
|
+
var import_react19 = require("react");
|
|
846
816
|
var import_overlays4 = require("@react-aria/overlays");
|
|
847
|
-
var
|
|
848
|
-
var
|
|
817
|
+
var import_styled_components3 = __toESM(require("styled-components"));
|
|
818
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
849
819
|
var _empty = () => null;
|
|
850
820
|
function Popover(props) {
|
|
851
|
-
const defaultPopoverRef = (0,
|
|
821
|
+
const defaultPopoverRef = (0, import_react19.useRef)(null);
|
|
852
822
|
const finalPopoverRef = props.popoverRef === void 0 ? defaultPopoverRef : props.popoverRef;
|
|
853
823
|
const {
|
|
854
824
|
popoverProps,
|
|
@@ -864,40 +834,40 @@ function Popover(props) {
|
|
|
864
834
|
setOpen: _empty,
|
|
865
835
|
toggle: _empty
|
|
866
836
|
});
|
|
867
|
-
const modalBackground = (0,
|
|
837
|
+
const modalBackground = (0, import_react19.useContext)(ModalBackgroundContext);
|
|
868
838
|
usePreventScroll(modalBackground, props.isOpen);
|
|
869
839
|
if (!props.isOpen)
|
|
870
840
|
return null;
|
|
871
|
-
return /* @__PURE__ */ (0,
|
|
872
|
-
/* @__PURE__ */ (0,
|
|
841
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_overlays4.Overlay, { portalContainer: document.body, children: [
|
|
842
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { ...underlayProps, style: {
|
|
873
843
|
position: "fixed",
|
|
874
844
|
zIndex: typeof popoverProps.style?.zIndex === "number" ? popoverProps.style.zIndex - 1 : 99999,
|
|
875
845
|
inset: 0
|
|
876
846
|
} }),
|
|
877
|
-
/* @__PURE__ */ (0,
|
|
878
|
-
/* @__PURE__ */ (0,
|
|
847
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownPopoverDiv, { ...popoverProps, ref: finalPopoverRef, children: [
|
|
848
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_overlays4.DismissButton, { onDismiss: () => props.onClose() }),
|
|
879
849
|
props.children,
|
|
880
|
-
/* @__PURE__ */ (0,
|
|
850
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_overlays4.DismissButton, { onDismiss: () => props.onClose() })
|
|
881
851
|
] })
|
|
882
852
|
] });
|
|
883
853
|
}
|
|
884
|
-
var DropdownPopoverDiv =
|
|
854
|
+
var DropdownPopoverDiv = import_styled_components3.default.div.withConfig({
|
|
885
855
|
componentId: "ccl__sc-jwnoy6-0"
|
|
886
856
|
})(["margin:4px 0;list-style:none;overflow:auto;max-height:inherit;background-color:var(--charcoal-background1);border:solid 1px var(--charcoal-border-default);border-radius:8px;padding-top:8px;padding-bottom:8px;"]);
|
|
887
857
|
|
|
888
858
|
// src/components/DropdownSelector/DropdownPopover.tsx
|
|
889
|
-
var
|
|
859
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
890
860
|
function DropdownPopover({
|
|
891
861
|
children,
|
|
892
862
|
...props
|
|
893
863
|
}) {
|
|
894
|
-
const ref = (0,
|
|
895
|
-
(0,
|
|
864
|
+
const ref = (0, import_react20.useRef)(null);
|
|
865
|
+
(0, import_react20.useEffect)(() => {
|
|
896
866
|
if (props.isOpen && ref.current && props.triggerRef.current) {
|
|
897
867
|
ref.current.style.width = `${props.triggerRef.current.clientWidth}px`;
|
|
898
868
|
}
|
|
899
869
|
}, [props.triggerRef, props.isOpen]);
|
|
900
|
-
(0,
|
|
870
|
+
(0, import_react20.useEffect)(() => {
|
|
901
871
|
if (props.isOpen && props.value !== void 0) {
|
|
902
872
|
const windowScrollY = window.scrollY;
|
|
903
873
|
const windowScrollX = window.scrollX;
|
|
@@ -906,7 +876,7 @@ function DropdownPopover({
|
|
|
906
876
|
window.scrollTo(windowScrollX, windowScrollY);
|
|
907
877
|
}
|
|
908
878
|
}, [props.value, props.isOpen]);
|
|
909
|
-
return /* @__PURE__ */ (0,
|
|
879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Popover, { isOpen: props.isOpen, onClose: props.onClose, popoverRef: ref, triggerRef: props.triggerRef, children });
|
|
910
880
|
}
|
|
911
881
|
|
|
912
882
|
// src/components/DropdownSelector/utils/findPreviewRecursive.tsx
|
|
@@ -934,12 +904,12 @@ function findPreviewRecursive(children, value) {
|
|
|
934
904
|
}
|
|
935
905
|
|
|
936
906
|
// src/components/DropdownSelector/MenuList/index.tsx
|
|
937
|
-
var
|
|
938
|
-
var
|
|
907
|
+
var import_react22 = require("react");
|
|
908
|
+
var import_styled_components4 = __toESM(require("styled-components"));
|
|
939
909
|
|
|
940
910
|
// src/components/DropdownSelector/MenuList/MenuListContext.ts
|
|
941
|
-
var
|
|
942
|
-
var MenuListContext = (0,
|
|
911
|
+
var import_react21 = require("react");
|
|
912
|
+
var MenuListContext = (0, import_react21.createContext)({
|
|
943
913
|
root: void 0,
|
|
944
914
|
value: "",
|
|
945
915
|
propsArray: [],
|
|
@@ -971,11 +941,11 @@ function getValuesRecursive(children) {
|
|
|
971
941
|
}
|
|
972
942
|
|
|
973
943
|
// src/components/DropdownSelector/MenuList/index.tsx
|
|
974
|
-
var
|
|
944
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
975
945
|
function MenuList(props) {
|
|
976
|
-
const root = (0,
|
|
977
|
-
const propsArray = (0,
|
|
978
|
-
return /* @__PURE__ */ (0,
|
|
946
|
+
const root = (0, import_react22.useRef)(null);
|
|
947
|
+
const propsArray = (0, import_react22.useMemo)(() => getValuesRecursive(props.children), [props.children]);
|
|
948
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StyledUl, { ref: root, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(MenuListContext.Provider, { value: {
|
|
979
949
|
value: props.value ?? "",
|
|
980
950
|
root,
|
|
981
951
|
propsArray,
|
|
@@ -984,89 +954,89 @@ function MenuList(props) {
|
|
|
984
954
|
}
|
|
985
955
|
}, children: props.children }) });
|
|
986
956
|
}
|
|
987
|
-
var StyledUl =
|
|
957
|
+
var StyledUl = import_styled_components4.default.ul.withConfig({
|
|
988
958
|
componentId: "ccl__sc-1y72v02-0"
|
|
989
959
|
})(["padding:0;margin:0;"]);
|
|
990
960
|
|
|
991
961
|
// src/components/DropdownSelector/index.tsx
|
|
992
962
|
var import_styled3 = require("@charcoal-ui/styled");
|
|
993
963
|
var import_visually_hidden3 = require("@react-aria/visually-hidden");
|
|
994
|
-
var
|
|
964
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
995
965
|
var defaultRequiredText = "*\u5FC5\u9808";
|
|
996
966
|
function DropdownSelector({
|
|
997
967
|
onChange,
|
|
998
968
|
...props
|
|
999
969
|
}) {
|
|
1000
|
-
const triggerRef = (0,
|
|
1001
|
-
const [isOpen, setIsOpen] = (0,
|
|
970
|
+
const triggerRef = (0, import_react23.useRef)(null);
|
|
971
|
+
const [isOpen, setIsOpen] = (0, import_react23.useState)(false);
|
|
1002
972
|
const preview = findPreviewRecursive(props.children, props.value);
|
|
1003
|
-
const isPlaceholder = (0,
|
|
973
|
+
const isPlaceholder = (0, import_react23.useMemo)(() => props.placeholder !== void 0 && preview === void 0, [preview, props.placeholder]);
|
|
1004
974
|
const propsArray = getValuesRecursive(props.children);
|
|
1005
975
|
const {
|
|
1006
976
|
visuallyHiddenProps
|
|
1007
977
|
} = (0, import_visually_hidden3.useVisuallyHidden)();
|
|
1008
|
-
const handleChange = (0,
|
|
978
|
+
const handleChange = (0, import_react23.useCallback)((e) => {
|
|
1009
979
|
onChange(e.target.value);
|
|
1010
980
|
}, [onChange]);
|
|
1011
|
-
return /* @__PURE__ */ (0,
|
|
1012
|
-
props.showLabel === true && /* @__PURE__ */ (0,
|
|
1013
|
-
/* @__PURE__ */ (0,
|
|
1014
|
-
return /* @__PURE__ */ (0,
|
|
981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DropdownSelectorRoot, { "aria-disabled": props.disabled, children: [
|
|
982
|
+
props.showLabel === true && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(FieldLabel_default, { label: props.label, required: props.required, requiredText: props.requiredText ?? defaultRequiredText, subLabel: props.subLabel }),
|
|
983
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { ...visuallyHiddenProps, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("select", { name: props.name, value: props.value, onChange: handleChange, tabIndex: -1, children: propsArray.map((itemProps) => {
|
|
984
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("option", { value: itemProps.value, disabled: itemProps.disabled, children: itemProps.value }, itemProps.value);
|
|
1015
985
|
}) }) }),
|
|
1016
|
-
/* @__PURE__ */ (0,
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DropdownButton, { invalid: props.invalid, disabled: props.disabled, onClick: () => {
|
|
1017
987
|
if (props.disabled === true)
|
|
1018
988
|
return;
|
|
1019
989
|
setIsOpen(true);
|
|
1020
990
|
}, ref: triggerRef, type: "button", $active: isOpen, children: [
|
|
1021
|
-
/* @__PURE__ */ (0,
|
|
1022
|
-
/* @__PURE__ */ (0,
|
|
991
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownButtonText, { $isText3: isPlaceholder, children: isPlaceholder ? props.placeholder : preview }),
|
|
992
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownButtonIcon, { name: "16/Menu" })
|
|
1023
993
|
] }),
|
|
1024
|
-
isOpen && /* @__PURE__ */ (0,
|
|
994
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownPopover, { isOpen, onClose: () => setIsOpen(false), triggerRef, value: props.value, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(MenuList, { value: props.value, onChange: (v) => {
|
|
1025
995
|
onChange(v);
|
|
1026
996
|
setIsOpen(false);
|
|
1027
997
|
}, children: props.children }) }),
|
|
1028
|
-
props.assistiveText !== void 0 && /* @__PURE__ */ (0,
|
|
998
|
+
props.assistiveText !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(AssistiveText, { "data-invalid": props.invalid === true, children: props.assistiveText })
|
|
1029
999
|
] });
|
|
1030
1000
|
}
|
|
1031
|
-
var DropdownSelectorRoot =
|
|
1001
|
+
var DropdownSelectorRoot = import_styled_components5.default.div.withConfig({
|
|
1032
1002
|
componentId: "ccl__sc-1vnxmc8-0"
|
|
1033
1003
|
})(["display:grid;grid-template-columns:1fr;grid-gap:4px;width:100%;", "{cursor:default;opacity:0.32;}"], import_utils6.disabledSelector);
|
|
1034
|
-
var DropdownButton =
|
|
1004
|
+
var DropdownButton = import_styled_components5.default.button.withConfig({
|
|
1035
1005
|
componentId: "ccl__sc-1vnxmc8-1"
|
|
1036
1006
|
})(["display:grid;grid-template-columns:1fr auto;justify-content:space-between;align-items:center;height:40px;width:100%;box-sizing:border-box;border:none;cursor:pointer;gap:4px;", "{cursor:default;}padding-right:8px;padding-left:8px;background-color:var(--charcoal-surface3);border-radius:4px;transition:0.2s box-shadow,0.2s background-color;&:not(:disabled):not([aria-disabled]),&[aria-disabled='false']{", " ", "}", ""], import_utils6.disabledSelector, import_styled3.focusVisibleFocusRingCss, ({
|
|
1037
1007
|
$active
|
|
1038
|
-
}) => $active === true ? (0,
|
|
1008
|
+
}) => $active === true ? (0, import_styled_components5.css)(["background-color:var(--charcoal-surface3-press);"]) : (0, import_styled_components5.css)(["&:hover{background-color:var(--charcoal-surface3-hover);}&:active{background-color:var(--charcoal-surface3-press);}"]), ({
|
|
1039
1009
|
invalid
|
|
1040
|
-
}) => invalid === true && (0,
|
|
1041
|
-
var DropdownButtonText =
|
|
1010
|
+
}) => invalid === true && (0, import_styled_components5.css)(["&:not(:disabled):not([aria-disabled]),&[aria-disabled='false']{box-shadow:0 0 0 4px rgba(255,43,0,0.32);}"]));
|
|
1011
|
+
var DropdownButtonText = import_styled_components5.default.span.withConfig({
|
|
1042
1012
|
componentId: "ccl__sc-1vnxmc8-2"
|
|
1043
1013
|
})(["text-align:left;font-size:14px;line-height:22px;display:flow-root;color:var(--charcoal-", ");overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"], (p) => p.$isText3 ? "text3" : "text2");
|
|
1044
|
-
var DropdownButtonIcon = (0,
|
|
1014
|
+
var DropdownButtonIcon = (0, import_styled_components5.default)(Icon_default).withConfig({
|
|
1045
1015
|
componentId: "ccl__sc-1vnxmc8-3"
|
|
1046
1016
|
})(["color:var(--charcoal-text2);"]);
|
|
1047
1017
|
|
|
1048
1018
|
// src/components/DropdownSelector/DropdownMenuItem.tsx
|
|
1049
|
-
var
|
|
1019
|
+
var import_styled_components7 = __toESM(require("styled-components"));
|
|
1050
1020
|
|
|
1051
1021
|
// src/components/DropdownSelector/ListItem/index.tsx
|
|
1052
|
-
var
|
|
1053
|
-
var
|
|
1022
|
+
var import_styled_components6 = __toESM(require("styled-components"));
|
|
1023
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1054
1024
|
function ListItem(props) {
|
|
1055
1025
|
const {
|
|
1056
1026
|
children,
|
|
1057
1027
|
...rest
|
|
1058
1028
|
} = props;
|
|
1059
|
-
return /* @__PURE__ */ (0,
|
|
1029
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StyledLi, { role: "option", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ItemDiv, { ...rest, children: props.children }) });
|
|
1060
1030
|
}
|
|
1061
|
-
var StyledLi =
|
|
1031
|
+
var StyledLi = import_styled_components6.default.li.withConfig({
|
|
1062
1032
|
componentId: "ccl__sc-p1vs75-0"
|
|
1063
1033
|
})(["list-style:none;"]);
|
|
1064
|
-
var ItemDiv =
|
|
1034
|
+
var ItemDiv = import_styled_components6.default.div.withConfig({
|
|
1065
1035
|
componentId: "ccl__sc-p1vs75-1"
|
|
1066
1036
|
})(["display:flex;align-items:center;min-height:40px;cursor:pointer;outline:none;padding-right:16px;padding-left:16px;transition:background-color 0.2s;&:disabled,&[aria-disabled]:not([aria-disabled='false']){opacity:0.32;cursor:default;}:hover,:focus,:focus-within{&:not(disabled):not([aria-disabled='true']){background-color:var(--charcoal-surface3);}}"]);
|
|
1067
1037
|
|
|
1068
1038
|
// src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx
|
|
1069
|
-
var
|
|
1039
|
+
var import_react24 = require("react");
|
|
1070
1040
|
|
|
1071
1041
|
// src/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.tsx
|
|
1072
1042
|
function handleFocusByKeyBoard(element, parent) {
|
|
@@ -1103,12 +1073,12 @@ function useMenuItemHandleKeyDown(value) {
|
|
|
1103
1073
|
setValue,
|
|
1104
1074
|
root,
|
|
1105
1075
|
propsArray
|
|
1106
|
-
} = (0,
|
|
1107
|
-
const setContextValue = (0,
|
|
1076
|
+
} = (0, import_react24.useContext)(MenuListContext);
|
|
1077
|
+
const setContextValue = (0, import_react24.useCallback)(() => {
|
|
1108
1078
|
if (value !== void 0)
|
|
1109
1079
|
setValue(value);
|
|
1110
1080
|
}, [value, setValue]);
|
|
1111
|
-
const handleKeyDown = (0,
|
|
1081
|
+
const handleKeyDown = (0, import_react24.useCallback)((e) => {
|
|
1112
1082
|
if (e.key === "Enter") {
|
|
1113
1083
|
setContextValue();
|
|
1114
1084
|
} else if (e.key === "ArrowUp" || e.key === "ArrowDown") {
|
|
@@ -1143,7 +1113,7 @@ function useMenuItemHandleKeyDown(value) {
|
|
|
1143
1113
|
}
|
|
1144
1114
|
|
|
1145
1115
|
// src/components/DropdownSelector/MenuItem/index.tsx
|
|
1146
|
-
var
|
|
1116
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1147
1117
|
function MenuItem(props) {
|
|
1148
1118
|
const {
|
|
1149
1119
|
children,
|
|
@@ -1151,81 +1121,81 @@ function MenuItem(props) {
|
|
|
1151
1121
|
...rest
|
|
1152
1122
|
} = props;
|
|
1153
1123
|
const [handleKeyDown, setContextValue] = useMenuItemHandleKeyDown(props.value);
|
|
1154
|
-
return /* @__PURE__ */ (0,
|
|
1124
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ListItem, { ...rest, as, "data-key": props.value, onKeyDown: handleKeyDown, onClick: props.disabled === true ? void 0 : setContextValue, tabIndex: -1, "aria-disabled": props.disabled, children: props.children });
|
|
1155
1125
|
}
|
|
1156
1126
|
|
|
1157
1127
|
// src/components/DropdownSelector/DropdownMenuItem.tsx
|
|
1158
|
-
var
|
|
1159
|
-
var
|
|
1128
|
+
var import_react25 = require("react");
|
|
1129
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1160
1130
|
function DropdownMenuItem(props) {
|
|
1161
1131
|
const {
|
|
1162
1132
|
value: ctxValue
|
|
1163
|
-
} = (0,
|
|
1133
|
+
} = (0, import_react25.useContext)(MenuListContext);
|
|
1164
1134
|
const isSelected = props.value === ctxValue;
|
|
1165
1135
|
const {
|
|
1166
1136
|
children,
|
|
1167
1137
|
...rest
|
|
1168
1138
|
} = props;
|
|
1169
|
-
return /* @__PURE__ */ (0,
|
|
1170
|
-
isSelected && /* @__PURE__ */ (0,
|
|
1171
|
-
/* @__PURE__ */ (0,
|
|
1139
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(MenuItem, { ...rest, children: [
|
|
1140
|
+
isSelected && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Text2ColorIcon, { name: "16/Check" }),
|
|
1141
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(StyledSpan, { isSelected, children: props.children })
|
|
1172
1142
|
] });
|
|
1173
1143
|
}
|
|
1174
|
-
var StyledSpan =
|
|
1144
|
+
var StyledSpan = import_styled_components7.default.span.withConfig({
|
|
1175
1145
|
componentId: "ccl__sc-108wg2j-0"
|
|
1176
1146
|
})(["font-size:14px;line-height:22px;color:var(--charcoal-text2);padding:9px 0;display:flex;align-items:center;width:100%;margin-left:", "px;"], ({
|
|
1177
1147
|
isSelected
|
|
1178
1148
|
}) => isSelected === true ? 0 : 20);
|
|
1179
|
-
var Text2ColorIcon = (0,
|
|
1149
|
+
var Text2ColorIcon = (0, import_styled_components7.default)(Icon_default).withConfig({
|
|
1180
1150
|
componentId: "ccl__sc-108wg2j-1"
|
|
1181
1151
|
})(["color:var(--charcoal-text2);padding-right:4px;"]);
|
|
1182
1152
|
|
|
1183
1153
|
// src/components/DropdownSelector/MenuItemGroup/index.tsx
|
|
1184
|
-
var
|
|
1185
|
-
var
|
|
1154
|
+
var import_styled_components8 = __toESM(require("styled-components"));
|
|
1155
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1186
1156
|
function MenuItemGroup(props) {
|
|
1187
|
-
return /* @__PURE__ */ (0,
|
|
1188
|
-
/* @__PURE__ */ (0,
|
|
1189
|
-
/* @__PURE__ */ (0,
|
|
1157
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(StyledLi2, { role: "presentation", children: [
|
|
1158
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TextSpan, { children: props.text }),
|
|
1159
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(StyledUl2, { role: "group", children: props.children })
|
|
1190
1160
|
] });
|
|
1191
1161
|
}
|
|
1192
|
-
var TextSpan =
|
|
1162
|
+
var TextSpan = import_styled_components8.default.span.withConfig({
|
|
1193
1163
|
componentId: "ccl__sc-1ubjfz7-0"
|
|
1194
1164
|
})(["display:block;color:var(--charcoal-text3);font-size:12px;font-weight:bold;padding:12px 0 8px 16px;"]);
|
|
1195
|
-
var StyledUl2 =
|
|
1165
|
+
var StyledUl2 = import_styled_components8.default.ul.withConfig({
|
|
1196
1166
|
componentId: "ccl__sc-1ubjfz7-1"
|
|
1197
1167
|
})(["padding-left:0;margin:0;box-sizing:border-box;list-style:none;overflow:hidden;"]);
|
|
1198
|
-
var StyledLi2 =
|
|
1168
|
+
var StyledLi2 = import_styled_components8.default.li.withConfig({
|
|
1199
1169
|
componentId: "ccl__sc-1ubjfz7-2"
|
|
1200
1170
|
})(["display:block;"]);
|
|
1201
1171
|
|
|
1202
1172
|
// src/components/SegmentedControl/index.tsx
|
|
1203
|
-
var
|
|
1173
|
+
var import_react27 = require("react");
|
|
1204
1174
|
var import_radio = require("@react-stately/radio");
|
|
1205
1175
|
var import_radio2 = require("@react-aria/radio");
|
|
1206
1176
|
|
|
1207
1177
|
// src/components/SegmentedControl/RadioGroupContext.tsx
|
|
1208
|
-
var
|
|
1209
|
-
var
|
|
1210
|
-
var RadioContext = (0,
|
|
1178
|
+
var import_react26 = require("react");
|
|
1179
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1180
|
+
var RadioContext = (0, import_react26.createContext)(null);
|
|
1211
1181
|
var RadioProvider = ({
|
|
1212
1182
|
value,
|
|
1213
1183
|
children
|
|
1214
1184
|
}) => {
|
|
1215
|
-
return /* @__PURE__ */ (0,
|
|
1185
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadioContext.Provider, { value, children });
|
|
1216
1186
|
};
|
|
1217
1187
|
var useRadioContext = () => {
|
|
1218
|
-
const state = (0,
|
|
1188
|
+
const state = (0, import_react26.useContext)(RadioContext);
|
|
1219
1189
|
if (state === null)
|
|
1220
1190
|
throw new Error("`<RadioProvider>` is not likely mounted.");
|
|
1221
1191
|
return state;
|
|
1222
1192
|
};
|
|
1223
1193
|
|
|
1224
1194
|
// src/components/SegmentedControl/index.tsx
|
|
1225
|
-
var
|
|
1226
|
-
var SegmentedControl = (0,
|
|
1195
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1196
|
+
var SegmentedControl = (0, import_react27.forwardRef)(function SegmentedControlInner(props, ref) {
|
|
1227
1197
|
const className = useClassNames("charcoal-segmented-control", props.className);
|
|
1228
|
-
const ariaRadioGroupProps = (0,
|
|
1198
|
+
const ariaRadioGroupProps = (0, import_react27.useMemo)(() => ({
|
|
1229
1199
|
...props,
|
|
1230
1200
|
isDisabled: props.disabled,
|
|
1231
1201
|
isReadOnly: props.readonly,
|
|
@@ -1236,19 +1206,19 @@ var SegmentedControl = (0, import_react26.forwardRef)(function SegmentedControlI
|
|
|
1236
1206
|
const {
|
|
1237
1207
|
radioGroupProps
|
|
1238
1208
|
} = (0, import_radio2.useRadioGroup)(ariaRadioGroupProps, state);
|
|
1239
|
-
const segmentedControlItems = (0,
|
|
1209
|
+
const segmentedControlItems = (0, import_react27.useMemo)(() => {
|
|
1240
1210
|
return props.data.map((d) => typeof d === "string" ? {
|
|
1241
1211
|
value: d,
|
|
1242
1212
|
label: d
|
|
1243
1213
|
} : d);
|
|
1244
1214
|
}, [props.data]);
|
|
1245
|
-
return /* @__PURE__ */ (0,
|
|
1215
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ref, ...radioGroupProps, className, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(RadioProvider, { value: state, children: segmentedControlItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Segmented, { value: item.value, disabled: item.disabled, children: item.label }, item.value)) }) });
|
|
1246
1216
|
});
|
|
1247
|
-
var SegmentedControl_default = (0,
|
|
1217
|
+
var SegmentedControl_default = (0, import_react27.memo)(SegmentedControl);
|
|
1248
1218
|
var Segmented = (props) => {
|
|
1249
1219
|
const state = useRadioContext();
|
|
1250
|
-
const ref = (0,
|
|
1251
|
-
const ariaRadioProps = (0,
|
|
1220
|
+
const ref = (0, import_react27.useRef)(null);
|
|
1221
|
+
const ariaRadioProps = (0, import_react27.useMemo)(() => ({
|
|
1252
1222
|
value: props.value,
|
|
1253
1223
|
isDisabled: props.disabled,
|
|
1254
1224
|
children: props.children
|
|
@@ -1258,20 +1228,20 @@ var Segmented = (props) => {
|
|
|
1258
1228
|
isDisabled,
|
|
1259
1229
|
isSelected
|
|
1260
1230
|
} = (0, import_radio2.useRadio)(ariaRadioProps, state, ref);
|
|
1261
|
-
return /* @__PURE__ */ (0,
|
|
1262
|
-
/* @__PURE__ */ (0,
|
|
1231
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { className: "charcoal-segmented-control-radio__label", "aria-disabled": isDisabled || state.isReadOnly, "data-checked": isSelected, children: [
|
|
1232
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("input", { className: "charcoal-segmented-control-radio__input", ...inputProps, ref }),
|
|
1263
1233
|
props.children
|
|
1264
1234
|
] });
|
|
1265
1235
|
};
|
|
1266
1236
|
|
|
1267
1237
|
// src/components/Checkbox/index.tsx
|
|
1268
|
-
var
|
|
1238
|
+
var import_react30 = require("react");
|
|
1269
1239
|
var import_utils7 = require("@react-aria/utils");
|
|
1270
1240
|
|
|
1271
1241
|
// src/components/Checkbox/CheckboxInput/index.tsx
|
|
1272
|
-
var
|
|
1273
|
-
var
|
|
1274
|
-
var CheckboxInput = (0,
|
|
1242
|
+
var import_react28 = require("react");
|
|
1243
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1244
|
+
var CheckboxInput = (0, import_react28.forwardRef)(function CheckboxInput2({
|
|
1275
1245
|
onChange,
|
|
1276
1246
|
checked,
|
|
1277
1247
|
invalid,
|
|
@@ -1279,19 +1249,19 @@ var CheckboxInput = (0, import_react27.forwardRef)(function CheckboxInput2({
|
|
|
1279
1249
|
rounded,
|
|
1280
1250
|
...props
|
|
1281
1251
|
}, ref) {
|
|
1282
|
-
const handleChange = (0,
|
|
1252
|
+
const handleChange = (0, import_react28.useCallback)((e) => {
|
|
1283
1253
|
const el = e.currentTarget;
|
|
1284
1254
|
onChange?.(el.checked);
|
|
1285
1255
|
}, [onChange]);
|
|
1286
1256
|
const classNames = useClassNames("charcoal-checkbox-input", className);
|
|
1287
|
-
return /* @__PURE__ */ (0,
|
|
1257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("input", { className: classNames, ref, type: "checkbox", onChange: handleChange, "aria-invalid": invalid, checked, "data-rounded": rounded, ...props });
|
|
1288
1258
|
});
|
|
1289
|
-
var CheckboxInput_default = (0,
|
|
1259
|
+
var CheckboxInput_default = (0, import_react28.memo)(CheckboxInput);
|
|
1290
1260
|
|
|
1291
1261
|
// src/components/Checkbox/CheckboxWithLabel.tsx
|
|
1292
|
-
var
|
|
1293
|
-
var
|
|
1294
|
-
var CheckboxWithLabel =
|
|
1262
|
+
var import_react29 = __toESM(require("react"));
|
|
1263
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1264
|
+
var CheckboxWithLabel = import_react29.default.memo(function CheckboxWithLabel2({
|
|
1295
1265
|
className,
|
|
1296
1266
|
children,
|
|
1297
1267
|
input,
|
|
@@ -1299,15 +1269,15 @@ var CheckboxWithLabel = import_react28.default.memo(function CheckboxWithLabel2(
|
|
|
1299
1269
|
disabled
|
|
1300
1270
|
}) {
|
|
1301
1271
|
const classNames = useClassNames("charcoal-checkbox__label", className);
|
|
1302
|
-
return /* @__PURE__ */ (0,
|
|
1272
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("label", { htmlFor: id, "aria-disabled": disabled, className: classNames, children: [
|
|
1303
1273
|
input,
|
|
1304
|
-
/* @__PURE__ */ (0,
|
|
1274
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "charcoal-checkbox__label_div", children })
|
|
1305
1275
|
] });
|
|
1306
1276
|
});
|
|
1307
1277
|
|
|
1308
1278
|
// src/components/Checkbox/index.tsx
|
|
1309
|
-
var
|
|
1310
|
-
var Checkbox = (0,
|
|
1279
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1280
|
+
var Checkbox = (0, import_react30.forwardRef)(function Checkbox2({
|
|
1311
1281
|
disabled,
|
|
1312
1282
|
className,
|
|
1313
1283
|
id,
|
|
@@ -1316,19 +1286,19 @@ var Checkbox = (0, import_react29.forwardRef)(function Checkbox2({
|
|
|
1316
1286
|
}, ref) {
|
|
1317
1287
|
const htmlId = (0, import_utils7.useId)(id);
|
|
1318
1288
|
const noChildren = children === void 0;
|
|
1319
|
-
const input = /* @__PURE__ */ (0,
|
|
1289
|
+
const input = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CheckboxInput_default, { ...props, className: noChildren ? className : void 0, disabled, id: htmlId, ref });
|
|
1320
1290
|
if (noChildren) {
|
|
1321
1291
|
return input;
|
|
1322
1292
|
}
|
|
1323
|
-
return /* @__PURE__ */ (0,
|
|
1293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CheckboxWithLabel, { className, disabled, id: htmlId, input, children });
|
|
1324
1294
|
});
|
|
1325
|
-
var Checkbox_default = (0,
|
|
1295
|
+
var Checkbox_default = (0, import_react30.memo)(Checkbox);
|
|
1326
1296
|
|
|
1327
1297
|
// src/components/TagItem/index.tsx
|
|
1328
|
-
var
|
|
1298
|
+
var import_react31 = require("react");
|
|
1329
1299
|
var import_utils8 = require("@react-aria/utils");
|
|
1330
|
-
var
|
|
1331
|
-
var TagItem = (0,
|
|
1300
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1301
|
+
var TagItem = (0, import_react31.forwardRef)(function TagItemInner({
|
|
1332
1302
|
as,
|
|
1333
1303
|
label,
|
|
1334
1304
|
translatedLabel,
|
|
@@ -1343,18 +1313,18 @@ var TagItem = (0, import_react30.forwardRef)(function TagItemInner({
|
|
|
1343
1313
|
const className = useClassNames("charcoal-tag-item", "charcoal-tag-item__bg", props.className);
|
|
1344
1314
|
const bgVariant = bgImage !== void 0 && bgImage.length > 0 ? "image" : "color";
|
|
1345
1315
|
const bg = bgVariant === "color" ? bgColor : `url(${bgImage ?? ""})`;
|
|
1346
|
-
const Component = (0,
|
|
1347
|
-
return /* @__PURE__ */ (0,
|
|
1316
|
+
const Component = (0, import_react31.useMemo)(() => as ?? "button", [as]);
|
|
1317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Component, { ...props, ref, className, "data-state": status, "data-bg-variant": bgVariant, "data-size": hasTranslatedLabel ? "M" : size, style: {
|
|
1348
1318
|
"--charcoal-tag-item-bg": bg
|
|
1349
1319
|
}, children: [
|
|
1350
|
-
/* @__PURE__ */ (0,
|
|
1351
|
-
hasTranslatedLabel && /* @__PURE__ */ (0,
|
|
1352
|
-
/* @__PURE__ */ (0,
|
|
1320
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "charcoal-tag-item__label", "data-has-translate": hasTranslatedLabel, children: [
|
|
1321
|
+
hasTranslatedLabel && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "charcoal-tag-item__label__translated", children: translatedLabel }),
|
|
1322
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "charcoal-tag-item__label__text", "data-has-translate": hasTranslatedLabel, children: label })
|
|
1353
1323
|
] }),
|
|
1354
|
-
status === "active" && /* @__PURE__ */ (0,
|
|
1324
|
+
status === "active" && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon_default, { name: "16/Remove" })
|
|
1355
1325
|
] });
|
|
1356
1326
|
});
|
|
1357
|
-
var TagItem_default = (0,
|
|
1327
|
+
var TagItem_default = (0, import_react31.memo)(TagItem);
|
|
1358
1328
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1359
1329
|
0 && (module.exports = {
|
|
1360
1330
|
Button,
|