@wistia/ui 0.22.2-beta.21ba487f.ec7eaed → 0.22.2-beta.21d69964.f14fca2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +128 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +443 -77
- package/dist/index.js.map +1 -1
- package/package.json +7 -4
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
/*
|
|
3
|
-
* @license @wistia/ui v0.22.2-beta.
|
|
3
|
+
* @license @wistia/ui v0.22.2-beta.21d69964.f14fca2
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2024-2026, Wistia, Inc. and its affiliates.
|
|
6
6
|
*
|
|
@@ -18,6 +18,7 @@ import { useFilePicker as useFilePicker$1, useImperativeFilePicker as useImperat
|
|
|
18
18
|
import { FileAmountLimitValidator, FileSizeValidator, FileTypeValidator, ImageDimensionsValidator, PersistentFileAmountLimitValidator } from "use-file-picker/validators";
|
|
19
19
|
import { debounce, throttle } from "throttle-debounce";
|
|
20
20
|
import { Link as Link$1, useInRouterContext } from "react-router";
|
|
21
|
+
import { DayPicker } from "react-day-picker";
|
|
21
22
|
import { Content as Content$1, Root as Root$1, Trigger as Trigger$1 } from "@radix-ui/react-collapsible";
|
|
22
23
|
import { Item, Root as Root$2 } from "@radix-ui/react-radio-group";
|
|
23
24
|
import { differenceEuclidean, easingSmootherstep, formatHex, interpolate, modeHsv, modeLrgb, modeRgb, parseHex, useMode, wcagContrast } from "culori/fn";
|
|
@@ -6358,6 +6359,446 @@ const Breadcrumb = ({ icon, href, children, ...props }) => {
|
|
|
6358
6359
|
})] });
|
|
6359
6360
|
};
|
|
6360
6361
|
//#endregion
|
|
6362
|
+
//#region src/components/Divider/Divider.tsx
|
|
6363
|
+
const horizontalBorderCss = css`
|
|
6364
|
+
border-top-color: var(--wui-color-border);
|
|
6365
|
+
border-top-style: solid;
|
|
6366
|
+
border-top-width: 1px;
|
|
6367
|
+
clear: both; /* for horizontal dividers, ensure it clears any floats */
|
|
6368
|
+
height: 0;
|
|
6369
|
+
margin-left: var(--wui-divider-inset);
|
|
6370
|
+
margin-right: var(--wui-divider-inset);
|
|
6371
|
+
`;
|
|
6372
|
+
const verticalBorderCss = css`
|
|
6373
|
+
background-color: var(--wui-color-border);
|
|
6374
|
+
max-width: 1px;
|
|
6375
|
+
min-height: 100%;
|
|
6376
|
+
width: 1px;
|
|
6377
|
+
margin-top: var(--wui-divider-inset);
|
|
6378
|
+
margin-bottom: var(--wui-divider-inset);
|
|
6379
|
+
`;
|
|
6380
|
+
const DividerComponent = styled.div`
|
|
6381
|
+
${({ $orientation }) => {
|
|
6382
|
+
switch ($orientation) {
|
|
6383
|
+
case "vertical": return verticalBorderCss;
|
|
6384
|
+
default: return horizontalBorderCss;
|
|
6385
|
+
}
|
|
6386
|
+
}}
|
|
6387
|
+
--wui-divider-inset: ${({ $inset }) => `var(--wui-${$inset})`};
|
|
6388
|
+
|
|
6389
|
+
align-self: stretch;
|
|
6390
|
+
`;
|
|
6391
|
+
/**
|
|
6392
|
+
* A line used to visually separate content; note that dividers have no external margin/spacing on their own.
|
|
6393
|
+
*/
|
|
6394
|
+
const Divider = ({ orientation = "horizontal", inset = "space-00", ...props }) => {
|
|
6395
|
+
const responsiveOrientation = useResponsiveProp(orientation);
|
|
6396
|
+
return /* @__PURE__ */ jsx(DividerComponent, {
|
|
6397
|
+
$inset: useResponsiveProp(inset),
|
|
6398
|
+
$orientation: responsiveOrientation,
|
|
6399
|
+
"aria-orientation": responsiveOrientation,
|
|
6400
|
+
role: "separator",
|
|
6401
|
+
...props
|
|
6402
|
+
});
|
|
6403
|
+
};
|
|
6404
|
+
Divider.displayName = "Divider_UI";
|
|
6405
|
+
//#endregion
|
|
6406
|
+
//#region src/components/Calendar/CalendarNavigation.tsx
|
|
6407
|
+
const StyledNav = styled.div`
|
|
6408
|
+
position: absolute;
|
|
6409
|
+
inset-block-start: 0;
|
|
6410
|
+
inset-inline-end: 0;
|
|
6411
|
+
display: flex;
|
|
6412
|
+
align-items: center;
|
|
6413
|
+
`;
|
|
6414
|
+
const CalendarNavigation = ({ onPreviousClick, onNextClick, previousMonth, nextMonth }) => {
|
|
6415
|
+
return /* @__PURE__ */ jsxs(StyledNav, { children: [/* @__PURE__ */ jsx(IconButton, {
|
|
6416
|
+
disabled: !previousMonth,
|
|
6417
|
+
label: "Go to previous month",
|
|
6418
|
+
onClick: onPreviousClick,
|
|
6419
|
+
size: "md",
|
|
6420
|
+
variant: "ghost",
|
|
6421
|
+
children: /* @__PURE__ */ jsx(Icon, { type: "caret-left" })
|
|
6422
|
+
}), /* @__PURE__ */ jsx(IconButton, {
|
|
6423
|
+
disabled: !nextMonth,
|
|
6424
|
+
label: "Go to next month",
|
|
6425
|
+
onClick: onNextClick,
|
|
6426
|
+
size: "md",
|
|
6427
|
+
variant: "ghost",
|
|
6428
|
+
children: /* @__PURE__ */ jsx(Icon, { type: "caret-right" })
|
|
6429
|
+
})] });
|
|
6430
|
+
};
|
|
6431
|
+
CalendarNavigation.displayName = "CalendarNavigation_UI";
|
|
6432
|
+
//#endregion
|
|
6433
|
+
//#region src/components/Calendar/CalendarContext.tsx
|
|
6434
|
+
const CalendarContext = createContext(null);
|
|
6435
|
+
const CalendarProvider = CalendarContext.Provider;
|
|
6436
|
+
const useCalendarContext = () => {
|
|
6437
|
+
const context = useContext(CalendarContext);
|
|
6438
|
+
if (!context) throw new Error("CalendarPreset must be rendered inside a Calendar");
|
|
6439
|
+
return context;
|
|
6440
|
+
};
|
|
6441
|
+
//#endregion
|
|
6442
|
+
//#region src/components/Calendar/calendarStyles.ts
|
|
6443
|
+
const calendarCss = css`
|
|
6444
|
+
/* stylelint-disable selector-class-pattern, no-descending-specificity --
|
|
6445
|
+
react-day-picker ships class names with underscores (e.g. rdp-day_button, rdp-range_start).
|
|
6446
|
+
We can't rename library classes, so the kebab-case pattern doesn't apply here. The
|
|
6447
|
+
descending-specificity rule is disabled because state rules (.rdp-today, .rdp-selected,
|
|
6448
|
+
.rdp-range_*) intentionally layer on top of the base .rdp-day_button block. */
|
|
6449
|
+
|
|
6450
|
+
display: flex;
|
|
6451
|
+
align-items: flex-start;
|
|
6452
|
+
gap: var(--wui-space-04);
|
|
6453
|
+
|
|
6454
|
+
/* Root */
|
|
6455
|
+
.rdp-root {
|
|
6456
|
+
--rdp-day-size: 40px;
|
|
6457
|
+
|
|
6458
|
+
font-family: var(--wui-typography-family-default);
|
|
6459
|
+
font-size: var(--wui-typography-body-3-size);
|
|
6460
|
+
font-weight: var(--wui-typography-body-3-weight);
|
|
6461
|
+
user-select: none;
|
|
6462
|
+
position: relative;
|
|
6463
|
+
}
|
|
6464
|
+
|
|
6465
|
+
/* Months layout */
|
|
6466
|
+
.rdp-months {
|
|
6467
|
+
display: flex;
|
|
6468
|
+
gap: var(--wui-space-05);
|
|
6469
|
+
}
|
|
6470
|
+
|
|
6471
|
+
.rdp-month {
|
|
6472
|
+
display: flex;
|
|
6473
|
+
flex-direction: column;
|
|
6474
|
+
}
|
|
6475
|
+
|
|
6476
|
+
/* Caption / navigation row */
|
|
6477
|
+
.rdp-month_caption {
|
|
6478
|
+
display: flex;
|
|
6479
|
+
align-items: center;
|
|
6480
|
+
justify-content: space-between;
|
|
6481
|
+
padding-left: var(--wui-space-01);
|
|
6482
|
+
}
|
|
6483
|
+
|
|
6484
|
+
.rdp-caption_label {
|
|
6485
|
+
font-family: var(--wui-typography-heading-4-family);
|
|
6486
|
+
font-weight: var(--wui-typography-heading-4-weight);
|
|
6487
|
+
font-size: var(--wui-typography-heading-4-size);
|
|
6488
|
+
line-height: var(--wui-typography-heading-4-line-height);
|
|
6489
|
+
min-height: 32px;
|
|
6490
|
+
display: flex;
|
|
6491
|
+
align-items: center;
|
|
6492
|
+
white-space: nowrap;
|
|
6493
|
+
}
|
|
6494
|
+
|
|
6495
|
+
/* Grid */
|
|
6496
|
+
.rdp-month_grid {
|
|
6497
|
+
border-collapse: collapse;
|
|
6498
|
+
border-spacing: 0;
|
|
6499
|
+
}
|
|
6500
|
+
|
|
6501
|
+
/* Weekday headers */
|
|
6502
|
+
.rdp-weekday {
|
|
6503
|
+
color: var(--wui-color-text-secondary);
|
|
6504
|
+
font-weight: var(--wui-typography-label-3-weight);
|
|
6505
|
+
font-size: var(--wui-typography-label-3-size);
|
|
6506
|
+
line-height: var(--wui-typography-label-3-line-height);
|
|
6507
|
+
text-align: center;
|
|
6508
|
+
width: var(--rdp-day-size);
|
|
6509
|
+
height: var(--rdp-day-size);
|
|
6510
|
+
padding: 0;
|
|
6511
|
+
}
|
|
6512
|
+
|
|
6513
|
+
/* Day cells */
|
|
6514
|
+
.rdp-day {
|
|
6515
|
+
width: var(--rdp-day-size);
|
|
6516
|
+
height: var(--rdp-day-size);
|
|
6517
|
+
text-align: center;
|
|
6518
|
+
padding: 0;
|
|
6519
|
+
}
|
|
6520
|
+
|
|
6521
|
+
/* Day button — base */
|
|
6522
|
+
.rdp-day_button {
|
|
6523
|
+
--rdp-day-button-size: calc(var(--rdp-day-size) - 4px);
|
|
6524
|
+
|
|
6525
|
+
display: inline-flex;
|
|
6526
|
+
align-items: center;
|
|
6527
|
+
justify-content: center;
|
|
6528
|
+
width: var(--rdp-day-button-size);
|
|
6529
|
+
height: var(--rdp-day-button-size);
|
|
6530
|
+
border: none;
|
|
6531
|
+
border-radius: var(--wui-border-radius-rounded);
|
|
6532
|
+
background: none;
|
|
6533
|
+
cursor: pointer;
|
|
6534
|
+
font-family: var(--wui-typography-label-3-family);
|
|
6535
|
+
font-size: var(--wui-typography-label-3-size);
|
|
6536
|
+
font-weight: var(--wui-typography-label-3-weight);
|
|
6537
|
+
line-height: var(--wui-typography-label-3-line-height);
|
|
6538
|
+
color: var(--wui-color-text);
|
|
6539
|
+
padding: 0;
|
|
6540
|
+
transition: background-color var(--wui-motion-duration-01) var(--wui-motion-ease);
|
|
6541
|
+
|
|
6542
|
+
&:hover:not([disabled]) {
|
|
6543
|
+
background-color: var(--wui-color-bg-surface-hover);
|
|
6544
|
+
}
|
|
6545
|
+
|
|
6546
|
+
&:focus-visible {
|
|
6547
|
+
outline: 2px solid var(--wui-color-focus-ring);
|
|
6548
|
+
outline-offset: 1px;
|
|
6549
|
+
}
|
|
6550
|
+
}
|
|
6551
|
+
|
|
6552
|
+
/* Day button — today */
|
|
6553
|
+
.rdp-today .rdp-day_button {
|
|
6554
|
+
color: var(--wui-color-text-button-blue);
|
|
6555
|
+
font-weight: var(--wui-typography-weight-label-bold);
|
|
6556
|
+
}
|
|
6557
|
+
|
|
6558
|
+
/* Day button — outside month */
|
|
6559
|
+
.rdp-outside .rdp-day_button {
|
|
6560
|
+
color: var(--wui-color-text-secondary);
|
|
6561
|
+
}
|
|
6562
|
+
|
|
6563
|
+
/* Day button — selected */
|
|
6564
|
+
.rdp-selected .rdp-day_button {
|
|
6565
|
+
background-color: var(--wui-color-bg-fill);
|
|
6566
|
+
color: var(--wui-color-text-on-fill);
|
|
6567
|
+
|
|
6568
|
+
&:hover:not([disabled]) {
|
|
6569
|
+
background-color: var(--wui-color-bg-fill-hover);
|
|
6570
|
+
}
|
|
6571
|
+
}
|
|
6572
|
+
|
|
6573
|
+
/* Day button — disabled */
|
|
6574
|
+
.rdp-disabled .rdp-day_button {
|
|
6575
|
+
color: var(--wui-color-text-disabled);
|
|
6576
|
+
font-weight: var(--wui-typography-weight-body);
|
|
6577
|
+
cursor: not-allowed;
|
|
6578
|
+
}
|
|
6579
|
+
|
|
6580
|
+
/* Day button — disabled + selected (forced state: match disabled button) */
|
|
6581
|
+
.rdp-selected.rdp-disabled .rdp-day_button {
|
|
6582
|
+
background-color: var(--wui-color-bg-surface-disabled);
|
|
6583
|
+
color: var(--wui-color-text-disabled);
|
|
6584
|
+
}
|
|
6585
|
+
|
|
6586
|
+
/* Range — cell backgrounds (the connecting band on the <td>) */
|
|
6587
|
+
.rdp-range_start {
|
|
6588
|
+
border-top-left-radius: var(--wui-border-radius-rounded);
|
|
6589
|
+
border-bottom-left-radius: var(--wui-border-radius-rounded);
|
|
6590
|
+
background-color: var(--wui-color-bg-surface-selected);
|
|
6591
|
+
}
|
|
6592
|
+
|
|
6593
|
+
.rdp-range_end {
|
|
6594
|
+
border-top-right-radius: var(--wui-border-radius-rounded);
|
|
6595
|
+
border-bottom-right-radius: var(--wui-border-radius-rounded);
|
|
6596
|
+
background-color: var(--wui-color-bg-surface-selected);
|
|
6597
|
+
}
|
|
6598
|
+
|
|
6599
|
+
.rdp-range_middle {
|
|
6600
|
+
background-color: var(--wui-color-bg-surface-selected);
|
|
6601
|
+
}
|
|
6602
|
+
|
|
6603
|
+
.rdp-range_start.rdp-range_end {
|
|
6604
|
+
background-color: transparent;
|
|
6605
|
+
}
|
|
6606
|
+
|
|
6607
|
+
/* Range — button overrides */
|
|
6608
|
+
.rdp-range_start .rdp-day_button,
|
|
6609
|
+
.rdp-range_end .rdp-day_button {
|
|
6610
|
+
background-color: var(--wui-color-bg-fill);
|
|
6611
|
+
color: var(--wui-color-text-on-fill);
|
|
6612
|
+
}
|
|
6613
|
+
|
|
6614
|
+
.rdp-range_middle .rdp-day_button {
|
|
6615
|
+
color: var(--wui-color-text-selected);
|
|
6616
|
+
background: none;
|
|
6617
|
+
|
|
6618
|
+
&:hover:not([disabled]) {
|
|
6619
|
+
background-color: var(--wui-color-bg-surface-selected-hover);
|
|
6620
|
+
}
|
|
6621
|
+
}
|
|
6622
|
+
|
|
6623
|
+
/* Hidden */
|
|
6624
|
+
.rdp-hidden {
|
|
6625
|
+
visibility: hidden;
|
|
6626
|
+
}
|
|
6627
|
+
`;
|
|
6628
|
+
//#endregion
|
|
6629
|
+
//#region src/components/Stack/Stack.tsx
|
|
6630
|
+
const DEFAULT_ELEMENT$1 = "div";
|
|
6631
|
+
const StyledStack = styled.div`
|
|
6632
|
+
display: flex;
|
|
6633
|
+
flex-direction: ${({ $direction }) => $direction === "horizontal" ? "row" : "column"};
|
|
6634
|
+
gap: ${({ $gap }) => `var(--wui-${$gap})`};
|
|
6635
|
+
align-items: ${({ $alignItems }) => $alignItems};
|
|
6636
|
+
${({ $paddingX }) => $paddingX && `padding-left: var(--wui-${$paddingX}); padding-right: var(--wui-${$paddingX});`}
|
|
6637
|
+
${({ $paddingY }) => $paddingY && `padding-top: var(--wui-${$paddingY}); padding-bottom: var(--wui-${$paddingY});`}
|
|
6638
|
+
`;
|
|
6639
|
+
const StackComponent = forwardRef(({ renderAs, direction = "vertical", gap = "space-02", alignItems = "stretch", padding, ...props }, ref) => {
|
|
6640
|
+
const responsiveGap = useResponsiveProp(gap);
|
|
6641
|
+
const responsiveDirection = useResponsiveProp(direction);
|
|
6642
|
+
return /* @__PURE__ */ jsx(StyledStack, {
|
|
6643
|
+
ref,
|
|
6644
|
+
$alignItems: useResponsiveProp(alignItems),
|
|
6645
|
+
$direction: responsiveDirection,
|
|
6646
|
+
$gap: responsiveGap,
|
|
6647
|
+
$paddingX: useResponsiveProp(padding?.x),
|
|
6648
|
+
$paddingY: useResponsiveProp(padding?.y),
|
|
6649
|
+
as: renderAs ?? DEFAULT_ELEMENT$1,
|
|
6650
|
+
...props
|
|
6651
|
+
});
|
|
6652
|
+
});
|
|
6653
|
+
StackComponent.displayName = "Stack_UI";
|
|
6654
|
+
/**
|
|
6655
|
+
* Used to layout its children in a vertical or horizontal stack. The gap between each item in the stack can be customized.
|
|
6656
|
+
* This allows for layouting children in a consistent way without needing to manually add margins or padding.
|
|
6657
|
+
*/
|
|
6658
|
+
const Stack = makePolymorphic(StackComponent);
|
|
6659
|
+
//#endregion
|
|
6660
|
+
//#region src/components/Calendar/Calendar.tsx
|
|
6661
|
+
const StyledCalendarWrapper = styled.div`
|
|
6662
|
+
${calendarCss}
|
|
6663
|
+
`;
|
|
6664
|
+
/**
|
|
6665
|
+
* Removes keys with `undefined` values so that exactOptionalPropertyTypes
|
|
6666
|
+
* does not complain when we spread into DayPicker.
|
|
6667
|
+
*/
|
|
6668
|
+
const stripUndefined = (obj) => Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== void 0));
|
|
6669
|
+
/**
|
|
6670
|
+
* A calendar grid for selecting dates or date ranges. Built on
|
|
6671
|
+
* react-day-picker and styled with WUI design tokens. Pass `CalendarPreset`
|
|
6672
|
+
* children to render preset shortcuts next to the grid.
|
|
6673
|
+
*/
|
|
6674
|
+
const Calendar = (props) => {
|
|
6675
|
+
const { mode, selected, onSelect, month, defaultMonth, onMonthChange, startMonth, endMonth, disabled, numberOfMonths = 1, showOutsideDays, weekStartsOn, children, ...rest } = props;
|
|
6676
|
+
const rangeMin = mode === "range" ? props.min : void 0;
|
|
6677
|
+
const rangeMax = mode === "range" ? props.max : void 0;
|
|
6678
|
+
const [internalMonth, setInternalMonth] = useState(() => month ?? defaultMonth);
|
|
6679
|
+
const displayMonth = month ?? internalMonth;
|
|
6680
|
+
const handleMonthChange = useCallback((nextMonth) => {
|
|
6681
|
+
setInternalMonth(nextMonth);
|
|
6682
|
+
onMonthChange?.(nextMonth);
|
|
6683
|
+
}, [onMonthChange]);
|
|
6684
|
+
const dayPickerProps = stripUndefined({
|
|
6685
|
+
...mode === "range" ? {
|
|
6686
|
+
mode: "range",
|
|
6687
|
+
selected,
|
|
6688
|
+
onSelect,
|
|
6689
|
+
min: rangeMin,
|
|
6690
|
+
max: rangeMax
|
|
6691
|
+
} : {
|
|
6692
|
+
mode: "single",
|
|
6693
|
+
selected,
|
|
6694
|
+
onSelect
|
|
6695
|
+
},
|
|
6696
|
+
components: { Nav: CalendarNavigation },
|
|
6697
|
+
disabled,
|
|
6698
|
+
endMonth,
|
|
6699
|
+
month: displayMonth,
|
|
6700
|
+
numberOfMonths,
|
|
6701
|
+
onMonthChange: handleMonthChange,
|
|
6702
|
+
showOutsideDays,
|
|
6703
|
+
startMonth,
|
|
6704
|
+
weekStartsOn
|
|
6705
|
+
});
|
|
6706
|
+
const contextValue = useMemo(() => ({
|
|
6707
|
+
selected,
|
|
6708
|
+
onSelectPreset: (value) => {
|
|
6709
|
+
if (value instanceof Date) {
|
|
6710
|
+
onSelect?.(value);
|
|
6711
|
+
handleMonthChange(value);
|
|
6712
|
+
return;
|
|
6713
|
+
}
|
|
6714
|
+
onSelect?.(value);
|
|
6715
|
+
if (value.from) handleMonthChange(value.from);
|
|
6716
|
+
}
|
|
6717
|
+
}), [
|
|
6718
|
+
selected,
|
|
6719
|
+
onSelect,
|
|
6720
|
+
handleMonthChange
|
|
6721
|
+
]);
|
|
6722
|
+
const hasPresets = Children.toArray(children).length > 0;
|
|
6723
|
+
return /* @__PURE__ */ jsx(CalendarProvider, {
|
|
6724
|
+
value: contextValue,
|
|
6725
|
+
children: /* @__PURE__ */ jsxs(StyledCalendarWrapper, {
|
|
6726
|
+
...rest,
|
|
6727
|
+
children: [hasPresets ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Stack, {
|
|
6728
|
+
direction: "vertical",
|
|
6729
|
+
gap: "space-02",
|
|
6730
|
+
children
|
|
6731
|
+
}), /* @__PURE__ */ jsx(Divider, { orientation: "vertical" })] }) : null, /* @__PURE__ */ jsx(DayPicker, { ...dayPickerProps })]
|
|
6732
|
+
})
|
|
6733
|
+
});
|
|
6734
|
+
};
|
|
6735
|
+
Calendar.displayName = "Calendar_UI";
|
|
6736
|
+
//#endregion
|
|
6737
|
+
//#region src/components/Calendar/CalendarPreset.tsx
|
|
6738
|
+
const StyledPreset = styled.button`
|
|
6739
|
+
background: none;
|
|
6740
|
+
border: none;
|
|
6741
|
+
border-radius: var(--wui-border-radius-02);
|
|
6742
|
+
color: var(--wui-color-text);
|
|
6743
|
+
cursor: pointer;
|
|
6744
|
+
font-family: var(--wui-typography-label-3-family);
|
|
6745
|
+
font-size: var(--wui-typography-label-3-size);
|
|
6746
|
+
font-weight: var(--wui-typography-label-3-weight);
|
|
6747
|
+
line-height: var(--wui-typography-label-3-line-height);
|
|
6748
|
+
padding: var(--wui-space-02);
|
|
6749
|
+
text-align: start;
|
|
6750
|
+
transition: background-color var(--wui-motion-duration-01) var(--wui-motion-ease);
|
|
6751
|
+
white-space: nowrap;
|
|
6752
|
+
|
|
6753
|
+
&:hover:not([disabled]) {
|
|
6754
|
+
background-color: var(--wui-color-bg-surface-hover);
|
|
6755
|
+
}
|
|
6756
|
+
|
|
6757
|
+
&:focus-visible {
|
|
6758
|
+
outline: 2px solid var(--wui-color-focus-ring);
|
|
6759
|
+
outline-offset: 1px;
|
|
6760
|
+
}
|
|
6761
|
+
|
|
6762
|
+
&[aria-pressed='true'] {
|
|
6763
|
+
background-color: var(--wui-color-bg-surface-selected);
|
|
6764
|
+
color: var(--wui-color-text-selected);
|
|
6765
|
+
|
|
6766
|
+
&:hover:not([disabled]) {
|
|
6767
|
+
background-color: var(--wui-color-bg-surface-selected-hover);
|
|
6768
|
+
}
|
|
6769
|
+
}
|
|
6770
|
+
`;
|
|
6771
|
+
const isDateRange = (value) => !(value instanceof Date);
|
|
6772
|
+
const isSameDay = (left, right) => {
|
|
6773
|
+
if (!left || !right) return false;
|
|
6774
|
+
return left.getFullYear() === right.getFullYear() && left.getMonth() === right.getMonth() && left.getDate() === right.getDate();
|
|
6775
|
+
};
|
|
6776
|
+
const isActivePreset = (selected, value) => {
|
|
6777
|
+
if (!selected) return false;
|
|
6778
|
+
if (isDateRange(value)) {
|
|
6779
|
+
if (selected instanceof Date) return false;
|
|
6780
|
+
return isSameDay(selected.from, value.from) && isSameDay(selected.to, value.to);
|
|
6781
|
+
}
|
|
6782
|
+
if (selected instanceof Date) return isSameDay(selected, value);
|
|
6783
|
+
return false;
|
|
6784
|
+
};
|
|
6785
|
+
/**
|
|
6786
|
+
* A single preset button rendered inside a `Calendar`. Clicking a preset
|
|
6787
|
+
* selects its `value` and navigates the calendar to show it.
|
|
6788
|
+
*/
|
|
6789
|
+
const CalendarPreset = ({ value, children, ...rest }) => {
|
|
6790
|
+
const { selected, onSelectPreset } = useCalendarContext();
|
|
6791
|
+
const isActive = isActivePreset(selected, value);
|
|
6792
|
+
return /* @__PURE__ */ jsx(StyledPreset, {
|
|
6793
|
+
...rest,
|
|
6794
|
+
"aria-pressed": isActive,
|
|
6795
|
+
onClick: () => onSelectPreset(value),
|
|
6796
|
+
type: "button",
|
|
6797
|
+
children
|
|
6798
|
+
});
|
|
6799
|
+
};
|
|
6800
|
+
CalendarPreset.displayName = "CalendarPreset_UI";
|
|
6801
|
+
//#endregion
|
|
6361
6802
|
//#region src/components/Card/Card.tsx
|
|
6362
6803
|
const StyledCard$1 = styled(Box)`
|
|
6363
6804
|
${({ $colorScheme }) => getColorScheme($colorScheme)};
|
|
@@ -6516,37 +6957,6 @@ const FormControlLabel = ({ align = "left", label, description, disabled = false
|
|
|
6516
6957
|
};
|
|
6517
6958
|
FormControlLabel.displayName = "FormControlLabel";
|
|
6518
6959
|
//#endregion
|
|
6519
|
-
//#region src/components/Stack/Stack.tsx
|
|
6520
|
-
const DEFAULT_ELEMENT$1 = "div";
|
|
6521
|
-
const StyledStack = styled.div`
|
|
6522
|
-
display: flex;
|
|
6523
|
-
flex-direction: ${({ $direction }) => $direction === "horizontal" ? "row" : "column"};
|
|
6524
|
-
gap: ${({ $gap }) => `var(--wui-${$gap})`};
|
|
6525
|
-
align-items: ${({ $alignItems }) => $alignItems};
|
|
6526
|
-
${({ $paddingX }) => $paddingX && `padding-left: var(--wui-${$paddingX}); padding-right: var(--wui-${$paddingX});`}
|
|
6527
|
-
${({ $paddingY }) => $paddingY && `padding-top: var(--wui-${$paddingY}); padding-bottom: var(--wui-${$paddingY});`}
|
|
6528
|
-
`;
|
|
6529
|
-
const StackComponent = forwardRef(({ renderAs, direction = "vertical", gap = "space-02", alignItems = "stretch", padding, ...props }, ref) => {
|
|
6530
|
-
const responsiveGap = useResponsiveProp(gap);
|
|
6531
|
-
const responsiveDirection = useResponsiveProp(direction);
|
|
6532
|
-
return /* @__PURE__ */ jsx(StyledStack, {
|
|
6533
|
-
ref,
|
|
6534
|
-
$alignItems: useResponsiveProp(alignItems),
|
|
6535
|
-
$direction: responsiveDirection,
|
|
6536
|
-
$gap: responsiveGap,
|
|
6537
|
-
$paddingX: useResponsiveProp(padding?.x),
|
|
6538
|
-
$paddingY: useResponsiveProp(padding?.y),
|
|
6539
|
-
as: renderAs ?? DEFAULT_ELEMENT$1,
|
|
6540
|
-
...props
|
|
6541
|
-
});
|
|
6542
|
-
});
|
|
6543
|
-
StackComponent.displayName = "Stack_UI";
|
|
6544
|
-
/**
|
|
6545
|
-
* Used to layout its children in a vertical or horizontal stack. The gap between each item in the stack can be customized.
|
|
6546
|
-
* This allows for layouting children in a consistent way without needing to manually add margins or padding.
|
|
6547
|
-
*/
|
|
6548
|
-
const Stack = makePolymorphic(StackComponent);
|
|
6549
|
-
//#endregion
|
|
6550
6960
|
//#region src/components/FormGroup/FormGroup.tsx
|
|
6551
6961
|
const StyledFieldset = styled.fieldset`
|
|
6552
6962
|
padding: 0;
|
|
@@ -10178,50 +10588,6 @@ const DataListItemValue = (props) => {
|
|
|
10178
10588
|
};
|
|
10179
10589
|
DataListItemValue.displayName = "DataListItemValue_UI";
|
|
10180
10590
|
//#endregion
|
|
10181
|
-
//#region src/components/Divider/Divider.tsx
|
|
10182
|
-
const horizontalBorderCss = css`
|
|
10183
|
-
border-top-color: var(--wui-color-border);
|
|
10184
|
-
border-top-style: solid;
|
|
10185
|
-
border-top-width: 1px;
|
|
10186
|
-
clear: both; /* for horizontal dividers, ensure it clears any floats */
|
|
10187
|
-
height: 0;
|
|
10188
|
-
margin-left: var(--wui-divider-inset);
|
|
10189
|
-
margin-right: var(--wui-divider-inset);
|
|
10190
|
-
`;
|
|
10191
|
-
const verticalBorderCss = css`
|
|
10192
|
-
background-color: var(--wui-color-border);
|
|
10193
|
-
max-width: 1px;
|
|
10194
|
-
min-height: 100%;
|
|
10195
|
-
width: 1px;
|
|
10196
|
-
margin-top: var(--wui-divider-inset);
|
|
10197
|
-
margin-bottom: var(--wui-divider-inset);
|
|
10198
|
-
`;
|
|
10199
|
-
const DividerComponent = styled.div`
|
|
10200
|
-
${({ $orientation }) => {
|
|
10201
|
-
switch ($orientation) {
|
|
10202
|
-
case "vertical": return verticalBorderCss;
|
|
10203
|
-
default: return horizontalBorderCss;
|
|
10204
|
-
}
|
|
10205
|
-
}}
|
|
10206
|
-
--wui-divider-inset: ${({ $inset }) => `var(--wui-${$inset})`};
|
|
10207
|
-
|
|
10208
|
-
align-self: stretch;
|
|
10209
|
-
`;
|
|
10210
|
-
/**
|
|
10211
|
-
* A line used to visually separate content; note that dividers have no external margin/spacing on their own.
|
|
10212
|
-
*/
|
|
10213
|
-
const Divider = ({ orientation = "horizontal", inset = "space-00", ...props }) => {
|
|
10214
|
-
const responsiveOrientation = useResponsiveProp(orientation);
|
|
10215
|
-
return /* @__PURE__ */ jsx(DividerComponent, {
|
|
10216
|
-
$inset: useResponsiveProp(inset),
|
|
10217
|
-
$orientation: responsiveOrientation,
|
|
10218
|
-
"aria-orientation": responsiveOrientation,
|
|
10219
|
-
role: "separator",
|
|
10220
|
-
...props
|
|
10221
|
-
});
|
|
10222
|
-
};
|
|
10223
|
-
Divider.displayName = "Divider_UI";
|
|
10224
|
-
//#endregion
|
|
10225
10591
|
//#region src/components/EditableHeading/EditableHeading.tsx
|
|
10226
10592
|
const StyledInput$1 = styled(Input)`
|
|
10227
10593
|
&:not([rows]) {
|
|
@@ -14394,6 +14760,6 @@ const WistiaLogo = ({ description = void 0, height = 100, hoverColor = void 0, h
|
|
|
14394
14760
|
};
|
|
14395
14761
|
WistiaLogo.displayName = "WistiaLogo_UI";
|
|
14396
14762
|
//#endregion
|
|
14397
|
-
export { ActionButton, Avatar, Badge, Banner, Box, Breadcrumb, Breadcrumbs, Button, ButtonGroup, Card, Center, Checkbox, CheckboxGroup, CheckboxMenuItem, ClickRegion, Collapsible, CollapsibleContent, CollapsibleTrigger, CollapsibleTriggerIcon, ColorGrid, ColorGridOption, ColorList, ColorListGroup, ColorListOption, ColorPicker, ColorPickerPopoverContent, ColorPickerSection, ColorPickerTrigger, ColorSchemeWrapper, Combobox, ComboboxOption, ContextMenu, ContrastControls, CustomizableThemeWrapper, DataCard, DataCardHoverArrow, DataCardTrend, DataCards, DataList, DataListItem, DataListItemLabel, DataListItemValue, Divider, EditableHeading, EditableText, EditableTextCancelButton, EditableTextContext, EditableTextDisplay, EditableTextInput, EditableTextLabel, EditableTextRoot, EditableTextSubmitButton, EditableTextTrigger, Ellipsis, FeatureCard, FeatureCardImage, FileAmountLimitValidator, FileSizeValidator, FileTypeValidator, FilterMenu, FilterMenuItem, Form, FormErrorSummary, FormField, FormGroup, Grid, Heading, HexColorInput, HueSlider, Icon, IconButton, Image, ImageDimensionsValidator, Input, InputClickToCopy, InputPassword, KeyboardShortcut, Label, Link, List, ListItem, Mark, Markdown, Menu, MenuItem, MenuItemDescription, MenuItemLabel, MenuLabel, MenuRadioGroup, Meter, Modal, ModalCallout, ModalCallouts, PersistentFileAmountLimitValidator, Popover, PreviewCard, ProgressBar, Radio, RadioCard, RadioCardImage, RadioGroup, RadioMenuItem, SaturationAndValuePicker, ScreenReaderOnly, ScrollArea, SegmentedControl, SegmentedControlItem, Select, SelectOption, SelectOptionGroup, Slider, SplitButton, Stack, SubMenu, Switch, Table, TableBody, TableCell, TableFoot, TableHead, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, Text, Thumbnail, ThumbnailBadge, ThumbnailCollage, Tooltip, UIProvider, ValueNameOrHexCode, ValueSwatch, WistiaLogo, calculateContrast, coerceToBoolean, colorSchemeOptions, copyToClipboard, dateTime, iconSizeMap, isKeyboardKey, mergeRefs, mq, useActiveMq, useAriaLive, useBoolean, useClipboard, useElementObserver, useFilePicker, useFocusTrap, useForceUpdate, useFormState, useImperativeFilePicker, useIsHovered, useKey, useKeyPress, useLocalStorage, useLockBodyScroll, useMq, useOnClickOutside, usePreviousValue, useToast, useWindowSize, validateWithYup };
|
|
14763
|
+
export { ActionButton, Avatar, Badge, Banner, Box, Breadcrumb, Breadcrumbs, Button, ButtonGroup, Calendar, CalendarPreset, Card, Center, Checkbox, CheckboxGroup, CheckboxMenuItem, ClickRegion, Collapsible, CollapsibleContent, CollapsibleTrigger, CollapsibleTriggerIcon, ColorGrid, ColorGridOption, ColorList, ColorListGroup, ColorListOption, ColorPicker, ColorPickerPopoverContent, ColorPickerSection, ColorPickerTrigger, ColorSchemeWrapper, Combobox, ComboboxOption, ContextMenu, ContrastControls, CustomizableThemeWrapper, DataCard, DataCardHoverArrow, DataCardTrend, DataCards, DataList, DataListItem, DataListItemLabel, DataListItemValue, Divider, EditableHeading, EditableText, EditableTextCancelButton, EditableTextContext, EditableTextDisplay, EditableTextInput, EditableTextLabel, EditableTextRoot, EditableTextSubmitButton, EditableTextTrigger, Ellipsis, FeatureCard, FeatureCardImage, FileAmountLimitValidator, FileSizeValidator, FileTypeValidator, FilterMenu, FilterMenuItem, Form, FormErrorSummary, FormField, FormGroup, Grid, Heading, HexColorInput, HueSlider, Icon, IconButton, Image, ImageDimensionsValidator, Input, InputClickToCopy, InputPassword, KeyboardShortcut, Label, Link, List, ListItem, Mark, Markdown, Menu, MenuItem, MenuItemDescription, MenuItemLabel, MenuLabel, MenuRadioGroup, Meter, Modal, ModalCallout, ModalCallouts, PersistentFileAmountLimitValidator, Popover, PreviewCard, ProgressBar, Radio, RadioCard, RadioCardImage, RadioGroup, RadioMenuItem, SaturationAndValuePicker, ScreenReaderOnly, ScrollArea, SegmentedControl, SegmentedControlItem, Select, SelectOption, SelectOptionGroup, Slider, SplitButton, Stack, SubMenu, Switch, Table, TableBody, TableCell, TableFoot, TableHead, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, Text, Thumbnail, ThumbnailBadge, ThumbnailCollage, Tooltip, UIProvider, ValueNameOrHexCode, ValueSwatch, WistiaLogo, calculateContrast, coerceToBoolean, colorSchemeOptions, copyToClipboard, dateTime, iconSizeMap, isKeyboardKey, mergeRefs, mq, useActiveMq, useAriaLive, useBoolean, useClipboard, useElementObserver, useFilePicker, useFocusTrap, useForceUpdate, useFormState, useImperativeFilePicker, useIsHovered, useKey, useKeyPress, useLocalStorage, useLockBodyScroll, useMq, useOnClickOutside, usePreviousValue, useToast, useWindowSize, validateWithYup };
|
|
14398
14764
|
|
|
14399
14765
|
//# sourceMappingURL=index.js.map
|