@react-querybuilder/tremor
Version:
Custom Tremor components for react-querybuilder
1 lines • 18 kB
Source Map (JSON)
{"version":3,"file":"react-querybuilder_tremor.production.mjs","names":["flatList: Option[]","tremorControlElements: ControlElementsProp<FullField, string>","tremorControlClassnames: Partial<Classnames>","QueryBuilderTremor: QueryBuilderContextProvider"],"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 // istanbul 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 // istanbul 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,\n 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 as string) !== '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 as string) === '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) : /* istanbul ignore next */ '')\n }\n {...extraProps}\n />\n );\n }\n\n if ((inputTypeCoerced as string) === '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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"}