myoperator-mcp 0.2.383 → 0.2.384

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.
Files changed (2) hide show
  1. package/dist/index.js +53 -20
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3564,10 +3564,10 @@ const dateTimePickerTriggerVariants = cva(
3564
3564
 
3565
3565
  export interface DateTimePickerValue {
3566
3566
  date?: Date;
3567
- /** Undefined until a time is explicitly selected */
3568
- startTime?: string;
3569
- /** Undefined until a time is explicitly selected */
3570
- endTime?: string;
3567
+ /** Empty string until a time is explicitly selected */
3568
+ startTime: string;
3569
+ /** Empty string until a time is explicitly selected */
3570
+ endTime: string;
3571
3571
  }
3572
3572
 
3573
3573
  export interface DateTimePickerProps
@@ -3575,8 +3575,8 @@ export interface DateTimePickerProps
3575
3575
  Omit<React.HTMLAttributes<HTMLDivElement>, "defaultValue" | "onChange">,
3576
3576
  VariantProps<typeof dateTimePickerVariants>,
3577
3577
  Pick<VariantProps<typeof dateTimePickerTriggerVariants>, "state"> {
3578
- value?: DateTimePickerValue;
3579
- defaultValue?: DateTimePickerValue;
3578
+ value?: Partial<DateTimePickerValue>;
3579
+ defaultValue?: Partial<DateTimePickerValue>;
3580
3580
  onValueChange?: (value: DateTimePickerValue) => void;
3581
3581
  /** Label text displayed above the trigger */
3582
3582
  label?: string;
@@ -3584,6 +3584,10 @@ export interface DateTimePickerProps
3584
3584
  required?: boolean;
3585
3585
  /** Additional class for the label */
3586
3586
  labelClassName?: string;
3587
+ /** Helper text displayed below the picker */
3588
+ helperText?: string;
3589
+ /** Error message \u2014 shows red text below and drives state="error" */
3590
+ error?: string;
3587
3591
  placeholder?: string;
3588
3592
  disabled?: boolean;
3589
3593
  readOnly?: boolean;
@@ -3621,8 +3625,8 @@ function normalizeValue(
3621
3625
  ): DateTimePickerValue {
3622
3626
  return {
3623
3627
  date: value?.date,
3624
- startTime: value?.startTime,
3625
- endTime: value?.endTime,
3628
+ startTime: value?.startTime ?? "",
3629
+ endTime: value?.endTime ?? "",
3626
3630
  };
3627
3631
  }
3628
3632
 
@@ -3909,8 +3913,8 @@ function formatValueForDisplay(
3909
3913
  if (!value.startTime && !value.endTime) return "";
3910
3914
 
3911
3915
  return showEndTime
3912
- ? \`\${formatTimeForDisplay(value.startTime ?? UNSET_TIME, showSeconds)} - \${formatTimeForDisplay(value.endTime ?? UNSET_TIME, showSeconds)}\`
3913
- : formatTimeForDisplay(value.startTime ?? UNSET_TIME, showSeconds);
3916
+ ? \`\${formatTimeForDisplay(value.startTime || UNSET_TIME, showSeconds)} - \${formatTimeForDisplay(value.endTime || UNSET_TIME, showSeconds)}\`
3917
+ : formatTimeForDisplay(value.startTime || UNSET_TIME, showSeconds);
3914
3918
  }
3915
3919
 
3916
3920
  const datePart = formatDateOnlyForDisplay(value.date);
@@ -4459,8 +4463,8 @@ function formatHiddenValue(
4459
4463
  variant: DateTimePickerVariant,
4460
4464
  showEndTime: boolean
4461
4465
  ) {
4462
- const startTime = value.startTime ?? UNSET_TIME;
4463
- const endTime = value.endTime ?? UNSET_TIME;
4466
+ const startTime = value.startTime || UNSET_TIME;
4467
+ const endTime = value.endTime || UNSET_TIME;
4464
4468
 
4465
4469
  if (variant === "time-only") {
4466
4470
  if (!value.startTime && !value.endTime) return "";
@@ -4878,6 +4882,8 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
4878
4882
  label,
4879
4883
  required,
4880
4884
  labelClassName,
4885
+ helperText,
4886
+ error,
4881
4887
  placeholder: placeholderProp,
4882
4888
  disabled = false,
4883
4889
  readOnly = false,
@@ -4905,6 +4911,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
4905
4911
  const generatedId = React.useId();
4906
4912
  const triggerId = id ?? generatedId;
4907
4913
  const pickerVariant = variant ?? "date-time";
4914
+ const resolvedState = error ? "error" : state;
4908
4915
  const showCalendar = pickerVariant !== "time-only";
4909
4916
  const showTimeFields = pickerVariant !== "date-only";
4910
4917
  const resolvedShowEndTime = showTimeFields && showEndTime;
@@ -4917,8 +4924,8 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
4917
4924
  const currentValue = normalizeValue(
4918
4925
  isValueControlled ? value : internalValue
4919
4926
  );
4920
- const resolvedStartTime = currentValue.startTime ?? UNSET_TIME;
4921
- const resolvedEndTime = currentValue.endTime ?? UNSET_TIME;
4927
+ const resolvedStartTime = currentValue.startTime || UNSET_TIME;
4928
+ const resolvedEndTime = currentValue.endTime || UNSET_TIME;
4922
4929
  const resolvedShowSeconds =
4923
4930
  showSeconds ??
4924
4931
  (timeHasVisibleSeconds(currentValue.startTime) ||
@@ -4997,6 +5004,9 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
4997
5004
  () => getCalendarDays(visibleMonth),
4998
5005
  [visibleMonth]
4999
5006
  );
5007
+ const errorId = \`\${triggerId}-error\`;
5008
+ const helperId = \`\${triggerId}-helper\`;
5009
+ const describedBy = error ? errorId : helperText ? helperId : undefined;
5000
5010
  const displayValue = formatValueForDisplay(
5001
5011
  currentValue,
5002
5012
  pickerVariant,
@@ -5111,8 +5121,8 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
5111
5121
  setVisibleMonth(startOfMonth(new Date()));
5112
5122
  updateValue({
5113
5123
  date: undefined,
5114
- startTime: undefined,
5115
- endTime: undefined,
5124
+ startTime: "",
5125
+ endTime: "",
5116
5126
  });
5117
5127
  };
5118
5128
 
@@ -5196,7 +5206,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
5196
5206
 
5197
5207
  const typedTime = parseTimePart(nextInputValue);
5198
5208
  if (typedTime === undefined) {
5199
- updateValue({ ...currentValue, startTime: undefined });
5209
+ updateValue({ ...currentValue, startTime: "" });
5200
5210
  return;
5201
5211
  }
5202
5212
 
@@ -5271,7 +5281,7 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
5271
5281
  updateValue({
5272
5282
  ...currentValue,
5273
5283
  date: typedDateTime.date,
5274
- startTime: typedDateTime.startTime ?? currentValue.startTime,
5284
+ startTime: typedDateTime.startTime || currentValue.startTime,
5275
5285
  });
5276
5286
  updateVisibleMonth(typedDateTime.date);
5277
5287
  }
@@ -5626,9 +5636,9 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
5626
5636
  <div
5627
5637
  ref={setTriggerRef}
5628
5638
  className={cn(
5629
- dateTimePickerTriggerVariants({ size, state }),
5639
+ dateTimePickerTriggerVariants({ size, state: resolvedState }),
5630
5640
  open &&
5631
- state !== "error" &&
5641
+ resolvedState !== "error" &&
5632
5642
  "border-semantic-border-input-focus/50 shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
5633
5643
  !displayValue && "text-semantic-text-placeholder",
5634
5644
  disabled &&
@@ -5644,6 +5654,8 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
5644
5654
  placeholder={placeholder}
5645
5655
  aria-haspopup="dialog"
5646
5656
  aria-expanded={open}
5657
+ aria-invalid={error ? true : undefined}
5658
+ aria-describedby={describedBy}
5647
5659
  aria-label={
5648
5660
  pickerVariant === "date-only"
5649
5661
  ? "Date"
@@ -5693,6 +5705,27 @@ const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>(
5693
5705
  </button>
5694
5706
  </div>
5695
5707
 
5708
+ {(error || helperText) && (
5709
+ <div className="mt-1">
5710
+ {error ? (
5711
+ <span
5712
+ id={errorId}
5713
+ role="alert"
5714
+ className="text-sm text-semantic-error-primary"
5715
+ >
5716
+ {error}
5717
+ </span>
5718
+ ) : (
5719
+ <span
5720
+ id={helperId}
5721
+ className="text-sm text-semantic-text-muted"
5722
+ >
5723
+ {helperText}
5724
+ </span>
5725
+ )}
5726
+ </div>
5727
+ )}
5728
+
5696
5729
  {popover}
5697
5730
  </div>
5698
5731
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myoperator-mcp",
3
- "version": "0.2.383",
3
+ "version": "0.2.384",
4
4
  "description": "MCP server for myOperator UI components - enables AI assistants to access component metadata, examples, and design tokens",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",