@medusajs/ui 4.0.22-snapshot-20250829152522 → 4.0.22-snapshot-20250901132949

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 (113) hide show
  1. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.d.ts +9 -0
  2. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.d.ts.map +1 -0
  3. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.js +58 -0
  4. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.js.map +1 -0
  5. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.d.ts +5 -1
  6. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.d.ts.map +1 -1
  7. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.js +71 -9
  8. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.js.map +1 -1
  9. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.d.ts +5 -1
  10. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.d.ts.map +1 -1
  11. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.js +35 -7
  12. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.js.map +1 -1
  13. package/dist/cjs/blocks/data-table/components/data-table-filter.d.ts +4 -1
  14. package/dist/cjs/blocks/data-table/components/data-table-filter.d.ts.map +1 -1
  15. package/dist/cjs/blocks/data-table/components/data-table-filter.js +488 -73
  16. package/dist/cjs/blocks/data-table/components/data-table-filter.js.map +1 -1
  17. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts +9 -0
  18. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts.map +1 -0
  19. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.js +42 -0
  20. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.js.map +1 -0
  21. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.d.ts +9 -0
  22. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.d.ts.map +1 -0
  23. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.js +44 -0
  24. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.js.map +1 -0
  25. package/dist/cjs/blocks/data-table/components/data-table-table.d.ts.map +1 -1
  26. package/dist/cjs/blocks/data-table/components/data-table-table.js +132 -4
  27. package/dist/cjs/blocks/data-table/components/data-table-table.js.map +1 -1
  28. package/dist/cjs/blocks/data-table/components/data-table-toolbar.d.ts +12 -0
  29. package/dist/cjs/blocks/data-table/components/data-table-toolbar.d.ts.map +1 -1
  30. package/dist/cjs/blocks/data-table/components/data-table-toolbar.js +5 -2
  31. package/dist/cjs/blocks/data-table/components/data-table-toolbar.js.map +1 -1
  32. package/dist/cjs/blocks/data-table/context/data-table-context-provider.d.ts.map +1 -1
  33. package/dist/cjs/blocks/data-table/context/data-table-context-provider.js +5 -1
  34. package/dist/cjs/blocks/data-table/context/data-table-context-provider.js.map +1 -1
  35. package/dist/cjs/blocks/data-table/context/data-table-context.d.ts +2 -0
  36. package/dist/cjs/blocks/data-table/context/data-table-context.d.ts.map +1 -1
  37. package/dist/cjs/blocks/data-table/context/data-table-context.js.map +1 -1
  38. package/dist/cjs/blocks/data-table/data-table.d.ts +6 -1
  39. package/dist/cjs/blocks/data-table/data-table.d.ts.map +1 -1
  40. package/dist/cjs/blocks/data-table/data-table.js +4 -0
  41. package/dist/cjs/blocks/data-table/data-table.js.map +1 -1
  42. package/dist/cjs/blocks/data-table/index.d.ts +2 -1
  43. package/dist/cjs/blocks/data-table/index.d.ts.map +1 -1
  44. package/dist/cjs/blocks/data-table/index.js.map +1 -1
  45. package/dist/cjs/blocks/data-table/types.d.ts +75 -3
  46. package/dist/cjs/blocks/data-table/types.d.ts.map +1 -1
  47. package/dist/cjs/blocks/data-table/types.js.map +1 -1
  48. package/dist/cjs/blocks/data-table/use-data-table.d.ts +21 -3
  49. package/dist/cjs/blocks/data-table/use-data-table.d.ts.map +1 -1
  50. package/dist/cjs/blocks/data-table/use-data-table.js +47 -7
  51. package/dist/cjs/blocks/data-table/use-data-table.js.map +1 -1
  52. package/dist/cjs/blocks/data-table/utils/create-data-table-column-helper.d.ts.map +1 -1
  53. package/dist/cjs/blocks/data-table/utils/create-data-table-column-helper.js +2 -1
  54. package/dist/cjs/blocks/data-table/utils/create-data-table-column-helper.js.map +1 -1
  55. package/dist/cjs/blocks/data-table/utils/create-data-table-filter-helper.d.ts +27 -0
  56. package/dist/cjs/blocks/data-table/utils/create-data-table-filter-helper.d.ts.map +1 -1
  57. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.d.ts +9 -0
  58. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.d.ts.map +1 -0
  59. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.js +54 -0
  60. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.js.map +1 -0
  61. package/dist/esm/blocks/data-table/components/data-table-filter-bar.d.ts +5 -1
  62. package/dist/esm/blocks/data-table/components/data-table-filter-bar.d.ts.map +1 -1
  63. package/dist/esm/blocks/data-table/components/data-table-filter-bar.js +71 -9
  64. package/dist/esm/blocks/data-table/components/data-table-filter-bar.js.map +1 -1
  65. package/dist/esm/blocks/data-table/components/data-table-filter-menu.d.ts +5 -1
  66. package/dist/esm/blocks/data-table/components/data-table-filter-menu.d.ts.map +1 -1
  67. package/dist/esm/blocks/data-table/components/data-table-filter-menu.js +35 -7
  68. package/dist/esm/blocks/data-table/components/data-table-filter-menu.js.map +1 -1
  69. package/dist/esm/blocks/data-table/components/data-table-filter.d.ts +4 -1
  70. package/dist/esm/blocks/data-table/components/data-table-filter.d.ts.map +1 -1
  71. package/dist/esm/blocks/data-table/components/data-table-filter.js +489 -74
  72. package/dist/esm/blocks/data-table/components/data-table-filter.js.map +1 -1
  73. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts +9 -0
  74. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts.map +1 -0
  75. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.js +38 -0
  76. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.js.map +1 -0
  77. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.d.ts +9 -0
  78. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.d.ts.map +1 -0
  79. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.js +40 -0
  80. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.js.map +1 -0
  81. package/dist/esm/blocks/data-table/components/data-table-table.d.ts.map +1 -1
  82. package/dist/esm/blocks/data-table/components/data-table-table.js +132 -4
  83. package/dist/esm/blocks/data-table/components/data-table-table.js.map +1 -1
  84. package/dist/esm/blocks/data-table/components/data-table-toolbar.d.ts +12 -0
  85. package/dist/esm/blocks/data-table/components/data-table-toolbar.d.ts.map +1 -1
  86. package/dist/esm/blocks/data-table/components/data-table-toolbar.js +5 -2
  87. package/dist/esm/blocks/data-table/components/data-table-toolbar.js.map +1 -1
  88. package/dist/esm/blocks/data-table/context/data-table-context-provider.d.ts.map +1 -1
  89. package/dist/esm/blocks/data-table/context/data-table-context-provider.js +5 -1
  90. package/dist/esm/blocks/data-table/context/data-table-context-provider.js.map +1 -1
  91. package/dist/esm/blocks/data-table/context/data-table-context.d.ts +2 -0
  92. package/dist/esm/blocks/data-table/context/data-table-context.d.ts.map +1 -1
  93. package/dist/esm/blocks/data-table/context/data-table-context.js.map +1 -1
  94. package/dist/esm/blocks/data-table/data-table.d.ts +6 -1
  95. package/dist/esm/blocks/data-table/data-table.d.ts.map +1 -1
  96. package/dist/esm/blocks/data-table/data-table.js +4 -0
  97. package/dist/esm/blocks/data-table/data-table.js.map +1 -1
  98. package/dist/esm/blocks/data-table/index.d.ts +2 -1
  99. package/dist/esm/blocks/data-table/index.d.ts.map +1 -1
  100. package/dist/esm/blocks/data-table/index.js.map +1 -1
  101. package/dist/esm/blocks/data-table/types.d.ts +75 -3
  102. package/dist/esm/blocks/data-table/types.d.ts.map +1 -1
  103. package/dist/esm/blocks/data-table/types.js.map +1 -1
  104. package/dist/esm/blocks/data-table/use-data-table.d.ts +21 -3
  105. package/dist/esm/blocks/data-table/use-data-table.d.ts.map +1 -1
  106. package/dist/esm/blocks/data-table/use-data-table.js +47 -7
  107. package/dist/esm/blocks/data-table/use-data-table.js.map +1 -1
  108. package/dist/esm/blocks/data-table/utils/create-data-table-column-helper.d.ts.map +1 -1
  109. package/dist/esm/blocks/data-table/utils/create-data-table-column-helper.js +2 -1
  110. package/dist/esm/blocks/data-table/utils/create-data-table-column-helper.js.map +1 -1
  111. package/dist/esm/blocks/data-table/utils/create-data-table-filter-helper.d.ts +27 -0
  112. package/dist/esm/blocks/data-table/utils/create-data-table-filter-helper.d.ts.map +1 -1
  113. package/package.json +6 -3
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-filter.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport { CheckMini, EllipseMiniSolid, XMark } from \"@medusajs/icons\"\nimport * as React from \"react\"\n\nimport { useDataTableContext } from \"@/blocks/data-table/context/use-data-table-context\"\nimport type {\n DataTableDateComparisonOperator,\n DataTableDateFilterProps,\n DataTableFilterOption,\n} from \"@/blocks/data-table/types\"\nimport { isDateComparisonOperator } from \"@/blocks/data-table/utils/is-date-comparison-operator\"\nimport { DatePicker } from \"@/components/date-picker\"\nimport { Label } from \"@/components/label\"\nimport { Popover } from \"@/components/popover\"\nimport { clx } from \"@/utils/clx\"\n\ninterface DataTableFilterProps {\n id: string\n filter: unknown\n}\n\nconst DEFAULT_FORMAT_DATE_VALUE = (d: Date) =>\n d.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })\nconst DEFAULT_RANGE_OPTION_LABEL = \"Custom\"\nconst DEFAULT_RANGE_OPTION_START_LABEL = \"Starting\"\nconst DEFAULT_RANGE_OPTION_END_LABEL = \"Ending\"\n\nconst DataTableFilter = ({ id, filter }: DataTableFilterProps) => {\n const { instance } = useDataTableContext()\n const [open, setOpen] = React.useState(filter === undefined)\n const [isCustom, setIsCustom] = React.useState(false)\n\n const onOpenChange = React.useCallback(\n (open: boolean) => {\n if (\n !open &&\n (!filter || (Array.isArray(filter) && filter.length === 0))\n ) {\n instance.removeFilter(id)\n }\n\n setOpen(open)\n },\n [instance, id, filter]\n )\n\n const removeFilter = React.useCallback(() => {\n instance.removeFilter(id)\n }, [instance, id])\n\n const meta = instance.getFilterMeta(id)\n const { type, options, label, ...rest } = meta ?? {}\n\n const { displayValue, isCustomRange } = React.useMemo(() => {\n let displayValue: string | null = null\n let isCustomRange = false\n\n if (typeof filter === \"string\") {\n displayValue = options?.find((o) => o.value === filter)?.label ?? null\n }\n\n if (Array.isArray(filter)) {\n displayValue =\n filter\n .map((v) => options?.find((o) => o.value === v)?.label)\n .join(\", \") ?? null\n }\n\n if (isDateComparisonOperator(filter)) {\n displayValue =\n options?.find((o) => {\n if (!isDateComparisonOperator(o.value)) {\n return false\n }\n\n return (\n !isCustom &&\n (filter.$gte === o.value.$gte || (!filter.$gte && !o.value.$gte)) &&\n (filter.$lte === o.value.$lte || (!filter.$lte && !o.value.$lte)) &&\n (filter.$gt === o.value.$gt || (!filter.$gt && !o.value.$gt)) &&\n (filter.$lt === o.value.$lt || (!filter.$lt && !o.value.$lt))\n )\n })?.label ?? null\n\n if (!displayValue && isDateFilterProps(meta)) {\n const formatDateValue = meta.formatDateValue\n ? meta.formatDateValue\n : DEFAULT_FORMAT_DATE_VALUE\n\n if (filter.$gte && !filter.$lte) {\n isCustomRange = true\n displayValue = `${\n meta.rangeOptionStartLabel || DEFAULT_RANGE_OPTION_START_LABEL\n } ${formatDateValue(new Date(filter.$gte))}`\n }\n\n if (filter.$lte && !filter.$gte) {\n isCustomRange = true\n displayValue = `${\n meta.rangeOptionEndLabel || DEFAULT_RANGE_OPTION_END_LABEL\n } ${formatDateValue(new Date(filter.$lte))}`\n }\n\n if (filter.$gte && filter.$lte) {\n isCustomRange = true\n displayValue = `${formatDateValue(\n new Date(filter.$gte)\n )} - ${formatDateValue(new Date(filter.$lte))}`\n }\n }\n }\n\n return { displayValue, isCustomRange }\n }, [filter, options])\n\n React.useEffect(() => {\n if (isCustomRange && !isCustom) {\n setIsCustom(true)\n }\n }, [isCustomRange, isCustom])\n\n if (!meta) {\n return null\n }\n\n return (\n <Popover open={open} onOpenChange={onOpenChange} modal>\n <Popover.Anchor asChild>\n <div\n className={clx(\n \"bg-ui-bg-component flex flex-shrink-0 items-center overflow-hidden rounded-md\",\n \"[&>*]:txt-compact-small-plus [&>*]:flex [&>*]:items-center [&>*]:justify-center\",\n {\n \"shadow-borders-base divide-x\": displayValue,\n \"border border-dashed\": !displayValue,\n }\n )}\n >\n {displayValue && (\n <div className=\"text-ui-fg-muted whitespace-nowrap px-2 py-1\">\n {label || id}\n </div>\n )}\n <Popover.Trigger\n className={clx(\n \"text-ui-fg-subtle hover:bg-ui-bg-base-hover active:bg-ui-bg-base-pressed transition-fg whitespace-nowrap px-2 py-1 outline-none\",\n {\n \"text-ui-fg-muted\": !displayValue,\n }\n )}\n >\n {displayValue || label || id}\n </Popover.Trigger>\n\n {displayValue && (\n <button\n type=\"button\"\n className=\"text-ui-fg-muted hover:bg-ui-bg-base-hover active:bg-ui-bg-base-pressed transition-fg size-7 outline-none\"\n onClick={removeFilter}\n >\n <XMark />\n </button>\n )}\n </div>\n </Popover.Anchor>\n <Popover.Content\n align=\"start\"\n className=\"bg-ui-bg-component p-0 outline-none\"\n >\n {(() => {\n switch (type) {\n case \"select\":\n return (\n <DataTableFilterSelectContent\n id={id}\n filter={filter as string[] | undefined}\n options={options as DataTableFilterOption<string>[]}\n />\n )\n case \"radio\":\n return (\n <DataTableFilterRadioContent\n id={id}\n filter={filter}\n options={options as DataTableFilterOption<string>[]}\n />\n )\n case \"date\":\n return (\n <DataTableFilterDateContent\n id={id}\n filter={filter}\n options={\n options as DataTableFilterOption<DataTableDateComparisonOperator>[]\n }\n isCustom={isCustom}\n setIsCustom={setIsCustom}\n {...rest}\n />\n )\n default:\n return null\n }\n })()}\n </Popover.Content>\n </Popover>\n )\n}\nDataTableFilter.displayName = \"DataTable.Filter\"\n\ntype DataTableFilterDateContentProps = {\n id: string\n filter: unknown\n options: DataTableFilterOption<DataTableDateComparisonOperator>[]\n isCustom: boolean\n setIsCustom: (isCustom: boolean) => void\n} & Pick<\n DataTableDateFilterProps,\n | \"format\"\n | \"rangeOptionLabel\"\n | \"disableRangeOption\"\n | \"rangeOptionStartLabel\"\n | \"rangeOptionEndLabel\"\n>\n\nconst DataTableFilterDateContent = ({\n id,\n filter,\n options,\n format = \"date\",\n rangeOptionLabel = DEFAULT_RANGE_OPTION_LABEL,\n rangeOptionStartLabel = DEFAULT_RANGE_OPTION_START_LABEL,\n rangeOptionEndLabel = DEFAULT_RANGE_OPTION_END_LABEL,\n disableRangeOption = false,\n isCustom,\n setIsCustom,\n}: DataTableFilterDateContentProps) => {\n const currentValue = filter as DataTableDateComparisonOperator | undefined\n const { instance } = useDataTableContext()\n\n const selectedValue = React.useMemo(() => {\n if (!currentValue || isCustom) {\n return undefined\n }\n\n return JSON.stringify(currentValue)\n }, [currentValue, isCustom])\n\n const onValueChange = React.useCallback(\n (valueStr: string) => {\n setIsCustom(false)\n\n const value = JSON.parse(valueStr) as DataTableDateComparisonOperator\n instance.updateFilter({ id, value })\n },\n [instance, id]\n )\n\n const onSelectCustom = React.useCallback(() => {\n setIsCustom(true)\n instance.updateFilter({ id, value: undefined })\n }, [instance, id])\n\n const onCustomValueChange = React.useCallback(\n (input: \"$gte\" | \"$lte\", value: Date | null) => {\n const newCurrentValue = { ...currentValue }\n newCurrentValue[input] = value ? value.toISOString() : undefined\n instance.updateFilter({ id, value: newCurrentValue })\n },\n [instance, id]\n )\n\n const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(\n options,\n (index) => {\n if (index === options.length && !disableRangeOption) {\n onSelectCustom()\n } else {\n onValueChange(JSON.stringify(options[index].value))\n }\n },\n disableRangeOption ? 0 : 1\n )\n\n const granularity = format === \"date-time\" ? \"minute\" : \"day\"\n\n const maxDate = currentValue?.$lte\n ? granularity === \"minute\"\n ? new Date(currentValue.$lte)\n : new Date(new Date(currentValue.$lte).setHours(23, 59, 59, 999))\n : undefined\n\n const minDate = currentValue?.$gte\n ? granularity === \"minute\"\n ? new Date(currentValue.$gte)\n : new Date(new Date(currentValue.$gte).setHours(0, 0, 0, 0))\n : undefined\n\n const initialFocusedIndex = isCustom ? options.length : 0\n\n const onListFocus = React.useCallback(() => {\n if (focusedIndex === -1) {\n setFocusedIndex(initialFocusedIndex)\n }\n }, [focusedIndex, initialFocusedIndex])\n\n return (\n <React.Fragment>\n <div\n className=\"flex flex-col p-1 outline-none\"\n tabIndex={0}\n role=\"list\"\n onFocus={onListFocus}\n autoFocus\n >\n {options.map((option, idx) => {\n const value = JSON.stringify(option.value)\n const isSelected = selectedValue === value\n\n return (\n <OptionButton\n key={idx}\n index={idx}\n option={option}\n isSelected={isSelected}\n isFocused={focusedIndex === idx}\n onClick={() => onValueChange(value)}\n onMouseEvent={setFocusedIndex}\n icon={EllipseMiniSolid}\n />\n )\n })}\n {!disableRangeOption && (\n <OptionButton\n index={options.length}\n option={{\n label: rangeOptionLabel,\n value: \"__custom\",\n }}\n icon={EllipseMiniSolid}\n isSelected={isCustom}\n isFocused={focusedIndex === options.length}\n onClick={onSelectCustom}\n onMouseEvent={setFocusedIndex}\n />\n )}\n </div>\n {!disableRangeOption && isCustom && (\n <React.Fragment>\n <div className=\"flex flex-col py-[3px]\">\n <div className=\"bg-ui-border-menu-top h-px w-full\" />\n <div className=\"bg-ui-border-menu-bot h-px w-full\" />\n </div>\n <div className=\"flex flex-col gap-2 px-2 pb-3 pt-1\">\n <div className=\"flex flex-col gap-1\">\n <Label id=\"custom-start-date-label\" size=\"xsmall\" weight=\"plus\">\n {rangeOptionStartLabel}\n </Label>\n <DatePicker\n aria-labelledby=\"custom-start-date-label\"\n granularity={granularity}\n maxValue={maxDate}\n value={currentValue?.$gte ? new Date(currentValue.$gte) : null}\n onChange={(value) => onCustomValueChange(\"$gte\", value)}\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <Label id=\"custom-end-date-label\" size=\"xsmall\" weight=\"plus\">\n {rangeOptionEndLabel}\n </Label>\n <DatePicker\n aria-labelledby=\"custom-end-date-label\"\n granularity={granularity}\n minValue={minDate}\n value={currentValue?.$lte ? new Date(currentValue.$lte) : null}\n onChange={(value) => onCustomValueChange(\"$lte\", value)}\n />\n </div>\n </div>\n </React.Fragment>\n )}\n </React.Fragment>\n )\n}\n\ntype DataTableFilterSelectContentProps = {\n id: string\n filter?: string[]\n options: DataTableFilterOption<string>[]\n}\n\nconst DataTableFilterSelectContent = ({\n id,\n filter = [],\n options,\n}: DataTableFilterSelectContentProps) => {\n const { instance } = useDataTableContext()\n\n const onValueChange = React.useCallback(\n (value: string) => {\n if (filter?.includes(value)) {\n const newValues = filter?.filter((v) => v !== value)\n instance.updateFilter({\n id,\n value: newValues,\n })\n } else {\n instance.updateFilter({\n id,\n value: [...(filter ?? []), value],\n })\n }\n },\n [instance, id, filter]\n )\n\n const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(\n options,\n (index) => onValueChange(options[index].value)\n )\n\n const onListFocus = React.useCallback(() => {\n if (focusedIndex === -1) {\n setFocusedIndex(0)\n }\n }, [focusedIndex])\n\n return (\n <div\n className=\"flex flex-col p-1 outline-none\"\n role=\"list\"\n tabIndex={0}\n onFocus={onListFocus}\n autoFocus\n >\n {options.map((option, idx) => {\n const isSelected = !!filter?.includes(option.value)\n\n return (\n <OptionButton\n key={idx}\n index={idx}\n option={option}\n isSelected={isSelected}\n isFocused={focusedIndex === idx}\n onClick={() => onValueChange(option.value)}\n onMouseEvent={setFocusedIndex}\n icon={CheckMini}\n />\n )\n })}\n </div>\n )\n}\n\ntype DataTableFilterRadioContentProps = {\n id: string\n filter: unknown\n options: DataTableFilterOption<string>[]\n}\n\nconst DataTableFilterRadioContent = ({\n id,\n filter,\n options,\n}: DataTableFilterRadioContentProps) => {\n const { instance } = useDataTableContext()\n\n const onValueChange = React.useCallback(\n (value: string) => {\n instance.updateFilter({ id, value })\n },\n [instance, id]\n )\n\n const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(\n options,\n (index) => onValueChange(options[index].value)\n )\n\n const onListFocus = React.useCallback(() => {\n if (focusedIndex === -1) {\n setFocusedIndex(0)\n }\n }, [focusedIndex])\n\n return (\n <div\n className=\"flex flex-col p-1 outline-none\"\n role=\"list\"\n tabIndex={0}\n onFocus={onListFocus}\n autoFocus\n >\n {options.map((option, idx) => {\n const isSelected = filter === option.value\n\n return (\n <OptionButton\n key={idx}\n index={idx}\n option={option}\n isSelected={isSelected}\n isFocused={focusedIndex === idx}\n onClick={() => onValueChange(option.value)}\n onMouseEvent={setFocusedIndex}\n icon={EllipseMiniSolid}\n />\n )\n })}\n </div>\n )\n}\n\nfunction isDateFilterProps(props?: unknown | null): props is DataTableDateFilterProps {\n if (!props) {\n return false\n }\n\n return (props as DataTableDateFilterProps).type === \"date\"\n}\n\ntype OptionButtonProps = {\n index: number\n option: DataTableFilterOption<string | DataTableDateComparisonOperator>\n isSelected: boolean\n isFocused: boolean\n onClick: () => void\n onMouseEvent: (idx: number) => void\n icon: React.ElementType\n}\n\nconst OptionButton = React.memo(\n ({\n index,\n option,\n isSelected,\n isFocused,\n onClick,\n onMouseEvent,\n icon: Icon,\n }: OptionButtonProps) => (\n <button\n type=\"button\"\n role=\"listitem\"\n className={clx(\n \"bg-ui-bg-component txt-compact-small transition-fg flex items-center gap-2 rounded px-2 py-1 outline-none\",\n { \"bg-ui-bg-component-hover\": isFocused }\n )}\n onClick={onClick}\n onMouseEnter={() => onMouseEvent(index)}\n onMouseLeave={() => onMouseEvent(-1)}\n tabIndex={-1}\n >\n <div className=\"flex size-[15px] items-center justify-center\">\n {isSelected && <Icon />}\n </div>\n <span>{option.label}</span>\n </button>\n )\n)\n\nfunction useKeyboardNavigation(\n options: unknown[],\n onSelect: (index: number) => void,\n extraItems: number = 0\n) {\n const [focusedIndex, setFocusedIndex] = React.useState(-1)\n\n const onKeyDown = React.useCallback(\n (e: KeyboardEvent) => {\n const totalLength = options.length + extraItems\n\n if ((document.activeElement as HTMLElement).contentEditable === \"true\") {\n return\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault()\n setFocusedIndex((prev) => (prev < totalLength - 1 ? prev + 1 : prev))\n break\n case \"ArrowUp\":\n e.preventDefault()\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : prev))\n break\n case \" \":\n case \"Enter\":\n e.preventDefault()\n if (focusedIndex >= 0) {\n onSelect(focusedIndex)\n }\n break\n }\n },\n [options.length, extraItems, focusedIndex, onSelect]\n )\n\n React.useEffect(() => {\n window.addEventListener(\"keydown\", onKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown)\n }\n }, [onKeyDown])\n\n return { focusedIndex, setFocusedIndex }\n}\n\nexport { DataTableFilter }\nexport type { DataTableFilterProps }\n\n"]}
1
+ {"version":3,"file":"data-table-filter.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CheckMini, EllipseMiniSolid, XMark, XMarkMini, MagnifyingGlass } from \"@medusajs/icons\"\nimport * as React from \"react\"\n\nimport { useDataTableContext } from \"@/blocks/data-table/context/use-data-table-context\"\nimport type {\n DataTableDateComparisonOperator,\n DataTableNumberComparisonOperator,\n DataTableDateFilterProps,\n DataTableMultiselectFilterProps,\n DataTableStringFilterProps,\n DataTableNumberFilterProps,\n DataTableCustomFilterProps,\n DataTableFilterOption,\n} from \"@/blocks/data-table/types\"\nimport { isDateComparisonOperator } from \"@/blocks/data-table/utils/is-date-comparison-operator\"\nimport { DatePicker } from \"@/components/date-picker\"\nimport { Label } from \"@/components/label\"\nimport { Popover } from \"@/components/popover\"\nimport { Input } from \"@/components/input\"\nimport { Select } from \"@/components/select\"\nimport { Checkbox } from \"@/components/checkbox\"\nimport { clx } from \"@/utils/clx\"\n\ninterface DataTableFilterProps {\n id: string\n filter: unknown\n isNew?: boolean\n onUpdate?: (value: unknown) => void\n onRemove?: () => void\n}\n\nconst DEFAULT_FORMAT_DATE_VALUE = (d: Date) =>\n d.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })\nconst DEFAULT_RANGE_OPTION_LABEL = \"Custom\"\nconst DEFAULT_RANGE_OPTION_START_LABEL = \"Starting\"\nconst DEFAULT_RANGE_OPTION_END_LABEL = \"Ending\"\n\nconst DataTableFilter = ({ id, filter, isNew = false, onUpdate, onRemove }: DataTableFilterProps) => {\n const { instance } = useDataTableContext()\n\n // Initialize open state based on isNew prop\n const [open, setOpen] = React.useState(isNew)\n const [hasInteracted, setHasInteracted] = React.useState(false)\n\n const meta = instance.getFilterMeta(id)\n\n if (!meta) {\n return null\n }\n\n const { type, label, ...rest } = meta\n const options = (meta as any).options\n\n // Helper to check if filter has a meaningful value\n const hasValue = React.useMemo(() => {\n if (filter === null || filter === undefined) return false\n if (typeof filter === \"string\" && filter === \"\") return false\n if (Array.isArray(filter) && filter.length === 0) return false\n if (typeof filter === \"number\") return true\n if (isDateComparisonOperator(filter)) {\n return !!(filter.$gte || filter.$lte || filter.$gt || filter.$lt)\n }\n if (typeof filter === \"object\" && filter !== null) {\n // For number comparison operators\n const keys = Object.keys(filter)\n return keys.length > 0 && (filter as any)[keys[0]] !== null && (filter as any)[keys[0]] !== undefined\n }\n return true\n }, [filter])\n\n const onOpenChange = React.useCallback(\n (newOpen: boolean) => {\n setOpen(newOpen)\n\n // Mark as interacted when user closes\n if (!newOpen && open) {\n setHasInteracted(true)\n }\n\n // If closing without a value, remove filter\n // For new filters that haven't been interacted with, remove immediately\n if (!newOpen && !hasValue) {\n // Only remove if it's a new filter being closed without interaction,\n // or if it's an existing filter with no value\n if ((isNew && !hasInteracted) || !isNew) {\n if (onRemove) {\n onRemove()\n } else {\n instance.removeFilter(id)\n }\n }\n }\n },\n [instance, id, open, hasInteracted, isNew, hasValue, onRemove]\n )\n\n const removeFilter = React.useCallback(() => {\n if (onRemove) {\n onRemove()\n } else {\n instance.removeFilter(id)\n }\n }, [instance, id, onRemove])\n\n const { displayValue, isCustomRange } = React.useMemo(() => {\n let displayValue: string | null = null\n let isCustomRange = false\n\n if (typeof filter === \"string\") {\n // For string filters without options, just show the value\n if (!options || options.length === 0) {\n displayValue = filter\n } else {\n displayValue = options?.find((o: any) => o.value === filter)?.label ?? null\n }\n }\n\n if (typeof filter === \"number\") {\n displayValue = String(filter)\n }\n\n if (Array.isArray(filter)) {\n displayValue =\n filter\n .map((v) => options?.find((o: any) => o.value === v)?.label)\n .join(\", \") ?? null\n }\n\n if (isDateComparisonOperator(filter)) {\n // First check if it matches a predefined option\n displayValue =\n options?.find((o: any) => {\n if (!isDateComparisonOperator(o.value)) {\n return false\n }\n\n return (\n (filter.$gte === o.value.$gte || (!filter.$gte && !o.value.$gte)) &&\n (filter.$lte === o.value.$lte || (!filter.$lte && !o.value.$lte)) &&\n (filter.$gt === o.value.$gt || (!filter.$gt && !o.value.$gt)) &&\n (filter.$lt === o.value.$lt || (!filter.$lt && !o.value.$lt))\n )\n })?.label ?? null\n\n // If no match found, it's a custom range\n if (!displayValue && isDateFilterProps(meta)) {\n isCustomRange = true\n const formatDateValue = meta.formatDateValue\n ? meta.formatDateValue\n : DEFAULT_FORMAT_DATE_VALUE\n\n if (filter.$gte && !filter.$lte) {\n displayValue = `${meta.rangeOptionStartLabel || DEFAULT_RANGE_OPTION_START_LABEL\n } ${formatDateValue(new Date(filter.$gte))}`\n }\n\n if (filter.$lte && !filter.$gte) {\n displayValue = `${meta.rangeOptionEndLabel || DEFAULT_RANGE_OPTION_END_LABEL\n } ${formatDateValue(new Date(filter.$lte))}`\n }\n\n if (filter.$gte && filter.$lte) {\n displayValue = `${formatDateValue(\n new Date(filter.$gte)\n )} - ${formatDateValue(new Date(filter.$lte))}`\n }\n }\n }\n\n // Handle number comparison operators\n if (typeof filter === \"object\" && filter !== null && !Array.isArray(filter) && !isDateComparisonOperator(filter)) {\n const operators: Record<string, string> = {\n $eq: \"=\",\n $gt: \">\",\n $gte: \"≥\",\n $lt: \"<\",\n $lte: \"≤\",\n }\n\n const op = Object.keys(filter)[0]\n const opLabel = operators[op] || op\n const value = (filter as any)[op]\n\n if (typeof value === \"number\") {\n displayValue = `${opLabel} ${value}`\n }\n }\n\n return { displayValue, isCustomRange }\n }, [filter, options, meta])\n\n return (\n <Popover open={open} onOpenChange={onOpenChange} modal>\n <div\n className={clx(\n \"bg-ui-bg-field flex flex-shrink-0 items-stretch overflow-hidden rounded-md\",\n \"txt-compact-small-plus shadow-borders-base\"\n )}\n >\n {!hasValue && isNew && <Popover.Anchor />}\n <div\n className={clx(\n \"flex items-center px-2 py-1 text-ui-fg-muted\",\n {\n \"border-r\": hasValue\n }\n )}\n >\n {label || id}\n </div>\n {hasValue && (\n <>\n {(type === \"select\" || type === \"multiselect\" || type === \"radio\") && (\n <div className=\"flex items-center border-r px-2 py-1 text-ui-fg-muted\">\n is\n </div>\n )}\n <Popover.Trigger asChild>\n <button\n className={clx(\n \"flex flex-1 items-center px-2 py-1 outline-none\",\n \"hover:bg-ui-bg-base-hover active:bg-ui-bg-base-pressed transition-fg\",\n {\n \"text-ui-fg-subtle\": displayValue,\n \"text-ui-fg-muted\": !displayValue,\n \"min-w-[80px] justify-center\": !displayValue,\n \"border-r\": true\n }\n )}\n >\n {displayValue || \"\\u00A0\"}\n </button>\n </Popover.Trigger>\n <button\n type=\"button\"\n className=\"flex size-7 items-center justify-center text-ui-fg-muted outline-none hover:bg-ui-bg-base-hover active:bg-ui-bg-base-pressed transition-fg\"\n onClick={removeFilter}\n >\n <XMark />\n </button>\n </>\n )}\n </div>\n <Popover.Content\n align=\"start\"\n sideOffset={8}\n collisionPadding={16}\n hideWhenDetached\n className=\"bg-ui-bg-component p-0 outline-none\"\n onOpenAutoFocus={(e) => {\n if (isNew) {\n // For new filters, ensure the first input gets focus\n const target = e.currentTarget as HTMLElement\n if (target) {\n const firstInput = target.querySelector(\n 'input:not([type=\"hidden\"]), [role=\"list\"][tabindex=\"0\"]'\n ) as HTMLElement | null\n firstInput?.focus()\n }\n }\n }}\n onCloseAutoFocus={(e) => {\n // Prevent focus from going to the trigger when closing\n e.preventDefault()\n }}\n onInteractOutside={(e) => {\n // Check if the click is on a filter menu item\n const target = e.target as HTMLElement\n if (target.closest('[role=\"menuitem\"]')) {\n e.preventDefault()\n }\n }}\n >\n {(() => {\n switch (type) {\n case \"select\":\n return (\n <DataTableFilterSelectContent\n id={id}\n filter={filter as string[] | undefined}\n options={options as DataTableFilterOption<string>[]}\n isNew={isNew}\n onUpdate={onUpdate}\n />\n )\n case \"radio\":\n return (\n <DataTableFilterRadioContent\n id={id}\n filter={filter}\n options={options as DataTableFilterOption<string>[]}\n onUpdate={onUpdate}\n />\n )\n case \"date\":\n const dateRest = rest as Omit<DataTableDateFilterProps, 'id' | 'type' | 'label' | 'options'>\n return (\n <DataTableFilterDateContent\n id={id}\n filter={filter}\n options={\n options as DataTableFilterOption<DataTableDateComparisonOperator>[]\n }\n isCustomRange={isCustomRange}\n format={dateRest.format}\n rangeOptionLabel={dateRest.rangeOptionLabel}\n disableRangeOption={dateRest.disableRangeOption}\n rangeOptionStartLabel={dateRest.rangeOptionStartLabel}\n rangeOptionEndLabel={dateRest.rangeOptionEndLabel}\n onUpdate={onUpdate}\n />\n )\n case \"multiselect\":\n const multiselectRest = rest as Omit<DataTableMultiselectFilterProps, 'id' | 'type' | 'label' | 'options'>\n return (\n <DataTableFilterMultiselectContent\n id={id}\n filter={filter as string[] | undefined}\n options={options as DataTableFilterOption<string>[]}\n searchable={multiselectRest.searchable}\n onUpdate={onUpdate}\n />\n )\n case \"string\":\n const stringRest = rest as Omit<DataTableStringFilterProps, 'id' | 'type' | 'label'>\n return (\n <DataTableFilterStringContent\n id={id}\n filter={filter as string | undefined}\n placeholder={stringRest.placeholder}\n onUpdate={onUpdate}\n />\n )\n case \"number\":\n const numberRest = rest as Omit<DataTableNumberFilterProps, 'id' | 'type' | 'label'>\n return (\n <DataTableFilterNumberContent\n id={id}\n filter={filter}\n placeholder={numberRest.placeholder}\n includeOperators={numberRest.includeOperators}\n onUpdate={onUpdate}\n />\n )\n case \"custom\":\n const customRest = rest as Omit<DataTableCustomFilterProps, 'id' | 'type' | 'label'>\n return (\n <DataTableFilterCustomContent\n id={id}\n filter={filter}\n onRemove={removeFilter}\n render={customRest.render}\n onUpdate={onUpdate}\n />\n )\n default:\n return null\n }\n })()}\n </Popover.Content>\n </Popover>\n )\n}\nDataTableFilter.displayName = \"DataTable.Filter\"\n\ntype DataTableFilterDateContentProps = {\n id: string\n filter: unknown\n options: DataTableFilterOption<DataTableDateComparisonOperator>[]\n isCustomRange: boolean\n onUpdate?: (value: unknown) => void\n} & Pick<\n DataTableDateFilterProps,\n | \"format\"\n | \"rangeOptionLabel\"\n | \"disableRangeOption\"\n | \"rangeOptionStartLabel\"\n | \"rangeOptionEndLabel\"\n>\n\nconst DataTableFilterDateContent = ({\n id,\n filter,\n options,\n format = \"date\",\n rangeOptionLabel = DEFAULT_RANGE_OPTION_LABEL,\n rangeOptionStartLabel = DEFAULT_RANGE_OPTION_START_LABEL,\n rangeOptionEndLabel = DEFAULT_RANGE_OPTION_END_LABEL,\n disableRangeOption = false,\n isCustomRange,\n onUpdate,\n}: DataTableFilterDateContentProps) => {\n const currentValue = filter as DataTableDateComparisonOperator | undefined\n const { instance } = useDataTableContext()\n const [isCustom, setIsCustom] = React.useState(isCustomRange)\n\n // Sync isCustom state when isCustomRange changes\n React.useEffect(() => {\n setIsCustom(isCustomRange)\n }, [isCustomRange])\n\n const selectedValue = React.useMemo(() => {\n if (!currentValue || isCustom) {\n return undefined\n }\n\n return JSON.stringify(currentValue)\n }, [currentValue, isCustom])\n\n const onValueChange = React.useCallback(\n (valueStr: string) => {\n setIsCustom(false)\n\n const value = JSON.parse(valueStr) as DataTableDateComparisonOperator\n if (onUpdate) {\n onUpdate(value)\n } else {\n instance.updateFilter({ id, value })\n }\n },\n [instance, id, onUpdate]\n )\n\n const onSelectCustom = React.useCallback(() => {\n setIsCustom(true)\n // Don't clear the value when selecting custom - keep the current value\n }, [])\n\n const onCustomValueChange = React.useCallback(\n (input: \"$gte\" | \"$lte\", value: Date | null) => {\n const newCurrentValue = { ...currentValue }\n newCurrentValue[input] = value ? value.toISOString() : undefined\n if (onUpdate) {\n onUpdate(newCurrentValue)\n } else {\n instance.updateFilter({ id, value: newCurrentValue })\n }\n },\n [instance, id, currentValue, onUpdate]\n )\n\n const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(\n options,\n (index) => {\n if (index === options.length && !disableRangeOption) {\n onSelectCustom()\n } else {\n onValueChange(JSON.stringify(options[index].value))\n }\n },\n disableRangeOption ? 0 : 1\n )\n\n const granularity = format === \"date-time\" ? \"minute\" : \"day\"\n\n const maxDate = currentValue?.$lte\n ? granularity === \"minute\"\n ? new Date(currentValue.$lte)\n : new Date(new Date(currentValue.$lte).setHours(23, 59, 59, 999))\n : undefined\n\n const minDate = currentValue?.$gte\n ? granularity === \"minute\"\n ? new Date(currentValue.$gte)\n : new Date(new Date(currentValue.$gte).setHours(0, 0, 0, 0))\n : undefined\n\n const initialFocusedIndex = isCustom ? options.length : 0\n\n const onListFocus = React.useCallback(() => {\n if (focusedIndex === -1) {\n setFocusedIndex(initialFocusedIndex)\n }\n }, [focusedIndex, initialFocusedIndex])\n\n return (\n <React.Fragment>\n <div\n className=\"flex flex-col p-1 outline-none\"\n tabIndex={0}\n role=\"list\"\n onFocus={onListFocus}\n autoFocus\n >\n {options.map((option, idx) => {\n const value = JSON.stringify(option.value)\n const isSelected = selectedValue === value\n\n return (\n <OptionButton\n key={idx}\n index={idx}\n option={option}\n isSelected={isSelected}\n isFocused={focusedIndex === idx}\n onClick={() => onValueChange(value)}\n onMouseEvent={setFocusedIndex}\n icon={EllipseMiniSolid}\n />\n )\n })}\n {!disableRangeOption && (\n <OptionButton\n index={options.length}\n option={{\n label: rangeOptionLabel,\n value: \"__custom\",\n }}\n icon={EllipseMiniSolid}\n isSelected={isCustom}\n isFocused={focusedIndex === options.length}\n onClick={onSelectCustom}\n onMouseEvent={setFocusedIndex}\n />\n )}\n </div>\n {!disableRangeOption && isCustom && (\n <React.Fragment>\n <div className=\"flex flex-col py-[3px]\">\n <div className=\"bg-ui-border-menu-top h-px w-full\" />\n <div className=\"bg-ui-border-menu-bot h-px w-full\" />\n </div>\n <div className=\"flex flex-col gap-2 px-2 pb-3 pt-1\">\n <div className=\"flex flex-col gap-1\">\n <Label id=\"custom-start-date-label\" size=\"xsmall\" weight=\"plus\">\n {rangeOptionStartLabel}\n </Label>\n <DatePicker\n aria-labelledby=\"custom-start-date-label\"\n granularity={granularity}\n maxValue={maxDate}\n value={currentValue?.$gte ? new Date(currentValue.$gte) : null}\n onChange={(value) => onCustomValueChange(\"$gte\", value)}\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <Label id=\"custom-end-date-label\" size=\"xsmall\" weight=\"plus\">\n {rangeOptionEndLabel}\n </Label>\n <DatePicker\n aria-labelledby=\"custom-end-date-label\"\n granularity={granularity}\n minValue={minDate}\n value={currentValue?.$lte ? new Date(currentValue.$lte) : null}\n onChange={(value) => onCustomValueChange(\"$lte\", value)}\n />\n </div>\n </div>\n </React.Fragment>\n )}\n </React.Fragment>\n )\n}\n\ntype DataTableFilterSelectContentProps = {\n id: string\n filter?: string[]\n options: DataTableFilterOption<string>[]\n isNew?: boolean\n onUpdate?: (value: unknown) => void\n}\n\nconst DataTableFilterSelectContent = ({\n id,\n filter = [],\n options,\n isNew = false,\n onUpdate,\n}: DataTableFilterSelectContentProps) => {\n const { instance } = useDataTableContext()\n const [search, setSearch] = React.useState(\"\")\n\n const filteredOptions = React.useMemo(() => {\n if (!search) return options\n\n const searchLower = search.toLowerCase()\n return options.filter(opt =>\n opt.label.toLowerCase().includes(searchLower)\n )\n }, [options, search])\n\n const onValueChange = React.useCallback(\n (value: string) => {\n if (filter?.includes(value)) {\n const newValues = filter?.filter((v) => v !== value)\n const newValue = newValues.length > 0 ? newValues : undefined\n if (onUpdate) {\n onUpdate(newValue)\n } else {\n instance.updateFilter({\n id,\n value: newValue,\n })\n }\n } else {\n const newValue = [...(filter ?? []), value]\n if (onUpdate) {\n onUpdate(newValue)\n } else {\n instance.updateFilter({\n id,\n value: newValue,\n })\n }\n }\n },\n [instance, id, filter, onUpdate]\n )\n\n return (\n <div className=\"w-[250px]\">\n <div className=\"flex items-center gap-x-2 border-b px-3 py-1.5\">\n <MagnifyingGlass className=\"h-4 w-4 text-ui-fg-muted\" />\n <input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n className=\"h-8 flex-1 bg-transparent text-sm outline-none placeholder:text-ui-fg-muted\"\n autoFocus\n />\n {search && (\n <button\n onClick={() => setSearch(\"\")}\n className=\"text-ui-fg-muted hover:text-ui-fg-subtle\"\n >\n <XMarkMini className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n\n <div className=\"max-h-[300px] overflow-auto p-1\">\n {filteredOptions.length === 0 && (\n <div className=\"py-6 text-center text-sm text-ui-fg-muted\">\n No results found\n </div>\n )}\n\n {filteredOptions.map(option => {\n const isSelected = filter?.includes(option.value)\n\n return (\n <button\n key={String(option.value)}\n onClick={() => onValueChange(option.value)}\n className={clx(\n \"flex w-full cursor-pointer items-center gap-x-2 rounded-md px-2 py-1.5 text-sm text-left\",\n \"hover:bg-ui-bg-base-hover\"\n )}\n >\n <div className=\"flex size-[15px] items-center justify-center\">\n {isSelected && <CheckMini />}\n </div>\n <span>{option.label}</span>\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\ntype DataTableFilterRadioContentProps = {\n id: string\n filter: unknown\n options: DataTableFilterOption<string>[]\n onUpdate?: (value: unknown) => void\n}\n\nconst DataTableFilterRadioContent = ({\n id,\n filter,\n options,\n onUpdate,\n}: DataTableFilterRadioContentProps) => {\n const { instance } = useDataTableContext()\n\n const onValueChange = React.useCallback(\n (value: string) => {\n if (onUpdate) {\n onUpdate(value)\n } else {\n instance.updateFilter({ id, value })\n }\n },\n [instance, id, onUpdate]\n )\n\n const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(\n options,\n (index) => onValueChange(options[index].value)\n )\n\n const onListFocus = React.useCallback(() => {\n if (focusedIndex === -1) {\n setFocusedIndex(0)\n }\n }, [focusedIndex])\n\n return (\n <div\n className=\"flex flex-col p-1 outline-none\"\n role=\"list\"\n tabIndex={0}\n onFocus={onListFocus}\n autoFocus\n >\n {options.map((option, idx) => {\n const isSelected = filter === option.value\n\n return (\n <OptionButton\n key={idx}\n index={idx}\n option={option}\n isSelected={isSelected}\n isFocused={focusedIndex === idx}\n onClick={() => onValueChange(option.value)}\n onMouseEvent={setFocusedIndex}\n icon={EllipseMiniSolid}\n />\n )\n })}\n </div>\n )\n}\n\nfunction isDateFilterProps(props?: unknown | null): props is DataTableDateFilterProps {\n if (!props) {\n return false\n }\n\n return (props as DataTableDateFilterProps).type === \"date\"\n}\n\nfunction isMultiselectFilterProps(props?: unknown | null): props is DataTableMultiselectFilterProps {\n if (!props) {\n return false\n }\n\n return (props as DataTableMultiselectFilterProps).type === \"multiselect\"\n}\n\nfunction isStringFilterProps(props?: unknown | null): props is DataTableStringFilterProps {\n if (!props) {\n return false\n }\n\n return (props as DataTableStringFilterProps).type === \"string\"\n}\n\nfunction isNumberFilterProps(props?: unknown | null): props is DataTableNumberFilterProps {\n if (!props) {\n return false\n }\n\n return (props as DataTableNumberFilterProps).type === \"number\"\n}\n\nfunction isCustomFilterProps(props?: unknown | null): props is DataTableCustomFilterProps {\n if (!props) {\n return false\n }\n\n return (props as DataTableCustomFilterProps).type === \"custom\"\n}\n\ntype OptionButtonProps = {\n index: number\n option: DataTableFilterOption<string | DataTableDateComparisonOperator>\n isSelected: boolean\n isFocused: boolean\n onClick: () => void\n onMouseEvent: (idx: number) => void\n icon: React.ElementType\n}\n\nconst OptionButton = React.memo(\n ({\n index,\n option,\n isSelected,\n isFocused,\n onClick,\n onMouseEvent,\n icon: Icon,\n }: OptionButtonProps) => (\n <button\n type=\"button\"\n role=\"listitem\"\n className={clx(\n \"bg-ui-bg-component txt-compact-small transition-fg flex items-center gap-2 rounded px-2 py-1 outline-none\",\n { \"bg-ui-bg-component-hover\": isFocused }\n )}\n onClick={onClick}\n onMouseEnter={() => onMouseEvent(index)}\n onMouseLeave={() => onMouseEvent(-1)}\n tabIndex={-1}\n >\n <div className=\"flex size-[15px] items-center justify-center\">\n {isSelected && <Icon />}\n </div>\n <span>{option.label}</span>\n </button>\n )\n)\n\nfunction useKeyboardNavigation(\n options: unknown[],\n onSelect: (index: number) => void,\n extraItems: number = 0\n) {\n const [focusedIndex, setFocusedIndex] = React.useState(-1)\n\n const onKeyDown = React.useCallback(\n (e: KeyboardEvent) => {\n const totalLength = options.length + extraItems\n\n if ((document.activeElement as HTMLElement).contentEditable === \"true\") {\n return\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault()\n setFocusedIndex((prev) => (prev < totalLength - 1 ? prev + 1 : prev))\n break\n case \"ArrowUp\":\n e.preventDefault()\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : prev))\n break\n case \" \":\n case \"Enter\":\n e.preventDefault()\n if (focusedIndex >= 0) {\n onSelect(focusedIndex)\n }\n break\n }\n },\n [options.length, extraItems, focusedIndex, onSelect]\n )\n\n React.useEffect(() => {\n window.addEventListener(\"keydown\", onKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown)\n }\n }, [onKeyDown])\n\n return { focusedIndex, setFocusedIndex }\n}\n\ntype DataTableFilterMultiselectContentProps = {\n id: string\n filter?: string[]\n options: DataTableFilterOption<string>[]\n searchable?: boolean\n onUpdate?: (value: unknown) => void\n}\n\nconst DataTableFilterMultiselectContent = ({\n id,\n filter = [],\n options,\n searchable = true,\n onUpdate,\n}: DataTableFilterMultiselectContentProps) => {\n const { instance } = useDataTableContext()\n const [search, setSearch] = React.useState(\"\")\n\n const filteredOptions = React.useMemo(() => {\n if (!searchable || !search) return options\n\n const searchLower = search.toLowerCase()\n return options.filter(opt =>\n opt.label.toLowerCase().includes(searchLower)\n )\n }, [options, search, searchable])\n\n const onValueChange = React.useCallback(\n (value: string) => {\n if (filter?.includes(value)) {\n const newValues = filter?.filter((v) => v !== value)\n const newValue = newValues.length > 0 ? newValues : undefined\n if (onUpdate) {\n onUpdate(newValue)\n } else {\n instance.updateFilter({\n id,\n value: newValue,\n })\n }\n } else {\n const newValue = [...(filter ?? []), value]\n if (onUpdate) {\n onUpdate(newValue)\n } else {\n instance.updateFilter({\n id,\n value: newValue,\n })\n }\n }\n },\n [instance, id, filter, onUpdate]\n )\n\n if (!searchable) {\n return (\n <div className=\"w-[250px]\">\n <div className=\"max-h-[300px] overflow-auto p-1\">\n {options.map(option => {\n const isSelected = filter?.includes(option.value)\n\n return (\n <button\n key={String(option.value)}\n onClick={() => onValueChange(option.value)}\n className={clx(\n \"flex w-full items-center gap-x-2 rounded-md px-2 py-1.5 text-sm\",\n \"hover:bg-ui-bg-base-hover cursor-pointer text-left\"\n )}\n >\n <Checkbox\n checked={isSelected}\n className=\"pointer-events-none\"\n />\n <span>{option.label}</span>\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"w-[250px]\">\n <div className=\"flex items-center gap-x-2 border-b px-3 py-1.5\">\n <MagnifyingGlass className=\"h-4 w-4 text-ui-fg-muted\" />\n <input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n className=\"h-8 flex-1 bg-transparent text-sm outline-none placeholder:text-ui-fg-muted\"\n autoFocus\n />\n {search && (\n <button\n onClick={() => setSearch(\"\")}\n className=\"text-ui-fg-muted hover:text-ui-fg-subtle\"\n >\n <XMarkMini className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n\n <div className=\"max-h-[300px] overflow-auto p-1\">\n {filteredOptions.length === 0 && (\n <div className=\"py-6 text-center text-sm text-ui-fg-muted\">\n No results found\n </div>\n )}\n\n {filteredOptions.map(option => {\n const isSelected = filter?.includes(option.value)\n\n return (\n <button\n key={String(option.value)}\n onClick={() => onValueChange(option.value)}\n className={clx(\n \"flex w-full cursor-pointer items-center gap-x-2 rounded-md px-2 py-1.5 text-sm text-left\",\n \"hover:bg-ui-bg-base-hover\"\n )}\n >\n <Checkbox\n checked={isSelected}\n className=\"pointer-events-none\"\n />\n <span>{option.label}</span>\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\ntype DataTableFilterStringContentProps = {\n id: string\n filter?: string\n placeholder?: string\n onUpdate?: (value: unknown) => void\n}\n\nconst DataTableFilterStringContent = ({\n id,\n filter,\n placeholder = \"Enter value...\",\n onUpdate,\n}: DataTableFilterStringContentProps) => {\n const { instance } = useDataTableContext()\n const [value, setValue] = React.useState(filter || \"\")\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleChange = React.useCallback((newValue: string) => {\n setValue(newValue)\n\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n\n // Debounce the update\n timeoutRef.current = setTimeout(() => {\n const updateValue = newValue.trim() || undefined\n if (onUpdate) {\n onUpdate(updateValue)\n } else {\n instance.updateFilter({\n id,\n value: updateValue,\n })\n }\n }, 500)\n }, [instance, id, onUpdate])\n\n // Cleanup timeout on unmount\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [])\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n // Clear timeout and apply immediately\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n const updateValue = value.trim() || undefined\n if (onUpdate) {\n onUpdate(updateValue)\n } else {\n instance.updateFilter({\n id,\n value: updateValue,\n })\n }\n }\n }, [instance, id, value, onUpdate])\n\n return (\n <div className=\"p-3 w-[250px]\">\n <Input\n placeholder={placeholder}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n />\n </div>\n )\n}\n\ntype DataTableFilterNumberContentProps = {\n id: string\n filter: any\n placeholder?: string\n includeOperators?: boolean\n onUpdate?: (value: unknown) => void\n}\n\nconst DataTableFilterNumberContent = ({\n id,\n filter,\n placeholder = \"Enter number...\",\n includeOperators = true,\n onUpdate,\n}: DataTableFilterNumberContentProps) => {\n const { instance } = useDataTableContext()\n const [operator, setOperator] = React.useState<string>(\"eq\")\n const [value, setValue] = React.useState(\"\")\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n React.useEffect(() => {\n if (filter) {\n if (typeof filter === \"number\") {\n setOperator(\"eq\")\n setValue(String(filter))\n } else if (typeof filter === \"object\") {\n const op = Object.keys(filter)[0] as string\n setOperator(op.replace(\"$\", \"\"))\n setValue(String(filter[op]))\n }\n }\n }, [filter])\n\n const handleValueChange = React.useCallback((newValue: string) => {\n setValue(newValue)\n\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n\n // Debounce the update\n timeoutRef.current = setTimeout(() => {\n const num = parseFloat(newValue)\n if (!isNaN(num)) {\n const filterValue = includeOperators && operator !== \"eq\"\n ? { [`$${operator}`]: num }\n : num\n\n if (onUpdate) {\n onUpdate(filterValue)\n } else {\n instance.updateFilter({\n id,\n value: filterValue,\n })\n }\n } else if (newValue === \"\") {\n if (onUpdate) {\n onUpdate(undefined)\n } else {\n instance.updateFilter({\n id,\n value: undefined,\n })\n }\n }\n }, 500)\n }, [instance, id, operator, includeOperators, onUpdate])\n\n const handleOperatorChange = React.useCallback((newOperator: string) => {\n setOperator(newOperator)\n\n // If we have a value, update immediately with new operator\n const num = parseFloat(value)\n if (!isNaN(num)) {\n const filterValue = includeOperators && newOperator !== \"eq\"\n ? { [`$${newOperator}`]: num }\n : num\n\n if (onUpdate) {\n onUpdate(filterValue)\n } else {\n instance.updateFilter({\n id,\n value: filterValue,\n })\n }\n }\n }, [instance, id, value, includeOperators, onUpdate])\n\n // Cleanup timeout on unmount\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [])\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n // Clear timeout and apply immediately\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n const num = parseFloat(value)\n if (!isNaN(num)) {\n const filterValue = includeOperators && operator !== \"eq\"\n ? { [`$${operator}`]: num }\n : num\n\n if (onUpdate) {\n onUpdate(filterValue)\n } else {\n instance.updateFilter({\n id,\n value: filterValue,\n })\n }\n }\n }\n }, [instance, id, value, operator, includeOperators, onUpdate])\n\n const operators = [\n { value: \"eq\", label: \"Equals\" },\n { value: \"gt\", label: \"Greater than\" },\n { value: \"gte\", label: \"Greater than or equal\" },\n { value: \"lt\", label: \"Less than\" },\n { value: \"lte\", label: \"Less than or equal\" },\n ]\n\n return (\n <div className=\"p-3 space-y-3 w-[250px]\">\n {includeOperators && (\n <Select value={operator} onValueChange={handleOperatorChange}>\n <Select.Trigger>\n <Select.Value />\n </Select.Trigger>\n <Select.Content>\n {operators.map(op => (\n <Select.Item key={op.value} value={op.value}>\n {op.label}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n )}\n\n <Input\n type=\"number\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => handleValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus={!includeOperators}\n />\n </div>\n )\n}\n\ntype DataTableFilterCustomContentProps = {\n id: string\n filter: any\n onRemove: () => void\n render: (props: {\n value: any\n onChange: (value: any) => void\n onRemove: () => void\n }) => React.ReactNode\n onUpdate?: (value: unknown) => void\n}\n\nconst DataTableFilterCustomContent = ({\n id,\n filter,\n onRemove,\n render,\n onUpdate,\n}: DataTableFilterCustomContentProps) => {\n const { instance } = useDataTableContext()\n\n const handleChange = React.useCallback((value: any) => {\n if (onUpdate) {\n onUpdate(value)\n } else {\n instance.updateFilter({\n id,\n value,\n })\n }\n }, [instance, id, onUpdate])\n\n return (\n <>\n {render({\n value: filter,\n onChange: handleChange,\n onRemove,\n })}\n </>\n )\n}\n\nexport { DataTableFilter }\nexport type { DataTableFilterProps }\n\n"]}
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ interface DataTableNonSortableHeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {
3
+ id: string;
4
+ children: React.ReactNode;
5
+ isFirstColumn?: boolean;
6
+ }
7
+ export declare const DataTableNonSortableHeaderCell: React.ForwardRefExoticComponent<DataTableNonSortableHeaderCellProps & React.RefAttributes<HTMLTableCellElement>>;
8
+ export {};
9
+ //# sourceMappingURL=data-table-non-sortable-header-cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-non-sortable-header-cell.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-non-sortable-header-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,UAAU,mCAAoC,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IAC9F,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,eAAO,MAAM,8BAA8B,kHAkDzC,CAAA"}
@@ -0,0 +1,38 @@
1
+ import * as React from "react";
2
+ import { useSortable } from "@dnd-kit/sortable";
3
+ import { CSS } from "@dnd-kit/utilities";
4
+ import { Table } from "../../../components/table";
5
+ export const DataTableNonSortableHeaderCell = React.forwardRef(({ id, children, className, style: propStyle, isFirstColumn, ...props }, ref) => {
6
+ // Still use sortable hook but without listeners
7
+ const { setNodeRef, transform, transition, } = useSortable({
8
+ id,
9
+ disabled: true, // Disable dragging
10
+ });
11
+ // Only apply horizontal transform for smooth shifting
12
+ const transformStyle = transform ? {
13
+ x: transform.x,
14
+ y: 0,
15
+ scaleX: transform.scaleX,
16
+ scaleY: transform.scaleY,
17
+ } : null;
18
+ const style = {
19
+ ...propStyle,
20
+ transform: transformStyle ? CSS.Transform.toString(transformStyle) : undefined,
21
+ transition,
22
+ position: 'relative',
23
+ };
24
+ const combineRefs = (element) => {
25
+ setNodeRef(element);
26
+ if (ref) {
27
+ if (typeof ref === 'function') {
28
+ ref(element);
29
+ }
30
+ else {
31
+ ref.current = element;
32
+ }
33
+ }
34
+ };
35
+ return (React.createElement(Table.HeaderCell, { ref: combineRefs, style: style, className: className, ...props }, children));
36
+ });
37
+ DataTableNonSortableHeaderCell.displayName = "DataTableNonSortableHeaderCell";
38
+ //# sourceMappingURL=data-table-non-sortable-header-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-non-sortable-header-cell.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-non-sortable-header-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAQ1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC,UAAU,CAG5D,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAChF,gDAAgD;IAChD,MAAM,EACJ,UAAU,EACV,SAAS,EACT,UAAU,GACX,GAAG,WAAW,CAAC;QACd,EAAE;QACF,QAAQ,EAAE,IAAI,EAAE,mBAAmB;KACpC,CAAC,CAAA;IAEF,sDAAsD;IACtD,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;QACjC,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,KAAK,GAAwB;QACjC,GAAG,SAAS;QACZ,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9E,UAAU;QACV,QAAQ,EAAE,UAAmB;KAC9B,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,OAAoC,EAAE,EAAE;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC9B,GAAG,CAAC,OAAO,CAAC,CAAA;YACd,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,KAAK,CAAC,UAAU,IACf,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,KAChB,KAAK,IAER,QAAQ,CACQ,CACpB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,8BAA8B,CAAC,WAAW,GAAG,gCAAgC,CAAA","sourcesContent":["import * as React from \"react\"\nimport { useSortable } from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { Table } from \"@/components/table\"\n\ninterface DataTableNonSortableHeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {\n id: string\n children: React.ReactNode\n isFirstColumn?: boolean\n}\n\nexport const DataTableNonSortableHeaderCell = React.forwardRef<\n HTMLTableCellElement,\n DataTableNonSortableHeaderCellProps\n>(({ id, children, className, style: propStyle, isFirstColumn, ...props }, ref) => {\n // Still use sortable hook but without listeners\n const {\n setNodeRef,\n transform,\n transition,\n } = useSortable({\n id,\n disabled: true, // Disable dragging\n })\n\n // Only apply horizontal transform for smooth shifting\n const transformStyle = transform ? {\n x: transform.x,\n y: 0,\n scaleX: transform.scaleX,\n scaleY: transform.scaleY,\n } : null\n\n const style: React.CSSProperties = {\n ...propStyle,\n transform: transformStyle ? CSS.Transform.toString(transformStyle) : undefined,\n transition,\n position: 'relative' as const,\n }\n\n const combineRefs = (element: HTMLTableCellElement | null) => {\n setNodeRef(element)\n if (ref) {\n if (typeof ref === 'function') {\n ref(element)\n } else {\n ref.current = element\n }\n }\n }\n\n return (\n <Table.HeaderCell\n ref={combineRefs}\n style={style}\n className={className}\n {...props}\n >\n {children}\n </Table.HeaderCell>\n )\n})\n\nDataTableNonSortableHeaderCell.displayName = \"DataTableNonSortableHeaderCell\""]}
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ interface DataTableSortableHeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {
3
+ id: string;
4
+ children: React.ReactNode;
5
+ isFirstColumn?: boolean;
6
+ }
7
+ export declare const DataTableSortableHeaderCell: React.ForwardRefExoticComponent<DataTableSortableHeaderCellProps & React.RefAttributes<HTMLTableCellElement>>;
8
+ export {};
9
+ //# sourceMappingURL=data-table-sortable-header-cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sortable-header-cell.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-sortable-header-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,UAAU,gCAAiC,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IAC3F,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,eAAO,MAAM,2BAA2B,+GAwDtC,CAAA"}
@@ -0,0 +1,40 @@
1
+ import * as React from "react";
2
+ import { useSortable } from "@dnd-kit/sortable";
3
+ import { CSS } from "@dnd-kit/utilities";
4
+ import { clx } from "../../../utils/clx";
5
+ import { Table } from "../../../components/table";
6
+ export const DataTableSortableHeaderCell = React.forwardRef(({ id, children, className, style: propStyle, isFirstColumn, ...props }, ref) => {
7
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({
8
+ id,
9
+ });
10
+ // Only apply horizontal transform, ignore vertical movement
11
+ const transformStyle = transform ? {
12
+ x: transform.x,
13
+ y: 0,
14
+ scaleX: 1,
15
+ scaleY: 1
16
+ } : null;
17
+ const style = {
18
+ ...propStyle,
19
+ transform: transformStyle ? CSS.Transform.toString(transformStyle) : undefined,
20
+ transition,
21
+ opacity: isDragging ? 0.8 : 1,
22
+ zIndex: isDragging ? 50 : undefined,
23
+ backgroundColor: "white",
24
+ position: 'relative',
25
+ };
26
+ const combineRefs = (element) => {
27
+ setNodeRef(element);
28
+ if (ref) {
29
+ if (typeof ref === 'function') {
30
+ ref(element);
31
+ }
32
+ else {
33
+ ref.current = element;
34
+ }
35
+ }
36
+ };
37
+ return (React.createElement(Table.HeaderCell, { ref: combineRefs, style: style, className: clx(className, "group/header-cell relative"), ...attributes, ...listeners, ...props }, children));
38
+ });
39
+ DataTableSortableHeaderCell.displayName = "DataTableSortableHeaderCell";
40
+ //# sourceMappingURL=data-table-sortable-header-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sortable-header-cell.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-sortable-header-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAQ1C,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC,UAAU,CAGzD,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAChF,MAAM,EACJ,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,GACX,GAAG,WAAW,CAAC;QACd,EAAE;KACH,CAAC,CAAA;IAEF,4DAA4D;IAC5D,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;QACjC,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;KACV,CAAC,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,KAAK,GAAwB;QACjC,GAAG,SAAS;QACZ,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9E,UAAU;QACV,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;QACnC,eAAe,EAAE,OAAO;QACxB,QAAQ,EAAE,UAAmB;KAC9B,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,OAAoC,EAAE,EAAE;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC9B,GAAG,CAAC,OAAO,CAAC,CAAA;YACd,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,KAAK,CAAC,UAAU,IACf,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,4BAA4B,CAAC,KACnD,UAAU,KACV,SAAS,KACT,KAAK,IAER,QAAQ,CACQ,CACpB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,2BAA2B,CAAC,WAAW,GAAG,6BAA6B,CAAA","sourcesContent":["import * as React from \"react\"\nimport { useSortable } from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { clx } from \"@/utils/clx\"\nimport { Table } from \"@/components/table\"\n\ninterface DataTableSortableHeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {\n id: string\n children: React.ReactNode\n isFirstColumn?: boolean\n}\n\nexport const DataTableSortableHeaderCell = React.forwardRef<\n HTMLTableCellElement,\n DataTableSortableHeaderCellProps\n>(({ id, children, className, style: propStyle, isFirstColumn, ...props }, ref) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id,\n })\n\n // Only apply horizontal transform, ignore vertical movement\n const transformStyle = transform ? {\n x: transform.x,\n y: 0,\n scaleX: 1,\n scaleY: 1\n } : null\n\n const style: React.CSSProperties = {\n ...propStyle,\n transform: transformStyle ? CSS.Transform.toString(transformStyle) : undefined,\n transition,\n opacity: isDragging ? 0.8 : 1,\n zIndex: isDragging ? 50 : undefined,\n backgroundColor: \"white\",\n position: 'relative' as const,\n }\n\n const combineRefs = (element: HTMLTableCellElement | null) => {\n setNodeRef(element)\n if (ref) {\n if (typeof ref === 'function') {\n ref(element)\n } else {\n ref.current = element\n }\n }\n }\n\n return (\n <Table.HeaderCell\n ref={combineRefs}\n style={style}\n className={clx(className, \"group/header-cell relative\")}\n {...attributes}\n {...listeners}\n {...props}\n >\n {children}\n </Table.HeaderCell>\n )\n})\n\nDataTableSortableHeaderCell.displayName = \"DataTableSortableHeaderCell\"\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-table.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,EAGL,wBAAwB,EACzB,MAAM,UAAU,CAAA;AAGjB,UAAU,mBAAmB;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAA;CACtC;AAED;;GAEG;AACH,QAAA,MAAM,cAAc;YAAW,mBAAmB;;CAsOjD,CAAA;AA0ED,OAAO,EAAE,cAAc,EAAE,CAAA;AACzB,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAA"}
1
+ {"version":3,"file":"data-table-table.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAyB9B,OAAO,EAGL,wBAAwB,EACzB,MAAM,UAAU,CAAA;AAKjB,UAAU,mBAAmB;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAA;CACtC;AAED;;GAEG;AACH,QAAA,MAAM,cAAc;YAAW,mBAAmB;;CA6djD,CAAA;AA0ED,OAAO,EAAE,cAAc,EAAE,CAAA;AACzB,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAA"}
@@ -2,12 +2,16 @@
2
2
  import * as React from "react";
3
3
  import { Table } from "../../../components/table";
4
4
  import { flexRender } from "@tanstack/react-table";
5
+ import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, } from "@dnd-kit/core";
6
+ import { arrayMove, SortableContext, sortableKeyboardCoordinates, horizontalListSortingStrategy, } from "@dnd-kit/sortable";
5
7
  import { useDataTableContext } from "../../data-table/context/use-data-table-context";
6
8
  import { Skeleton } from "../../../components/skeleton";
7
9
  import { Text } from "../../../components/text";
8
10
  import { clx } from "../../../utils/clx";
9
11
  import { DataTableEmptyState, } from "../types";
10
12
  import { DataTableSortingIcon } from "./data-table-sorting-icon";
13
+ import { DataTableSortableHeaderCell } from "./data-table-sortable-header-cell";
14
+ import { DataTableNonSortableHeaderCell } from "./data-table-non-sortable-header-cell";
11
15
  /**
12
16
  * This component renders the table in a data table, supporting advanced features.
13
17
  */
@@ -21,6 +25,47 @@ const DataTableTable = (props) => {
21
25
  const columns = instance.getAllColumns();
22
26
  const hasSelect = columns.find((c) => c.id === "select");
23
27
  const hasActions = columns.find((c) => c.id === "action");
28
+ // Create list of all column IDs for SortableContext
29
+ // Use current order if available, otherwise use default order
30
+ const sortableItems = React.useMemo(() => {
31
+ if (instance.columnOrder && instance.columnOrder.length > 0) {
32
+ return instance.columnOrder;
33
+ }
34
+ return columns.map(col => col.id);
35
+ }, [columns, instance.columnOrder]);
36
+ // Setup drag-and-drop sensors
37
+ const sensors = useSensors(useSensor(PointerSensor, {
38
+ activationConstraint: {
39
+ distance: 8,
40
+ },
41
+ }), useSensor(KeyboardSensor, {
42
+ coordinateGetter: sortableKeyboardCoordinates,
43
+ }));
44
+ const handleDragEnd = (event) => {
45
+ const { active, over } = event;
46
+ if (active.id !== (over === null || over === void 0 ? void 0 : over.id) && (over === null || over === void 0 ? void 0 : over.id)) {
47
+ const activeId = active.id;
48
+ const overId = over.id;
49
+ // Don't allow dragging fixed columns
50
+ if (activeId === "select" || activeId === "action") {
51
+ return;
52
+ }
53
+ // Don't allow dropping on fixed columns
54
+ if (overId === "select" || overId === "action") {
55
+ return;
56
+ }
57
+ // Use the current column order from the instance
58
+ const currentOrder = instance.columnOrder && instance.columnOrder.length > 0
59
+ ? instance.columnOrder
60
+ : columns.map(col => col.id);
61
+ const oldIndex = currentOrder.indexOf(activeId);
62
+ const newIndex = currentOrder.indexOf(overId);
63
+ if (oldIndex !== -1 && newIndex !== -1) {
64
+ const newOrder = arrayMove(currentOrder, oldIndex, newIndex);
65
+ instance.setColumnOrderFromArray(newOrder);
66
+ }
67
+ }
68
+ };
24
69
  React.useEffect(() => {
25
70
  const onKeyDownHandler = (event) => {
26
71
  // If an editable element is focused, we don't want to select a row
@@ -67,12 +112,86 @@ const DataTableTable = (props) => {
67
112
  return React.createElement(DataTableTableSkeleton, { pageSize: instance.pageSize });
68
113
  }
69
114
  return (React.createElement("div", { className: "flex w-full flex-1 flex-col overflow-hidden" },
70
- instance.emptyState === DataTableEmptyState.POPULATED && (React.createElement("div", { ref: scrollableRef, onScroll: handleHorizontalScroll, className: "min-h-0 w-full flex-1 overflow-auto overscroll-none border-y" },
115
+ instance.emptyState === DataTableEmptyState.POPULATED && (instance.enableColumnOrder ? (React.createElement(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd },
116
+ React.createElement("div", { ref: scrollableRef, onScroll: handleHorizontalScroll, className: "min-h-0 w-full flex-1 overflow-auto overscroll-none border-y" },
117
+ React.createElement(Table, { className: "relative isolate w-full" },
118
+ React.createElement(Table.Header, { className: "shadow-ui-border-base sticky inset-x-0 top-0 z-[1] w-full border-b-0 border-t-0 shadow-[0_1px_1px_0]", style: { transform: "translate3d(0,0,0)" } }, instance.getHeaderGroups().map((headerGroup) => (React.createElement(Table.Row, { key: headerGroup.id, className: clx("border-b-0", {
119
+ "[&_th:last-of-type]:w-[1%] [&_th:last-of-type]:whitespace-nowrap": hasActions,
120
+ "[&_th:first-of-type]:w-[1%] [&_th:first-of-type]:whitespace-nowrap": hasSelect,
121
+ }) },
122
+ React.createElement(SortableContext, { items: sortableItems, strategy: horizontalListSortingStrategy }, headerGroup.headers.map((header, idx) => {
123
+ var _a, _b;
124
+ const canSort = header.column.getCanSort();
125
+ const sortDirection = header.column.getIsSorted();
126
+ const sortHandler = header.column.getToggleSortingHandler();
127
+ const isActionHeader = header.id === "action";
128
+ const isSelectHeader = header.id === "select";
129
+ const isSpecialHeader = isActionHeader || isSelectHeader;
130
+ const isDraggable = !isSpecialHeader;
131
+ const Wrapper = canSort ? "button" : "div";
132
+ const isFirstColumn = hasSelect ? idx === 1 : idx === 0;
133
+ // Get header alignment from column metadata
134
+ const headerAlign = ((_b = (_a = header.column.columnDef.meta) === null || _a === void 0 ? void 0 : _a.___alignMetaData) === null || _b === void 0 ? void 0 : _b.headerAlign) || 'left';
135
+ const isRightAligned = headerAlign === 'right';
136
+ const isCenterAligned = headerAlign === 'center';
137
+ const HeaderCellComponent = isDraggable ? DataTableSortableHeaderCell : DataTableNonSortableHeaderCell;
138
+ return (React.createElement(HeaderCellComponent, { key: header.id, id: header.id, isFirstColumn: isFirstColumn, className: clx("whitespace-nowrap", {
139
+ "w-[calc(20px+24px+24px)] min-w-[calc(20px+24px+24px)] max-w-[calc(20px+24px+24px)]": isSelectHeader,
140
+ "w-[calc(28px+24px+4px)] min-w-[calc(28px+24px+4px)] max-w-[calc(28px+24px+4px)]": isActionHeader,
141
+ "after:absolute after:inset-y-0 after:right-0 after:h-full after:w-px after:bg-transparent after:content-['']": isFirstColumn,
142
+ "after:bg-ui-border-base": showStickyBorder && isFirstColumn,
143
+ "bg-ui-bg-subtle sticky": isFirstColumn || isSelectHeader,
144
+ "left-0": isSelectHeader || (isFirstColumn && !hasSelect),
145
+ "left-[calc(20px+24px+24px)]": isFirstColumn && hasSelect,
146
+ }), style: !isSpecialHeader
147
+ ? {
148
+ width: header.column.columnDef.size,
149
+ maxWidth: header.column.columnDef.maxSize,
150
+ minWidth: header.column.columnDef.minSize,
151
+ }
152
+ : undefined },
153
+ React.createElement(Wrapper, { type: canSort ? "button" : undefined, onClick: canSort ? sortHandler : undefined, onMouseDown: canSort ? (e) => e.stopPropagation() : undefined, className: clx("group flex cursor-default items-center gap-2", {
154
+ "cursor-pointer": canSort,
155
+ "w-full": isRightAligned || isCenterAligned,
156
+ "w-fit": !isRightAligned && !isCenterAligned,
157
+ "justify-end": isRightAligned,
158
+ "justify-center": isCenterAligned,
159
+ }) },
160
+ canSort && isRightAligned && (React.createElement(DataTableSortingIcon, { direction: sortDirection })),
161
+ flexRender(header.column.columnDef.header, header.getContext()),
162
+ canSort && !isRightAligned && (React.createElement(DataTableSortingIcon, { direction: sortDirection })))));
163
+ })))))),
164
+ React.createElement(Table.Body, { className: "border-b-0 border-t-0" }, instance.getRowModel().rows.map((row) => {
165
+ return (React.createElement(Table.Row, { key: row.id, onMouseEnter: () => (hoveredRowId.current = row.id), onMouseLeave: () => (hoveredRowId.current = null), onClick: (e) => { var _a; return (_a = instance.onRowClick) === null || _a === void 0 ? void 0 : _a.call(instance, e, row); }, className: clx("group/row last-of-type:border-b-0", {
166
+ "cursor-pointer": !!instance.onRowClick,
167
+ }) }, row.getVisibleCells().map((cell, idx) => {
168
+ const isSelectCell = cell.column.id === "select";
169
+ const isActionCell = cell.column.id === "action";
170
+ const isSpecialCell = isSelectCell || isActionCell;
171
+ const isFirstColumn = hasSelect ? idx === 1 : idx === 0;
172
+ return (React.createElement(Table.Cell, { key: cell.id, className: clx("items-stretch truncate whitespace-nowrap", {
173
+ "w-[calc(20px+24px+24px)] min-w-[calc(20px+24px+24px)] max-w-[calc(20px+24px+24px)]": isSelectCell,
174
+ "w-[calc(28px+24px+4px)] min-w-[calc(28px+24px+4px)] max-w-[calc(28px+24px+4px)]": isActionCell,
175
+ "bg-ui-bg-base group-hover/row:bg-ui-bg-base-hover transition-fg sticky h-full": isFirstColumn || isSelectCell,
176
+ "after:absolute after:inset-y-0 after:right-0 after:h-full after:w-px after:bg-transparent after:content-['']": isFirstColumn,
177
+ "after:bg-ui-border-base": showStickyBorder && isFirstColumn,
178
+ "left-0": isSelectCell || (isFirstColumn && !hasSelect),
179
+ "left-[calc(20px+24px+24px)]": isFirstColumn && hasSelect,
180
+ }), style: !isSpecialCell
181
+ ? {
182
+ width: cell.column.columnDef.size,
183
+ maxWidth: cell.column.columnDef.maxSize,
184
+ minWidth: cell.column.columnDef.minSize,
185
+ }
186
+ : undefined }, flexRender(cell.column.columnDef.cell, cell.getContext())));
187
+ })));
188
+ })))))) : (React.createElement("div", { ref: scrollableRef, onScroll: handleHorizontalScroll, className: "min-h-0 w-full flex-1 overflow-auto overscroll-none border-y" },
71
189
  React.createElement(Table, { className: "relative isolate w-full" },
72
190
  React.createElement(Table.Header, { className: "shadow-ui-border-base sticky inset-x-0 top-0 z-[1] w-full border-b-0 border-t-0 shadow-[0_1px_1px_0]", style: { transform: "translate3d(0,0,0)" } }, instance.getHeaderGroups().map((headerGroup) => (React.createElement(Table.Row, { key: headerGroup.id, className: clx("border-b-0", {
73
191
  "[&_th:last-of-type]:w-[1%] [&_th:last-of-type]:whitespace-nowrap": hasActions,
74
192
  "[&_th:first-of-type]:w-[1%] [&_th:first-of-type]:whitespace-nowrap": hasSelect,
75
193
  }) }, headerGroup.headers.map((header, idx) => {
194
+ var _a, _b;
76
195
  const canSort = header.column.getCanSort();
77
196
  const sortDirection = header.column.getIsSorted();
78
197
  const sortHandler = header.column.getToggleSortingHandler();
@@ -81,6 +200,10 @@ const DataTableTable = (props) => {
81
200
  const isSpecialHeader = isActionHeader || isSelectHeader;
82
201
  const Wrapper = canSort ? "button" : "div";
83
202
  const isFirstColumn = hasSelect ? idx === 1 : idx === 0;
203
+ // Get header alignment from column metadata
204
+ const headerAlign = ((_b = (_a = header.column.columnDef.meta) === null || _a === void 0 ? void 0 : _a.___alignMetaData) === null || _b === void 0 ? void 0 : _b.headerAlign) || 'left';
205
+ const isRightAligned = headerAlign === 'right';
206
+ const isCenterAligned = headerAlign === 'center';
84
207
  return (React.createElement(Table.HeaderCell, { key: header.id, className: clx("whitespace-nowrap", {
85
208
  "w-[calc(20px+24px+24px)] min-w-[calc(20px+24px+24px)] max-w-[calc(20px+24px+24px)]": isSelectHeader,
86
209
  "w-[calc(28px+24px+4px)] min-w-[calc(28px+24px+4px)] max-w-[calc(28px+24px+4px)]": isActionHeader,
@@ -96,11 +219,16 @@ const DataTableTable = (props) => {
96
219
  minWidth: header.column.columnDef.minSize,
97
220
  }
98
221
  : undefined },
99
- React.createElement(Wrapper, { type: canSort ? "button" : undefined, onClick: canSort ? sortHandler : undefined, className: clx("group flex w-fit cursor-default items-center gap-2", {
222
+ React.createElement(Wrapper, { type: canSort ? "button" : undefined, onClick: canSort ? sortHandler : undefined, onMouseDown: canSort ? (e) => e.stopPropagation() : undefined, className: clx("group flex cursor-default items-center gap-2", {
100
223
  "cursor-pointer": canSort,
224
+ "w-full": isRightAligned || isCenterAligned,
225
+ "w-fit": !isRightAligned && !isCenterAligned,
226
+ "justify-end": isRightAligned,
227
+ "justify-center": isCenterAligned,
101
228
  }) },
229
+ canSort && isRightAligned && (React.createElement(DataTableSortingIcon, { direction: sortDirection })),
102
230
  flexRender(header.column.columnDef.header, header.getContext()),
103
- canSort && (React.createElement(DataTableSortingIcon, { direction: sortDirection })))));
231
+ canSort && !isRightAligned && (React.createElement(DataTableSortingIcon, { direction: sortDirection })))));
104
232
  }))))),
105
233
  React.createElement(Table.Body, { className: "border-b-0 border-t-0" }, instance.getRowModel().rows.map((row) => {
106
234
  return (React.createElement(Table.Row, { key: row.id, onMouseEnter: () => (hoveredRowId.current = row.id), onMouseLeave: () => (hoveredRowId.current = null), onClick: (e) => { var _a; return (_a = instance.onRowClick) === null || _a === void 0 ? void 0 : _a.call(instance, e, row); }, className: clx("group/row last-of-type:border-b-0", {
@@ -126,7 +254,7 @@ const DataTableTable = (props) => {
126
254
  }
127
255
  : undefined }, flexRender(cell.column.columnDef.cell, cell.getContext())));
128
256
  })));
129
- }))))),
257
+ })))))),
130
258
  React.createElement(DataTableEmptyStateDisplay, { state: instance.emptyState, props: props.emptyState })));
131
259
  };
132
260
  DataTableTable.displayName = "DataTable.Table";