myoperator-mcp 0.2.385 → 0.2.387
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.js +91 -54
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3494,6 +3494,14 @@ const DEFAULT_MINUTE_STEP = 5;
|
|
|
3494
3494
|
const DEFAULT_SECOND_STEP = 5;
|
|
3495
3495
|
const TIME_COLUMN_MAX_HEIGHT = 168;
|
|
3496
3496
|
const DEFAULT_PLACEHOLDER = "--/--/---- --:-- --";
|
|
3497
|
+
/**
|
|
3498
|
+
* Masks used when only one half of a date-time value is filled in. The trigger
|
|
3499
|
+
* keeps both segments in place so the field reads as "date selected, time still
|
|
3500
|
+
* missing" rather than silently collapsing to a single value.
|
|
3501
|
+
*/
|
|
3502
|
+
const DATE_SEGMENT_MASK = "--/--/----";
|
|
3503
|
+
const TIME_SEGMENT_MASK = "--:-- --";
|
|
3504
|
+
const TIME_SEGMENT_MASK_WITH_SECONDS = "--:--:-- --";
|
|
3497
3505
|
const POPOVER_WIDTH = 336;
|
|
3498
3506
|
// The popover follows the trigger width but is clamped to a usable design range
|
|
3499
3507
|
// so it neither stretches across a full-width desktop field nor overflows a
|
|
@@ -3541,7 +3549,7 @@ const dateTimePickerVariants = cva("relative inline-block w-full max-w-full", {
|
|
|
3541
3549
|
});
|
|
3542
3550
|
|
|
3543
3551
|
const dateTimePickerTriggerVariants = cva(
|
|
3544
|
-
"flex w-full items-center justify-between border border-solid border-semantic-border-input bg-semantic-bg-primary text-left text-semantic-text-primary outline-none transition-colors hover:border-semantic-border-input-focus/50 disabled:cursor-not-allowed disabled:opacity-50",
|
|
3552
|
+
"flex w-full items-center justify-between border border-solid border-[var(--semantic-border-input,#E9EAEB)] bg-[var(--semantic-bg-primary,#FFFFFF)] text-left text-[var(--semantic-text-primary,#181D27)] outline-none transition-colors hover:border-semantic-border-input-focus/50 disabled:cursor-not-allowed disabled:opacity-50",
|
|
3545
3553
|
{
|
|
3546
3554
|
variants: {
|
|
3547
3555
|
size: {
|
|
@@ -3551,8 +3559,7 @@ const dateTimePickerTriggerVariants = cva(
|
|
|
3551
3559
|
},
|
|
3552
3560
|
state: {
|
|
3553
3561
|
default: "",
|
|
3554
|
-
error:
|
|
3555
|
-
"border-semantic-error-primary hover:border-semantic-error-primary",
|
|
3562
|
+
error: "border-[var(--semantic-error-primary,#F04438)] hover:border-[var(--semantic-error-primary,#F04438)]",
|
|
3556
3563
|
},
|
|
3557
3564
|
},
|
|
3558
3565
|
defaultVariants: {
|
|
@@ -3903,7 +3910,8 @@ function formatValueForDisplay(
|
|
|
3903
3910
|
value: DateTimePickerValue,
|
|
3904
3911
|
variant: DateTimePickerVariant,
|
|
3905
3912
|
showEndTime: boolean,
|
|
3906
|
-
showSeconds: boolean
|
|
3913
|
+
showSeconds: boolean,
|
|
3914
|
+
maskMissingSegments = false
|
|
3907
3915
|
) {
|
|
3908
3916
|
if (variant === "date-only") {
|
|
3909
3917
|
return formatDateOnlyForDisplay(value.date);
|
|
@@ -3924,6 +3932,17 @@ function formatValueForDisplay(
|
|
|
3924
3932
|
|
|
3925
3933
|
if (!datePart && !timePart) return "";
|
|
3926
3934
|
|
|
3935
|
+
// Both segments are visible in the \`date-time\` variant, so a half-filled value
|
|
3936
|
+
// renders the missing half as its own placeholder mask instead of collapsing \u2014
|
|
3937
|
+
// otherwise a date-only selection reads as a complete value.
|
|
3938
|
+
if (maskMissingSegments) {
|
|
3939
|
+
const timeMask = showSeconds
|
|
3940
|
+
? TIME_SEGMENT_MASK_WITH_SECONDS
|
|
3941
|
+
: TIME_SEGMENT_MASK;
|
|
3942
|
+
|
|
3943
|
+
return [datePart || DATE_SEGMENT_MASK, timePart || timeMask].join(" ");
|
|
3944
|
+
}
|
|
3945
|
+
|
|
3927
3946
|
return [datePart, timePart].filter(Boolean).join(" ");
|
|
3928
3947
|
}
|
|
3929
3948
|
|
|
@@ -4595,7 +4614,7 @@ function CalendarDropdown({
|
|
|
4595
4614
|
role="listbox"
|
|
4596
4615
|
aria-label={\`\${label} options\`}
|
|
4597
4616
|
data-dtp-dropdown=""
|
|
4598
|
-
className="flex flex-col gap-0.5 overflow-y-auto rounded-md border border-solid border-semantic-border-layout bg-semantic-bg-primary p-1 shadow-lg [scrollbar-width:thin] [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-semantic-border-secondary [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar]:w-1.5"
|
|
4617
|
+
className="flex flex-col gap-0.5 overflow-y-auto rounded-md border border-solid border-[var(--semantic-border-layout,#E9EAEB)] bg-[var(--semantic-bg-primary,#FFFFFF)] p-1 shadow-lg [scrollbar-width:thin] [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-semantic-border-secondary [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar]:w-1.5"
|
|
4599
4618
|
style={{
|
|
4600
4619
|
...floatingStyles,
|
|
4601
4620
|
width: \`var(\${DROPDOWN_WIDTH_VAR}, auto)\`,
|
|
@@ -4615,8 +4634,8 @@ function CalendarDropdown({
|
|
|
4615
4634
|
className={cn(
|
|
4616
4635
|
"flex w-full shrink-0 items-center rounded-md border border-solid px-2 py-1.5 text-left text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-40",
|
|
4617
4636
|
option.value === value
|
|
4618
|
-
? "border-semantic-info-border bg-semantic-info-surface font-semibold text-semantic-text-primary"
|
|
4619
|
-
: "border-transparent text-semantic-text-secondary hover:bg-semantic-bg-hover"
|
|
4637
|
+
? "border-[var(--semantic-info-border,#A8C0EC)] bg-[var(--semantic-info-surface,#ECF1FB)] font-semibold text-[var(--semantic-text-primary,#181D27)]"
|
|
4638
|
+
: "border-transparent text-[var(--semantic-text-secondary,#343E55)] hover:bg-[var(--semantic-bg-hover,#D5D7DA)]"
|
|
4620
4639
|
)}
|
|
4621
4640
|
onClick={() => {
|
|
4622
4641
|
if (option.disabled) return;
|
|
@@ -4665,8 +4684,8 @@ function TimeColumn({
|
|
|
4665
4684
|
}, []);
|
|
4666
4685
|
|
|
4667
4686
|
return (
|
|
4668
|
-
<div className="flex min-w-0 flex-col border-r border-solid border-semantic-border-layout last:border-r-0">
|
|
4669
|
-
<div className="border-b border-solid border-semantic-border-layout px-1 py-2 text-center text-[11px] font-semibold uppercase tracking-wide text-semantic-text-muted">
|
|
4687
|
+
<div className="flex min-w-0 flex-col border-r border-solid border-[var(--semantic-border-layout,#E9EAEB)] last:border-r-0">
|
|
4688
|
+
<div className="border-b border-solid border-[var(--semantic-border-layout,#E9EAEB)] px-1 py-2 text-center text-[11px] font-semibold uppercase tracking-wide text-[var(--semantic-text-muted,#717680)]">
|
|
4670
4689
|
{header}
|
|
4671
4690
|
</div>
|
|
4672
4691
|
<div
|
|
@@ -4686,8 +4705,8 @@ function TimeColumn({
|
|
|
4686
4705
|
className={cn(
|
|
4687
4706
|
"flex shrink-0 items-center justify-center rounded-md border border-solid px-2 py-1.5 text-sm transition-colors",
|
|
4688
4707
|
option.selected
|
|
4689
|
-
? "border-semantic-info-border bg-semantic-info-surface font-semibold text-semantic-text-primary"
|
|
4690
|
-
: "border-transparent text-semantic-text-secondary hover:bg-semantic-bg-hover"
|
|
4708
|
+
? "border-[var(--semantic-info-border,#A8C0EC)] bg-[var(--semantic-info-surface,#ECF1FB)] font-semibold text-[var(--semantic-text-primary,#181D27)]"
|
|
4709
|
+
: "border-transparent text-[var(--semantic-text-secondary,#343E55)] hover:bg-[var(--semantic-bg-hover,#D5D7DA)]"
|
|
4691
4710
|
)}
|
|
4692
4711
|
onClick={() => onSelect(option.key)}
|
|
4693
4712
|
>
|
|
@@ -4770,7 +4789,7 @@ function TimeField({
|
|
|
4770
4789
|
<div className="flex flex-col gap-1.5">
|
|
4771
4790
|
<span
|
|
4772
4791
|
id={\`\${id}-label\`}
|
|
4773
|
-
className="block text-sm font-semibold text-semantic-text-secondary"
|
|
4792
|
+
className="block text-sm font-semibold text-[var(--semantic-text-secondary,#343E55)]"
|
|
4774
4793
|
>
|
|
4775
4794
|
{label}
|
|
4776
4795
|
</span>
|
|
@@ -4782,14 +4801,14 @@ function TimeField({
|
|
|
4782
4801
|
aria-haspopup="listbox"
|
|
4783
4802
|
aria-expanded={open}
|
|
4784
4803
|
className={cn(
|
|
4785
|
-
"flex h-[42px] w-full items-center gap-2 rounded border border-solid border-semantic-border-input bg-semantic-bg-primary px-3 text-left text-base text-semantic-text-primary outline-none transition-colors hover:border-semantic-border-input-focus/50",
|
|
4804
|
+
"flex h-[42px] w-full items-center gap-2 rounded border border-solid border-[var(--semantic-border-input,#E9EAEB)] bg-[var(--semantic-bg-primary,#FFFFFF)] px-3 text-left text-base text-[var(--semantic-text-primary,#181D27)] outline-none transition-colors hover:border-semantic-border-input-focus/50",
|
|
4786
4805
|
open &&
|
|
4787
4806
|
"border-semantic-border-input-focus/50 shadow-[0_0_0_1px_rgba(43,188,202,0.15)]"
|
|
4788
4807
|
)}
|
|
4789
4808
|
onClick={() => onOpenChange(!open)}
|
|
4790
4809
|
>
|
|
4791
4810
|
<Clock2
|
|
4792
|
-
className="size-4 shrink-0 text-semantic-text-muted"
|
|
4811
|
+
className="size-4 shrink-0 text-[var(--semantic-text-muted,#717680)]"
|
|
4793
4812
|
aria-hidden="true"
|
|
4794
4813
|
/>
|
|
4795
4814
|
<span className="m-0 min-w-0 flex-1 truncate">
|
|
@@ -4797,7 +4816,7 @@ function TimeField({
|
|
|
4797
4816
|
</span>
|
|
4798
4817
|
<ChevronDown
|
|
4799
4818
|
className={cn(
|
|
4800
|
-
"size-4 shrink-0 text-semantic-text-muted transition-transform",
|
|
4819
|
+
"size-4 shrink-0 text-[var(--semantic-text-muted,#717680)] transition-transform",
|
|
4801
4820
|
open && "rotate-180"
|
|
4802
4821
|
)}
|
|
4803
4822
|
aria-hidden="true"
|
|
@@ -4812,7 +4831,7 @@ function TimeField({
|
|
|
4812
4831
|
aria-label={\`\${label} options\`}
|
|
4813
4832
|
data-dtp-dropdown=""
|
|
4814
4833
|
className={cn(
|
|
4815
|
-
"grid overflow-hidden rounded-lg border border-solid border-semantic-border-layout bg-semantic-bg-primary shadow-lg",
|
|
4834
|
+
"grid overflow-hidden rounded-lg border border-solid border-[var(--semantic-border-layout,#E9EAEB)] bg-[var(--semantic-bg-primary,#FFFFFF)] shadow-lg",
|
|
4816
4835
|
showSeconds ? "grid-cols-4" : "grid-cols-3"
|
|
4817
4836
|
)}
|
|
4818
4837
|
style={{
|
|
@@ -4942,7 +4961,8 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
4942
4961
|
currentValue,
|
|
4943
4962
|
pickerVariant,
|
|
4944
4963
|
resolvedShowEndTime,
|
|
4945
|
-
resolvedShowSeconds
|
|
4964
|
+
resolvedShowSeconds,
|
|
4965
|
+
true
|
|
4946
4966
|
)
|
|
4947
4967
|
);
|
|
4948
4968
|
const [isDateInputFocused, setIsDateInputFocused] = React.useState(false);
|
|
@@ -5007,12 +5027,27 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5007
5027
|
const errorId = \`\${triggerId}-error\`;
|
|
5008
5028
|
const helperId = \`\${triggerId}-helper\`;
|
|
5009
5029
|
const describedBy = error ? errorId : helperText ? helperId : undefined;
|
|
5030
|
+
// Unmasked \u2014 this is what the typing path reads and writes. The masked variant
|
|
5031
|
+
// below is render-only; letting a mask reach \`dateInputValue\` would feed
|
|
5032
|
+
// "--/--/----" straight into the typed-input sanitizers.
|
|
5010
5033
|
const displayValue = formatValueForDisplay(
|
|
5011
5034
|
currentValue,
|
|
5012
5035
|
pickerVariant,
|
|
5013
5036
|
resolvedShowEndTime,
|
|
5014
5037
|
resolvedShowSeconds
|
|
5015
5038
|
);
|
|
5039
|
+
const maskedDisplayValue = formatValueForDisplay(
|
|
5040
|
+
currentValue,
|
|
5041
|
+
pickerVariant,
|
|
5042
|
+
resolvedShowEndTime,
|
|
5043
|
+
resolvedShowSeconds,
|
|
5044
|
+
true
|
|
5045
|
+
);
|
|
5046
|
+
const hasValue = Boolean(
|
|
5047
|
+
currentValue.date ||
|
|
5048
|
+
currentValue.startTime ||
|
|
5049
|
+
(resolvedShowEndTime && currentValue.endTime)
|
|
5050
|
+
);
|
|
5016
5051
|
const effectiveMinDate = React.useMemo(() => {
|
|
5017
5052
|
if (!disablePastDates) return minDate;
|
|
5018
5053
|
|
|
@@ -5068,9 +5103,9 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5068
5103
|
|
|
5069
5104
|
React.useEffect(() => {
|
|
5070
5105
|
if (!isDateInputFocused) {
|
|
5071
|
-
setDateInputValue(
|
|
5106
|
+
setDateInputValue(maskedDisplayValue);
|
|
5072
5107
|
}
|
|
5073
|
-
}, [
|
|
5108
|
+
}, [maskedDisplayValue, isDateInputFocused]);
|
|
5074
5109
|
|
|
5075
5110
|
React.useEffect(() => {
|
|
5076
5111
|
if (!open) return;
|
|
@@ -5353,7 +5388,8 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5353
5388
|
currentValue,
|
|
5354
5389
|
pickerVariant,
|
|
5355
5390
|
resolvedShowEndTime,
|
|
5356
|
-
resolvedShowSeconds
|
|
5391
|
+
resolvedShowSeconds,
|
|
5392
|
+
true
|
|
5357
5393
|
)
|
|
5358
5394
|
);
|
|
5359
5395
|
};
|
|
@@ -5373,7 +5409,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5373
5409
|
}
|
|
5374
5410
|
aria-label={showCalendar ? undefined : "Time picker"}
|
|
5375
5411
|
className={cn(
|
|
5376
|
-
"rounded-lg border border-solid border-semantic-border-layout bg-semantic-bg-primary shadow-lg flex flex-col min-h-0 overflow-y-auto overflow-x-hidden overscroll-contain pointer-events-auto",
|
|
5412
|
+
"rounded-lg border border-solid border-[var(--semantic-border-layout,#E9EAEB)] bg-[var(--semantic-bg-primary,#FFFFFF)] shadow-lg flex flex-col min-h-0 overflow-y-auto overflow-x-hidden overscroll-contain pointer-events-auto",
|
|
5377
5413
|
"[scrollbar-gutter:stable] [scrollbar-width:thin] [scrollbar-color:var(--semantic-border-secondary)_transparent]",
|
|
5378
5414
|
"[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-semantic-border-secondary"
|
|
5379
5415
|
)}
|
|
@@ -5399,7 +5435,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5399
5435
|
<button
|
|
5400
5436
|
type="button"
|
|
5401
5437
|
aria-label="Previous month"
|
|
5402
|
-
className="p-1 rounded hover:bg-semantic-bg-hover text-semantic-text-secondary transition-colors"
|
|
5438
|
+
className="p-1 rounded hover:bg-[var(--semantic-bg-hover,#D5D7DA)] text-[var(--semantic-text-secondary,#343E55)] transition-colors"
|
|
5403
5439
|
onClick={() =>
|
|
5404
5440
|
syncCalendarMonthAndValue(addMonths(visibleMonth, -1))
|
|
5405
5441
|
}
|
|
@@ -5471,7 +5507,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5471
5507
|
<button
|
|
5472
5508
|
type="button"
|
|
5473
5509
|
aria-label="Next month"
|
|
5474
|
-
className="p-1 rounded hover:bg-semantic-bg-hover text-semantic-text-secondary transition-colors"
|
|
5510
|
+
className="p-1 rounded hover:bg-[var(--semantic-bg-hover,#D5D7DA)] text-[var(--semantic-text-secondary,#343E55)] transition-colors"
|
|
5475
5511
|
onClick={() =>
|
|
5476
5512
|
syncCalendarMonthAndValue(addMonths(visibleMonth, 1))
|
|
5477
5513
|
}
|
|
@@ -5484,7 +5520,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5484
5520
|
{weekDays.map((day) => (
|
|
5485
5521
|
<div
|
|
5486
5522
|
key={day}
|
|
5487
|
-
className="mx-auto flex size-8 items-center justify-center text-xs font-semibold text-semantic-text-muted"
|
|
5523
|
+
className="mx-auto flex size-8 items-center justify-center text-xs font-semibold text-[var(--semantic-text-muted,#717680)]"
|
|
5488
5524
|
>
|
|
5489
5525
|
{day}
|
|
5490
5526
|
</div>
|
|
@@ -5514,13 +5550,13 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5514
5550
|
className={cn(
|
|
5515
5551
|
"relative flex items-center justify-center size-8 mx-auto rounded-full text-xs transition-colors",
|
|
5516
5552
|
isSelected
|
|
5517
|
-
? "bg-semantic-primary text-semantic-text-inverted font-semibold"
|
|
5553
|
+
? "bg-[var(--semantic-primary,#343E55)] text-[var(--semantic-text-inverted,#FFFFFF)] font-semibold"
|
|
5518
5554
|
: isCurrentMonth
|
|
5519
|
-
? "text-semantic-text-primary hover:bg-semantic-bg-hover"
|
|
5520
|
-
: "text-semantic-text-muted hover:bg-semantic-bg-hover",
|
|
5555
|
+
? "text-[var(--semantic-text-primary,#181D27)] hover:bg-[var(--semantic-bg-hover,#D5D7DA)]"
|
|
5556
|
+
: "text-[var(--semantic-text-muted,#717680)] hover:bg-[var(--semantic-bg-hover,#D5D7DA)]",
|
|
5521
5557
|
isToday &&
|
|
5522
5558
|
!isSelected &&
|
|
5523
|
-
"ring-1 ring-inset ring-semantic-border-secondary",
|
|
5559
|
+
"ring-1 ring-inset ring-[var(--semantic-border-secondary,#777E8D)]",
|
|
5524
5560
|
isDisabled &&
|
|
5525
5561
|
"opacity-40 cursor-not-allowed pointer-events-none"
|
|
5526
5562
|
)}
|
|
@@ -5544,9 +5580,9 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5544
5580
|
{showTimeFields && (
|
|
5545
5581
|
<div
|
|
5546
5582
|
className={cn(
|
|
5547
|
-
"space-y-3 bg-semantic-bg-primary p-3",
|
|
5583
|
+
"space-y-3 bg-[var(--semantic-bg-primary,#FFFFFF)] p-3",
|
|
5548
5584
|
showCalendar &&
|
|
5549
|
-
"border-t border-solid border-semantic-border-layout"
|
|
5585
|
+
"border-t border-solid border-[var(--semantic-border-layout,#E9EAEB)]"
|
|
5550
5586
|
)}
|
|
5551
5587
|
>
|
|
5552
5588
|
<TimeField
|
|
@@ -5623,13 +5659,13 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5623
5659
|
<label
|
|
5624
5660
|
htmlFor={triggerId}
|
|
5625
5661
|
className={cn(
|
|
5626
|
-
"mb-1.5 block text-sm font-semibold text-semantic-text-secondary",
|
|
5662
|
+
"mb-1.5 block text-sm font-semibold text-[var(--semantic-text-secondary,#343E55)]",
|
|
5627
5663
|
labelClassName
|
|
5628
5664
|
)}
|
|
5629
5665
|
>
|
|
5630
5666
|
{label}
|
|
5631
5667
|
{required && (
|
|
5632
|
-
<span className="text-semantic-error-primary ml-0.5">*</span>
|
|
5668
|
+
<span className="text-[var(--semantic-error-primary,#F04438)] ml-0.5">*</span>
|
|
5633
5669
|
)}
|
|
5634
5670
|
</label>
|
|
5635
5671
|
)}
|
|
@@ -5640,9 +5676,9 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5640
5676
|
open &&
|
|
5641
5677
|
resolvedState !== "error" &&
|
|
5642
5678
|
"border-semantic-border-input-focus/50 shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
|
|
5643
|
-
!displayValue && "text-semantic-text-placeholder",
|
|
5679
|
+
!displayValue && "text-[var(--semantic-text-placeholder,#A2A6B1)]",
|
|
5644
5680
|
disabled &&
|
|
5645
|
-
"cursor-not-allowed bg-semantic-bg-ui text-semantic-text-muted hover:border-semantic-border-input"
|
|
5681
|
+
"cursor-not-allowed bg-[var(--semantic-bg-ui,#F5F5F5)] text-[var(--semantic-text-muted,#717680)] hover:border-[var(--semantic-border-input,#E9EAEB)]"
|
|
5646
5682
|
)}
|
|
5647
5683
|
>
|
|
5648
5684
|
<input
|
|
@@ -5663,9 +5699,12 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5663
5699
|
? "Time"
|
|
5664
5700
|
: "Date and time"
|
|
5665
5701
|
}
|
|
5666
|
-
className="min-w-0 flex-1 bg-transparent text-base text-semantic-text-primary outline-none placeholder:text-semantic-text-placeholder disabled:cursor-not-allowed read-only:cursor-not-allowed"
|
|
5702
|
+
className="min-w-0 flex-1 bg-transparent text-base text-[var(--semantic-text-primary,#181D27)] outline-none placeholder:text-[var(--semantic-text-placeholder,#A2A6B1)] disabled:cursor-not-allowed read-only:cursor-not-allowed"
|
|
5667
5703
|
onFocus={() => {
|
|
5668
5704
|
setIsDateInputFocused(true);
|
|
5705
|
+
// Drop the placeholder masks while editing so the sanitizers only
|
|
5706
|
+
// ever see real date/time characters.
|
|
5707
|
+
setDateInputValue(displayValue);
|
|
5669
5708
|
setOpen(true);
|
|
5670
5709
|
}}
|
|
5671
5710
|
onClick={() => setOpen(true)}
|
|
@@ -5674,13 +5713,13 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5674
5713
|
onBlur={handleTypedDateBlur}
|
|
5675
5714
|
/>
|
|
5676
5715
|
{showClear &&
|
|
5677
|
-
(
|
|
5716
|
+
(hasValue || dateInputValue) &&
|
|
5678
5717
|
!disabled &&
|
|
5679
5718
|
!readOnly && (
|
|
5680
5719
|
<button
|
|
5681
5720
|
type="button"
|
|
5682
5721
|
aria-label="Clear date"
|
|
5683
|
-
className="inline-flex size-5 items-center justify-center rounded text-semantic-text-muted hover:bg-semantic-bg-hover hover:text-semantic-text-primary"
|
|
5722
|
+
className="inline-flex size-5 items-center justify-center rounded text-[var(--semantic-text-muted,#717680)] hover:bg-[var(--semantic-bg-hover,#D5D7DA)] hover:text-[var(--semantic-text-primary,#181D27)]"
|
|
5684
5723
|
onClick={clearValue}
|
|
5685
5724
|
>
|
|
5686
5725
|
<X className="size-4" aria-hidden="true" />
|
|
@@ -5690,7 +5729,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5690
5729
|
type="button"
|
|
5691
5730
|
disabled={disabled || readOnly}
|
|
5692
5731
|
aria-label={showCalendar ? "Open calendar" : "Open time picker"}
|
|
5693
|
-
className="inline-flex shrink-0 items-center justify-center rounded text-semantic-text-muted hover:bg-semantic-bg-hover hover:text-semantic-text-primary disabled:cursor-not-allowed"
|
|
5732
|
+
className="inline-flex shrink-0 items-center justify-center rounded text-[var(--semantic-text-muted,#717680)] hover:bg-[var(--semantic-bg-hover,#D5D7DA)] hover:text-[var(--semantic-text-primary,#181D27)] disabled:cursor-not-allowed"
|
|
5694
5733
|
onClick={() => setOpen(!open)}
|
|
5695
5734
|
>
|
|
5696
5735
|
{showCalendar ? (
|
|
@@ -5711,14 +5750,14 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
|
|
|
5711
5750
|
<span
|
|
5712
5751
|
id={errorId}
|
|
5713
5752
|
role="alert"
|
|
5714
|
-
className="text-sm text-semantic-error-primary"
|
|
5753
|
+
className="text-sm text-[var(--semantic-error-primary,#F04438)]"
|
|
5715
5754
|
>
|
|
5716
5755
|
{error}
|
|
5717
5756
|
</span>
|
|
5718
5757
|
) : (
|
|
5719
5758
|
<span
|
|
5720
5759
|
id={helperId}
|
|
5721
|
-
className="text-sm text-semantic-text-muted"
|
|
5760
|
+
className="text-sm text-[var(--semantic-text-muted,#717680)]"
|
|
5722
5761
|
>
|
|
5723
5762
|
{helperText}
|
|
5724
5763
|
</span>
|
|
@@ -10737,14 +10776,12 @@ import { cn } from "@/lib/utils";
|
|
|
10737
10776
|
* SelectTrigger variants matching TextField styling
|
|
10738
10777
|
*/
|
|
10739
10778
|
const selectTriggerVariants = cva(
|
|
10740
|
-
"flex h-[42px] w-full items-center justify-between gap-2 rounded bg-semantic-bg-primary px-4 py-2 text-left text-base text-semantic-text-primary outline-none transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)] [&>span]:min-w-0 [&>span]:flex-1 [&>span]:truncate",
|
|
10779
|
+
"flex h-[42px] w-full items-center justify-between gap-2 rounded bg-[var(--semantic-bg-primary,#FFFFFF)] px-4 py-2 text-left text-base text-[var(--semantic-text-primary,#181D27)] outline-none transition-all disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)] [&>span]:min-w-0 [&>span]:flex-1 [&>span]:truncate",
|
|
10741
10780
|
{
|
|
10742
10781
|
variants: {
|
|
10743
10782
|
state: {
|
|
10744
|
-
default:
|
|
10745
|
-
|
|
10746
|
-
error:
|
|
10747
|
-
"border border-solid border-semantic-error-primary focus:outline-none focus:border-semantic-error-primary focus:shadow-[0_0_0_1px_rgba(240,68,56,0.12)]",
|
|
10783
|
+
default: "border border-solid border-[var(--semantic-border-input,#E9EAEB)] focus:outline-none focus:border-[var(--semantic-border-input-focus,#2BBCCA)] focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
|
|
10784
|
+
error: "border border-solid border-[var(--semantic-error-primary,#F04438)] focus:outline-none focus:border-[var(--semantic-error-primary,#F04438)] focus:shadow-[0_0_0_1px_rgba(240,68,56,0.12)]",
|
|
10748
10785
|
},
|
|
10749
10786
|
},
|
|
10750
10787
|
defaultVariants: {
|
|
@@ -10788,7 +10825,7 @@ const SelectTrigger = React.forwardRef(({ className, state, children, ...props }
|
|
|
10788
10825
|
>
|
|
10789
10826
|
{children}
|
|
10790
10827
|
<SelectPrimitive.Icon asChild>
|
|
10791
|
-
<ChevronDown className="size-4 shrink-0 text-semantic-text-muted opacity-70" />
|
|
10828
|
+
<ChevronDown className="size-4 shrink-0 text-[var(--semantic-text-muted,#717680)] opacity-70" />
|
|
10792
10829
|
</SelectPrimitive.Icon>
|
|
10793
10830
|
</SelectPrimitive.Trigger>
|
|
10794
10831
|
));
|
|
@@ -10803,7 +10840,7 @@ const SelectScrollUpButton = React.forwardRef(({ className, ...props }: React.Co
|
|
|
10803
10840
|
)}
|
|
10804
10841
|
{...props}
|
|
10805
10842
|
>
|
|
10806
|
-
<ChevronUp className="size-4 text-semantic-text-muted" />
|
|
10843
|
+
<ChevronUp className="size-4 text-[var(--semantic-text-muted,#717680)]" />
|
|
10807
10844
|
</SelectPrimitive.ScrollUpButton>
|
|
10808
10845
|
));
|
|
10809
10846
|
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
@@ -10817,7 +10854,7 @@ const SelectScrollDownButton = React.forwardRef(({ className, ...props }: React.
|
|
|
10817
10854
|
)}
|
|
10818
10855
|
{...props}
|
|
10819
10856
|
>
|
|
10820
|
-
<ChevronDown className="size-4 text-semantic-text-muted" />
|
|
10857
|
+
<ChevronDown className="size-4 text-[var(--semantic-text-muted,#717680)]" />
|
|
10821
10858
|
</SelectPrimitive.ScrollDownButton>
|
|
10822
10859
|
));
|
|
10823
10860
|
SelectScrollDownButton.displayName =
|
|
@@ -10969,7 +11006,7 @@ const SelectContent = React.forwardRef(
|
|
|
10969
11006
|
<SelectPrimitive.Content
|
|
10970
11007
|
ref={ref}
|
|
10971
11008
|
className={cn(
|
|
10972
|
-
"relative z-[9999] max-h-96 w-[var(--radix-select-trigger-width)] max-w-[var(--radix-select-trigger-width)] overflow-hidden rounded bg-semantic-bg-primary border border-solid border-semantic-border-layout shadow-md",
|
|
11009
|
+
"relative z-[9999] max-h-96 w-[var(--radix-select-trigger-width)] max-w-[var(--radix-select-trigger-width)] overflow-hidden rounded bg-[var(--semantic-bg-primary,#FFFFFF)] border border-solid border-[var(--semantic-border-layout,#E9EAEB)] shadow-md",
|
|
10973
11010
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
10974
11011
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
10975
11012
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -11008,7 +11045,7 @@ const SelectLabel = React.forwardRef(({ className, ...props }: React.ComponentPr
|
|
|
11008
11045
|
<SelectPrimitive.Label
|
|
11009
11046
|
ref={ref}
|
|
11010
11047
|
className={cn(
|
|
11011
|
-
"px-4 py-1.5 text-xs font-semibold text-semantic-text-muted",
|
|
11048
|
+
"px-4 py-1.5 text-xs font-semibold text-[var(--semantic-text-muted,#717680)]",
|
|
11012
11049
|
className
|
|
11013
11050
|
)}
|
|
11014
11051
|
{...props}
|
|
@@ -11033,8 +11070,8 @@ const SelectItem = React.forwardRef(({ className, children, truncateOptionText,
|
|
|
11033
11070
|
<SelectPrimitive.Item
|
|
11034
11071
|
ref={ref}
|
|
11035
11072
|
className={cn(
|
|
11036
|
-
"relative flex w-full cursor-pointer select-none items-start rounded-sm py-2 pl-4 pr-8 text-base text-semantic-text-primary outline-none",
|
|
11037
|
-
"hover:bg-semantic-bg-ui focus:bg-semantic-bg-ui",
|
|
11073
|
+
"relative flex w-full cursor-pointer select-none items-start rounded-sm py-2 pl-4 pr-8 text-base text-[var(--semantic-text-primary,#181D27)] outline-none",
|
|
11074
|
+
"hover:bg-[var(--semantic-bg-ui,#F5F5F5)] focus:bg-[var(--semantic-bg-ui,#F5F5F5)]",
|
|
11038
11075
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
11039
11076
|
className
|
|
11040
11077
|
)}
|
|
@@ -11042,7 +11079,7 @@ const SelectItem = React.forwardRef(({ className, children, truncateOptionText,
|
|
|
11042
11079
|
>
|
|
11043
11080
|
<span className="absolute right-2 flex size-4 items-center justify-center">
|
|
11044
11081
|
<SelectPrimitive.ItemIndicator>
|
|
11045
|
-
<Check className="size-4 text-semantic-brand" />
|
|
11082
|
+
<Check className="size-4 text-[var(--semantic-brand,#2BBCCA)]" />
|
|
11046
11083
|
</SelectPrimitive.ItemIndicator>
|
|
11047
11084
|
</span>
|
|
11048
11085
|
<span
|
|
@@ -11064,7 +11101,7 @@ SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
|
11064
11101
|
const SelectSeparator = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Separator>>) => (
|
|
11065
11102
|
<SelectPrimitive.Separator
|
|
11066
11103
|
ref={ref}
|
|
11067
|
-
className={cn("-mx-1 my-1 h-px bg-semantic-border-layout", className)}
|
|
11104
|
+
className={cn("-mx-1 my-1 h-px bg-[var(--semantic-border-layout,#E9EAEB)]", className)}
|
|
11068
11105
|
{...props}
|
|
11069
11106
|
/>
|
|
11070
11107
|
));
|
package/package.json
CHANGED