{"version":3,"file":"react-querybuilder_tremor.production.mjs","names":[],"sources":["../src/TremorActionElement.tsx","../src/TremorNotToggle.tsx","../src/TremorShiftActions.tsx","../src/utils.tsx","../src/TremorValueSelector.tsx","../src/TremorValueEditor.tsx","../src/index.tsx"],"sourcesContent":["import type { ButtonProps } from '@tremor/react';\nimport { Button } from '@tremor/react';\nimport * as React from 'react';\nimport type { ActionProps } from 'react-querybuilder';\n\n/**\n * @group Props\n */\nexport interface TremorActionProps extends ActionProps, ButtonProps {}\n\n/**\n * @group Components\n */\nexport const TremorActionElement = ({\n  className,\n  handleOnClick,\n  label,\n  title,\n  disabled,\n  disabledTranslation,\n  testID,\n  rules: _rules,\n  ruleOrGroup: _rg,\n  path: _path,\n  level: _level,\n  context: _context,\n  validation: _validation,\n  schema: _schema,\n  ...otherProps\n}: TremorActionProps): React.JSX.Element => (\n  <Button\n    {...otherProps}\n    data-testid={testID}\n    type=\"button\"\n    variant=\"primary\"\n    className={className}\n    title={disabledTranslation && disabled ? disabledTranslation.title : title}\n    onClick={e => handleOnClick(e)}\n    disabled={disabled && !disabledTranslation}>\n    {disabledTranslation && disabled ? disabledTranslation.label : label}\n  </Button>\n);\n","import type { SwitchProps } from '@tremor/react';\nimport { Switch } from '@tremor/react';\nimport * as React from 'react';\nimport type { NotToggleProps } from 'react-querybuilder';\n\n/**\n * @group Props\n */\nexport interface TremorNotToggleProps extends NotToggleProps, Omit<Partial<SwitchProps>, 'label'> {}\n\n/**\n * @group Components\n */\nexport const TremorNotToggle = ({\n  className,\n  handleOnChange,\n  label,\n  checked,\n  title,\n  disabled,\n  testID,\n  path: _path,\n  level: _level,\n  context: _context,\n  validation: _validation,\n  schema: _schema,\n  ruleGroup: _ruleGroup,\n  ...otherProps\n}: TremorNotToggleProps): React.JSX.Element => {\n  const id = React.useId();\n  return (\n    <div className={className} data-testid={testID}>\n      <Switch\n        {...otherProps}\n        id={id}\n        name={id}\n        title={title}\n        disabled={disabled}\n        checked={checked}\n        onChange={handleOnChange}\n      />\n      <label htmlFor={id} title={title}>\n        {label}\n      </label>\n    </div>\n  );\n};\n","import { Button } from '@tremor/react';\nimport * as React from 'react';\nimport type { ShiftActionsProps } from 'react-querybuilder';\n\n/**\n * @group Components\n */\nexport const TremorShiftActions = ({\n  shiftUp,\n  shiftDown,\n  shiftUpDisabled,\n  shiftDownDisabled,\n  disabled,\n  className,\n  labels,\n  titles,\n  testID,\n}: ShiftActionsProps): React.JSX.Element => (\n  <div data-testid={testID} className={className}>\n    <Button\n      type=\"button\"\n      variant=\"light\"\n      disabled={disabled || shiftUpDisabled}\n      onClick={shiftUp}\n      title={titles?.shiftUp}>\n      {labels?.shiftUp}\n    </Button>\n    <Button\n      type=\"button\"\n      variant=\"light\"\n      disabled={disabled || shiftDownDisabled}\n      onClick={shiftDown}\n      title={titles?.shiftDown}>\n      {labels?.shiftDown}\n    </Button>\n  </div>\n);\n","import { MultiSelectItem, SelectItem } from '@tremor/react';\nimport * as React from 'react';\nimport type { Option, OptionList } from 'react-querybuilder';\nimport { isOptionGroupArray } from 'react-querybuilder';\n\nexport const toSelectItems = (list: OptionList, multi?: boolean): React.JSX.Element[] | null => {\n  const flatList: Option[] = isOptionGroupArray(list) ? list.flatMap(og => og.options) : list;\n\n  // v8 ignore else\n  if (Array.isArray(flatList)) {\n    return flatList.map(opt =>\n      multi ? (\n        <MultiSelectItem key={opt.name} value={opt.name} aria-disabled={!!opt.disabled}>\n          {opt.label}\n        </MultiSelectItem>\n      ) : (\n        <SelectItem key={opt.name} value={opt.name} aria-disabled={!!opt.disabled}>\n          {opt.label}\n        </SelectItem>\n      )\n    );\n  }\n\n  // v8 ignore next\n  return null;\n};\n","import type { MultiSelectProps, SelectProps } from '@tremor/react';\nimport { MultiSelect, Select } from '@tremor/react';\nimport * as React from 'react';\nimport type { VersatileSelectorProps } from 'react-querybuilder';\nimport { toArray, useValueSelector } from 'react-querybuilder';\nimport { toSelectItems } from './utils';\n\n/**\n * @group Props\n */\nexport interface TremorValueSelectorProps\n  extends VersatileSelectorProps, Omit<SelectProps & MultiSelectProps, 'children' | 'value'> {\n  // oxlint-disable-next-line typescript/no-explicit-any\n  value?: any;\n}\n\n/**\n * @group Components\n */\nexport const TremorValueSelector = ({\n  className,\n  handleOnChange,\n  options,\n  value,\n  title,\n  disabled,\n  multiple,\n  listsAsArrays,\n  testID,\n  placeholder,\n  fieldData: _fieldData,\n  path: _path,\n  level: _level,\n  context: _context,\n  validation: _validation,\n  schema: _schema,\n  rule: _rule,\n  ruleGroup: _ruleGroup,\n  rules: _rules,\n  ...otherProps\n}: TremorValueSelectorProps): React.JSX.Element => {\n  const { onChange, val } = useValueSelector({ handleOnChange, listsAsArrays, multiple, value });\n\n  const optionElements = React.useMemo(() => toSelectItems(options, multiple), [multiple, options]);\n\n  const { enableClear: _ec, ...multiSelectOtherProps } = otherProps;\n\n  return multiple ? (\n    <MultiSelect\n      {...multiSelectOtherProps}\n      data-testid={testID}\n      title={title}\n      className={className}\n      disabled={disabled}\n      value={toArray(val)}\n      placeholder={placeholder}\n      onValueChange={onChange}>\n      {optionElements}\n    </MultiSelect>\n  ) : (\n    <Select\n      enableClear={false} // Remove \"clear\" button by default\n      {...otherProps}\n      data-testid={testID}\n      title={title}\n      className={className}\n      value={value}\n      disabled={disabled}\n      onValueChange={onChange}>\n      {optionElements}\n    </Select>\n  );\n};\n","import type { DatePickerValue, TextInputProps } from '@tremor/react';\nimport {\n  DatePicker,\n  DateRangePicker,\n  NumberInput,\n  Switch,\n  TextInput,\n  Textarea,\n} from '@tremor/react';\nimport dayjs from 'dayjs';\nimport * as React from 'react';\nimport type { ValueEditorProps, VersatileSelectorProps } from 'react-querybuilder';\nimport { ValueEditor, useValueEditor } from 'react-querybuilder';\nimport { TremorValueSelector } from './TremorValueSelector';\n\n/**\n * @group Props\n */\nexport interface TremorValueEditorProps extends ValueEditorProps {\n  extraProps?: Record<string, unknown>;\n}\n\nconst dateFormat = 'YYYY-MM-DD';\n// const dateTimeLocalFormat = `${dateFormat}THH:mm:ss`;\n\nconst ClearableValueSelector = (props: VersatileSelectorProps) => (\n  <TremorValueSelector {...props} enableClear />\n);\n\n/**\n * @group Components\n */\nexport const TremorValueEditor = (allProps: TremorValueEditorProps): React.JSX.Element | null => {\n  const {\n    fieldData,\n    operator,\n    value,\n    handleOnChange,\n    title,\n    className,\n    type,\n    inputType,\n    values: _v,\n    listsAsArrays,\n    parseNumbers: _parseNumbers,\n    separator,\n    valueSource: _vs,\n    disabled,\n    testID,\n    selectorComponent = ClearableValueSelector,\n    validation: _validation,\n    extraProps,\n  } = allProps;\n\n  const {\n    valueAsArray,\n    multiValueHandler,\n    bigIntValueHandler,\n    valueListItemClassName,\n    inputTypeCoerced,\n  } = useValueEditor(allProps);\n\n  if (operator === 'null' || operator === 'notNull') {\n    return null;\n  }\n\n  const placeHolderText = fieldData?.placeholder ?? '';\n\n  if (\n    (operator === 'between' || operator === 'notBetween') &&\n    (type === 'select' || type === 'text') &&\n    // Date and time ranges are handled differently in Tremor--see below\n    inputTypeCoerced !== 'date'\n  ) {\n    if (type === 'text') {\n      const editors = ['from', 'to'].map((key, i) => {\n        return (\n          <TextInput\n            key={key}\n            type={inputTypeCoerced as TextInputProps['type']}\n            placeholder={placeHolderText}\n            value={valueAsArray[i] ?? ''}\n            className={`${valueListItemClassName} input`}\n            disabled={disabled}\n            onValueChange={v => multiValueHandler(v, i)}\n            {...extraProps}\n          />\n        );\n      });\n      return (\n        <span data-testid={testID} className={className} title={title}>\n          {editors[0]}\n          {separator}\n          {editors[1]}\n        </span>\n      );\n    }\n\n    return <ValueEditor {...allProps} skipHook selectorComponent={selectorComponent} />;\n  }\n\n  switch (type) {\n    case 'select':\n    case 'multiselect':\n      return <ValueEditor {...allProps} skipHook selectorComponent={selectorComponent} />;\n\n    case 'textarea':\n      return (\n        <Textarea\n          className={className}\n          value={value}\n          title={title}\n          placeholder={placeHolderText}\n          disabled={disabled}\n          onValueChange={handleOnChange}\n          {...extraProps}\n        />\n      );\n\n    case 'switch':\n      return (\n        <Switch\n          className={className}\n          title={title}\n          checked={value}\n          disabled={disabled}\n          onChange={handleOnChange}\n          {...extraProps}\n        />\n      );\n\n    case 'checkbox':\n    case 'radio':\n      return <ValueEditor {...allProps} skipHook />;\n  }\n\n  if (inputTypeCoerced === 'date') {\n    if (operator === 'between' || operator === 'notBetween') {\n      const twoDateArray = [null, null].map((defaultValue, i) => {\n        if (!valueAsArray[i]) return defaultValue;\n        let date = dayjs(valueAsArray[i]);\n        if (!date.isValid()) {\n          date = dayjs(`${dayjs().format('YYYY-MM-DD')}`);\n        }\n        return date.toDate();\n      }) as [DatePickerValue, DatePickerValue];\n\n      return (\n        <DateRangePicker\n          data-testid={testID}\n          value={{ from: twoDateArray[0], to: twoDateArray[1] }}\n          className={className}\n          disabled={disabled}\n          placeholder={placeHolderText}\n          enableSelect={false}\n          enableClear\n          onValueChange={dates => {\n            const dateArray = [dates.from, dates.to].map(d =>\n              d ? dayjs(d).format(dateFormat) : ''\n            );\n            handleOnChange(listsAsArrays ? dateArray : dateArray.join(','));\n          }}\n          {...extraProps}\n        />\n      );\n    }\n\n    return (\n      <DatePicker\n        data-testid={testID}\n        title={title}\n        className={className}\n        placeholder={placeHolderText}\n        disabled={disabled}\n        enableClear\n        value={!!value && dayjs(value).isValid() ? dayjs(value).toDate() : undefined}\n        onValueChange={d =>\n          handleOnChange(d ? dayjs(d).format(dateFormat) : /* v8 ignore next -- @preserve */ '')\n        }\n        {...extraProps}\n      />\n    );\n  }\n\n  if (inputTypeCoerced === 'number') {\n    return (\n      <NumberInput\n        data-testid={testID}\n        title={title}\n        className={className}\n        placeholder={placeHolderText}\n        disabled={disabled}\n        value={value}\n        onValueChange={handleOnChange}\n        {...extraProps}\n      />\n    );\n  }\n\n  if (inputType === 'bigint') {\n    return (\n      <TextInput\n        data-testid={testID}\n        type={inputTypeCoerced as TextInputProps['type']}\n        placeholder={placeHolderText}\n        value={`${value}`}\n        title={title}\n        className={className}\n        disabled={disabled}\n        onChange={e => bigIntValueHandler(e.target.value)}\n        {...extraProps}\n      />\n    );\n  }\n\n  return (\n    <TextInput\n      data-testid={testID}\n      title={title}\n      className={className}\n      placeholder={placeHolderText}\n      type={inputTypeCoerced as TextInputProps['type']}\n      disabled={disabled}\n      value={value}\n      onValueChange={handleOnChange}\n      {...extraProps}\n    />\n  );\n};\n","import type {\n  Classnames,\n  ControlElementsProp,\n  FullField,\n  QueryBuilderContextProvider,\n} from 'react-querybuilder';\nimport { getCompatContextProvider } from 'react-querybuilder';\nimport { TremorActionElement } from './TremorActionElement';\nimport { TremorNotToggle } from './TremorNotToggle';\nimport { TremorShiftActions } from './TremorShiftActions';\nimport { TremorValueEditor } from './TremorValueEditor';\nimport { TremorValueSelector } from './TremorValueSelector';\n\nexport * from './TremorActionElement';\nexport * from './TremorNotToggle';\nexport * from './TremorShiftActions';\nexport * from './TremorValueEditor';\nexport * from './TremorValueSelector';\n\n/**\n * @group Props\n */\nexport const tremorControlElements: ControlElementsProp<FullField, string> = {\n  actionElement: TremorActionElement,\n  notToggle: TremorNotToggle,\n  shiftActions: TremorShiftActions,\n  valueEditor: TremorValueEditor,\n  valueSelector: TremorValueSelector,\n};\n\n/**\n * @group Props\n */\nexport const tremorControlClassnames: Partial<Classnames> = {\n  notToggle: 'flex flex-row gap-1',\n};\n\n/**\n * @group Components\n */\nexport const QueryBuilderTremor: QueryBuilderContextProvider = getCompatContextProvider({\n  controlClassnames: tremorControlClassnames,\n  controlElements: tremorControlElements,\n});\n"],"mappings":"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"}